ここでは、実際に TensorFlow などのライブラリを使ってニューラルネットワークのモデルを作成するための数式をまとめました。
以降ニューラルネットワークと言えば、順伝播型ニューラルネットワーク(多層パーセプトロン)のことです。
ここで扱うのは、教師あり機械学習(supervised machine learning)です。教師あり機械学習では、入力データと出力データのペア(訓練データ)を学習します。尚、入力データを特徴量(features)、出力データを教師データ(labels, labeled data)と呼ぶことがあります。
\(L\):層数(第\(1\)層:入力層、第\(L\)層:出力層)
\(n_{l}\):第\(l\)層のユニット数(ノード数)
\(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}}\):入力変数(独立変数、説明変数、特徴量)
\(y_{1},y_{2},\cdot\cdot\cdot,y_{n_{L}}\):出力変数(従属変数、目的変数、教師データ)
\(f\):活性化関数(activation function)
\(F^{(L)}\):\(L\)層ニューラルネットワークのモデル関数(model function)
\(w^{(l)}_{ij}\):第\(l\)層の\(i\)番目のユニットと第\(l+1\)層の\(j\)番目のユニットをリンクする重み(weight)
\(b^{(l)}_{i}\):第\(l+1\)層の\(i\)番目のユニットのバイアス(bias)
\(\boldsymbol{x}=(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}})\)
\(\boldsymbol{y}=(y_{1},y_{2},\cdot\cdot\cdot,y_{n_{L}})\)
\(\boldsymbol{b}^{(l)}=(b^{(l)}_{1},b^{(l)}_{2},\cdot\cdot\cdot,b^{(l)}_{n_{l}})\)
\(W^{(l)}=\Bigl(w^{(l)}_{ij}\Bigr)\)
注)\(\boldsymbol{x}\)、\(\boldsymbol{y}\)、\(\boldsymbol{b}^{(l)}\)は行ベクトル、\(W^{(l)}\)は行列です。
回帰モデルのモデル関数
ニューラルネットワークは3層あれば、隠れ層(中間層)のニューロン(ノード、ユニット)を増やすことで、有限領域でどんな関数でも作り出せることが知られています。これを利用して回帰モデルでは、入力データの関数として出力データを近似します。
注)ほとんどの教科書では、\(W\boldsymbol{x}\) のように重み \(W\) を左側にしますが、TensorFlow の表記に合わせ、以下では \(\boldsymbol{x}W\) のように表記します。
○2層ニューラルネットワーク
\[ \boldsymbol{y}=F^{(2)}(\boldsymbol{x})=\boldsymbol{x}W^{(1)}+\boldsymbol{b}^{(1)} \] \[ y_{j}=F^{(2)}_{j}(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}})=\sum_{i=1}^{n_{1}}x_{i}w^{(1)}_{ij}+b^{(1)}_{j} \]○3層ニューラルネットワーク
\[ \boldsymbol{y}=F^{(3)}(\boldsymbol{x})=f(\boldsymbol{x}W^{(1)}+\boldsymbol{b}^{(1)})W^{(2)}+\boldsymbol{b}^{(2)} \] \[ y_{k}=F^{(3)}_{k}(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}})=\sum_{j=1}^{n_{2}}f\Bigl(\sum_{i=1}^{n_{1}}x_{i}w^{(1)}_{ij}+b^{(1)}_{j}\Bigr)w^{(2)}_{jk}+b^{(2)}_{k} \]○4層ニューラルネットワーク
\[ \boldsymbol{y}=F^{(4)}(\boldsymbol{x})=f(f(\boldsymbol{x}W^{(1)}+\boldsymbol{b}^{(1)})W^{(2)}+\boldsymbol{b}^{(2)})W^{(3)}+\boldsymbol{b}^{(3)} \] \[ y_{l}=F^{(4)}_{l}(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}})=\sum_{k=1}^{n_{3}}f\Bigl(\sum_{j=1}^{n_{2}}f\Bigl(\sum_{i=1}^{n_{1}}x_{i}w^{(1)}_{ij}+b^{(1)}_{j}\Bigr)w^{(2)}_{jk}+b^{(2)}_{k}\Bigr)w^{(3)}_{kl}+b^{(3)}_{l} \]○5層ニューラルネットワーク
\[ \boldsymbol{y}=F^{(5)}(\boldsymbol{x})=f(f(f(\boldsymbol{x}W^{(1)}+\boldsymbol{b}^{(1)})W^{(2)}+\boldsymbol{b}^{(2)})W^{(3)}+\boldsymbol{b}^{(3)})W^{(4)}+\boldsymbol{b}^{(4)} \] \[ y_{m}=F^{(5)}_{m}(x_{1},x_{2},\cdot\cdot\cdot,x_{n_{1}})=\sum_{l=1}^{n_{4}}f\Bigl(\sum_{k=1}^{n_{3}}f\Bigl(\sum_{j=1}^{n_{2}}f\Bigl(\sum_{i=1}^{n_{1}}x_{i}w^{(1)}_{ij}+b^{(1)}_{j}\Bigr)w^{(2)}_{jk}+b^{(2)}_{k}\Bigr)w^{(3)}_{kl}+b^{(3)}_{l}\Bigr)w^{(4)}_{lm}+b^{(4)}_{m} \]6層以上の場合も同様です。
注)回帰モデルの場合、出力層の活性化関数は恒等関数なので、右辺の全体に活性化関数は掛かっていません。
活性化関数(Activation Function)
活性化関数はモデル関数を作る基になる関数です。
○\({\rm{sigmoid}}(x)\):\({\rm{Sigmoid}}\)関数 \[ {\rm{sigmoid}}(x)=\frac{1}{1+e^{-x}}=\frac{1}{2}(\tanh{\frac{x}{2}}+1) \] \[ {\rm{sigmoid}}'(x)={\rm{sigmoid}}(x)\,(1-{\rm{sigmoid}}(x)) \]
○\({\rm{relu}}(x)\):\({\rm{ReLU}}\)関数(\({\rm{Ramp}}\)関数) \[ {\rm{relu}}(x)=\begin{cases}x & x \geqq 0 \\ 0 & x<0\end{cases} \] \[ {\rm{relu}}'(x)=\begin{cases}1 & x>0 \\ 0 & x<0\end{cases} \]
○\({\rm{softplus}}(x)\):\({\rm{Softplus}}\)関数 \[ {\rm{softplus}}(x)=\ln{(e^{x}+1)}=\max{(x,0)}+\ln{(1+e^{-|x|})} \] \[ {\rm{softplus}}'(x)=\frac{1}{1+e^{-x}} \]
○\({\rm{S}}_{i}(\boldsymbol{x})\):\({\rm{Softmax}}\)関数 \[ {\rm{S}}_{i}(\boldsymbol{x})={\rm{S}}_{i}(x_{1},x_{2},\cdot\cdot\cdot,x_{n})=\frac{e^{x_{i}}}{e^{x_{1}}+e^{x_{2}}+\cdot\cdot\cdot+e^{x_{n}}} \] \[ \frac{\partial{\rm{S}}_{i}(\boldsymbol{x})}{\partial x_{j}}={\rm{S}}_{i}(\boldsymbol{x})\,(\delta_{ij}-{\rm{S}}_{j}(\boldsymbol{x})) \] 注)\({\rm{Softmax}}\)関数の入力値をロジット(logit)と呼ぶことがあります。出力値は確率です。\({\rm{Softmax}}\)関数はマルチクラス分類の際に用いられます。
損失関数
回帰モデルでは、損失関数として平均二乗誤差(Mean Squared Error)を用います。尚、損失関数(loss function)のことを誤差関数(error function)と呼ぶことがあります。
平均二乗誤差
\(N\):データ数
\(l_{k}(w,b)\):二乗誤差
\(L(w,b)\):平均二乗誤差
\(x_{k}\):\(k\)番目の入力データ
\(y_{k}\):\(k\)番目の出力データ
\[ l_{k}(w,b)=\sum_{j=1}^{n_{L}}(F_{j}(x_{k,i})-y_{k,j})^{2} \] \[ L(w,b)=\frac{1}{N}\sum_{k=1}^{N}l_{k}(w,b) \]