数式抜きで、転移学習(Transfer Learning)を概観
学ぶことを学ぶ - 転移学習(Transfer Learning)
昨今、注目を集めている転移学習 (Transfer Learning) について書いてみます。これは、去年、東大 松尾豊 教授、ABEJA 岡田さん、クラウドワークス 吉田さんと新経済サミット 2018で議論をした際にも、敵対的生成ネットワーク(GAN)等と並んで注目すべき技術として言及されました。今後非常に重要なテクニックとしてより注目を集めていくと予想されます。
転移学習(Transfer Learning)ですが、Deep Learning を用いることで得られる、特典みたいなものといえます。
Deep Learningやら現在のAI技術関連の解説文章は、書くのがとても難しく、わかりやすく書こうとしてよりわかりにくくなるという類のものです。理解している方からすると「説明が大雑把で正確性に欠ける」「これだと誤解される恐れがありうる」となり、知らない方からすると「結局、何を言っているのかわからない」「イメージしかわからない」という代物になるという。
転移学習はその極みで、一言でいいますと「ある領域で学習したAIのモデルが他の領域でも使えますよ」というものになります。例えば、「おもちゃの車を使って学習させた自動運転のためのモデルは、本当のAutonomous Car(自動運転車)においても有効に使えますよ」ということになるのですが、これって「どうして?」ということには答えていなくて、それに答えていこうとするとコンピューターサイエンス領域の外の人からはわけわからない説明に(僕の説明だと)なってしまうという。そのような挑戦です。
転移学習は、データを十分にもっていない際にディープラーニングのモデルを構築したい時に役立ちます。通常、深いモデルをトレーニングするときには大量のデータ及び計算資源が必要です。しかし、多くの場合、多くの解くべき問題ややりたいアプリケーションにおいては、そもそも誰かが既に作った学習済みのモデルを再利用すれば事足ります。
いわゆるプレトレーニングモデルの活用という話です。例えばこれは、ある会社の社員の顔を認識するアプリケーションを作ろうとする際に、まずは人類の顔データを集めて学習させたプレトレーニングモデルを構築し、その後、その会社の社員のデータを使ってファインチューニングしていく等として作ることができます。
この例では、プレトレーニングモデルが汎用性高く学習し、ファインチューニングによってフォーカスを絞って調整をかけていくというようなイメージになります。
転移学習においては、このプレトレーニング&ファインチューニングのアプローチのコンセプトを広げ、プレトレーニングモデルで共通性のある部分を学習し、ファインチューニングにあたるところで、他の領域への展開を狙っていく、つまり転移(Transfer)させていくという試みといえます。
転移学習のやり方
画像分野においては、転移学習にはいくつかのやり方がありえます。
画像におけるDeep Learning 適用においては主にCNNを用います。CNNでは、各レイヤーへの入力と出力が類似しているので、レイヤーをブロックのように積み上げることができます。CNNは画像という存在の抽象的な部分(エッジやテクスチャー等)を最初のレイヤーで学習し、その後のレイヤーで画像に写っているものの構成物や被写体そのものを学習します。
これを活用した最も簡単な転移学習の方法は、学習済みモデルの後のレイヤーを切り落として、適当に初期化したもので置き換えます。こうすることで、転移先のデータで学習する際には、後のレイヤー(上位レイヤー)のパラメーターのトレーニングのみが行われる形になります。この手法で、まるで上位レイヤーが通常のニューラルネットとして振る舞い、最初の方のレイヤー(下位レイヤー)が特徴量抽出処理として振る舞うという形になります。データとタスクのペアがよく似ている場合においては、有効に機能する転移学習のやり方といえます。(比喩を使いますと、車を運転するというのと、トラックを運転するというのでは、データとタスクの対応が似ていますがそのような関係の際には効果があります。)トレーニングしなければいけないパラメーターが上位レイヤーに限られるので過学習(Overfitting)を起こしにくいというのもいいポイントです。
説明が難しくなってあれなのですが、データとタスクのどちらがより転移先に似ているかによって、切り落とすのは上位レイヤーなのか、下位レイヤーなのかを逆転させることもありえます。データは似ているがタスクは似ていない際は、下位レイヤーを切り落とした方がいい場合もあります。
もちろん大量にデータがある場合は、どのレイヤーのパラメーターも含めて全ネットワークを再トレーニングしてもいいです。その場合は、プレトレーニングモデルからパラメーターの初期値を保存する形となり、パラメーターの収束がはやくなることが期待できます。この場合、転移学習の位置づけは全体の学習コストを抑えるテクニックにあたるといえます。
(「もちろん」が続きますが、)もちろん大量にデータがあったり、タスク(解く問題ややりたいアプリケーション)が似ていない場合は、個別にモデルを学習したほうがいいように見えますが、ケースによってはプレトレーニングモデルの初期値を借用した方がいいケースもありますので、転移学習はとにかく試してみるというのもありかもしれません。
転移学習が向かないケース
逆もあります。つまり、個別にモデルを作ったほうがいい場合もありえます。例えばプレトレーニングモデルそのものにバイアスがあるケース等です。例えば前述の例でとりあげた社員の顔認識においてプレトレーニングモデルにおける人種の構成が、解きたいアプリケーション(つまりやりたい社員の顔認識)に副作用を及ぼすことがあってその場合は、個別にモデルを構築したほうがいいケースがあります。これはだいぶ慎重な議論が必要な話なのでどこかでまた別途扱いたいと思います。
更には、ネットワークが違いすぎてプレトレーニングモデルが成立しないケースもあります。この場合は転移学習はあまり出番はありません。従前、画像処理とは違って自然言語処理においては、アプリケーションに応じて適しているDeep Learningのネットワークが異なるため、プレトレーニングモデルのようなアプローチが適用される余地がありませんでした。ですが、この状況を一変させたのが去年Googleが発表したBERTです。これについてもまた別途投稿したいと思います。
まとめ
以上のように、転移学習は、データとタスクの関係に注目し、 Deep Learning の特徴およびプレトレーニングモデルのアプローチを活かすことで、他領域へのモデルの適用を可能にしていく手法です。これは言い方をかえると、複数の概念に適用される「学習の汎用性」とは何か? に対する理解を深める試みと言えます。それゆえ、転移学習は時に、「Learning to learn(学ぶことを学ぶ)」に向けた枠組みへの導入と捉えることもでき、より普遍的な人工知能への道を我々の目の前に提示していると言え、今後の様々な応用が期待されます。
余談
転移学習は知識の抽象化を利用して転移するという話のようであってそうではないというか、正確にはそうでもある時があるけれどその限りではない、という煮え切らないところが説明を難解にさせている理由なのだろうなと思っています。どちらかというと、以下のようなアナロジーは成立するかと考えています。
例えば、高校で、数学の代数幾何を学びます。代数幾何が対象としている場面設定を理解して、公式・法則を学んで、例題をといて知識をものにしていきます。
このアプローチそのものに関しては、例えば、数学の確率・統計を学ぶときにも使えます。つまり、転移できます。ただ、ここでは代数幾何の知識の抽象性は転移されていません。ただ知識がすべて転移されないかと言うとそうではなく、時には、例題の文章の読み方(かなり具体的な知識)のテクニックは、転移可能だったりします。つまり、知識の抽象性・具象性、あるいは本質な知識なのか・表面的なテクニックなのかという違いは、転移可能かどうかと異なる話になります。
また、この数学の代数幾何の学習の仕方は、英語の英文法の学習の仕方にもある程度応用がきくかもしれません。つまり、公式・法則を学んで例題を解いていくことで知識をものにしていく、という部分は科目をまたがって転移が可能です。ですが、日本史や世界史の学習にまで転移できるかというとそうではありません。
ということで、ゆえに、転移学習の試みというのは、他の領域に別の領域での経験を適用するということは一体どういうことなのか、更に言ってしまうと、効率よく、あるいは効果的に学ぶこと、というのはそもそもどういうことなのか、に関する理解を我々に深めてくれると言えます。
おまけ
データ量がないところで機械学習をやっていく際には、データ拡張に関しても参照いただくといいかもいしれません。
この記事が気に入ったらサポートをしてみませんか?