シグモイドニューロンにおけるone-hot表現からビットワイズ表現への変換

4/8 自主ゼミ用

参照

テキスト

nnadl-ja.github.io 解説集 github.com

問題

one-hot表現層では,正しい出力が0.99以上で活性化し,誤った出力が0.01以下で活性化する.このとき,ビットワイズ表現層の重みとバイアスを計算せよ.

解説

ビットワイズ表現とone-hot表現の対応

①ビットワイズ表現の2^{3}の位が1であるのは,one-hot表現(10進数)が8,9のときのみである.
②ビットワイズ表現の2^{2}の位が1であるのは,one-hot表現(10進数)が4,5,6,7のときのみである.
③ビットワイズ表現の2^{1}の位が1であるのは,one-hot表現(10進数)が2,3のときのみである.
④ビットワイズ表現の2^{0}の位が1であるのは,one-hot表現(10進数)が1,3,5,7,9のときのみ. f:id:python_beginner:20210408203456p:plain

各ビットワイズ表現層の重みベクトル

\boldsymbol{w_1}=(0,0,0,0,0,0,0,0,1,1)^{T}
\boldsymbol{w_2}=(0,0,0,0,1,1,1,1,0,0)^{T}
\boldsymbol{w_3}=(0,0,1,1,0,0,0,0,0,0)^{T}
\boldsymbol{w_4}=(0,1,0,1,0,1,0,1,0,1)^{T}
この定数倍なら,バイアスとのかみ合わせでうまくいきそうである.

具体例の考察

ビットワイズ表現層の2^{3}のシグモイドニューロンの重みベクトルとバイアスについて考える.
ⅰ.前の層であるone-hot表現層が正しい出力として判定し,活性化したとき,\sigma(\boldsymbol{w_1}\boldsymbol{x}+b)\approx\sigma (1+b)\approx 1となってほしい.
ⅱ.前の層であるone-hot表現層が正しい出力として判定し,活性化したとき,\sigma(\boldsymbol{w_1}\boldsymbol{x}+b)\approx\sigma (0+b)\approx\sigma (b)\approx 0となってほしい.
ここで,仮にb=-0.5とすると,\sigma(1+b)=0.6224...,\sigma(b)=0.3775...となり,それなりに求めている結果に近い.ここから,重み,ベクトルに対して定数倍して調節することを考える.
問題文から,求める精度\alphaは0.01であるので,


1-\alpha\leq\sigma(\tilde{w}(1-\alpha+b)) \\
\sigma(\tilde{w}(2\alpha +b))\leq\alpha

(2\alphaであるのは,重みベクトルのビットが2本立っているから)
これを計算すると,\tilde{w}\geq 9.58となる.

条件を満たす重みベクトルとバイアスの考察

一般化して考えると,重みベクトルで立っているビットの本数がn本のとき(w_2ならn=4)


1-\alpha\leq\sigma(\tilde{w}(1-\alpha+b)) \\
\sigma(\tilde{w}(n\alpha +b))\leq\alpha

nの取りうる値を考えて,\tilde{w}\geq 11.49となる.求める答えは
すべてのビットワイズ表現層共通でb=12\times -0.5=-6,
\boldsymbol{w_1}=12(0,0,0,0,0,0,0,0,1,1)^{T}
\boldsymbol{w_2}=12(0,0,0,0,1,1,1,1,0,0)^{T}
\boldsymbol{w_3}=12(0,0,1,1,0,0,0,0,0,0)^{T}
\boldsymbol{w_4}=12(0,1,0,1,0,1,0,1,0,1)^{T}