覚え書きブログ

Pythonによる機械学習3(1/3)

前回のロジスティック回帰の構成を2階層のニューラルネットワークと解釈したのち、中間層を導入し非線形な表現が可能な3階層のニューラルネットワークを実装していきます。

Pythonによる機械学習3(1/3)の目次】

ロジスティック回帰の構成

まず、ロジスティック回帰を、以下の役割を持つノードとエッジで構成されるグラフで表現してみます。

  • エッジ:モデルパラメータ \textbf{w}\textbf{b}を格納
  • 四角ノード:下位層の丸ノードとエッジの線形和の値(\textbf{w}^\top\textbf{x}+b)を格納
  • 丸ノード:入力層では入力データ値、入力層以外では四角ノードに活性化関数(シグモイド関数など)をかけた値を格納

f:id:hirotaka_hachiya:20171122153635p:plain

ここでは、入力データに \textbf{x} = (x_1,x_2,..,x_D,1)のように値「1」を取る次元を追加することにより、ロジスティック回帰は2階層のグラフとして表現できることがわかります。また、入力データ \textbf{x}から事後確率を出力するまでの流れのことを、feed-forwardと呼びます。

一方、最急降下法によるモデルパラメータの更新は、チェインルールにより線形和 s_cに関する偏微分を利用して、feed-forwardとは逆向きに交差エントロピー損失関数から入力データに向かって処理が行われることから、back-propagation(日本語では、「誤差逆伝播」)と呼ばれています。
f:id:hirotaka_hachiya:20180117235533p:plain

3階層のニューラルネットワーク

ロジスティック回帰は、2階層のグラフで表現できることがわかりました。この入力層と出力層の間に、入力層からの線形和 \textbf{s}^1活性化関数をかけた値を格納する中間層(隠れ層とも呼ばれます)を導入したグラフを、3階層のニューラルネットワークと呼びます。
f:id:hirotaka_hachiya:20180117235554p:plain
f:id:hirotaka_hachiya:20180117235607p:plain

なお、この3階層のニューラルネットワークDeep learning(深層学習)の最小構成となっています。より発展的なDeep Learningについては以下を参照してください。
https://www.slideshare.net/HirotakaHachiya/13-deep-learning-82500659

ロジスティック回帰と同様に、3階層のニューラルネットワークにおいても、back-propagationにより線形和 s_c^2 s_m^1を再利用することにより効率よくモデルパラメータを更新します。
f:id:hirotaka_hachiya:20180118000305p:plain
f:id:hirotaka_hachiya:20180118000315p:plain

演習1

3階層のニューラルネットワークのモデルパラメータ \textbf{W}^1 \textbf{W}^2に関する損失関数の勾配を求めてみましょう。以下は、入力層と中間層の間のモデルパラメータ \textbf{W}^1に関する損失関数の偏微分を求めるための手順です。なお、中間層と出力層の間のモデルパラメータ \textbf{W}^2に関する偏微分は、Pythonによる機械学習2(1/3)の演習1で求めた式と同じ形にります(ただし、 \textbf{x} \textbf{h}に置き換わる)。
f:id:hirotaka_hachiya:20180117164918p:plain

Pythonによる機械学習3(2/3)>>