オモンパカリスト

深層学習、計算論的神経科学に興味あります

Theanoで機械学習

Theanoの特殊な書き方を身につけるため

github.com

このチュートリアルを用いる

  1. 線形回帰
  2. ロジスティック回帰
  3. ニューラルネットワーク
  4. 流行りのニューラルネットワーク
  5. 畳み込みニューラルネットワーク

の実装方法が書いてある。

このチュートリアルで用いるMNISTをダウンロードするために、

$ sudo sh download_mnist.sh

を実行する。

jupyter notebookで細かく挙動を確認していく
たとえば線形回帰1_linear_regression.pyを実装した場合

線形回帰
タスクはy = 2x + ノイズをうまく表現するy' = wxw
コスト関数は線形出力と世界データによる平均二乗誤差。

ロジスティック回帰
タスクはMNIST
コスト関数はソフトマックス関数と正解データによる交差エントロピー

とりあえず回帰問題を実装するにあたって、
最低限のTheanoの書き方が身についた。
updatesはoutputsのあとに処理される。

単純ベイズ(Naive Bayes)をpython/numpyの実装

ことのいきさつ。
確率モデルのサーベイはそろそろ飽きてきて切り上げて、
IBMのDyBMやConditonal RBMを実装できるようになりたいなーと思ってて、
Theanoで実装していくことにしたんだけど、

そもそもNumpyすらまともに書けなかった。

というわけで、Pythonの実装力をつけるために、とにかく手を動かすことからはじめた。

まずはNumpyの書き方を勉強。

本題

つくったやつ
github.com

いざPython機械学習アルゴリズムを実装しようとしても、
基礎知識や慣習がないに等しかった。
そこでまずは行列演算ライブラリNumpyの配列操作を理解するために、
以下のサイトを参考にした。

機械学習の Python との出会い — 機械学習の Python との出会い

丁寧に「単純ベイズ(Naive Bayes)」の実装を例にNumpyの勉強になった。

単純ベイズというアルゴリズムは最近知ったばかりで、
メールの迷惑メール振り分けなど、クラス分類に使われるものらしい。
ベイズの定理を使って分類器を実装していて、
理論も実装も「単純」にはいかなかった(弱音)

ブロードキャスト機能、かなり重要だな〜。

生物学的に尤もらしい人工知能のサーベイ結果 ~そろそろテーマ決めたい~

テーマは模索中で
生物学的に尤もらしい人工知能サーベイ
そろそろテーマ決めたい

俯瞰

実際の脳のダイナミクスを論じるときに、
ヘブ則、STDP、スパイクなどは基本用語として「脳の計算論」で勉強した。

この計算論的神経科学の知見を工学に当てはめると
必然的に確率的モデル(Energy-based Model: マルコフ確率場)になる。
神経活動を確率論的に論じるため、確率的モデルの理解が必須になる。
ボルツマンマシン、制限付きボルツマンマシン、ホップフィールドネットワーク
この辺の勉強をした。

生物学的(より脳に近い)な人工知能を研究する取り組みは現在盛んで、
DeepLearningの大家(Hinton, Bengioとか)もテクニカルレポートやTalkでバンバン発表し、
日本のIBM研究所では恐神さん達が「動的ボルツマンマシン(Dynamics Boltzmann Machine)」という
STDPを忠実に再現したモデルを開発している。

論文紹介

Seven neurons memorizing sequences of alphabetical images via spike-timing dependent plasticity : Scientific Reports

解説のスライド
この論文が提案するDyBM(動的ボルツマンマシン)のすごいところは、STDPを再現しており(世界初?)
時系列データ「SCIENCE」という文字列を記憶する学習を7つのニューロンシナプスを模倣したモデルで再現してる。
伝道遅延とメモリユニットの概念がある。
脳の知見から直感的にいうと「軸索」をモデル化したイメージ。
エネルギー関数の項がバイアスとLTPとLTDの3つの項がある。

[1602.05179] Towards a Biologically Plausible Backprop

