スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

近況報告

近況報告です。

大脳皮質モデルBESOMの条件付確率表モデルを刷新してアルゴリズムを実装・評価していましたが、計算が重くてなかなかハイパパラメタ調整がはかどらず中断中。計算量のオーダーはパラメタ数に対して線形ですが、かなり遅い。ちょっと方針を変えて、 loopy belief propagation のメッセージ計算をニューラルネットで近似計算することを検討中。脳も結局はそうやっているはず。

それとは別に、言語野のモデルにも取り組んでいます。組み合わせ範疇文法の構文解析・意味解析を、神経科学的に妥当な「疑似ベイジアンネット」で実現しようとしています。意味表現を工夫することでラムダ計算を不要にし、単一化の機構だけで意味解析を行います。簡単な文法を処理するプロトタイプが prolog で動いています。

また、汎用人工知能実現のブレークスルーを目指すべく、ヒトの知識獲得と思考のモデルにも手を付け始めました。BDIアーキテクチャに似たものと Sutton and Barto の本にも出ている Dyna-Q アーキテクチャを融合したものを、前頭前野・海馬・前部帯状回等に関する神経科学的知見を踏まえて実現しようとしています。設計には展望記憶(Prospective memory) に関する知見もヒントになりそうです。ちゃんと動けば、遠くない将来の汎用人工知能の実現に疑問を抱く人はかなり減るはず・・・と思っているのですが。

こういった話に関心のある研究者の方は、どこかでお会いした時にぜひ議論しましょう
スポンサーサイト

近況報告

近況報告です。
BESOM の推論アルゴリズムと学習アルゴリズムを大幅に見直したものを現在設計・実装中です。

条件付確率表に noisy-OR 、ゲートノード、排他ノードの3つのモデルを採用、推論には residual belief propagation 、学習にはまともな online EM を採用します。正則化のための勝率ペナルティと側抑制ペナルティは引き続き使いますが、実装を見直します。

これがある程度まともに動くようになれば、それを使って、視覚野の一部の機能のモデルや工学的有用性を示すデモを作る予定です。

双方向回路 QBC

この半年ほど疑似ベイジアンネット(=定性的ベイジアンネット)による認知機能モデリング手法の開発に取り組んでいましたが、
現状の説明資料を公開しました。
双方向回路 QBC による認知機能モデルのプロトタイピング

双方向回路 QBC というものを使って、視覚野、言語野等のモデルのプロトタイプを作っています。
こういう研究に関心のある研究者の方はご連絡ください。
機械学習の知識がなくても取り組めます。

計算言語学における精緻な理論の1つに
CCG(Combinatory categorial grammar, 組み合わせ範疇文法)というものがあります。
これは文脈自由文法よりは広いがチューリングマシンで受理可能なクラスよりははるかに狭い、という不思議な性質を持っています。
CCG は非常に多くの言語現象を説明するのに成功しているらしく、
脳の言語野のある側面を非常に正確に浮き彫りにしていると言えます。

大脳皮質が制限付きベイジアンネットだとすれば、
制限付きベイジアンネットを使って CCG の
構文解析や文法の学習が可能であるはずです。
それを実証するシステムの実現に向けて、かなり進展したように思います。

定性的ベイジアンネットによる認知機能モデリング

先日も少し書きましたが、
小規模な定性的ベイジアンネットを使って、
視覚野、言語野、運動野、前頭前野、側頭葉などがつかさどる
さまざまな認知機能のモデルを1つ1つ動かし始めています。

例えば視覚野の背側経路の機能やオクルージョンの処理の機能、
言語野の単語列表現と深層格表現の間の相互変換の機能、
運動野の階層的な時系列の再生機能、
前頭前野や側頭葉による論理的推論の機能、
などです。

単に「ベイジアンネットを使う」というだけでは制約がゆるすぎて
なんでもできてしまうので、かなり強い制約を入れており、
その範囲でどこまで実現できるか試しています。
制限付きの定性的ベイジアンネットを記述するDSLを Java で作って、
それを使って個々の認知機能モデルを書いています。
学習機能はなく、条件付確率表(CPT)を手で与えます。
変数の値に意味のある文字列が使えるので可読性が高いという利点があります。
ふるまいは prolog と似たところがありますが、スタックとヒープがなく、
有限の状態数しか持たない固定したネットワークの上だけで動作します。

これが非常に面白い!
実際に動くようになると、パワーポイントで模式的に
書いてみただけでは気づかなかった問題が次々に出てきてます。
それを1つ1つ解決すると、
長年悩んでいた別の未解決問題が同時に解決されていきます。
効率の問題、万能性の問題、神経科学的妥当性の問題など
まったく無関係に見える問題が、です。
いよいよ大脳皮質が行っている情報処理を推定するパズルが
終盤に来たというかんじです。
ジグゾーパズルでもナンバープレースでも、
終盤に入ると急速に穴が埋まりますよね?
(汎用人工知能実現に向けてその先にやることは
まだたくさんありますけどね。)


