らんだむな記憶

blogというものを体験してみようか!的なー

詳解ディープラーニング 第2版 (2)

「5.2.7 長期依存性の学習評価」については、以下のような感じでデータセットを確認:

# シグナルの前半
print(x[0, :, 0][:30])
# マスク
print(x[0, :, 1])
indices_of_one = np.where(x[0, :, 1] == 1)
# マスクが 1 の箇所
print(indices_of_one)
# マスクが 1 の箇所のシグナルの抽出と和の計算
print(x[0, :, 0][indices_of_one], '->', np.sum(x[0, :, 0][indices_of_one]))
# 正解
print(t[0])

$X_i \sim U(0,1),\ Y_i \sim U(0,1)$ な独立同分布の時、$E[X_i] = E[Y_i] = 1/2$ で $V[X_i] = V[Y_i] = 1/12$ である。書籍にあるように、常に、$0.5 + 0.5 = 1$ と予測するようになった場合、損失関数 MSELoss の値は平均的には

\begin{align*}
\mathrm{MSELoss} &= E \left[ \frac{1}{n} \left( (X_1 + Y_1 - 1)^2 + (X_2 + Y_2 - 1)^2 + \cdots + (X_n + Y_n - 1)^2 \right) \right] \\
& = E[(X_1 + Y_1 - 1)^2] \\
& = V[X_1] + V[Y_1] + 2E[(X_1 - 0.5)(Y_1 - 0.5)] \\
&= V[X_1] + V[Y_1] + 2E[(X_1 - 0.5)]E[(Y_1 - 0.5)] \\
&= V[X_1] + V[Y_1] = 1/12 + 1/12 = 1/6 = 0.16666666666666666
\end{align*}

なので、暫く当てずっぽうっぽいけど、80 エポック目くらいで急激に減少してくる。K80 上で 500 エポック回すのに 30 分くらいかかった。なかなかかかる・・・。

epoch: 1, loss: 0.351, val_loss: 0.181
epoch: 2, loss: 0.168, val_loss: 0.178
epoch: 3, loss: 0.168, val_loss: 0.178
epoch: 4, loss: 0.168, val_loss: 0.178
epoch: 5, loss: 0.168, val_loss: 0.178
epoch: 6, loss: 0.169, val_loss: 0.178
epoch: 7, loss: 0.168, val_loss: 0.178
epoch: 8, loss: 0.168, val_loss: 0.177
epoch: 9, loss: 0.168, val_loss: 0.177
epoch: 10, loss: 0.168, val_loss: 0.179
...
epoch: 77, loss: 0.166, val_loss: 0.176
epoch: 78, loss: 0.165, val_loss: 0.177
epoch: 79, loss: 0.164, val_loss: 0.170
epoch: 80, loss: 0.131, val_loss: 0.108
epoch: 81, loss: 0.0571, val_loss: 0.027
epoch: 82, loss: 0.0253, val_loss: 0.018
epoch: 83, loss: 0.014, val_loss: 0.010
epoch: 84, loss: 0.00996, val_loss: 0.008
epoch: 85, loss: 0.00719, val_loss: 0.006
epoch: 86, loss: 0.00725, val_loss: 0.006

総当たりで色々試しているうちにそのうちピンと来るようになるって感じなんだろうか・・・。

f:id:derwind:20211128014208j:plain

p.296 まで何となく眺めたということで。GRU と BiRNN は飛ばして次は p.322〜 で seq2seq を見る。