連載「定説を実測する」
公開順に読み進められる連載です。
- 「脳とニューラルネットは似ている」を実装で確かめたら、精度は同じままヘブ則の重みだけが2万3000倍に発散した
ニューラルネットワークの起源であるパーセプトロンと、生物学的なヘブの学習則を実際にPythonで実装・比較し、「脳と似ている」という話がどこまで本当なのかを、重みの発散やXOR問題を通して確かめてみた
- Dropoutは「暗黙のアンサンブル」なのか。同じパラメータ予算で本物のアンサンブルと殴り合わせたら、相関係数0.13だった
「ドロップアウトは暗黙のアンサンブル」という通説を検証した記録。明示的な小規模ネットワークのアンサンブルとMCドロップアウトを同条件で比較すると、予測分散の相関はr=0.13しかなかった。
- 学習率のwarmupは本当に訓練を安定させるのか。崩壊寸前のLRで20シード×3条件、実際に数えてみた
学習率のウォームアップは本当に必要かをアブレーション実験で検証した記録。不安定な高学習率でwarmupあり・なしを複数seedで比較したところ、崩壊率は10/12/11とほとんど変わらなかった。
- アンサンブルの「多様性」は本当に効くのか。seed違いの浅い多様性とbagging+幅の多様性を対決させたら不一致率が3.1倍だった
同じtwo-moons・同じMLP・総パラメータ330で固定し、seedだけ違う浅い多様性とbootstrap+幅を変えた本物の多様性を8回ずつ比較した。精度ゲインはAがほぼゼロ、Bは+0.0091で8試行全勝(p=0.0044)、予測不一致率もBが3.1倍だった。
- 「AdaBoostは過学習しない」は本当か。ラベルノイズ10%で1,000回回したらテスト誤差が2倍になった
「AdaBoostは過学習しにくい」という通説をnumpy自作AdaBoostで実測検証した。クリーンなラベルでは1,000回回しても壊れないのに、ノイズ10%でテスト誤差は最小値の2倍に悪化。全体の10%の誤ラベル点がサンプル総重みの39%を占めるまでを追った。
- 宝くじ仮説の枝刈りをnumpyで自前実装したら、当たりくじの優位はスパース率98%から先だけだった(99%で62%対48%)
sklearn同梱の8×8手書き数字とnumpy自前実装の2層MLPで、反復的マグニチュード枝刈りの「当たりくじ」「ランダム再初期化」「ランダムマスク」を5シードで比較。スパース率95%までは差が1〜2ポイントしかなく、初期値の優位は98%以降で一気に11〜14ポイント開いた。
- 「標本サイズ30あれば正規分布とみなしてよい」を7つの分布で実測したら、合格したのは1つだけだった
中心極限定理の目安として広く使われる「n≥30」を検証した。7種類の母集団から標本平均を2万回ずつ作り、正規分布とのズレをKS統計量で測る。n=30で実用基準を満たしたのは一様分布(KS=0.004)のみで、指数分布0.027、対数正規0.061、まれな事象p=0.01は0.449。必要なnは母集団の歪度の2乗に比例し、実測は理論値γ/√nにきれいに乗った。コーシー分布はn=1000でもKS=0.083から動かない。
- 主成分分析で「累積寄与率80%まで残す」を実測したら、捨てた寄与率1.88%の成分だけで精度0.95が出た
PCAの打ち切り基準として広く使われる累積寄与率80%を検証した。相関の強い20次元データでは80%がk=1になり、分類精度は0.486(当てずっぽう)まで落ちる。捨てられた第2主成分は寄与率1.88%で、それ1本だけで0.952。一方、手書き数字と乳がんの実データでは80%はむしろ余裕があり、精度はもっと手前で頭打ちになる。標準化を省くと第1主成分の寄与率が98.2%になり、その正体は面積の列だった。
- クイックソートに「並べ替え済みの配列」を食わせたら、比較回数がバブルソートと1回も違わなかった
8種類のソートアルゴリズムを5種類の入力で回し、比較回数を数えた。先頭をピボットにするクイックソートは、ランダムな2000個で26,419回なのに、並べ替え済みの2000個では1,999,000回——バブルソートと完全に同数で、n(n-1)/2にぴたり一致した。ランダム入力で比較回数が最も少なかったのはマージソート(19,390)でクイックソートは2位。重複の多い入力では3分割方式が20倍速い。Pythonのsorted()は並べ替え済みで9.4倍速くなる。
- じゃんけんのナッシュ均衡は1/3ずつと決まっている。学習させたら均衡から3,050倍遠ざかり、最後は手が完全に読めるようになった
「合理的に学習すればナッシュ均衡に落ち着く」を、じゃんけん・囚人のジレンマ・協調ゲームの3つで実測した。じゃんけんでは学習の刻み幅0.2で均衡からの隔たりが3,050倍に広がり、200,000手目には確率1.000の一手を出すだけになる。読まれたときの損は理論上の最大2.000。ただし同じ手の時間平均は(0.3320, 0.3344, 0.3336)で均衡に収束していた。刻み幅を0に近づけると離れなくなるが、代わりに近づきもしない。