ディープラーニングは、たくさんのデータから学ぶことで力を発揮します。
たとえば猫を見分けるモデルを作りたいなら、猫の写真をたくさん見せたほうが、モデルは「猫らしさ」を学びやすくなります。
でも現実には、いつも十分な量のデータがあるとは限りません。
集めるのにお金がかかる、ラベルをつけるのが大変、そもそも珍しいデータで数が少ない……ということもよくあります。
そこで使われるのが、データ拡張です。
データ拡張とは、手元にあるデータに少し変化を加えて、新しい学習データを作る工夫のことです。
絵を描く練習をしている子どもを想像してみてください。
先生が見本として、りんごの絵を一枚だけ見せたとします。
でも、その一枚だけを何度も見ていると、「この角度、この色、この大きさのりんご」だけを覚えてしまうかもしれません。
すると、少し向きが違うりんごや、少し暗い場所にあるりんごを見たときに、「これは同じりんごなのかな?」と迷ってしまうかもしれません。
そこで先生は、同じりんごの絵を少しずつ変えて見せます。
・少し回した絵
・少し明るくした絵
・少し切り取った絵
・左右を反転した絵
そうすると子どもは、「あ、向きが違ってもりんごなんだ」「少し暗くても、やっぱりりんごなんだ」と学べるようになります。
データ拡張は、まさにこれに似ています。
ここで大事なのは、データ拡張はまったく別のデータをでっちあげることではない、ということです。
目的は、同じものが、少し違う見え方をするときにも対応できるようにすることです。
たとえば猫の画像なら、
・少し右を向いている
・少し暗い
・少し拡大されている
・少し切り取られている
という違いがあっても、本質的には「猫」ですよね。
データ拡張は、そうした現実のゆらぎを学習データの中にあらかじめ取り込んでおく工夫なのです。
もしモデルが、手元にあるデータだけをそのまま覚えてしまうとどうなるでしょう。
たとえば、いつも明るい写真の猫しか見ていない、いつも正面を向いた猫しか見ていないという状態だと、少し条件が変わっただけで弱くなってしまうかもしれません。
これは、人が試験問題を丸暗記して、少し聞かれ方が変わると答えられなくなるのに少し似ています。
データ拡張を使うと、モデルは、向きが違っても、明るさが違っても、少し欠けて見えても本質が同じなら、同じものとして認識しやすくなります。
つまりデータ拡張は、モデルが「見たことのない揺れ」にも強くなるための練習なのです。
データ拡張には、過学習を防ぐ助けになるという役割もあります。
過学習とは、学習データにはぴったり合うけれど、新しいデータにはうまく対応できない状態でした。
データ拡張をすると、学習中に見るデータのバリエーションが増えます。
するとモデルは、一枚一枚をそのまま暗記するのではなく、少し形が変わっても共通している特徴を学びやすくなります。
つまり、細かな偶然にとらわれるのではなく、本質に近い特徴をつかみやすくなるのです。
データ拡張は「データを水増しすること」ではありません。ここも大事なポイントです。
データ拡張というと、ただ数を増やしているだけに見えるかもしれません。
でも本当の意味は、そこではありません。
大事なのは、モデルに、現実の多様さを少し先取りして見せることです。
現実の世界では、ものはいつも同じ角度、同じ明るさ、同じ背景で現れるわけではありません。
だから学習データの中にも、その多様さを少し入れておいたほうが、モデルは現実に強くなります。
データ拡張とは、ただ量を増やすことではなく、学びの世界を少し広げることなのです。
ただし、どんな変化でも加えればよいわけではありません。
たとえば、数字の「6」の画像を大きく回転させると、別の数字に見えてしまうこともありますよね。
文章でも、言い換えすぎると元の意味が変わってしまうことがあります。
つまりデータ拡張では、そのデータにとって、どんな変化なら「同じもの」として扱ってよいかを考えることが大切です。
だからデータ拡張は、ただの機械的な作業ではなく、データの性質やタスクの意味を考えながら選ぶ工夫でもあるのです。
next ▶ 代表的なデータ拡張手法