最終更新日:
一度学んだことを忘れずに新しいことを学ぶには?深層学習における継続学習入門
こんにちは。スキルアップAIの下山です。私は現在、ディープラーニングを用いた画像認識の研究に取り組んでいます。
機械学習は、モデルが完成したら終わりというわけではありません。学習したモデルを何らかのアプリケーションに使用している中で新しいデータが増えたり、解きたいタスクが増えたりすることがあります。モデル完成後に新しいデータや解きたいタスクが増えていくような状況に対処することを目指しているのが継続学習という手法です。
本ブログでは深層学習における継続学習について概要と代表的な手法をご紹介します。
1.継続学習とは
継続学習(continual learning, incremental learning)では、新しいデータが増えたり解きたいタスクが増えたりするという状況を考えます。例えば、ネコとイヌの分類ができるようになった後にニワトリとインコの分類もできるようになる必要がでてくるというような状況です。人間であれば、一度ネコとイヌの分類ができるようになれば、新たにニワトリとインコの分類ができるようになってもネコとイヌのことは忘れてしまうということにはなかなかなりません。
一方で同様のことを機械学習モデルに行わせるのは簡単なことではありません。ネコとイヌのデータで学習した後に、新たにニワトリとインコのデータで学習をすると、ニワトリとインコの分類はできるようになりますがネコとイヌの分類はさっぱりできなくなってしまいます。このように過去に学習したことを忘れてしまうことを破壊的忘却(catastrophic forgetting)と言います。破壊的忘却は継続学習を行う上で避けては通れない課題となっており、破壊的忘却をどのようにして抑止するかが継続学習のキモになっています。
2.継続学習の代表的な手法
継続学習には大きく分けて次の3つのタイプの手法があります。
- 正則化ベースの手法
- リプレイを行う手法
- アーキテクチャベースの手法
この3つのタイプについて、それぞれ1つずつ代表的な手法を紹介します。なお、ここでの説明はニューラルネットワークを想定して行いますが、継続学習自体はニューラルネットワーク以外にも適用することができます。
正則化ベースの⼿法
正則化ベースの手法では、学習の際に誤差関数に正則化項を付け加えることで破壊的忘却を抑止します。代表的な手法にElastic Weight Consolidation (EWC) [Kirkpatrick et al., 2017]というものがあります。
EWCでは、タスクAについて学習した後にタスクAを忘却しないようにタスクBを学習するという状況を考えます。タスクAについて学習済みのネットワークに対して、タスクBに対する損失関数を設定し、学習します。この際、タスクAを解く上で重要なパラメータが更新されることへの正則化項を損失関数に加えます。これによりタスクAでの性能を落とすことなくタスクBも解けるようになります。図1は、正則化項の効果によりタスクAに適したパラメータとタスクBに適したパラメータの共通部分に向かってパラメータが更新される様子を表しています。
図1. Elastic Weight Consolidationのイメージ
(参考文献[1]より引用)
リプレイを行う手法
リプレイを行う手法では、過去のタスクの学習に用いたデータセットを再現(リプレイ)することで、過去のタスクを忘れないように新しいタスクを学習します。代表的な手法にDeep Generative Replay [Shin et al., 2017]というものがあります。
この手法ではGeneratorとSolverの組(これをScholarと呼ぶ)を学習します。Generatorはデータを生成し、Solverはその生成データに対するタスクを解きます。あるタスクtの学習においては、タスクtのデータと、それまでに学習したタスクt-1のScholarから生成されるデータを使ってタスクtのScholarを学習します。これを繰り返すことで今までに学習したタスクを忘れることなく、新しいタスクを学習していくことが可能になります。Deep Generative Replayの学習の流れを図2に示します。
図2. Deep Generative Replayの学習の流れ
(参考文献[2]より引用)
アーキテクチャベースの手法
アーキテクチャベースの手法では、ネットワークの構造を工夫することで過去のタスクを忘れないように新しいタスクを学習します。代表的な手法にPackNet [Mallya et al., 2018]というものがあります。
PackNetではフィルターを使って、各タスクで使用できるニューロンの数に制限をかけます。図3はネットワーク全体の40%をタスク1に割り当て、残りの60%のうちの2/3をタスク2に割り当て、1/3をタスク3に割り当てる様子を表しています。 このように、1つのネットワークを複数のネットワークに分割するようにして、複数のタスクに対応できるように学習しています。
図3. PackNetの学習の流れ
(参考文献[3]より引用)
3.おわりに
本ブログでは深層学習における継続学習について概要と代表的な手法をご紹介しました。この分野はまだ発展途上です。今後の技術の進展に注目しましょう。
深層学習について詳しく学びたい方は現場で使えるディープラーニング基礎講座をぜひご検討ください。
また、スキルアップAIでは毎週水曜日に実践的AI勉強会「スキルアップAIキャンプ」を開催しています。勉強会では、様々な実践的テーマを取り上げ、データ分析・AI開発の実務力アップにつながるヒントをご提供します。講師が参加者の皆さんからの質問や悩みに答えるコーナーもあります。
興味がある方はぜひ参加してみてください!
4.参考文献
[2] Continual Learning with Deep Generative Replay [Shin et al., 2017]
[3] PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning [Mallya et al., 2018]
【監修】スキルアップAI 取締役CTO 小縣信也
AI指導実績は国内トップクラス。「太陽光発電発電量予測および異常検知」など、多数のAI開発案件を手掛けている。日本ディープラーニング協会主催2018E資格試験 優秀賞受賞、2019#1E資格試験優秀賞受賞。著書「徹底攻略ディープラーニングE資格エンジニア問題集」(インプレス)。
配信を希望される方はこちら
また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
公開日: