こんばんは。本日は転移学習(Transfer Learning)とファインチューニングについて調べたことを備忘メモを残しておこうと思います。
最近、自然言語処理を勉強し始めたのですが、書籍などをみていると、この「転移学習」「ファインチューニング」というワードがよく出てきたので調べてみようと思ったのです。
それでは参ります。
Contents
共通すること
どちらも一言で言うと、「ある領域で学習させた機械学習モデルを、別の領域(ドメイン)に適用する技術」です。例えば、動物画像の分類をできるようにしたモデルを、自動車画像の分類にも適用できるというものです。
ドメインが異なるとは?
定義ででてきた「別のドメイン」とは、具体的に以下のような場合のことを指します。
- 入力値のパターン・分布が異なる
- 出力値のパターン・分布が異なる
2016年頃から提唱されはじめたようで、教師あり学習、教師なし学習、強化学習と比較すると新しい学習の仕組みです。
CourseraのMachine Learningの講義でも有名なスタンフォード大学のAndrew Ng教授は、新しい技術ながら今後教師あり学習と並んで今後の大きな流れになってくると発言しています。
転移学習
転移学習の仕組みは?
一言で言うと、「ある領域で学習させた機械学習モデルを、別の領域(ドメイン)に適用する技術」ということのようです。
画像認識や自然言語処理で利用されるニューラルネットワークモデルでは、画像データをインプットする入力層から最終的に分類結果を出力する出力層まで、多重の層を組み合わせることでモデルが成り立っています。
このうち、出力層以外の層では、主にインプットの特徴抽出が行われており、これは分類の領域(ドメイン)が変わっても汎用的な機能であるという考えのもと、転移学習ではこれらの特徴抽出層の重みは変更しません。
新たなドメインの分類のために、この後ろのレイヤーに層を追加して、ここの重みを学習により決定させるのです。
転移学習のメリットは?
転移学習では、大規模データで学習済(Pre-Trained)のモデルをベースに追加学習を行うため、少ないデータで、かつ短い時間でモデルの構築を行うことができるメリットがあります。
画像分類の世界では、ImageNetなどが学習済モデルに当たりますね。
ファインチューニング
ファインチューニングの仕組みは?
先ほどの転移学習では、最終出力層のみ追加学習させ、既存の特徴抽出層の重みには手を加えませんでしたが、ファインチューニングでは、新たなドメインの分類に対応させるための最終出力層の追加学習に加えて、特徴抽出層の重みも再学習させてモデルを更新します。
ファインチューニングのメリットは?
この時、既存モデルの重みを初期値として追加学習することで、より効率的に高精度なモデル構築が行えます。
実用例
ここでは、実際に行われている転移学習・ファインチューニングを活用した、または活用のベースとなっているモデルをご紹介していきます。
BERT
これが今回この記事を書くことにしたきっかけの事例です!
転移学習は自然言語処理の分野でも力を発揮しつつあるようで、この2018年にGoogleが発表したBERTは、自然言語処理タスクで過去最高精度を達成したモデルです。このモデルは、すでに大量のデータで訓練されている汎用モデルで、転移学習のみで異なるドメインのタスクに対応できる例になります。
自然言語処理の領域では、教師データとなるテキストの収集が難しく、データの確保が課題であったところ、このBERTの登場によって今後この領域で色々な発展が期待されています。
ImageNet
ImageNetは、BERTの画像認識タスク版のモデル、という位置付けでしょうか。世界最大級の画像データベースで、1419万画像かつ約22000カテゴリに分類されています。
まとめ
以上、本日は転移学習とファインチューニングについて調べて分かったことを簡単にではありますが整理してみました。これら、どう使い分けるべきかという話がありますが、モデルを適用したいドメインの学習データが十分にある場合にはファインチューニングを、データが少ない場合には転移学習を使うと良さそうです。
実際に使ってみた話は、また別で書こうと思います。
本日も最後までご覧いただきありがとうございました!この記事が少しでもお役に立ちましたら、下のいいねボタンをポチっていただけると嬉しいです!
(おまけ)転移学習についてもっと学習するなら・・・
個人的には、Udemyのコンテンツは利用しやすく重宝しています。その分野のエキスパートの方が作成したコンテンツなので、レビュー数が多いものを選べば内容も間違いないですし、万が一内容が合わなかった場合には30日以内の返金にも対応しているので、利用しやすいと思います。
転移学習のトピックを含んだコンテンツで人気なものとしては以下がありましたので、よろしければ活用してみてください。
【画像判定AIアプリ開発・パート1】TensorFlow・Python・Flaskで作る画像判定AIアプリ開発入門 【画像判定AIアプリ開発パート2】Django・TensorFlow・Python・転移学習による高精度AIアプリ開発
コメントを残す