制限付きベイジアンネットはCPTに制限をいれたベイジアンネットですが、
それに加えて、さらに以下の様々な制約を念頭に置いて
ネットワークを設計しています。

- 再下端のノードの値を生成する生成モデルになっている。
- 問題サイズに対しニューロン数・シナプス数が爆発しない。
- ニューロン発火・シナプスの重みはスパース。
- 親ノードは子ノードの値の組を抽象化した情報を表現する。
- 同一階層内にあるノードどうしは独立。
- ノード内のユニットは均等に使われる。
- ノード内の隣り合ったユニットは似た情報を表現する。

この中のいくつかの性質は、
CPTをBESOMを使って教師なし学習する際の
パラメタの事前分布になるものです。
大脳皮質のすべての領野に共通の「汎用事前分布」と言えるでしょう。
今後もいろいろな認知機能モデルを書いていくうちに
新たな汎用事前分布が見つかる可能性があります。

近い将来この研究に携わりたい方は、
論理回路の基礎、計算機アーキテクチャの基礎、
ラムダ計算や数理論理学の基礎あたりを軽く眺めておいていただけると
役に立つと思います。

自動微分でBESOMの実装は可能か?

BESOMのCPTモデルを変えたときの
認識・学習アルゴリズムの導出と実装が
めんどうでなかなか進まないので、
chainer 等で実装されている
自動微分が使えないか考えてみました。
私は chainer 等使ったことがないので、
勘違い等ありましたらご指摘いただけるとありがたいです。

また、こういった研究に関心がある方はご連絡ください。
すでに chainer に慣れている人なら簡単に実装できそうな気がします。
学生さんのインターンで1週間くらい産総研に来ていただいて
実装できる人がいれば非常に助かりますが、どなたかいかがでしょうか。


BESOMにおけるCPTモデルは、
ニューラルネットワークにおける活性化関数みたいなものです。
CPTモデルの設計が、性能に大きく影響します。
最近は noisy-OR と他の数種類のCPTモデルのノードを
組み合わせたものが、
大脳皮質のモデルとしても産業応用としても有望だと私は考えています。
しかしCPTモデルを追加するたびにそれに応じて
効率的に動作する認識アルゴリズムと学習アルゴリズムを導出し、
実装・デバッグ・調整するのはけっこう手間がかかります。
そこで自動微分の利用を検討しています。

自動微分とは、目的関数を計算するプログラムを記述して実行するだけで、
その目的関数の勾配を自動的に求めてくれる技術です。
最近の多くの機械学習フレームワークに実装されています。
自動微分 - Wikipedia


認識・学習ともに勾配法を使うことにすれば、
自動微分が使えるので認識・学習アルゴリズムの実装が
非常に容易になるはずです。
例えば chainer の上で実装できれば、
ミニバッチ化、最新の加速化手法の利用、GPGPU対応も
ほぼ自動的にできることになります。
LIS との連携もしやすくなるでしょう。

まず、学習について。
入力 i に対する隠れ変数の推定結果(MPE) h* が
すでに求まっているとすると、
パラメタθの対数尤度は
log P(h*,i|θ) = Σ_x log P(x|pa(x))
で、簡単なプログラムで素直に実装できます。
あとは自動微分を使って勾配法でθを自動的に更新できるはずです。
なお、ベイジアンネットではパラメタが区間 [0,1] に
収まる必要があり、そこは何らかの対処が必要と思われます。

BESOMの場合、
学習よりも認識の方が計算時間がかかるのですが、
学習が chainer に乗るだけでも、
Adam のような最新の学習の加速化手法が
簡単に使えるため、大きなメリットがあります。
素朴な EM は学習の終盤で一次収束ですが、
Adam は二次収束らしいので、
認識の計算が定数倍遅くなっても
トータルでは速くなる可能性があります。
参考:Adam の説明
確率的勾配降下法 - Wikipedia


認識の方は、自動微分を使うには少し工夫が必要そうです。
認識においても隠れ変数 h の対数尤度
log P(h|i) ∝ log P(h,i) = Σ_x log P(x|pa(x))
の計算は簡単なプログラムで素直に実装できます。
しかし確率変数が離散値なので微分可能ではないのが問題ですが、
工夫すればできそうに思っています。
また、勝率ペナルティ、側抑制ペナルティのための
パラメタの学習のコードを少し書く必要があります。


なお、関連技術として、 NIPS 2015 でこういうものが
出てきているようです。
自動微分変分ベイズ法の紹介
Stan, PyMC3 に実装されているとのこと。
しかし、やはり離散確率変数は使えないようです。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。