データ拡張 (Data Augmentation) を学習中に使い分けるRefined Data Augmentationについて解説しました。
He, Zhuoxun, et al. "Data augmentation revisited: Rethinking the distribution gap between clean and augmented data." arXiv preprint arXiv:1909.09148 (2019).
4. ● 論文
○ タイトル: Data Augmentation Revisited: Rethinking the
Distribution Gap between Clean and Augmented Data
○ 2019年
● 内容
○ データ拡張の新しい戦略であるRefined Data Augmentationを提案
○ 既存のデータ拡張手法のほとんどを改善
○ データ拡張による探索とデータ拡張をしない場合の探索について考
察
論文
今回の動画では、データ拡張とデータの分布を再考した2019年に投稿された論文を解説します。
この論文では、データ拡張の新しい戦略であるRefined Data Augmentationが提案されています。
Refined Data Augmentationでは、学習途中の簡単なデータの切り替えで既存のデータ拡張手法のほとんどを改善することができます。
また、データ拡張によってどのようにパラメータ探索が変わるかを、訓練誤差の分布とともに論文内で説明がされています。
それでは、さっそく解説していきます。
従来のデータ拡張では、2つの問題があります。
1つは元データとデータ拡張により得られたデータの分布の差がモデルの収束を阻害するということ。
もう1つが、データ拡張によって、相対的に影響が小さな特徴が無視されてしまう可能性があるということです。
これらの問題に対応するために、この論文ではRefined Data Augmentationという手法が提案されています。
Refined Data Augmentationでは、学習を2つのステージに分けています。
まず学習の前半では元データとデータ拡張によって得られたデータを使って学習します。
そして、学習がある程度進んだ段階で、データ拡張によって得られたデータを取り除き、元のデータだけで学習をします。
学習の終盤で元データのみを使うことにより、元データに含まれる影響の小さな特徴をモデルの調整の最終段階で反映していくイメージです。
シンプルな戦略なので、非常に簡単ですね。
では、さっそくですが、実際にMixupとAutoAugmentという2つのデータ拡張の手法に対して、Refined Data Augmentationを適用した結果を紹介します。
ここにある図が訓練誤差と汎化誤差の推移を表しています。
縦軸が誤差で、横軸がEpoch数となります。
赤い線が訓練誤差になっており、赤の実線が元の学習データの訓練誤差、赤の破線がデータ拡張によって得られた学習データの訓練誤差を表しています。
データ拡張によって得られた学習データの訓練誤差が元の学習データの訓練誤差よりも誤差が大きいことが分かります。
そして、緑の線が汎化誤差を表しています。
緑の線の値が小さくなればなるほど、よい機械学習のモデルと言うことができます。
400epochにある黒い破線は、Refined data augmentationによるデータの切り替えのタイミングを表しており、このタイミングでデータ拡張によって得られたデータを学習から取り除いています。
そのため、赤い破線のデータ拡張によって得られた学習データの訓練誤差は400epoch以降はなくなっています。
この図を見ると、黒い破線のデータの切替のタイミングで、汎化誤差を表す緑の線が400epoch以降で下がっていることがわかります。
つまり、refined data augmentationによる戦略の変更でパフォーマンスが改善したということですね。
Refined data augmentationが有効そうであるということがわかったところで、そもそもデータ拡張がなんの役に立っているかを解説をします。
データ拡張は、データの特徴の平均化と分散の正則化の役割を持ちます。
左下の猫の画像から拡張された画像のように、データ拡張では判別した物体の特徴を残すようにデータを加工します。
つまり、この例でいうと、猫だと判別できるような画像になるようにデータ拡張をしています。
言い換えると、猫が判別できるというような大まかな特徴だけ保存し、猫の判別に必要のない他の小さな特徴を取り除いたデータを作成するということです。
データ拡張では、判別したいものが判別できないものとなってしまっては意味がないため、事前知識による制約が必要となります。
例えば、数字データの場合は、水平反転すると全く別の物となるという事前知識があるため、水平反転を行いません。
まとめると、データ拡張は、事前知識を用いてデータを加工して増やし、それを学習に活かすことで、大まかな特徴を抽出するという役割を持っています。
冒頭の説明で、データ拡張によって訓練誤差が大きくなるという話がありましたが、実際の訓練誤差の分布を等高線で表すと下の図のようなものとなります。
左の図がデータ拡張なしの訓練誤差の分布で、右の図がデータ拡張ありの訓練誤差の分布です。
データ拡張のありなしで、訓練誤差が変わっていることが分かると思います。
左のデータ拡張なしでは、局所最適解が複数あるのに対して、右のデータ拡張ありでは局所最適の数が減っており、大域的に最適な探索が容易になっていることが分かります。
Refined Data Augmentationでは、右の図のデータ拡張の分布で大域的な探索を行った後、左図のデータ拡張なしの分布で局所的な探索を行っているということになります。
次に、論文にある実験結果の1つを紹介します。
右にある表が実験結果になっていて、左の2列が通常のデータ拡張の正解率、右の2列が今回提案されているRefined data augmentationでの正解率を表しています。
左2列と右2列を比較して、正解率が高かった部分が太字となっており、正解率がほとんど変わらなかった部分は、太字になっていません。
この表を見て分かるように、右2列のRefined data augmentationがほとんどの場合で正解率が向上しています。
この結果より、多くの場合で、データ拡張を途中でなくすことに意味があると言えそうですね。
この他にも論文では、交差エントロピー誤差の調査やepoch数とオーバーフィッティングの関係の調査、物体検知における有効性を調べた実験なども紹介されています。
興味のある方は、元の論文をぜひ読んでみてください。
Refined data augmentationはシンプルな戦略であるけれど、既存のアルゴリズムを改善して良い精度が出ているので、今後の拡張が期待できそうですね。
まとめをします。
データ拡張とは、十分なデータがないときにオリジナルのデータから加工した人口データを作り出す手法で、画像認識の分野などで多く使われています。
データ拡張は、データの特徴の平均かと分散の正則化に対応しており、データの大まかな特徴を捉えることに貢献しています。
そして、今回の動画のメインテーマであるデータ拡張の新しい戦略であるRefined Data Augmentationでは、学習の終盤でデータ拡張によって得られたデータを取り除いて学習をします。
Refined Data Augmentationでは、最初に大域的な探索、最後に局所的な探索を行うことで、マイナーな特徴をモデルに組み込むことが可能になります。
Refined Data Augmentationは、既存のデータ拡張手法に簡単に組み込むことができ、多くの場合で精度を上げることができたということを紹介しました。
データ拡張の世界はまだまだ発展中なので、これからも面白そうな手法が出たら解説していきたいと思います。