Osomaki67のブログ

個人的な備忘録兼日記にしたいと思います。

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の解釈メモ

In [4]:
import numpy as np
import matplotlib.pyplot as plt
N = 100 # number of points per class
D = 2   # dimensionality
K = 3   # number of classes
In [5]:
# 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)

In [11]:
ar1 = np.array([[-1.1],[0],[1.1]])
ar2 = np.array([[5],[6],[7]])
ar2[ar1 <=0] = 0
ar2
Out[11]:
array([[0],
       [0],
       [7]])
 

とても勉強になりました。ただし、numpy docsのどこに書かれているのか見つけることができませんでした。