Bengioの研究室が取り組んでる生物学的知見を深層学習に取り入れる取り組み。
SGDとしてSTDPをパラメータ更新に使う。
ニューロンはleaky-integratorというモデル。
どうやって実装するんだろう。。

勉強不足も相まって、数式が途中で理解できなくなるし、実装ってどうするんだ?って感じになる。
それでも手を動かさなければ始まらないので、そろそろtheanoをゴリゴリ触ってみるか

実装のフレームワーク

深層学習を初めて勉強し始めたころ、Chainerを触った。
直感的に層ごとに分けて記述(レイヤー型記述)するので、今回の取り組み的には不向きだと思う。

Theano(フレームワークというより数値計算ライブラリ)は、シンボル型記述といって、
数式を書くイメージに近い。上述の論文を試すにはぴったりだと思う。
ただ、Theanoはあくまで数値計算に強いライブラリなので、コード量は多くなる。
そこでラッパーライブラリのKerasが気になる。基本的なニューラルネットワークの関数が標準装備されてるみたい。

Google発のTensorflowもシンボル型の記述らしい。
こっちはニューラルネットワークフレームワークなので、Theanoが標準で持ってないような
関数やメソッドがすでに用意されている。Google発だからきっと一番伸びてくんだろうな。

クラッチで記述の場合も、numpyは必須といえる。
yusugomoriさんのブログが参考になる。
Yusuke Sugomori's Blog

僕は弱小CPU環境なので、大規模の実装はできない。
案外スクラッチが学習コストもなく記述しやすいなら、それでいいかもしれない。

生物学的妥当性のある深層学習を調査してる

Deep Learning(以下深層学習)の大家であるBengioとその研究室の人たちが
生物学的にもっともらしい(Biologically Plausible)深層学習の研究に精をだしてるっぽい。
僕自身もより忠実に脳の機能を模した深層学習に興味を持ってる。
以前から調査の雑感をこのブログで記事にしてるので合わせてみてほしい。

また、計算論的神経科学の参考書「脳の計算論」が届いたので読んでる。
第二章の「ニューロンシナプスの数学的モデル」は今までの深層学習の本には書かれていない、
様々なニューロンモデルの概要と数式が書かれていて勉強になる。

脳の計算論(シリーズ脳科学 1)

脳の計算論(シリーズ脳科学 1)

今現在Bengio達のテクニカルレポートで最新の論文は

[1602.05179] Towards a Biologically Plausible Backprop

これかな?訳すと「生物学的にもっともらしい誤差逆伝播法」

現在使われてる誤差逆伝播法は脳では行われていない。
本稿ではSTDP(スパイク時刻依存シナプス可塑性)の現象を考慮できるニューロンモデルで
ニューラルネットワークを実装し、STDPによる学習則を用いる、というもの。

YoutubeでBengioのTalkビデオが公開されてるぜ、やったぜ!

www.youtube.com

ただ、エグいくらい低画質で肝心なスライドがみれたもんじゃないが、
動画の説明欄からスライドの資料を取得できる、やったぜ!

ニューロンモデルについて。

McCulloch&Pittsモデル

現在の深層学習で用いられるニューロンモデルは、
コネクショニストモデルというモデルが基になっている。
スパイクの発生時刻を精密に再現せず、マクロの観点で平均発火頻度を変数に考慮したモデルであり、
みんなが見慣れた数式、重み付き線形和に活性化関数を通したアレ。
y = f(Wx)
本モデルの一つMcCulloch&Pittsモデルは、重み(パラメータ)の更新を誤差逆伝播法で行えるのが強み。

leaky integrator

ここで、STDPによる学習則を考慮するため、別のモデルをBengio達は用いる。
それがleaky integratorである。上述の論文、スライド資料にある。
「脳の計算論」にはleaky integarte-and-fireモデルという名称のものがあり、
これのことかな?と思ってる。違ったらすみません。

神経細胞をかなり精密に記述しているモデルに
ホジキン-ハクスレイ(Hodgkin-Huxley)モデルがある。
その中の「ナトリウム、カリウムによる発火の効果」に該当する項を除外したモデルが
leaky integrate-and-fireモデルになる。
神経細胞の膜電位の時間変化を表すモデルになっている。

