連載「定説を実測する」
公開順に読み進められる連載です。
- 「脳とニューラルネットは似ている」を実装で確かめたら、精度は同じままヘブ則の重みだけが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ポイント開いた。
- 中心極限定理は「n=30」で十分? 7つの分布で標本平均のズレを測った
標本サイズ30で正規近似は使えるのか。7種類の分布で標本平均を2万回ずつ作り、歪み・離散性・裾の違いを比較しました。KSの目安と検定の可否を区別し、実務で何を確認すべきかまで解説します。
- 主成分分析で「累積寄与率80%まで残す」を実測したら、捨てた寄与率1.88%の成分だけで精度0.95が出た
PCAの累積寄与率80%を分類データで検証。人工データでは残した成分の精度0.486に対し、捨てた第2主成分だけで0.952。寄与率と予測力の違いを実データとも比較します。
- クイックソートに「並べ替え済みの配列」を食わせたら、比較回数がバブルソートと1回も違わなかった
先頭ピボットのクイックソートを含む8手法を5種類の入力で比較。整列済み2000要素では比較が199万9000回に。比較回数と実行時間、3分割方式とPythonのsortedの違いも測ります。
- じゃんけんのナッシュ均衡は1/3ずつと決まっている。学習させたら均衡から3,050倍遠ざかり、最後は手が完全に読めるようになった
じゃんけんの学習では、各時点の戦略が均衡から離れる一方、時間平均は1/3ずつに近づきました。学習率による違いを測り、均衡の存在と学習の収束を区別します。