AI 事始め18:CS231n:Module 1: Neural Networksの例題 おまけ メモ2
Putting it together: Minimal Neural Network Case Study¶
minimal 2D toy data example : see https://cs231n.github.io/neural-networks-case-study/¶
おまけ2 Neural Networkの解釈メモ¶
import numpy as np
import matplotlib.pyplot as plt
N = 100 # number of points per class
D = 2 # dimensionality
K = 3 # number of classes
# initialize parameters randomly
h = 100 # size of hidden layer
W = 0.01 * np.random.randn(D,h)
b = np.zeros((1,h))
W2 = 0.01 * np.random.randn(h,K)
b2 = np.zeros((1,K))
N = num_examples つまり、N = 300 として記述する。
バイアスベクトル \( \quad b2 = (b2_1,b2_2,b2_3) \quad b = (b_1,b_2,\ldots ,b_h) \)は省略して、カタチだけ記述してみる。
$$\quad\quad データ配列 \quad\quad\quad\quad 重み行列 \quad\quad\quad\quad\quad\quad hidden\_layer行列 \quad\quad\quad\quad$$
$$\longrightarrow d\quad\quad\quad\quad\quad\longrightarrow j\quad\quad\quad\quad\quad\quad\quad\quad\longrightarrow j \quad\quad\quad\quad\quad$$
$$ \Bigg\downarrow i \pmatrix{ x_{11} & x_{12} \cr x_{21} & x_{22} \cr x_{31} & x_{32} \cr \vdots & \vdots \cr x_{N1} & x_{N2} \cr }\pmatrix{ W_{11} & W_{12} & \ldots & W_{1,100} \cr W_{21} & W_{22} & \ldots & W_{1,100} \cr }=\pmatrix{ H_{11} & H_{12} & \ldots & H_{1,100} \cr H_{21} & H_{22} & \ldots & H_{2,100} \cr H_{31} & H_{32} & \ldots & H_{3,100} \cr \vdots & \vdots & \ddots & \vdots \cr H_{N1} & H_{N2} & \ldots & H_{N,100}\cr}$$
$$\quad\quad hidden\_layer配列 \quad\quad\quad\quad 重み行列 \quad\quad\quad\quad\quad\quad スコア行列 \quad\quad\quad\quad 解答配列$$ $$\longrightarrow d\quad\quad\quad\quad\quad\longrightarrow j\quad\quad\quad\quad\quad\quad\quad\quad\longrightarrow j \quad\quad\quad\quad\quad$$
$$ \Bigg\downarrow i\pmatrix{ H_{11} & H_{12} & \ldots & H_{1,100} \cr H_{21} & H_{22} & \ldots & H_{2,100} \cr H_{31} & H_{32} & \ldots & H_{3,100} \cr \vdots & \vdots & \ddots & \vdots \cr H_{N1} & H_{N2} & \ldots & H_{N,100}\cr}\pmatrix{ W2_{11} & W2_{12} & W2_{13} \cr W2_{21} & W2_{22} & W2_{23} \cr \vdots & \vdots& \vdots \cr W2_{100,1} & W2_{100,2} & W2_{100,3} }=\pmatrix{ f_{11} & f_{12} & f_{13} \cr f_{21} & f_{22} & f_{23} \cr f_{31} & f_{32} & f_{33} \cr \vdots & \vdots & \vdots \cr f_{N1} & f_{N2} & f_{N3}\cr}\quad,,,\quad\pmatrix{y_{1}\cr y_{2}\cr y_{3}\cr \vdots \cr y_{N}\cr}$$
下記の理解が難しいので、直訳してみる。
ReLUの非線形性をバックプロパゲーションする必要があります。これは、後方伝搬中のReLUが実質的にスイッチであるため、容易であることが分かります。¶
\( r = max(0,x) \)であるから、その微分は\( \quad\quad\quad \frac{dr}{dx} = 1 (x>0) \)となります。
チェーンルールと組み合わせると、フォワードパスでのReLUユニットは、入力が0より大きい場合にはグラジエントパスを通り、変更せずに通過しますが、入力がゼロ未満の場合には出力を殺します。したがって、ReLUを単に以下のように後方伝搬することができます。
dhidden[hidden_layer <= 0] = 0 この記述がわかりません。
dhidden.shapeとhidden_layer.shapeは同じです。(300L, 100L)
ar1 = np.array([[-1.1],[0],[1.1]])
ar2 = np.array([[5],[6],[7]])
ar2[ar1 <=0] = 0
ar2
とても勉強になりました。ただし、numpy docsのどこに書かれているのか見つけることができませんでした。