近況報告

近況報告です。
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回 全脳アーキテクチャシンポジウムを開催しました | 全脳アーキテクチャ・イニシアティブ

私は最近の進捗について簡単にお話しました。
大脳皮質ベイジアンネットモデルの実用化に向けて

Noisy-OR を使った大規模ベイジアンネットの実用化に向けた
研究開発の道筋はかなりはっきりしてきましたが、
アルゴリズムの導出・実装・調整にはそれなりに手間暇がかかります。
人工知能ブームのせいで機械学習が得意な人材の確保の見込みがたたないので
最近は並行して別のアプローチの研究も進めています。

別のアプローチとは、資料にある「定性的ベイジアンネット」というもので、
ネットワークの状態を最適化するというベイジアンネットの特性は残しつつも、
記号処理に近い動作をします。
大規模機械学習特有の黒魔術的困難さを回避して、
脳の様々な認知機能を手軽にモデリングできる道具にしようとしています。

定性的ベイジアンネットは、条件付確率の0と非0だけを区別するものです。
パラメタのデータからの学習は今のところ考えておらず、
条件付確率表はすべて手で記述します。
定性的ベイジアンネットのプロトタイプは prolog で書いていましたが、
いま Java でもっと高機能なものを作り始めています。

私はこれまで、視覚情報処理、言語処理、運動制御、思考など様々認知機能が
ベイジアンネットで実現できそうなことを示す模式的モデルを
パワーポイントの絵で公開してきましたが、
今まではまさに「絵に描いた餅」でした。
しかし定性的ベイジアンネットを使うことで、
小規模ながら本当にモデルを動かせるようになると思います。

モデルが実際に動けば、大脳皮質がベイジアンネットであること、
ベイジアンネットを使わなければ脳の多くの高次機能の実現は
難しそうであることを、
多くの人にリアリティをもって感じてもらえると思います。