個人的な正誤表 4章

気付いた所だけ指摘します。

この章は一からソースコードを組み立て、その場面場面で本に書いてある実行コードを試す形となります。そのため、あらかじめオライリーからダウンロードしたソースコードを用いて実行しようとすると所々エラーがでるでしょう。ですので、ちゃんとやりたいのならば、一から本の通りソースコードを作り上げる地味な作業が待っています。

その所々で必要なソースコードはそのうち上げられたらと思います。。。

p.68

英語版で全く語られなかったaddlinkref関数が日本語版では追加されています。英語版とは違う記述もちらほら。

p.69

時間がかかるので、http://kiwitobes.com/db/searchindex.dbから直接とってくるのもあり。ちなみに2009年2月現在、このファイルは26.8MBでした。

p.80

4.6.2からPageRankのお話になるので、クロールなどの実装が面倒で、検索とニューラルネットワークのみ興味があるならここから読むのもありか。

オライリーソースコード持ってきて、最初から実装するのが面倒な人は、ようやく動かせるコードがp.80で実際のPageRankを計算するところからはじまります。

4.7からニューラルネットワークの話

ニューラルネットのお話しですが、厳密には多層パーセプトロンモデル。バックプロパゲーション学習という教師付き学習でネットワークの重みを更新する。バイアスニューロン、学習係数、ニューロンの入出力関数などには触れていないので、厳密には非線形分離に耐えうるネットワークにはなっていない。が、とりあえずの入門としてありか。

p.86

本の記述よりは精度が出るでしょう。以下の実行コードだと
>>for c in mynet.con.execute('select * from wordhidden'): print c
(101, 1, 0.51611700000000005)
(103, 1, 0.51611700000000005)

>> for c in mynet.con.execute('select * from hiddenurl'): print c
(1, 201, 0.10000000000000001)
(1, 202, 0.10000000000000001)
(1, 203, 0.10000000000000001)
こうなった。

p.89

上述したのと一緒で、本では
>>mynet.getresult([wWorld,wBank],[uWorldBank,uRiver,uEarth])
[0.076, 0.076, 0.076]
となっている所は、以下のようになる。
>>mynet.getresult([wWorld,wBank],[uWorldBank,uRiver,uEarth])
[0.076012508375416149, 0.076012508375416149, 0.076012508375416149]

p.91

ここも
>>mynet.getresult([wWorld,wBank],[uWorldBank,uRiver,uEarth])
>>[0.33506324671253318, 0.055127057492088002, 0.055127057492088002]

p.92

ここも
>>mynet.getresult([wWorld,wBank],allurls)
>>[0.86154797717394405, 0.01107121517146442, 0.015725794221216588]

>>mynet.getresult([wRiver,wBank],allurls)
>>[-0.030344006191459796, 0.88298149804489123, 0.005509562270886237]

>>mynet.getresult([wBank],allurls)
>>[0.86540476120703236, -0.00067859116915910554, -0.85191567250806755]

p.90-91について 英語版errataから

ここまで、trainquery関数からはbackPropagate関数が呼ばれでいるのですが、backPropagate関数自体は何も返してしていないですね。

そもそもerrorって変数は使われないので、この行は
error = self.backPropagate(targets)
ではなく
self.backPropagate(targets)
で良い。しかしそうのようにすると、今までの出力値が変わってくるので注意。