機械学習

ニューラルネットワークで活性化関数にtanh関数を利用してみた

これまでは、ニューラルネットワークの活性化関数にシグモイド関数を利用してきたが、偏微分の計算ができれば、活性化関数にシグモイド関数以外も利用することができる。

今回は、ニューラルネットワークの活性化関数にtanh関数を利用してみたので、そのサンプルプログラムを共有する。

前提条件

以下の記事の実装が完了していること。

ニューラルネットワークのバックプロパゲーションを実装してみた 以下の記事で、バックプロパゲーション(最急降下法を用いて、ニューラルネットワークの誤差を効率的に逆伝播させる手法)により、重み\(\...

今回実装するニューラルネットワークの全体構成は、以下のようになる。
ニューラルネットワーク

また、重み\(\boldsymbol w\)の最適解は、下図における誤差関数\(E=(x_3 – y)^2\)が最小となる箇所で、これは誤差関数を(桃枠の)各変数について偏微分した結果が\(0\)になる値となる。
ニューラルネットワークの誤差関数

このうち、単一ニューロンを実装した内容は以下の通りで、前提条件の記事の、フォワードプロパゲーションを行うメソッド(forward)で、tanh関数を利用している。



また、ニューラルネットワークを実装した内容は以下の通りで、前提条件の記事の、バックプロパゲーションを行うメソッド(back)で設定する偏微分を、tanh関数に対応したものにしている。

なお、backメソッドで利用している重み\(\boldsymbol w\)の各変数の偏微分を計算する際、以下の計算結果も利用するものとする。
\[
\begin{eqnarray}
\mathrm{tanh}(x) &=& \displaystyle \frac{e^x – e^{-x}}{e^x + e^{-x}} \\
\mathrm{dtanh}(x) &=& \displaystyle \frac{d}{dx} \mathrm{tanh}(x) = \frac{4}{({e^x + e^{-x}})^2} \\
u_1 &=& x_0 \times w^1_{10} + x_1 \times w^1_{11} + 1 \times w^1_{12} \\
y_1 &=& \mathrm{tanh}(u_1) \\
u_2 &=& x_0 \times w^1_{20} + x_1 \times w^1_{21} + 1 \times w^1_{22} \\
y_2 &=& \mathrm{tanh}(u_2) \\
u &=& y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12} \\
y &=& \mathrm{tanh}(u)
\end{eqnarray}
\]

実際に、誤差関数を、重みの各変数についての偏微分を計算した結果は、以下の通り。
\[
\begin{multline}
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{10}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_1}
\frac{\partial y_1}{\partial u_1} \frac{\partial u_1}{\partial w^1_{10}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_1}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_1}\mathrm{tanh}(u_1) \times
\frac{\partial}{\partial w^1_{10}}(x_0 \times w^1_{10} + x_1 \times w^1_{11} + 1 \times w^1_{12}) } \\
\shoveleft{   = 2(x_3 – y) \times (-1) \times \mathrm{dtanh}(u) \times w^2_{10} \times \mathrm{dtanh}(u_1) \times x_0 } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{10} \times \mathrm{dtanh}(u_1) \times x_0 } \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{11}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_1}
\frac{\partial y_1}{\partial u_1} \frac{\partial u_1}{\partial w^1_{11}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_1}(y_1 \times w^2_{11} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_1}\mathrm{tanh}(u_1) \times
\frac{\partial}{\partial w^1_{11}}(x_0 \times w^1_{11} + x_1 \times w^1_{11} + 1 \times w^1_{12}) } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{10} \times \mathrm{dtanh}(u_1) \times x_1 } \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{12}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_1}
\frac{\partial y_1}{\partial u_1} \frac{\partial u_1}{\partial w^1_{12}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_1}(y_1 \times w^2_{11} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_1}\mathrm{tanh}(u_1) \times
\frac{\partial}{\partial w^1_{12}}(x_0 \times w^1_{11} + x_1 \times w^1_{11} + 1 \times w^1_{12}) } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{10} \times \mathrm{dtanh}(u_1) \times 1 } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{10} \times \mathrm{dtanh}(u_1)} \\
\end{multline}
\]
\[
\begin{multline}
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{20}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_2}
\frac{\partial y_2}{\partial u_2} \frac{\partial u_2}{\partial w^1_{20}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_2}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_2}\mathrm{tanh}(u_2) \times
\frac{\partial}{\partial w^1_{20}}(x_0 \times w^1_{20} + x_1 \times w^1_{21} + 1 \times w^1_{22}) } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{11} \times \mathrm{dtanh}(u_2) \times x_0 } \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{21}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_2}
\frac{\partial y_2}{\partial u_2} \frac{\partial u_2}{\partial w^1_{21}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_2}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_2}\mathrm{tanh}(u_2) \times
\frac{\partial}{\partial w^1_{21}}(x_0 \times w^1_{20} + x_1 \times w^1_{21} + 1 \times w^1_{22}) } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{11} \times \mathrm{dtanh}(u_2) \times x_1 } \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^1_{22}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial y_2}
\frac{\partial y_2}{\partial u_2} \frac{\partial u_2}{\partial w^1_{22}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial y_2}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{    \times \frac{\partial}{\partial u_2}\mathrm{tanh}(u_2) \times
\frac{\partial}{\partial w^1_{22}}(x_0 \times w^1_{20} + x_1 \times w^1_{21} + 1 \times w^1_{22}) } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{11} \times \mathrm{dtanh}(u_2) \times 1 } \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times w^2_{11} \times \mathrm{dtanh}(u_2)} \\
\end{multline}
\]
\[
\begin{multline}
\shoveleft{\displaystyle \frac{\partial E}{\partial w^2_{10}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial w^2_{10}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial w^2_{10}}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times y_1} \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^2_{11}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial w^2_{11}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial w^2_{11}}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times y_2} \\
\\
\shoveleft{\displaystyle \frac{\partial E}{\partial w^2_{12}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u} \frac{\partial u}{\partial w^2_{12}} } \\
\shoveleft{   = \displaystyle \frac{\partial}{\partial y}(x_3 – y)^2 \times \frac{\partial}{\partial u}\mathrm{tanh}(u)
\times \frac{\partial}{\partial w^2_{12}}(y_1 \times w^2_{10} + y_2 \times w^2_{11} + 1 \times w^2_{12})} \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u) \times 1} \\
\shoveleft{   = 2(y – x_3) \times \mathrm{dtanh}(u)}
\end{multline}
\]



フリエン(furien)は多くの案件を保有しフリーランス向けサービスも充実しているエージェントだったフリエン(furien)は、ITフリーランス(個人事業主)エンジニア専門のエージェントであるアン・コンサルティング株式会社が運営する業界...

さらに、先ほどのニューラルネットワークを呼び出した結果は以下の通りで、出力結果\(y\)は、入力値\(x_0=x_1=0\)または\(x_0=x_1=1\)の場合に\(0\)に近く、そうでない場合は\(1\)に近いことが確認できる。

ニューラルネットワークの呼び出し

また、先ほどのニューラルネットワークを呼び出した際のdwの最終結果は以下の通りで、それぞれ\(0\)に近づいていることが確認できる。

ニューラルネットワーク呼出後のdw

要点まとめ

  • 偏微分の計算ができれば、ニューラルネットワークの活性化関数に、tanh関数のようなシグモイド関数以外も利用することができる。