前の章では、画像を切り取ったり、回転させたり、明るさを変えたりするような、比較的わかりやすいデータ拡張手法を見てきました。
でも研究が進むにつれて、人々はこう考えるようになりました。
少し向きを変えるだけでなく、一部を隠したり、複数のデータを混ぜたりしたらどうだろう。
そうして生まれてきたのが、ここで扱う発展的なデータ拡張手法です。
これらは少し大胆に見えるかもしれません。でも目指しているのは同じです。
モデルが表面的な見え方に振り回されず、本質的な特徴をつかめるようにすること……。
では、ひとつずつ見ていきましょう。
Cutout
Cutoutは、画像の一部を四角く隠してしまう方法です。
たとえば猫の写真なら、
・顔の一部を隠す
・体の一部を隠す
・背景の一部を隠す
といったことをします。
最初に見ると、大事な部分を隠してしまって大丈夫なの?と思うかもしれません。
でも、ここに意味があります。
もしモデルが、「猫のひげ」だけを手がかりにして猫を判断していたら、そこが隠れた途端に弱くなってしまいますよね。
Cutoutを使うと、モデルは、一部分が見えなくても、残りの情報から全体を判断しようと学びやすくなります。
絵の練習帳でいえば、先生が見本の絵の一部を紙で隠して、「見えているところだけで、何の絵か考えてみよう」と練習させるようなものです。
Random Erasing
Random Erasingも、画像の一部を消す方法です。
考え方はCutoutとよく似ています。
違いは、消す場所や大きさをランダムに決めることです。
つまり、毎回決まった場所を隠すのではなく、
・今回は左上
・次回は中央
・その次は少し大きめに
というふうに、消し方が変わります。
これによってモデルは、特定の位置に頼りすぎず、どこが欠けても、残った情報から判断する力を身につけやすくなります。
Cutoutが「一部を隠す」という発想の代表例だとすれば、Random Erasingは、それを柔軟に、ランダムにした方法だと考えるとわかりやすいです。
Mixup
ここから少し発想が変わります。
Mixupは、二つの画像を混ぜて、そのラベルも混ぜる方法です。
たとえば、
・猫の画像
・犬の画像
があったとします。
Mixupでは、この二つを少しずつ重ね合わせて、
ラベルも
・猫 70%
・犬 30%
のように、やわらかく混ぜます。
これは、絵の具を少し混ぜ合わせる感じに近いです。
最初は少し不思議に思えるかもしれません。
でもこの方法には意味があります。
モデルが「これは絶対に猫」「これは絶対に犬」と極端に覚えすぎるのを防ぎ、特徴のあいだをなめらかに学ぶ助けになります。
つまりMixupは、データどうしの境界をやわらかくしながら、モデルにより滑らかな理解を促す方法なのです。
CutMix
CutMixは、MixupとCutoutの発想を合わせたような方法です。
たとえば、
・猫の画像の一部を切り取って
・犬の画像の中に貼る
といったことをします。
そしてラベルも、貼りつけた面積に応じて混ぜます。
たとえば画像の4分の1が犬で、残りが猫なら、ラベルもそれに応じて混ぜるイメージです。
これは、コラージュに少し似ています。一枚の絵の中に、別の絵の一部を貼り込む感じです。
CutMixのよいところは、Mixupのように全体をぼんやり混ぜるのではなく、どこにどんな特徴があるかを残しながら混ぜられることです。
そのためモデルは、部分的な特徴と全体の判断の両方を、より柔軟に学びやすくなります。
RandAugment
ここまで見てきた方法は、それぞれ「この拡張を使う」という形でした。
でも実際には、
・回転をどれくらいかけるか
・明るさをどれくらい変えるか
・どの手法を何個組み合わせるか
といった設定を考えるのが大変です。
そこで出てきたのが、RandAugmentです。
RandAugmentは、たくさんある拡張手法の中から、いくつかをランダムに選んで適用するという発想の方法です。
たとえば、
・今回は回転+明るさ変更
・次回は切り取り+コントラスト変更
・その次はノイズ+反転
というふうに、組み合わせを変えながら学習させます。
これは、絵の練習帳で先生が「今日は少し傾けて、少し暗くして見てみよう」「次は切り取ってから左右反転してみよう」と、その日の課題をランダムに出すようなものです。
RandAugmentのよいところは、細かな設定を一つひとつ手で調整しなくても、いろいろな拡張をまとめて試しやすいことです。
paraphrasing
ここまでは主に画像データの話でしたが、データ拡張は文章でも行われます。
その代表例の一つが、paraphrasing(パラフレージング)、つまり言い換えです。
たとえば、
「今日はとても寒い」
「今日はかなり冷え込んでいる」
は、表現は少し違っても、近い意味を持っていますよね。
文章データでは、このように意味をなるべく保ったまま、言い方を変えることで、新しい学習データを作ることがあります。
これは、同じ出来事を、少し違う言葉で語り直すようなものです。
paraphrasingを使うと、モデルは特定の言い回しだけに頼るのではなく、表現が変わっても、同じ意味を読み取る力を身につけやすくなります。
ただし、画像の回転よりも注意が必要です。
言い換えすぎると、意味が微妙に変わってしまうこともあるからです。
だからparaphrasingでは、意味を保てているかがとても大切になります。
まとめ
Cutout
→ 画像の一部を隠す
→ 一部が見えなくても判断できるようにする
Random Erasing
→ 隠す場所や大きさをランダムにする
→ 特定の場所に頼りすぎないようにする
Mixup
→ 二つのデータとラベルをやわらかく混ぜる
→ 境界をなめらかに学びやすくする
CutMix
→ 画像の一部を切り取って別の画像に貼る
→ 部分と全体の関係を柔軟に学ばせる
RandAugment
→ いくつかの拡張をランダムに組み合わせる
→ 多様な拡張をまとめて試しやすくする
paraphrasing
→ 文章を言い換える
→ 表現が変わっても意味をつかめるようにする
これらの手法は、一見すると少し大胆です。
・隠してしまう
・混ぜてしまう
・言い換えてしまう
でも、どれも目指しているのは同じです。
見た目や表現の違いに惑わされず、本質的な特徴をつかむことです。
ただの暗記ではなく、少し欠けていても、少し混ざっていても、そこに同じ意味を見つけられるようにする。
発展的なデータ拡張は、モデルにそうした柔らかな理解を教えるための方法なのです。
next ▶ 画像認識とは何か