一度学んだことを忘れずに新しいことを学ぶには？深層学習における継続学習入門

こんにちは。スキルアップAI編集部です。

機械学習は、モデルが完成したら終わりというわけではありません。学習したモデルを何らかのアプリケーションに使用している中で新しいデータが増えたり、解きたいタスクが増えたりすることがあります。モデル完成後に新しいデータや解きたいタスクが増えていくような状況に対処することを目指しているのが継続学習という手法です。
本ブログでは深層学習における継続学習について概要と代表的な手法をご紹介します。

<目次>
1.継続学習とは
2.継続学習の代表的な手法
3.まとめ
4.参考文献

# 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に適したパラメータの共通部分に向かってパラメータが更新される様子を表しています。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/fb26694f-dacb-95fa-a285-0812707ae670.png">
図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に示します。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/f75ddd78-22ea-7085-9dbd-f0225607757f.png">
図2. Deep Generative Replayの学習の流れ
(参考文献[2]より引用)

## アーキテクチャベースの手法
アーキテクチャベースの手法では、ネットワークの構造を工夫することで過去のタスクを忘れないように新しいタスクを学習します。代表的な手法にPackNet [Mallya et al., 2018]というものがあります。

PackNetではフィルターを使って、各タスクで使用できるニューロンの数に制限をかけます。図3はネットワーク全体の40%をタスク1に割り当て、残りの60%のうちの2/3をタスク2に割り当て、1/3をタスク3に割り当てる様子を表しています。 このように、1つのネットワークを複数のネットワークに分割するようにして、複数のタスクに対応できるように学習しています。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/4d37f591-9cef-6f7a-b9bf-d51fd94a8efe.png">
図3. PackNetの学習の流れ
(参考文献[3]より引用)

# 3.おわりに
本ブログでは深層学習における継続学習について概要と代表的な手法をご紹介しました。この分野はまだ発展途上です。今後の技術の進展に注目しましょう。
深層学習について詳しく学びたい方は[現場で使えるディープラーニング基礎講座](https://bit.ly/3zuFKNc)をぜひご検討ください。

# 4.参考文献
[1] [Overcoming catastrophic forgetting in neural networks [Kerkpatrick et al., 2017]](https://www.pnas.org/content/114/13/3521?ijkey=6c2d70235ed762f42a0686b367d9d73d68150993&keytype2=tf_ipsecsha)
[2] [Continual Learning with Deep Generative Replay [Shin et al., 2017]](https://proceedings.neurips.cc/paper/2017/file/0efbe98067c6c73dba1250d2beaa81f9-Paper.pdf)
[3] [PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning [Mallya et al., 2018]](https://openaccess.thecvf.com/content_cvpr_2018/html/Mallya_PackNet_Adding_Multiple_CVPR_2018_paper.html)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)
スキルアップAI公式YouTube AIビジネスチャンネルは[こちら](https://www.youtube.com/AIBusinessChannel)