STDPについて

用語説明。シナプスニューロンってのは、信号を送る側のニューロン
シナプスニューロンってのは、信号の受け手側のニューロンのこと。

脳は特に教えられなくても下界の構造を自動的に学習できる。
そのメカニズムの本質は、シナプス前細胞とシナプス後細胞の活動度に依存して
シナプスが結合荷重を変化させる、シナプス可塑性という性質をもっているからである。

教師付き学習は、生物学的にも小脳の運動学習の定式化において成功を収めている。
いっぽう大脳皮質は単純な前向きの入力信号だけでなくフィードバック入力も存在し、
1つのシナプスの荷重変化が回路全体に及ぼす影響を明らかにすることが難しい。
そんな複雑なネットワークの学習原理を考察し、シナプス可塑性を理論的に導き出したのがヘブ(Hebb)である。

Hebb則は、シナプスニューロンの発火がシナプスニューロン発火に貢献している場合、そのシナプス荷重を強める。
この理論は弱めるということも付け加えたら正しい。

このシナプス学習則は、スパイク時間に依存していることがわかる。(STDP: スパイク時刻依存シナプス可塑性)
そのためBengio達はleaky integratorモデルを利用する。

僕が取り組んでること

先のBengioのスライド、論文を読みつつ、理解できない勉強不足なとこをトップダウン的に勉強してる。
「脳の計算論」のおかげで、ニューロンモデルが違う今までにない切り口であってもある程度理解できている。
ただ、論文中にランジュバンMCMC(マルコフ連鎖モンテカルロ法)やボルツマンマシンのインスパイヤがみられるので、
紫本「深層学習」のマルコフ連鎖、ボルツマンマシンあたりを勉強しようと思う。
Theanoの実装力をつけたいし、
Theano 入門
がちょうど制限ボルツマンマシンの実装チュートリアルでもあるので、勉強がてらにやってみようかな。

そしてBengio達の論文を漁るのを、7月いっぱいまでやってみようと思う。

ReLUについて

McCulloch&Pittsモデル、誤差逆伝播法ときて構築されたニューラルネットワークは、
深層になるにつれて勾配消失問題に悩んだが、
活性化関数ReLUにより再びブレイクスルーを起こす。
過学習対策のDropOutとのコラボレーションが主流になってる。
ReLUは計算速度も早いのが強い。

そんなReLUは、つまり誤差逆伝播法のためにあるようなもので、
Biologically Plausibleな取り組みではまず禁じ手になる。

あんまり精読できていないからわからんけど、
Biologically Plausibleは、実用的な面で計算速度においても従来の深層学習法に対抗できたらいいなぁと思ってる。
遅そうだし。精読できてないから先入観だけど。
実用面がないと、生物学的妥当性があってもなぁ、という世間からの反応がきそうだから、
あらゆる点で従来の方法に取って代わるようなブレイクスルーを起こしてくれることを、
Biologically Plausibleの取り組みに期待してる。

Mac OS X、KeynoteにLaTeX数式をペタペタ貼れる方法

Mac OS Xを使って長くなる。
プレゼン資料ツールはKeynoteを使っている。
しかし、WIndowsPowerPointに標準で実装されているような
数式エディタ機能はKeynoteにはない。

手順

LaTeXなら書ける。むしろLaTeXは好き。

  • MacLaTeXをインストール
  • LaTeXiTというGUIツールで数式をKeynoteに貼り付ける

注意

LaTeXが入ってない状態で、LaTeXiTを使おうとしても意味ない。
起動直後に「pdflatexが見当たりません」というエラーがでて、[LaTeX it!]ボタンが押せない。

MacLaTeXをインストール

MacTeXというMac用のディストリビューションがある。
ただ、ファイルサイズがクソでかい。2.1GBぐらいある。やってられない。
MacTeXのサイトにmorepackagesというページがある。
ここにあるBasicTeX.pkgをダウンロードすればいい。こっちは100KBぐらい。
フルパッケージではなく、このBasicTeXで事足りる。

