自分、不器用なので
こんにちわ、こんばんわ。かえるのクーの役立たず助手の「井戸中 聖」(いとなか セイ)でございます。
今日何故か検索で、あの「金子勇」様の「ED法」が頻繁にヒットしました。「流れ」があるのかもしれません。柳の下のn+1匹目のドジョウ掬いをしてみます。
さぁ。貴方も一緒に時流に乗りましょう。
Error Diffusion法(誤差拡散(ED)法*1)とは
有名なプログラマであった、故金子勇様考案のニューラルネット学習方式です。1999年あたりに考案され(Winnyより前!)、「第参回天下一カウボーイ大会」登壇で広く知られることになった学習アルゴリズムです。
開発者ご自身の説明
最初のオープニングBGMがやたら大きいので、氏が話しはじめられた後に音量を目いっぱいあげることをお勧めします。氏の思考スピードに人類としての発声器官が全く追いついていないのがよくわかります。ED法を誰も全く知らないのに、「ED法の応用」の話題がメイン(But時間切れ)であることが「とてもよい」と思います。
オチは渦中の氏に対して、最後の司会者の「ニューラルネットってネットワークですよね!?」のくだりで、それ対して微妙な苦笑いをされるところかと思います。
ソース
1999年版のCプログラムであれば、ネットに残っています。バックプロパゲーション(BP)との違いもこちらで説明されています。比較としてBP法(モーメンタムあり)のサンプルプログラムもこちらにあります。ED法コンセプトの説明も上のyoutubeより詳しく載っています。(必読)
査読なし(中)論文も一時はネット公開されたようですが、今時点では発見できていません。
PCアプリ(バイナリ)
EDの強化学習版のプログラム(2013版)を使用したアプリ「NekoFight」はデモバイナリが見つけられましたが、そのソースは見つかりませんでした。(マクロスなミサイルが飛ぶ似た名前の「NekoFlight」とは別のソフトですのでご注意ください)
金子氏:最近はこのNekoFightは、ほぼ自作のニューロ+強化学習アルゴリズム検証プログラムと化してますが、このアルゴリズムは元々実際の神経系(主にアミン系)を最大限参考にして、できるだけシミュレーションとして動作させようという発想から来ています(自然界の方に何か凄いアルゴリズムが存在するはずという発想ですね)
NekoFightのアーカイブはこちら(そのうちなくなるかも)
EDのポイント
・逆伝播法とは異なり、逆方向への順次伝播は行わない。(多層ニューロンを一括更新するようなコンセプト:ただし実装は再帰的)氏曰く:順次遡るなんて実際はありえない!*2
・実ニューロンに倣い、はじめから抑制タイプのニューロンを考慮している
・1999年時点で「多層のニューラルネットは学習が困難である」点をある程度解決できていた:sigmoid活性化関数で層を(かなり)重ねても学習できる。これは上記Youtubeでの説明通り。
あたりかと思います。
Pythonで実装してみた方はこちら
バックプロパゲーションの違和感(これは個人の感想です)
個人的には現在解明されている(範囲の)実神経細胞細胞の「学習」とニューラルネットの「学習」があまりに違う(と思われる)ことに強烈な違和感がありました。ニューラルネット初学者のころ同様の感覚を持った方も多いと思います。
そこはいつもの、鳥と飛行機の比喩で自分を胡麻化していました。
そのうち、神経細胞が「実質的に情報が逆伝播している可能性」を示唆する情報もいくつか公表されたこともあり(ex.実は入力側のニューロン(樹状突起)が元の出力側シナプスを物理的に押し返してパラメータ調整しているかも...実はグリア細胞がニューロンをグルーピングしてゆるく逆伝播・報酬制御しているのだ(元祖当サイトマスターのKooⅠ世仮説)..etc)、違和感は薄まりましたが、実は「コレジャナイ」感はまだぬぐい切れていません。わたくしがも中間1層の自己符号化器の呪縛から逃れられない理由のひとつです。
決意表明(いわないとサボるので)
5月連休の自由研究の課題は急遽「コレ」になりました。ChatGPTの力を最大限借りて実験しようと思います。
時はきた!さあ、みなさんで、ED法を実装実験してみましょう。そして、ソース非公開に終わった(と思われる)「ED法の強化学習版」を想像して実装してみようではありませんか!
強化学習の報酬系と罰系の(未来)予測値を(EDで)求めその予測値の「変化値」をつかってこれをEDに「フィードバック」して使用し、この「変化値とエラー値(補正済)」を行動決定のEDニューラルネットのインプットとすると何故かしら「いいかんじ」になるようですよ。
ミッションはインポッシブル!なのか?