ディープラーニングの学習をしていると、最も難解に思えるのが、誤差逆伝播法(Back Propagation)と呼ばれる、ニューラルネットワークの重みパラメータの更新方法です。
様々な深層学習の入門書を読んでも、この部分が難解で多くの人が挫折してしまうところだと思います。
誤差逆伝播法を理解するための最も肝となる要素は大きく2つあります。
1つは、合成関数の微分、つまり連鎖律(chain rule)を理解すること。そしてもう一つが、この連鎖率がニューラルネットワークの構造と学習におけるどの部分に相当しているか、この対応関係を理解すること。
この2つを理解することで、深層学習における誤差逆伝播法を理解することができます。
大事なことは、細かい数式に翻弄されずに、ニューラルネットワークとその学習方法の全体像意識することが必要です。誤差逆伝播などの参考書では、計算グラフなど合成関数の説明から入ることがよくありますが、そのパターンはあまりよくないように思います。
大事なことは、ニューラルネットワークを構成する要素を正確に理解することです。それなくして、誤差逆伝播法を理解することは難しいと思います。
ここでいうニューラルネットワークを構成する要素とは、ニューラルネットワークの重みと損失関数性です。この関係性をイメージで抑えることで、誤差逆伝播法がどのような操作を行っているか十分に理解できるようになると思います。
深層学種モデルにおける重み(パラメタ)とは?その意味を理解する
まず最初に誤差逆伝播法の解説に入る前に、深層学習モデルにおける重みとは、どのようなものであるかをきちんと整理しておきます。
誤差逆伝播法とは、端的にまとめると、深層学習の学習において、そのネットワークの重みパラメータを学習する手法のことです。
深層学習は近年ものすごい精度が出る手法で注目されていますが、その深層学習の数式自体は、教師データによって調整された、数千〜数百万のパラメータからなる数式に過ぎません。言い換えれば、深層学習の本質は、この膨大な数のパラメータであり、学習によってこのパラメータを適切に決めてあげようと言うのが、深層学習の学習でやっていることです。
上の図で登場するブラックボックスが深層学習モデルです。深層学習モデルは、今は様々なものがありますが、例えば様々な画像を入力したときに、それが猫がどうかを識別するモデルなどを考えることにします。
この時、深層学習モデルの性能は、重み$\theta$で決定されます。逆に言い換えれば、深層学習モデルは、その重み$\theta$を適切に決めてあげることで、所定の性能を得ることができます。
そして、ご存じのとおり、深層学習では、正解ラベルのあるデータから学習することによって、深層学習モデルに含まれる重み$\theta$を学習することになります。
これが深層学習の学習の目的です。
重みパラメータ$\theta$は、深層学習の性能を規定する重要な要素であり、教師データから適切な重み$\theta$を学習する。
深層学習について少しかじったことがある人なら誰でも理解しているような話ですが、まず深層学習モデルにおける重みパラメータの位置付けについて話しました。
ここから、徐々に数式を交えた話になっていきます。数式が入ってくると全体像が見えなくなるので、以降も常に全体像を意識して理解するようにして行ってください。
深層学習(ニューラルネット)の基本的なモデル
続いて、深層学習モデルの基本的な構造についておさらいしましょう。
今、次のような2分類の深層学習ネットワークを考えます。
ここで、上の図で見たらわかるように、入力は3次元で出力は2次元のニューラルネットになっています。中間層は1層で3次元になっています。
深層学習における重みパラメタの学習方法
先ほど、深層学習にとって、重みが本質的に重要だと述べました。では、深層学習では重みをどのように学習するのでしょうか?それは、聞いたことがある人が大半だと思いますが、損失関数(Loss Function)を用います。 損失関数は英語でLoss Functionなので、よく$\mathcal{L}$で表現されます。
損失関数は、定性的に述べると、ニューラルネットワークの出力と正解ラベルの誤差を表現した式です。つまり、損失関数の値が大きいほど、ニューラルネットワークの性能は悪いということになり、逆に損失関数の値が小さいほど、ニューラルネットワークの性能は良くなります。
そして、ニューラルネットワークでは、損失関数の値が小さくなるように、モデルの学習、つまり教師データから適切な重み$\theta$を学習していきます。
ここで、一般的に、利用される損失関数として、二乗和誤差(Sum Of Square Error)や交差エントロピー誤差(Cross Entropy Error)が利用されます。
例えば、ここでは分類問題などで利用される交差エントロピー誤差の定義式を記載します。
最終層で$K$次元の出力を行うニューラルネットワークにおいて、その最終層の出力を$\bm{y}$ (k番目の出力を$y_k$とする)、また対応する$K$次元のone-hot-enoding 正解ラベルを$\bm{t}$ とすると、ある1つのデータに対する交差エントロピー誤差は次のように定義される。
\begin{equation} E = - \sum_k t_k ln y_k \end{equation}
ここで、交差エントロピー誤差についてはこちらの記事で詳しく解説しているのでこちらを参考にしてください。
式(1)は1つの正解データに対する誤差を表現しています。今教師データが全部で$N$個ある時、損失関数は(1)で表現した交差エントロピー誤差をデータの数だけ総和をとった形式になります。
\begin{equation} \mathcal{L} = - \sum_{n} E_n = - \sum_n \sum_k t_{nk} ln y_{nk} \end{equation}
ここでは細かい数式にまで立ち入りませんが、損失関数は、それぞれのデータの交差エントロピー誤差の総和で表現できることがわかります。
ここで、(2)の式は、$y_nk$の関数であることがわかります。$y_nk$はn番目のデータのk系列目の出力値を表現しています。
深層学習(ニューラルネット)のアーキテクチャ
まず最初に、基本的なニューラルネットワークの全体アーキテクチャを載せておきます。
ニューラルネットワークは、最初の層から信号($ x_1, x_2, \cdots, \x_n $) が入力され、その信号が重みとの線型結合されて、次の層に連続的に引き継がれていく構造をしていました。