【誤差逆伝播法】計算グラフのチートシート―これで誰でも分かるはず


1. 結論

(切り取って、好きな方をノートにでも貼ってください)
---✂-キ-リ-ト-リ-線---

---✂-キ-リ-ト-リ-線---

---✂-キ-リ-ト-リ-線---

2. 例題

ソフトマックス関数の誤差逆伝播を、計算グラフで求めてみよう。
(準備の節は必要に応じて読んでほしい。)

2-1. 準備1―ソフトマックス関数と誤差逆伝播法のコンセプト

ソフトマックス関数とは、ベクトルを受け取り、同じ次元のベクトルを返す関数の一つだ。
ソフトマックス関数(柔らかい最大値関数)の正体を知るためには、
「ハーデストマックス関数」(最も硬い最大値関数)を考えるとよい。
(そんなものは多分ないけど、理解のために。)
「ハーデストマックス関数」(hardestmax)の例を次に示す。

hardestmax
\begin{pmatrix}0 \\99 \\0\\100\\0 \end{pmatrix}
=
\begin{pmatrix}0 \\0 \\0\\1\\0 \end{pmatrix}

いかがだろうか。
入力ベクトルの最大成分のあったインデックスに1が、
それ以外のすべてのインデックスに0が入ったベクトルが返却された。
ハーデストマックス関数は、「最大値はどれか」を特定する力があるのだ。
ソフトマックス関数は、これに近いことをする。例を次に示す。

softmax
\begin{pmatrix}0 \\99 \\0\\100\\0 \end{pmatrix}
=
\begin{pmatrix}0.00 \\0.27 \\0.00\\0.73\\0.00 \end{pmatrix}

ソフトマックス関数の出力の各成分はすべて0以上1以下の実数で、
しかも和は必ず1となる。 
なるほど。確率とみなせそうだ。

ハーデストマックス関数やソフトマックス関数はニューラルネットワーク上で、
分類問題を解くときに役に立つ。

hardestmax
(各選択肢の「正解らしさ」を何らかの数字で評価したベクトル) \\
=
(正解の選択肢→1、それ以外→0なベクトル)

とできる。
しかし、これだと「学習」ができないのだ。

一方、ソフトマックス関数を使えば、

softmax
(各選択肢の「正解らしさ」を何らかの数字で評価したベクトル) \\
=
(各選択肢が正解である確率のベクトル)

となる。
後は、ソフトマックス関数(柔最大値関数)の出力の各成分を、
ハーデストマックス関数(最硬最大値関数)のそれに近づくように(※)、パラメータを再調整する。この「再調整」こそ「学習」だ。
語弊はあるかもだが、次のように言ってもいいだろう。

「ニューラルネットワークが分類問題を学習する」とはソフトマックス関数の出力を『硬く』していくことである。

ここで、※を考えてほしい。「近づくように」ってどうやるのか。
実は、その方法の一つこそが「誤差逆伝播法」なのだ。
語弊はあるが、次のように考えてよいだろう。

(分類問題において、)誤差逆伝播法とは、「正しく固まった最大値」と「試算した柔らかい最大値」の間の誤差を小さくするために、パラメータをどう変更すればよいかを高速で求めるアルゴリズムである。

「正しく固まった最大値」というのは、
「不正解を1、正解を0にしていたら意味ないでしょ」という程度の注意書きなので、その点に注意していただければ「教師データによる最硬最大値」などと読み替えて構わない。

2-2. 準備2―ソフトマックス関数の式

ソフトマックス関数とは、「学習の余地を生むために柔らかくした最大値関数」であるということを、2-1節にてご理解いただいた。

シワのついたYシャツ(学習前のAI)
一度水につけて柔らかく(ソフトマックス関数の導入)し、
アイロンで「正しく硬く」すれ(教師データと誤差逆伝播法による学習)
シワが取れる(分類能力を帯びた学習済みAIができあがる)
ことに例えられるだろう。たぶん。

誤差逆伝播法では微分を使う($f(x)$を思い通りにするために$x$を再調整すると考えれば、$f'(x)$の登場は自然の成り行きだ)ので
ソフトマックス関数は微分が簡単な$\exp(~)$関数を使ってなるべくシンプルに定義したい。
また、各成分の総和が1になるようにしたい。
(「各選択肢が正解である確率」の総和は、常に1だ。)
この2つの要件を満たした関数が、次に示すものだ。

softmax\begin{pmatrix}a_1 \\a_2 \\:\\a_n \end{pmatrix}
=
\frac{1}{\exp(a_1)+\exp(a_2)+..+\exp(a_n)}
\begin{pmatrix}\exp(a_1) \\\exp(a_2) \\:\\\exp(a_n) \end{pmatrix}

2-3. 準備3―計算グラフの導出

1つずつの過程を図にする。

↑まず入出力のみ整理

↑まず分子を計算するノードを書いた

↑分母は出力の何番目でも共通

↑分母のノード(「∑」と「-1乗」に分けた)

↑分母のノード(「∑」のノードの左側をつないだ)

2-4. 誤差逆伝播法の適用

いよいよ誤差逆伝播法を適用していく。
次の図のように、出力側から$-\frac{t_j}{y_j}$が伝わった場合を考える。

ちなみに$t_j$は正解ベクトルといって、その成分(選択肢)が正解の場合に1、不正解の場合に0となるものである。「正しく固まった最大値関数」そのものである。
$y_j$は、ソフトマックス関数の出力の成分、$\frac{\exp(a_j)}{\sum_{i=1}^n\exp(a_i)}$である。
また、簡単に表すため、$\sum_{i=1}^n\exp(a_i)$を$S$と書いている。

緑色の矢印に対応する$?_1$を求めてみよう。

第1章に示したチートシートをもとに考えれば、

と求められる。
(書籍の中には、近似を用いていることを説明せず、いきなり$-t_j S$の結果だけを示しているものがある。
これは、初めの式で分母の$y_j$と被微分変数の$y_j$を約分し、微分変数$\frac{1}{S}$の逆数をかけたかのような誤解を生む、好ましくない表現であると思う)

次に$?_2$を求めよう。

∑は、薄い矢印をも考慮したものである。

$?_3$を求めよう。

$?_4$を求めよう。

最後に$?_5$を求めよう。これが「 $-\frac{t_j}{y_j} $ を受け取ったときに、ソフトマックス関数が逆方向に伝える誤差」である。

3.参考文献

[1]O'REILLY ゼロから作るDeep Learning