中間層ノードの活性化関数に線形関数は使用すな!

 本記事では、活性化関数として線形関数(書籍では恒等関数の例が多い)を使用すると、多層ニューラルネットワークが単層ニューラルネットワークと等価になることを証明していきます。

図1に示す3層NNの出力値

 図1に示す3層ニューラルネットワークの出力値を求めます。ここでは、中間層の活性化関数を\(\phi(・)\)、出力層の活性化関数を\(\psi(・)\)、 中間層ノードの閾値を\(b\)、出力層ノードの閾値を\(c\)とします。

ニューラルネットワーク
neural network
図1 三層ニューラルネットワーク

入力として\(x_1\)と\(x_2\)を受けたとき、中間層ノードの出力\(h_1\)と\(h_2\)は、それぞれの入力に重み掛けをして、閾値を足し合わせたものに、活性化関数を適用したものとなるので、

\(h_1 = \phi(v_{11}x_1 + v_{21}x_2 + b_1)\)
\(h_2 = \phi(v_{12}x_1 + v_{22}x_2 + b_2)\)

と表されます。次に、出力層の出力値\(output\)を\(h_1\)と\(h_2\)を使って表すと、

\(output = \psi(w_1h_1 + w_2h_2 + c)\)

となります。具体的に\(h_1\)と\(h_2\)の式を代入すると、次の式で表せます。

\(output = \psi(w_1\phi(v_{11}x_1 + v_{21}x_2 + b_1) + w_2\phi(v_{12}x_1 + v_{22}x_2 + b_2) + c)\)

これが、図1の示す3層ニューラルネットワークの出力を表す式です。

活性化関数を線形関数に置き換える

 活性化関数が線形関数(\(\phi(x) = Ax, \psi(x) = Bx\) ただし、\(A\)と\(B\)は定数)として式に適用し、式変形を行うと、以下のようになります。

\(\begin{eqnarray}
output &=& \psi(w_1\phi(v_{11}x_1 + v_{21}x_2 + b_1) + w_2\phi(v_{12}x_1 + v_{22}x_2 + b_2) + c)\\
&=& ABw_1(v_{11}x_1 + v_{21}x_2 + b_1) + ABw_2(v_{12}x_1 + v_{22}x_2 + b_2) + Bc\\
&=& ABw_1v_{11}x_1 + ABw_1 v_{21}x_2 + ABw_1 b_1 + ABw_2v_{12}x_1 +ABw_2 v_{22}x_2 + ABw_2 b_2 + Bc\\
&=& AB(w_1v_{11} + w_2v_{12})x_1 + AB(w_1 v_{21} + w_2 v_{22})x_2 + B(Aw_1 b_1 + Aw_2 b_2 + c)\\
&=& \alpha x_1 + \beta x_2 + \gamma
\end{eqnarray}\)

最終行が示す式は、図2の単層ニューラルネットワークモデルで表すことができます。

ニューロン
単回帰
単層ニューラルネットワーク
図2 単層ニューラルネットワーク

よって、活性化関数に線形関数を使用すると、多層ニューラルネットワークが単層ニューラルネットワークと等価になることが分かります。

まとめ

 中間層ノードにおいて、活性化関数に線形関数を使用することは避けなければなりません。

Follow me!

コメントを残す