LaTeXiTというGUIツールで数式をKeynoteに貼り付ける

LaTeXiT
ここからインストール。

f:id:i101330:20160715015008p:plain

白枠の欄にLaTeXを書き込んで、右下の[LaTeX it!]ボタンを押せば、上の灰色欄に数式が出力される。
こいつをドラッグしてそのままKeynoteに貼り付けることができる。

簡単。

おまけのLaTeXコマンド集

LaTeX - コマンド一覧
ここがとても便利!すごく見やすい。

ただ、偏微分の記号がない気がするので、それはここに書いておこう。
\partial
∂になる。

誤差逆伝播法にとって代わる?Target Propagationについての所感とか。

今日、研究室のゼミでTarget Propagationについて発表した。
Difference Target Propagation
この1週間精読に努めたんだけど、完全に理解ができてない。
Back Propagationが生物学妥当性がないという根拠を6つの要点を持って提示し、
それに代わる手法としてTarget Propagationを提案している、というのが本論文。

僕のつくったスライドより、やっぱりこの唯一の日本語スライドがいい。

http://deeplearning.jp/wp-content/uploads/2014/04/20150826_suzuki.pdf

所感を述べると、

  1. Back Propagation(誤差逆伝播)が生物学妥当性がないため排除、というアプローチはどうなのか。
  2. Target PropagationのApproximate Inverseで逆関数が不完全だと最適化が安定しないという問題点はどうなのか。
  3. そしてそれを解決するためにDifference(差分) Target Propagationという線形補佐による改良なわけだが生物学妥当性に触れないのか。
  4. 確率モデルを扱えるなど、従来のB-Propより汎用性もあるのに、ググってもあまり流行ってるようにみれないのはなぜ?

このように疑問が湧いてくる。

01 については、先ほども言った6つの要点が示している誤差逆伝播の生物学的妥当性の無さが論の基盤になってる。
だけども、Bengio研究室から、Towards a Biologically Plausible Backprop「生物学的にもっともらしい誤差逆伝播法に向けて」というレポートが2016年、今年の2月にでてる。
これはどういうことなのか。ちょっとこの論文も読むべきだと思った。

02 については、Targetという概念を、Approximate Inverse(近似逆)で導入するというアプローチは生物学的妥当性があるといえるのか。
この論文では、6つの妥当性要点のうち4つを満たすとある。
ぶっちゃけ、全然理解できてない。

03 については、Target Propagationの改良という名目のもと、Differenceは線形補佐という解決であること。
これが、この論文がテーマにしている「生物学的もっともらしい」との剥離が生じないものなの?って疑問。

04 については、B-Propと遜色しない結果がでていて、さらにB-Propも扱えない性質(確率など)のモデルを扱えるその利便性ながらも、
まったくググっても引用した人が見当たらない、ということ。
そもそも、誤差逆伝播は人間の発想によるアルゴリズムで、実際の脳では使われていない、特別マジックアイテム。
でもそれが主流となり、それをスタンダードに付け加えていった形が今の深層学習の現状。
ある人は、「B-Propでいいよ、それで学習ができるのなら。」というタスク解決優先の精神で、この論文のテーマはスルーするものかもしれない。
B-Propをそこまでして排除する理由がないからなのか、全然Target Propagationを利用してみた、という文献は見当たらない。
なんなら、Googleで「Target Propagation」で検索したらこのブログの記事(前回)が5番目にヒットした。
Target Propagationについて書いてある内容は少ないのに、
記事タイトルを「Target Propagationについて」にしてしまっていたからみたいだ。
はてブロの恩恵だからか、マジで流行ってないためか、こんなゴミ溜めみたいなブログで取り上げただけで5位になってしまう。
今は、その記事タイトルは変更した。

このような疑問点などを持って、改めてこのあたりの論文を精読することにする。
そして、やっとこさ「脳の計算論」が届いたので、スパイキングニューロンモデル(STDP:スパイク時刻依存可塑性)について、
理解を深めようと思う。