見出し画像

技名:逆伝播

「逆伝播」という3文字を、「バックプロパゲーション」と読んでしまうAIエンジニアという生き物は、相当厨二病というか、ジョジョの読みすぎというか、とにかく世間一般の方の進む道から少し外れてしまったと思った方がいい、という話。(突然なんだというのか。一応、誤差逆伝播法という6文字をそう変換する人もいる、ということを付け加えておく。同類だ。)


逆伝播とは何なのか

※前後関係も含めて知りたい人は下記の記事もみてほしい

逆、という言葉が付いている通り、これはとある概念の逆向きの話をしていて、正の方向のやつを「順伝播」と呼んでいる。

ニューラルネットワークの例

これで、左から入力を入れて、どんどん右方向に計算していって、最終的に一番右の出力を得るのだけれど、この向きに計算することを「順伝播」という。で、今回のタイトルになっている「逆伝播」は、それとは逆に、右から左へ計算していく方式だ。

何のためにやるのか

上の例で言うと、例えば手札1枚プレイ=0.12、手札売ってお金=0.56、捨札拾う=0.02、パスして1金=0.3みたいな出力を受け取って、一番大きい「手札売ってお金」かな、という意思決定をしていくわけなのだけれど、それが正解だったり、間違いだったり、する。

明確に正解が手札売ってお金だったとすると、理想は手札売ってお金の出力が1.0に近づいて、その他の出力が0.0に近づくようにすればよい。で、そういうふうになるように、それぞれの矢印で持っている「重み」という数字を更新していくのだけれど、手札売ってお金の結果からそれを更新する時、右から順に「基準997」、「基準201と203」、「(基準201側の)基準101と102」、「(基準101側の)基準1、基準2、基準3」、「(基準1側の)自分の所持金」にそれぞれつながる矢印の重みを、順に変えていく。

この時の計算方法が、基準のところで足し算していたらそのまま、掛け算していたら逆の入力をかける、関数を使っていたら微分して代入、みたいな感じで決まっている。

微分して代入

今、さらっと「微分して代入」とか書いたんだけれど、そもそも私がニューラルネットワークを触っていた頃はここまで確固たる更新方法は(あったんだろうけど)絶対これ、という感じではなくて、手探りだったもんで、そもそも中間層ももっとデジタルに判定していたんだよね。…とはいえ微分はできるだろ、という話はあるんだけど。

じゃあどうしていたのか、というと、折に触れて言っている通り、私は遺伝的アルゴリズムを盲信しているので、このコピーを100個作っておいて、重みを計算で更新する代わりに、ランダムに変えたり、交叉させたりしながら、強い遺伝子が現れるのを待つ、というやり方を取っていたんだよね。

利点は、出力の正解がわかっていなくても、強いニューラルネットワークにたどり着く可能性があることで、欠点は、そりゃ直接計算するより収束時間がかかること、だと思う。

まとめ

これも何度か触れていると思うんだけれど、今JDLAのE資格取得に向けてお勉強の最中で、ちょうどこのバックプロパゲーションのところにたどり着いて、「おうおう、そういえば昔作ったニューラルネットワークも、微分とか駆使して重み更新したらよかったんかいなぁ、あの時のフレームワークでそんなでかい計算量に耐えられたんかいなぁ」みたいなノスタルジックな気持ちになっていたよ、という記事でしたとさ。

急に計算の話でごめんな、と思いつつも、最近生成絵ばっかりでつまらん、と思っていた人には楽しんでもらえたんじゃないかな。(計算の話は、明らかに閲覧回数が減るし、スキの割合も下がるんだけど、本筋はこっちな気がするしな。仕方ないな!とか言っているけれど、本筋はボードゲーム制作じゃなかったかな、とも思っている自分がいる。多重人格かな!)…というわけで(?)、今日はこのへんで。

例のAI画像のコーナー

画像生成AIのプロンプトに、「Backpropagation」って打った人、他にいるのかな…世界で10人いるかいないかだろうな…20枚くらい、なんだかよくわからない絵を生成したあとで、突然この女性を生成したので、このnoteでは、この女性を「逆伝播さん」と呼びたいと思います。

いただいたサポートは、きっと、ドイツアマゾンからの送料に変わると思います。 温かいご支援、お待ちしております。