誤差伝播法のアルゴリズムを表記方法からわかりやすく解説します。前へ次へ検索RSSFeedlyホーム>Excelで機械学習>機械学習を理解する誤差伝播法のアルゴリズムを表記方法からわかりやすく解説します。2022年11月6日ニューラルネットワークの計算の肝となる誤差伝播法。わかりやすい解説を読めば理解した気になるのですが、実際に自分で実装しようと思うと理解していないことに気づく。管理人と同じ人はいませんか?特にExcelで実装しようとすると、完璧に理解していないと実装で躓きます。ライブラリーを使ってワープできるPythonと違って、ゼロからスクラッチするExcelだと、自分の理解だけが頼りなのです。このような時には、必要最小限に簡単なモデルで考えてみることが一番です。すると、なんてことはない、普通に偏微分すれば解けるじゃないか!何でそんなに難しく解説するんだ!と思ってしまいました。ほとんどの解説にはδを定義してどのこうの。書いてありますが、そんなこと気にせずに普通に偏微分すればよいことが分かりました。難しく考える必要なんてありません。メモを作りましたので、参考にしてみて下さい。隠れ層は入れ子が1つ増えるだけ。出荷量=人数×8+台数×2+10の式は、ニューラルネットワークでは次のように描くことを紹介しました。抜粋これをもう少し一般化すると次のように描けます。バイアスは入力層から来る信号には関係ないため、独立してノードに加えています。2つの入力に重みを掛けて合計した値をuという変数に入れています。それ以外に難しい所はありませんね。異なる層の表記方法これは入力層と出力層しかない単純パーセプトロンですが、隠れ層(中間層)を加えて多層パーセプトロンに拡張させてみましょう。先ほど出力層のノードで、前の層から来た信号に重みを掛けて合計しましたが、同じことを隠れ層のノードでも行います。上図で描いたように、隠れ層Hのグループは青色、出力層Oのグループは赤色になります。このように重みは、その後のノードに紐づいていると考えることが重要です。バイアスθは入力信号に依存せず、毎回それぞれのノードに加えるものですので、今後はわざわざ図には描かないことにします。活性化関数の表記方法さて、ニューラルネットワークではそれぞれのノードにおいて、入力に重みを掛けて合計しているだけではありません。合計した値を更に違う値に変換します。この変換を行う関数のことを、活性化関数と呼んでいます。変換するのかというと、こうすることでより複雑な問題が解けるようになるからです。入力信号に重みを掛けて加えるだけでは、いくら隠れ層(中間層)を増やしたところで直線的な関係しかモデル化できません。二次元グラフ上の点の集合を、直線で2つのグループに分けるようなことしかできないのです。曲線でグループ分けしたいような場合には、非線形の活性化関数を入れないとできないのです。従って、隠れ層と出力層にあるすべてのノードでは活性化関数による変換も行います。図で表すと、次のようになります。このように、それぞれのノードには2つの関数が入っていると考えます。活性化関数はシグモイド関数やReLU関数などいろいろある中から、目的に応じて選びます。今回は一番簡単なf(u)=uを活性化関数として話しを進めます。簡単にいうと、何も変換せずにそのまま通す関数です。恒等関数ともいいます。表記方法のまとめさて、ここまでで入力層に2つのノード、隠れ層と出力層にそれぞれ1つずつのノードを持つモデルを表しましたが、誤差伝播法を理解するためには最低でも入力層:2つのノード、隠れ層:3つのノード、出力層:2つのノードを持つモデルで考える必要があります。これを図で表すと、次のようになります。紐づいているグループごとに色分けしてあります。ここで新しいことは、それぞれの層に複数のノードがある時には、次のような規則によって文字を区別することです。ノード名をH1やO1のように、層名の右下に数字を付けて区別するuとzの右下にも数字を付けて区別する重みwの右下には2つの数字を付けて区別する。数字の順序は次の規則に従う重みwの右下に付ける数字の順番は、逆に定義する人もいます。単なる決め事ですので、ここでは行き先を先に書く定義で進めます。誤差伝播法のアルゴリズム出力層は普通に偏微分さて、本題に入ります。誤差伝播法は損失関数の勾配を簡単に求めるための方法です。勾配を求めるのかというと、損失関数の値が最小になる時の重みwやバイアスθを求めたいからです。この重みwとバイアスθは初めに初期値をテキトーに決めますが、勾配を求めることで、プラスマイナスどちらの方向にどくれくらいwやθを動かせば良いかということが分かります。これを勾配降下法といいました。【例題をExcelでわかりやすく】最急降下法で単回帰の最小二乗法を解いてみるこの勾配の計算は単純パーセプトロンでは簡単でした。【スーパーわかりやすく!】Excelで単純パーセプトロンの具体例を試してみるところが、多層パーセプトロンでは少し難しくなります。それを簡単にする道しるべを与えてくれるのが誤差伝播法です。誤差伝播法では、「まず最初に出力層の重みから計算しなさい」と教えています。出力層の重みから求めてみましょう。出力zO1とzO2の正解がt1とt2だとします。正解とは教師データのことですので、teacherの頭文字を取ってtnとします。すると、損失関数は次式のように誤差の平方和で表されます。E={(zO1-t1)2+(zO2-t2)2}/2ここで、zO1とzO2はそれぞれuO1とuO2と同じです。今回の活性化関数はf(u)=uという、そのまま通す関数を仮定しているからです。zO1とzO2はそれぞれ次式で表されます。wO23zH3+θO2ここで、wO11の勾配を求めてみましょう。wO11を計算するということです。一瞬ひるみますが、これはそれほど難しくはありません。高校で習った合成関数の微分を使えばいいからです。zH1と簡単に計算できます。出力層の重みはバイアスθも含めるとあと7個ありますが、すべて同じように計算できます。隠れ層は入れ子が1つ増えるだけ。次に隠れ層の重みを計算します。この計算は先ほどより少し難しくなります。計算をしてみましょう。+θH1のように入れ子で含まれているため、先ほどのように簡単には微分ができないのです。クリックすると拡大しますしかし、ひるむ必要はありません。ここでも合成関数の微分を使えばいいのです。先ほど出力層の重みの微分では、次式のように分解しました。