はじめに
- ディープラーニングの不思議な性質の一つに、「ランダムなラベルでも訓練データをほぼ完全に覚えられる」というものがあります。これは Zhang et al. の Understanding deep learning requires rethinking generalization や、Arpit et al. の A Closer Look at Memorization in Deep Networks で議論されている有名な観察です。
- 通常、CIFAR-10 のような画像分類では、モデルは画像の特徴とクラスの対応関係を学んでいると考えます。しかし、もしラベルをランダムに付け替えても train error がほぼゼロになるなら、モデルは少なくとも訓練データに対しては「意味のある規則」だけでなく「個別サンプルの記憶」もできていることになります。
- この記事では、CIFAR-10 を使ってこの現象を小さく追試します。WideResNet のサイズをいくつか変え、正しいラベルとランダムラベルのそれぞれについて、train_error < 0.01 に到達するまでに何 epoch 必要かを比較しました。
- 今回の実験では、データ拡張は使わず、学習後の train set 全体に対する誤分類率を train_error として測っています。なお、現時点の結果は weight decay を入れた条件で得られたものなので、「完全に正則化なしの記憶実験」ではなく、「通常の CIFAR-10 学習に近い設定で、ランダムラベルをどれくらい覚えられるか」を見る実験として解釈します
実験
データセットには CIFAR-10 の training split を使った。CIFAR-10 は 32x32 ピクセルのカラー画像 50,000 枚からなる 10 クラス分類データセットである。今回の目的は汎化性能ではなく、訓練データそのものをどれだけ速く fitting できるかを見ることなので、test split は使わない。
比較したラベル条件は 2 つである。
| 条件 | 内容 |
|---|---|
| true labels | CIFAR-10 に元から付いている正しいラベル |
| random labels | 各 training sample に対して、0 から 9 のラベルを一様ランダムに割り当てたもの |
random labels は epoch ごとに変えるのではなく、実験開始時に一度だけ生成して固定した。つまり、同じ画像 index には学習中ずっと同じ random label が対応する。これは「毎回ノイズを加える」実験ではなく、「意味のない固定ラベルを記憶できるか」を見るためである。
モデルには CIFAR 用の WideResNet を使った。モデルサイズの影響を見るため、depth と widen factor を変えた複数の構成を比較した。
| model | depth | widen factor | parameters |
|---|---|---|---|
| WRN-10x1 | 10 | 1 | 77,850 |
| WRN-10x2 | 10 | 2 | 303,706 |
| WRN-16x1 | 16 | 1 | 175,066 |
| WRN-16x2 | 16 | 2 | 691,674 |
| WRN-28x2 | 28 | 2 | 1,467,610 |
| WRN-28x4 | 28 | 4 | 5,849,050 |
学習には SGD を使った。momentum は 0.9、初期 learning rate は 0.1、learning rate schedule は cosine decay とした。batch size は 512、評価時の batch size は 4096 とした。epoch の上限は 200 に設定し、train error が 0.01 を下回った時点でその条件の学習を打ち切った。
| 項目 | 値 |
|---|---|
| optimizer | SGD |
| momentum | 0.9 |
| initial learning rate | 0.1 |
| scheduler | cosine decay |
| batch size | 512 |
| eval batch size | 4096 |
| max epochs | 200 |
| stopping criterion | train_error < 0.01 |
| seed | 0 |
| random label seed | 12345 |
train error は、各 epoch の終了後に train split 全体を評価モードで forward して計算した。学習中の mini-batch 上で逐次集計した誤分類率も batch_error としてログに残しているが、停止判定や結果の比較には使っていない。この記事で主に扱う指標は train_error である。
今回の主実験では、データ拡張は使っていない。random crop や horizontal flip を入れると、1 つの画像に対して複数の変形画像が同じ random label を持つことになり、「固定された training samples を記憶できるか」という問いから少し外れるためである。
一方で、weight decay は 5e-4 のまま実行した。これは通常の CIFAR-10 学習でよく使われる設定に近いが、完全に正則化なしの memorization 実験ではない。したがって、今回の結果は「weight decay ありの条件で、正しいラベルとランダムラベルの fitting 速度がどう違うか」として読むのが正確である。正則化なしの挙動を確認するには、別途 weight_decay=0 の実験を走らせる必要がある。
結果
| モデル | パラメータ数 | true label epochs | true label train error | random label epochs | random label train error | random / true |
|---|---|---|---|---|---|---|
| WRN-10x1 | 77,850 | 134 | 0.00698 | 未到達 | 0.19584 | - |
| WRN-10x2 | 303,706 | 80 | 0.00008 | 125 | 0.00916 | 1.56x |
| WRN-16x1 | 175,066 | 93 | 0.00812 | 147 | 0.00372 | 1.58x |
| WRN-16x2 | 691,674 | 71 | 0.00886 | 110 | 0.00330 | 1.55x |
| WRN-28x2 | 1,467,610 | 92 | 0.00310 | 109 | 0.00098 | 1.18x |
| WRN-28x4 | 5,849,050 | 88 | 0.00864 | 91 | 0.00880 | 1.03x |
期待通りの結果となりました。
- 正しいラベルを使ったほうが収束が速い
- ランダムラベルでモデルが極端に小さい場合、収束しなかった
追記
shuffled pixels, random pixelsの結果も追加
| モデル | パラメータ数 | true label epochs | true label train error | random label epochs | random label train error | shuffled pixels epochs | shuffled pixels train error | random pixels epochs | random pixels train error |
|---|---|---|---|---|---|---|---|---|---|
| WRN-10x1 | 77,850 | 134 | 0.00698 | 未到達 | 0.19584 | 161 | 0.00876 | 未到達 | 0.13390 |
| WRN-10x2 | 303,706 | 80 | 0.00008 | 125 | 0.00916 | 96 | 0.00194 | 118 | 0.00582 |
| WRN-16x1 | 175,066 | 93 | 0.00812 | 147 | 0.00372 | 119 | 0.00022 | 140 | 0.00062 |
| WRN-16x2 | 691,674 | 71 | 0.00886 | 110 | 0.00330 | 98 | 0.00774 | 107 | 0.00306 |
| WRN-28x2 | 1,467,610 | 92 | 0.00310 | 109 | 0.00098 | 104 | 0.00080 | 103 | 0.00374 |
| WRN-28x4 | 5,849,050 | 88 | 0.00864 | 91 | 0.00880 | 101 | 0.00028 | 86 | 0.00992 |