AI(機械学習)について学んでいるとバッチ学習という言葉を見かけることがありますよね。文中で当然のように使われていることも多いこの単語ですが、あまり聞きなれない言葉なので曖昧なままにしている人も多いかもしれません。
実際僕自身がそんな状態で理解を曖昧なままにしてきていました。そこで今回はバッチ学習について整理していきます。
一言で言うと「バッチ学習」とは・・・
全ての教師データを使って最適な重みの計算を行う手法です。
バッチ学習では全ての教師データを使って重みの最適化を行うため、モデルを更新する際にはデータを少しずつ与えて更新するという訳ではなく、学習に必要なデータを全て準備した上でゼロからモデルを構築し直す必要があります。
一般的に、学習コスト(処理時間やメモリ使用料)も大きくなりがちなのでオフライン行われることが多いです。まずシステムを訓練しておいてから、本番稼働させてそれ以上学習させずに実行し続ける、つまり、デプロイされる前に学習したことだけを使って動作することになるため、これはオフライン学習と呼ばれます。
一方、バッチ学習と対照的な学習方法として、教師データを一つずつ与えて、その都度最適な重みを計算していくやり方で学習を進めていく逐次学習オンライン学習という手法があります。モデルの学習を行う際に毎回ゼロからモデルを構築するのではなく、逐次学習ではデータを一つずつ与えることで現状のモデルのパラメータを随時更新していきます。
つっちー
このように、バッチ学習と逐次学習とでは、モデル学習時のデータ保持の仕方が異なっていると言えるでしょう。
オンライン学習について詳しく知りたい方はコチラをご覧ください
まとめ
つまり、バッチ学習とは
全ての教師データを使って最適な重みの計算を行う手法です。モデルを更新する際には学習に必要なデータを全て準備した上でゼロから構築し直す必要があります。また学習コスト(処理時間やメモリ使用料)も大きくなりがちです。
<参考>
つっちー
AI(人工知能)って「なにそれ美味しいの?」ってレベルだった僕が、AIエンジニアを目指してステップを踏んだり踏まれたりしている記事を書いてます。よかったら読んでみてください(実話)。
コメントをどうぞ
> 学習に必要なデータを全て準備した上でゼロからモデルを構築し直す必要があります
この説明、意味不明です。「モデルを構築」とは何を指してるのでしょう?機械学習分野で言うところの「モデルを構築」とは違う意味で使われているように思います。「モデル」と何なのでしょう?「構築」とはどのような処理なのでしょう?
> データを一つずつ与えることで現状のモデルのパラメータを随時更新していきます。
「一つ」ではありません。「一部」です。
細かいことですが、「オンライン学習」のことを「逐次学習」と訳すのは翻訳上の誤りです。(そういう訳語をあてている書籍もあるかも知れませんが)
オンライン学習のオンラインとはコンピュータ・サイエンスの分野でよく出てくる「オンラインアルゴリズム(Online algorithm)」のオンラインです。この「オンライン」の対義語は「バッチ」ではなく「オフライン」です。
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
それに対してコンピュータ・サイエンスの分野で出てくるアルゴリズムとして「逐次アルゴリズム(Sequential algorithm)」というものもあり、これに対する対義語は、「並列アルゴリズム」「分散アルゴリズム」です。
なので、「オンライン学習」の説明として「(入力を断片的に与えて)逐次的に学習させる」と記述するのは正しいですが、「オンライン学習(逐次学習)」と記述するのは誤訳です。「オンライン学習」の対義語として「バッチ学習」があるわけではありませんし、「オンライン学習」=「逐次学習」でもありません。