はじめに
この記事はヒントン教授らが提案した forward-forward algorithmの概要の解説記事になります。
以下のURLの論文(まだpublishされていない)とプログラムを参考にしています。
また図はプログラムが実装されているGithubの図を拝借しています。
- 論文
- プログラム
結論(時間のない方向け)
- 誤差逆伝播を用いないforward-forward algorithmを提案
- 重みの更新方法が生物ライク
- 省メモリかつ省エネルギー
- MNISTやCIFAR10で一部モデルにおいて誤差逆伝播法と同様に学習が進行
内容
問題提起
現在使われている誤差逆伝播法は、計算量が多い(順伝播逆伝播で2回全ての経路を辿る、逆伝搬で順伝搬の計算過程を保持する必要があるためメモリの消費量が激しい)こと、生物の脳、とりわけ神経ネットワークを考えた時に逆伝播を用いていない(そもそも物理的に伝播は不可能)であるという問題がありました。
手法
今回は上記の問題がある誤差逆伝播を用いず、順伝播のみで完結するアルゴリズムを開発しました。
手法の概要は以下です。
- 学習データについて正解データ(positive)と不正解データ(negative)を作成する。(2種類のforwardでそれぞれ用いる)
- データを任意のNNで順伝播させる。
- (活性化関数を噛ませた後の)各層の出力の二乗をGoodnessと定義する
- 正解データのGoodnessが閾値よりも大きく、不正解データのGoodnessが閾値よりも小さくなるように重みを各層ごとに更新
つまり入力データに関して正解と不正解を見分けられるように学習を進めるということになります。
データが2種類あるので、forward-forwardという名前がついていて、正解データは正解データだけのバッチ、不正解データは不正解データだけでバッチが構成されます。
教師ありの場合は、上記のデータの作成方法の手法が以下のように変わります。
(旧)学習データについて正解データ(positive)と不正解データ(negative)を作成する。(2種類のforwardでそれぞれ用いる)
⇩
(新)学習データについて正解データ(positive)と不正解データ(negative)を作成し、最初のラベル個数分のpixelに正解ラベルを重ねる(overlay)
図で表すと以下のようになります。
推論の方法は、推論用のデータをラベル個数分用意して、それぞれに異なるラベルを付与します(プログラムでは違う実装だが、説明のため左の表現)。
つまりラベルが3種類の場合は、ラベル1,2,3が載った推論データがあるということです。
そしてモデルにそれぞれのデータを入力し、各層においてそれぞれのGoodnessを計算して、最もGoodnessが大きかったラベルを正解ラベルとします。
学習では、正解データのGoodnessを高く、不正解を低く学習するようにしていたので妥当な推論方法です。
推論時には順伝播の回数が増えてしまうこと、ImageNetなどのラベルの個数が多い場合に順伝播の回数が爆発的に増えてしまうことはデメリットですが、
学習時に逆伝播を用いないことで必要メモリが大幅に減少するので、低電力かつ低資源で学習を行うメリットがあります。
終わりに
この論文の詳細は、論文のURL(https://www.cs.toronto.edu/~hinton/FFA13.pdf) からご確認ください。
プログラミングのテクニックはZennでまとめています。