とうとうこれを堂々と使うことができます
JDLA E資格 2021#1 取得しました
喜びとともに忘れないうちに試験の振り返り第2段
Pythonコード問題は、基本的に穴埋めなので何がやりたいかを理解していれば時間さえかければ答えにたどり着くことはできるわけですが、試験時間もそんなに余裕があるものではないので公式の丸暗記と一緒で、時間短縮には結構大切かも
python コード
順伝播と誤差逆伝播
基本中の基本、コードを書いてると自然と覚えてるもんですが(デバッグもできるし)、いざ4択になると転置とかいるっけ?とか混乱するかも
アフィン変換 順伝播
y = np.dot(x, w) + b
アフィン変換 誤差逆伝播
dx = np.dot(dout, w.T)
dw = np.dot(x.T, dout)
db = np.sum(dout, axis=0)
活性化関数の勾配
シグモイドの勾配
dout = dout * (1.0 - out) * out
dout = (1.0 - y**2)
ReLUの勾配
順伝播で「0」にした部分を覚えておいて、0にする
dout[relu_mask] = 0
損失関数(コスト関数)の勾配
平均二乗誤差の勾配
d = -2 * (t - y) # t: 正解データ、y: 予測データ
交差エントロピーの勾配
delta = 1e-8
dout = -np.mean(t * np.log(y + delta))
交差エントロピー with ソフトマックス
dout = y - t
最適化関数
SDG
モーメント
ネストロフのモーメント
AdaGrad
RMSprop
Adam
バッチノーマライゼーション
これが結構有用で、標準偏差を求める式も一緒に頭に叩き込めます
mu = np.mean(x, axis=0) #平均 xc = x - mu # 今回のミニバッチの平均との差分 var = np.mean(xc**2, axis=0) # 分散 std = np.sqrt(var + 10e-7) # 今回のミニバッチの標準偏差 xn = xc / std # 正規化
CNN の im2col
これは 畳み込み処理の頻出問題のようなので、覚えておいて損はない
for y in range(filter_h): y_max = y + stride*out_h for x in range(filter_w): x_max = x + stride*out_w col[:, :, y, x, :, :] = img[:,:, y:y_max:stride, x:x_max:stride]
特に重要なのはココ
col[:, :, y, x, :, :] = img[:,:, y:y_max:stride, x:x_max:stride]
必要なのは、shape がどうなっているかを意識しておけば、im2col かかわる応用問題にも対応できるようになります
N:バッチサイズ
Ch:入力チャネル
H, W:入力高さ、 横幅
out_H, out_W:出力高さ、横幅
(N, Ch, H, W) ➔ (N*out_H*out_W, C*H*W)
LSTMの重み計算
LSTM覚えておけば、GRUも簡単に連想できます
特徴は、各ゲート分の重みをいっぺんに計算しておいて、各ゲート用にスライスして取り出すところになります
A = np.dot(h_prev, wh) + np.dot(x, wx) + b # 各ゲート用の[N,4H] まとめて計算 # slice f = sigmoid(A[:, :H]) # 忘却ゲート [N,H] i = sigmoid(A[:, 2*H:3*H]) # 入力ゲート [N,H] g = np.tanh(A[:, H:2*H]) o = sigmoid(A[:, 3*H:]) # 出力ゲート [N,H]
おわりに
これからは実践活用のAI構築をやっていこう
KPS へ導入すっぞ!