シグモイドニューロンにおける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}

WSL2上でVScodeが立ち上がらない場合の解決策

症状

WSL2上で

$code .

とすると

Resolving update.code.visualstudio.com (update.code.visualstudio.com)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘update.code.visualstudio.com’                                                   
ERROR: Failed to download https://update.code.visualstudio.com/commit:f30a9b73e8ffc278e71575118b6bf568f04587c8/server-linux-x64/stable to /home/USER1/.vscode-server/bin/f30a9b73e8ffc278e71575118b6bf568f04587c8-1615290693.tar.gz

というエラーがでます.DNS名前解決が出来ていない,ということらしいです.

解決策


そこで,リソルバの設定が記述されてるresolv.confを見ます.

$ cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.17.80.225

この172.17.80.225という見慣れないIPアドレスがありますが,これはWSL2の仮想DNSサーバらしいです.このサーバがうまく名前解決してくれないことがあるらしいです.
そこでGoogle Public DNSを常時リソルバに設定することで,解決します.つまりnameserverのIPアドレスを8.8.8.8にします.その手順は以下のサイトを参考にしました.

qiita.com

aptとsnapの違い,使い分け

APT

Advanced Packaging Toolの略称で,ソフトウェアのインストールとアンインストール(削除)を自動的に行ない、ソフトウェアの管理を簡単に行えるようにするための仕組みの1つ.aptはAPTのフロントエンド.

snap

コンテナ技術を利用して依存関係のあるパッケージをまとめてインストールしてくれる.aptに比べて重たい,容量を食う,コンテナが使えないソフトウェア(低レイヤ?)はそもそも使えない,などのデメリットがあるが,依存関係を考えなくていいから楽.