mao9o9の技術メモ

個人的に興味のある分野についての技術メモです。

conv層のバイアスあり・なしの比較

はじめに

[1]を読むとバッチノルム層がある場合、畳み込み層のバイアスは必要ないっぽい?

なので、前回のプログラムを修正してResnet-RSのみバイアスあり・なしで実行してみました。

あと、細々したところも修正...


Githubに載せたコードも修正しました。

github.com

github.com

Batch Norm [2]

各層への入力はその前の入力に依存しているため、その入力のばらつきに偏りがある場合、層が深くなると小さな誤差が積み重なっていき目的関数が最小に達しないという問題がある。これを、入力のばらつきを標準化して同じスケールの整えることで、問題解決を図る手法。

(解釈がおかしければご指摘いただければ幸いです。)

実装環境

前回と同様

実験条件

畳み込み層のバイアス有り、無しの二通り。

他、前回と同様。

結果

ネットワークの深さは50層とし、50 epochで確かめた。

f:id:mao9o9:20220128215538p:plain:w600
図1 Resnet-RSの損失と精度

実線はバイアスあり、点線はバイアスなしである。精度は式(1)に示す評価データにおける正解率である。

 \displaystyle
\rm{Accuracy} = \frac{\rm{TP + NF}}{\rm{TP + NP + TF + NF}} \ \ \ \ (1)


畳み込み層のバイアスの有無で違いは見られなかった。結局バッチノルム層で標準化されるから畳み込み層のバイアスの有無は関係ないのかな。

参考

[1] Why does the resnet model given by pytorch omit biases from the convolutional layer?

[2] S. loffe, et.al, "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift", 2015