はじめに
現在、画像認識は自動車の自動運転や医療機関での画像診断など幅広い分野で使われています。また、画像認識に深層学習を用いた結果、精度が飛躍的に向上しました。
画像認識で深層学習を使用するとき、しばしば畳み込みネットワーク(Convolutional Neural Network:CNN)が使われます。このCNNについて、順伝播を解説する記事は世の中に多くあります。しかし、誤差逆伝播を説明する記事はあまり見かけません。
そこで本記事では、画像認識の深層学習モデルに多用されるCNNの誤差逆伝播の式について説明します。また、Pythonを用いて、導出した誤差逆伝播の実装を行います。なお、実装した結果はこちらで公開しています。
問題設定
手書き数字の画像を集めたMNISTデータセットの分類器を図1のような構成で作ります。

図1を見るとわかるように、入力画像を16枚の3×3のフィルターに通し(畳み込み層)、双曲線正接関数を通したあと、全結合層に流し込みます。全結合層の出力では、ソフトマックス関数によって出力を0~1の間になるように変換し、最終的に交差エントロピーで誤差を計算します。
上記で出てきた双曲線正接関数とソフトマックス関数、交差エントロピーについて下記で補足します。
双曲線正接関数
双曲線正接関数とは、下記で定義される活性化関数です。
誤差逆伝播の式を導出する際に、双曲線正接関数の微分が出てくるのでここで計算しておくと、
となります。
ソフトマックス関数
ソフトマックス関数とは、下記で定義される活性化関数です。
今回の場合、MNISTデータセットのラベルが0~9の十値なので、分母の和はから
となっています。
ソフトマックス関数についても、後で微分した式を用いるので計算しておこうと思います。
なお、を計算するのですが、
の場合と
の場合で結果が異なるので、場合分けして説明します。
の場合
の場合
となります。
交差エントロピー
交差エントロピーとは、下記で定義される誤差関数です。
ただし、は予測値、
は正解ラベルです。これについても微分した式を計算すると、
となります。
im2col
畳み込み演算をする際にim2colと呼ばれる処理を画像に施します。これにより、畳み込み演算を行列積で書くことができ、誤差逆伝播の式がわかりやすくなります。また、畳み込み演算を行列積で書けることにより、高速に計算可能な実装を行うことができます。
im2colの具体的な方法や実装はim2col徹底理解という記事が分かりやすかったです。ここでは、im2col後の行列を、フィルターを
としたときに、畳み込み演算は
と書くことができるとだけ述べておきます。ただし、
は図2で定義される行列です。

文字の整理
ここで、この後登場する文字を整理しておきます。
- 畳み込み演算後の出力を
とする。
- 中間層の出力を
とする。
- 全結合層の出力を
とする。ただし、
は全結合層のパラメータである。
- 出力層の出力を
とする。
誤差逆伝播の更新式の導出
誤差逆伝播の更新式に必要な式は、損失関数を各パラメータで微分した下記の2式です。
まずは簡単な
から計算しようと思います。
の導出
行列、
、
の成分をそれぞれ
、
、
とします。また、
の成分数を
とします。このとき、合成関数の微分の公式から
となります。
次に、を計算していきます。行列
の成分を
とします。また、
の成分数を
とします。このとき、合成関数の微分の公式から
となります。ここでは、上述したソフトマックス関数と交差エントロピーの微分、および正解ラベルについて、
であることを用いました。
以上より、
が得られます。これを行列表記に変換すると、
となります。
の導出
行列の成分を
とします。また、
の成分数を
とします。このとき、合成関数の微分の公式から
となります。次に、を計算していきます。
となります。次に、 を計算していきます。
ここでは、を用いました。
以上より、
となります。最後にこれを行列表記すると、
となります。ただし、は、
を
の各成分に適用し、微分して得られる行列です。
まとめ
本記事では、CNNの誤差逆伝播の解説を行いました。
具体的には、まず問題設定について説明しました。次に、今回のモデルで用いる双曲線正接関数とソフトマックス関数、交差エントロピーの定義を行い、それぞれを微分した式を導出しました。その後、誤差逆伝播による更新式、
の導出を行いました。
なお、本記事で導出した更新式を用いて、CNNを学習するコードはこちらに配置しました。興味がある方は、ぜひご覧ください。
