オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】フィードフォワードネットワーク / Feed Forward Network #アルゴリズム編

  • こんな方におすすめ

深層学習・ディープラーニングでも必要な「フィードフォワードネットワーク関数」の基本的な内容について知りたい.



この記事では、フィードフォワードネットワーク関数の基礎概念のまとめる.

Index

線形基底関数モデルからニューラルネットワークモデルへ

テーブルデータ等における予測モデルでは、線形回帰モデルや線形識別モデル、 それを一般化した線形基底関数モデルを用いることがある.

精度を上げるためにデータの情報を増やす(次元を増やす)ことがありますが、それには「次元の呪い」等の問題が生じる.

そこで、事前に基底関数の数を固定し、それらを適応的にしておくという考えがでてくる.

その手法で最も成功したモデルが「フィードフォワードニューラルネットワーク」.

フィードフォワードネットワーク関数

処理の全体象イメージ.

image



関数全体の定式化の前に、各処理ごとに定式化していく.

活性の計算

入力変数 x_1,\ \cdots,\ x_D の線形和を作る.


\displaystyle{
a_{j}\ =\ \sum_{i=1}^{D}w_{ji}^{(1)}x_{i}\ +\ w_{j0}^{(1)}\ \ (j\ =\ 1,\ \cdots\ M)
}



  • x_i\ (i\ =\ 1,\ \cdots,\ D) : 入力変数
  • D : 入力変数の次元数
  • w_{ji}^{(1)} : 1つ目の層の重みパラメータ
  • M : 1つ目の層のノード数
  • a_j : 活性(と呼ぶようですが、中間出力)

添字 i,\ j を無くして表現すると、以下の式.


\displaystyle{
a_{1}\ =\ w_{10}^{(1)}\ \cdot\ 1\ +\ w_{11}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{1D}^{(1)}\ x_{D} \\
\vdots \\
a_{j}\ =\ w_{j0}^{(1)}\ \cdot\ 1\ +\ w_{j1}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{jD}^{(1)}\ x_{D} \\
\vdots \\
a_{M}\ =\ w_{M0}^{(1)}\ \cdot\ 1\ +\ w_{M1}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{MD}^{(1)}\ x_{D} \\
}



つまり、D個の入力変数に対してM x (D+1) 個の重みパラメータを利用して、M個の出力をするということになる.

これらを行列の計算式で書き表すこともできる.


\displaystyle{
  \left(
    \begin{array}{c}
      a_{1} \\
      \vdots \\ 
      a_{j} \\
      \vdots \\ 
      a_{M}
    \end{array}
  \right)\ =\ 
  \left(
    \begin{array}{ccc}
      w_{10}^{(1)} & \cdots & w_{1D}^{(1)} \\
      \vdots & \ddots & \vdots \\
      w_{M0}^{(1)} & \cdots & w_{MD}^{(1)}
    \end{array}
  \right)\ \cdot\ 
  \left(
    \begin{array}{c}
      1 \\
      x_{1} \\
      \vdots \\ 
      x_{D}
    \end{array}
  \right)\ \\
}



まとめるとこのようなかんじ.


\displaystyle{
\mathbb{a}\ =\ \mathbb{w}^{(1)}\ \mathbb{x}
}

隠れユニットの計算

次に微分可能な非線形活性化関数 h で活性 a_{j}\ \ (j\ =\ 1,\ \cdots\ M)を変換する.


\displaystyle{
z_{j}\ =\ h(a_{j})\ \ (j\ =\ 1,\ \cdots\ M)
}



z_{j}\ \ (j\ =\ 1,\ \cdots\ M) は基底関数の出力に相当し、ニューラルネットワークでは隠れユニットと呼ばれている.

非線形活性化関数 h には一般に、ロジスティックシグモイド関数tanh関数が使われることが多い.

出力ユニット活性

次に活性 a_j\ \ (j\ =\ 1,\ \cdots\ M) を計算したときと同様、z_j\ \ (j\ =\ 1,\ \cdots\ M) を入力と見立てて、同様の線形和を作る.


\displaystyle{
a_{k}\ =\ \sum_{j=1}^{M}w_{kj}^{(2)}z_{j}\ +\ w_{k0}^{(2)}\ \ (k\ =\ 1,\ \cdots\ K)
}



  • z_j\ (j\ =\ 1,\ \cdots,\ M) : 隠れユニット
  • M : 1つ目の層のノード数
  • w_kj{}^{(2)} : 2つ目の層の重みパラメータ
  • K : 出力の総数
  • a_k : 出力ユニット活性(と呼ぶようですが、中間出力です。)

活性の計算との違いは添字のみ.

出力の計算

最後に出力を計算を行う.

適当な活性化関数 \sigma を用いて、変換する.


\displaystyle{
y_{k}\ =\ \sigma(a_{k})\ \ (k\ =\ 1,\ \cdots\ K)
}



ネットワーク全体の関数

これらの結果をまとめ、ネットワーク全体の関数は


\displaystyle{
y_{k}(\mathbb{x},\ \mathbb{w})\ =\ \sigma 
  \left( 
    \sum_{j=1}^{M}w_{kj}^{(2)}
      h 
       \left(
         \sum_{i=1}^{D}w_{ji}^{(1)}x_{i}\ +\ w_{j0}^{(1)}
       \right)
    \ +\ w_{k0}^{(2)}
  \right)
}



行列式で整形すると


\displaystyle{
\mathbb{y}\ =\ \sigma\ (\ \mathbb{w}^{(2)} \cdot\ h\ (\mathbb{w}^{(1)} \cdot \mathbb{x}\ )\ )
}



全体のネットワークイメージ図再掲する.

image

まとめ

ニューラルネットワークにおけるフィードフォワードネットワーク関数を定式化した.

この関数はネットワーク上の情報の順伝播(forward propagation)と解釈されることが多く、ディープラーニングの基本になる.

参考