データ拡張Data Augmentation

持っているデータを変形して種類を増やす方法

ポイント
  • データ拡張は、すでに持っているデータを反転させたり切り取ったり明るさを変えたりして、学習に使う種類を増やす方法です。
  • 変形しても正解のラベルはそのままです。左右を反転した猫の写真も、やはり猫だからです。
  • 目的はデータを増やすこと自体ではなく、この違いは答えと関係がないということをモデルに教えることにあります。
  • 新しく集めるよりずっと安上がりです。データが少ないときに過学習を減らすいちばん手軽な方法です。
  • やりすぎると実際には出会うはずのないデータができてしまい、かえって成績が落ちます。加減が大事です
目次

1たとえで理解する

バドミントンの練習で、シャトルがいつも同じ場所にばかり来るなら、そのコースは目をつぶっても受けられるようになります。ところが試合に出ると、相手がその場所にばかり打ってくれるわけがありません。少し違う場所に飛んできただけで、手も足も出ずに逃してしまいます。

そこでラリーを続けるとき、わざとコースを変えます。あるときは高く深く、あるときは低く短く、あるときは体の近くに寄せて。シャトルは最初から最後まで同じ一つです。変わるのは飛んでくる道筋だけです。この練習を重ねると、どちらから来てもそれが受けるべきシャトルだと見分けられるようになります。

データ拡張はこのコース変えです。持っているデータをあちこち回したり切ったりして、違う姿で投げ入れます。データの中身はそのままですが、モデルは見た目が変わっても同じものだという事実を学びます。

2くわしく

何をどう変えるか

写真なら左右に反転させ、一部を切り出し、少し回転させ、明るさと色合いを変えます。拡大したり、一部を四角く隠したりもします。一つひとつは些細に見えますが、こうした手直しを組み合わせると、元の一枚から数十通りの姿が生まれます。

文章なら意味の近い言葉に置き換えたり、別の言語に訳してから戻したりして表現を揺らします。音声なら速度を少し変えたり雑音を混ぜたり、響きを加えたりします。どのデータを扱うにしても原理は同じです。答えと関係のない部分だけを揺らすことです。

大事なのはラベルに手をつけないことです。反転した写真も同じ答えを指します。ですから、データを増やしながら人が改めてラベルをつけ直す必要はありません。データを集めるコストに比べれば、ほとんどただ同然です。

なぜ成績が上がるのか

データが少ないと、モデルはそのデータの些細な特徴まで覚え込んでしまいます。たまたま学習に使った猫の写真が全部左を向いていたら、右を向いた猫を見分けられなくなることが起きます。データに偶然混ざった規則を本物の規則と勘違いしたのです。

拡張をかけるとこの勘違いが崩れます。左を向いた写真と反転した写真が同じ答えを指すので、向きは答えと関係がないと学ぶようになります。結果として、学習に使わなかったデータでも成績が保たれます。

拡張は学習するときだけかけます。成績を測るデータにまでかけると、何を測っているのか分からなくなるからです。多くの場合、データを束にして読み込むたびにその場で無作為に変形を選んでかけます。同じデータが毎回少しずつ違う姿で入ってくることになります。

やりすぎるとかえって悪くなります

コースを変えるのもコートの中でこそ練習になります。観客席へ飛んでいく球を受ける練習は試合の役に立ちません。拡張も同じです。写真を逆さまに反転させたり色を見分けられないほど変えたりすると、実際には出会うはずのないデータで学習することになります。

向きを反転すると意味が変わってしまうデータもあります。数字や文字を左右反転すると別の文字になったり、そもそも文字でなくなったりします。医療写真のように左右が意味を持つデータも同様です。だからどんな変形をかけるかは、データの性質を見て選ぶ必要があります。

データを増やすこととは違います

拡張はデータの量を増やしてくれますが、情報の量までは増やしてくれません。反転した写真には、元の写真になかった新しい事実は含まれていません。学習に使ったデータにそもそもなかった種類は、いくら変形しても生まれません。

だから拡張はデータをもっと集める作業の代わりにはなりません。データが不足しているとき、その中から引き出せる限りを引き出す手段に近いものです。種類が一方に偏ったデータなら、拡張より不足している側を集めるほうがよい結果につながります。

3もう少し正確に

データ拡張は、答えが変わらない範囲の変換をデータに適用して学習データの分布を広げる方法です。広い意味の正則化に分類されることもあります。値の大きさに罰を科す代わりに、入力を揺らして同じ目的を果たすからです。

変形をあらかじめ作って保存しておく方式より、読み込むたびにその場でかける方式のほうが一般的です。保存の容量がいらず、毎回少しずつ違うデータが入ってくるほうが効果も高いからです。どんな変形をどれだけかけるかを自動で探す方法もあります。

たとえがずれる点もあります。バドミントンはコースを変えても受ける人はそのままですが、学習では変形したデータの一つひとつが別のデータとして扱われます。だから元が何枚かに関係なく、学習にかかる時間はその分だけ増えます。また相手は人が見て自然なコースだけを選びますが、拡張は人が範囲を決めてやらないと見当違いなデータを作り出してしまいます。

4やってみる

5よくある誤解

  • 拡張をすればデータをもっと集める必要がないと思われがちですが、実際は元になかった情報が生まれるわけではないので、不足している種類は新しく集める必要があります。

  • 変形は強くかけるほどよいと見なされがちですが、実際は実際には出会うはずのないデータができてしまい、かえって成績が落ちます。

  • 拡張したデータで成績を測ってもよいと思われがちですが、実際は学習のときだけかけて、成績は手を加えていないデータで測るべきです。

7ひとこと要約

つまりデータ拡張は同じシャトルを違うコースで何度も投げ入れることで、見た目が変わっても揺らがないモデルを作ります。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02