データ集合の拡張(データ拡張)| 機械学習
データ拡張(Data Augmentation)とは、手元の訓練データに加工を施して見た目の異なるデータを人工的に増やすことで、モデルの汎化性能を高める手法です。損失関数に項を追加するわけではないため、正則化の一種としては、損失関数を直接変えない陰的な工夫に分類されます。
- 陽的(明示的)な正則化: 損失関数にペナルティ項(複雑すぎるモデルに罰則を与える項など)を直接書き加えて、モデルをコントロールするアプローチ
- 陰的(間接的)な正則化(データ拡張など): 損失関数はいじらず、入力するデータそのものを変化させることで、結果的にモデルが柔軟性を身につけられるようにするアプローチ
画像のデータ拡張
ノイズ付与
画像のピクセル値に、ランダムなノイズを加える手法です。実際の撮影環境で生じるノイズやブレに対して頑健なモデルにする効果があります。
幾何学的・色調的な変換
| 手法 | 内容 |
|---|---|
| Flip(反転) | 画像を左右または上下に反転させる |
| Erase(消去) | 画像の一部を矩形状にランダムに塗りつぶす、または削除する |
| Crop(切り抜き) | 画像の一部をランダムに切り出す |
| Contrast(コントラスト変更) | 明暗の差(コントラスト)をランダムに変える |
| Brightness(明るさ変更) | 画像全体の明るさをランダムに変える |
| Rotate(回転) | 画像をランダムな角度で回転させる |
これらは組み合わせて使われることが多く、Random Flip・Erase・Crop・Contrast・Brightness・Rotate とまとめて呼ばれます。
RandAugment
上記のような複数の画像変換(回転、コントラスト変更など)の中から、どの変換をどれくらいの強さで適用するかを自動的に探索・決定する手法です。人手でデータ拡張の組み合わせを調整するコストを減らせます。
MixUp
2 枚の画像とそれぞれの正解ラベルを、一定の割合で混ぜ合わせて新しい訓練データを作る手法です。
\[\tilde{x} = \lambda x_i + (1 - \lambda) x_j\] \[\tilde{y} = \lambda y_i + (1 - \lambda) y_j\]- $\lambda$ (ラムダ):混ぜる割合を決めるパラメータ(0 から 1 の値)
- 画像だけでなく、one-hot ベクトルで表した正解ラベルも同じ割合で混ぜ合わせる(ソフトターゲットになる)
- 決定境界を滑らかにし、過学習を抑える効果があるとされる
自然言語のデータ拡張
EDA(Easy Data Augmentation)
シンプルな 4 つの操作を組み合わせて、テキストデータを水増しする手法です。
- 同義語への置き換え(Synonym Replacement):文中の単語を、意味の近い別の単語に置き換える
- ランダム挿入(Random Insertion):文中に、意味の近い単語をランダムな位置に追加する
- ランダム入れ替え(Random Swap):文中の 2 つの単語の位置をランダムに入れ替える
- ランダム削除(Random Deletion):文中の単語を一定の確率でランダムに削除する
いずれも、文の意味を大きく変えないようにしながら、表現にバリエーションを持たせることを目的としています。
MixUp(自然言語での応用)
画像と同様に、2 つの文(の埋め込みベクトルなど)とラベルを一定の割合で混ぜ合わせる手法です。自然言語の場合、単語やトークンをそのまま混ぜるのではなく、埋め込みベクトル(Embedding)の段階で混ぜ合わせることが多い点が画像との違いです。