【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
[DL輪読会]Calibrating CNNs for Lifelong Learning
1. 1
DEEP LEARNING JP
[DL Papers]
http://deeplearning.jp/
Calibrating CNNs for Lifeling Learning
Hirono Okamoto, Matsuo Lab
2. 書誌情報: Calibrating CNNs for Lifelong Learning
n NIPS 2020 accepted
n 筆頭著者: Pravendra Singh
n 概要:
n DNNの層のパラメタは固定したまま,タスクごとに中間層出⼒を通すキャリブレーションモ
ジュールのみを学習することで,破滅的忘却を防ぎつつも⼤きくパラメータを増やさずに継続タ
スクを解く.実験では分類問題の正解率において様々なデータセットでこれまでの⼿法を⼤きく
引き離してSOTAを達成した.
キャリブレーション
モジュール
3. 背景: 継続学習とは
n 継続学習: モデルが⻑い期間次々と与えられる新しいデータに対して連続的に学習すること
n 継続学習モデルの⽬的: 新しいサンプルが追加されたときに再学習するコストを減らす
n よくあるモデルの検証⽅法:
n 過去学習したデータにはアクセスできず,現在のデータからのみ学習を⾏う
n 過去のデータも含めたすべてのデータを使ってテストを⾏う
データ1 データ3
モデル
データ4
train
時間
現在
データ2
過去
5. 背景: 破滅的忘却を防ぐには
n ナイーブなやり⽅: 新しいデータと古いデータ合わせて改めて学習する
n ⽋点:
n 全部のデータを新しいデータが現れるたびに再学習するのはコストが⾼い
n 昔のデータをとっておく必要があるがアクセスできなくなってしまうかもしれない
n 上記⽋点を解決するために,いくつかのモデルが提案されている
データ3
モデル
train
時間
現在
データ1 データ2 データ4
過去
6. 関連研究: 継続学習の⼿法は⼤きく3つ存在する
n 正則化ベースの⼿法: 昔の知識を失わないようにする正則化をつける
n メモリーベースの⼿法: 部分的に昔のサンプルを使う,もしくは⽣成サンプルを使う
n 動的ネットワークの⼿法: タスクが増えたときにネットワーク構造を追加する
それぞれの⼿法の具体例を1つずつ紹介する
8. 関連研究: メモリベースの⼿法
n 古いタスクのデータや表現を保持し,新しいタスクの学習中に利⽤することで破滅的忘却を
防ぐ⽅法
n ※ 提案⼿法は前のタスクのデータを保持しないため,それを記憶するためのメモリも必要ない
n 例: Continual Learning with Deep Generative Replay
n ロス:
n ⼀項⽬: Solver(分類器)が現在のデータを使ってcross entropyで普通に学習する
n ⼆項⽬: GANで昔のデータを出⼒させ,Solverの昔の出⼒と現在の出⼒を近づけるようにする
9. 関連研究: 動的ネットワークの⼿法
n 新しいタスクを訓練するために,動的にネットワークを変更していく⽅法
n ※ 提案⼿法はこれ.ただし少ないパラメタですむ
n 例: Progressive Neural Networks
n 昔の中間層の出⼒を新しく⼊⼒として利⽤する
n 古い重みを更新せず,新しいタスクごとに
新しいネットワークを追加する
n ⽋点: パラメタの数がタスクが増えるたびに
⾮常に増加してしまう
点線: 過去のタスクで学習した重み
実線: 現在のタスクで学習する重み
𝑊!
(#)
𝑊%
(#)
𝑈!
(#:%)
𝑈%
(#:%)
現タスクを
解く重み
古いタスクの
出⼒を利⽤する重み
10. 提案⼿法: 全体像
n 3つのモジュール
n ベースモジュール(CNN)
n タスク適応型キャリブレーションモジュール(𝐶𝑀'
(
)
n タスク特有の分類モジュール(𝐶()
n 分類ロス(クロスエントロピーロス)のみを使って学習する
パラメタ固定
アクティベーション
マップを出⼒
CNNの層 SCMとCCMからなる
クラス数は固定する
必要がありそう
分類モジュールの
説明がなくて
よくわからない🤔タスクごとに学習し,
初期値は前のタスクの重みとする
11. 提案⼿法: spatial calibration module (SCM)
n Φ!
"
: SCM operator
n GCONV: グループ化畳み込み
n 3x3のフィルタを使う
n αチャンネル,C/αグループ
n ※ グループ化畳み込み:
n チャネル⽅向にグループ分割し,それぞれ畳み込みしたあとチャネル⽅向に結合させる
n depthwise convolutionの発展型
element wiseに⾜す
12. 提案⼿法: channel-wise calibration module (CCM)
n ξ!
"
: CCM operator
n GAP: global average pooling
n output size: 1x1xC
n GCONV: group convolution
n 1x1のフィルタを使う
n βチャンネル,C/βグループ
n BN: batch normalization
element wiseにかける
まとめると,
13. 実験: 10分割したCIFAR100の正解率
n 実験設定:
n CIFAR100を10クラスごとに分割し,10タスクにする
n 検証⽅法:
n タスクを1つずつ増やして学習する
n これまでのタスクの正解率の平均を計算する(?)
n 提案⼿法: CCLL<α, β>
n αβはGCONVのチャネル数
n グラフの⻘・⿊
n 結果: 他の⼿法と⽐べて⼤きく上回った
n ※ どのタスクを解いているという情報は使っている
n 例えばEWCはそのような情報使ってないのでは? 🤔
15. 実験: アブレーションスタディ
n 実験設定(split CIFAR-10/100):
n CIFAR10を最初のタスクとして学習する
n CIFAR100から10クラスずつとりだし,次の
タスクとする
n 結果:
n 提案⼿法はhnetよりも性能が良い
n CCLL_SF_SCの性能が⾮常に低いのは,キャ
リブレーションパラメタがタスクを学習する
のに⼗分なパラメタをもっていないから
n → 提案⼿法のベースモジュールの知識転移が
うまくいっていることが⽰されている
n CCLL_SCの性能が悪いのは,前のタスクの
重みを使っていないので,前タスクの知識転
移がされていないから
n SC: Scrach Calibration
n タスクごとに1からキャリブレーションモジュールを学
習する(通常は前のタスクのときの重みを初期値とする)
n SF: Scrach Freeze
n ベースモデルを全く学習しない
n hnet: split CIFAR-10/100を使ったときの現SOTA⼿法
16. 実験: アブレーションスタディ
n 実験設定: split CIFAR-10/100
n 検証⽅法は6つのタスクの平均の正解率
n 結果:
n SCMかCCMがあると結果が⼤きく上昇する
n αが⼤きいほど性能がよくなる(ただし,パラメタ数と計算時間は増える)
n βを変えても性能はあまりかわらなかったので,β=1で固定してある
18. 実験: ベースモジュールの初期タスクの依存度
n 実験設定: SVHNを2クラスごとに分割し,5タスクにする
n ⽐較:
n 1. SVHNで学習する
n 2. CIFAR10でpretrainしたものを利⽤
n 3. CIFAR10でpretrainし,SVHNでfinetune
n 結果:
n どの場合も正解率が⾼い
n しかし,⼀般的には最初のタスクは様々な種類の画像データで学習すべき
n もし最初のタスクのデータセットに少量のクラスやサンプルしかなかったらおそらく正解率は低い
(参考) 他の⼿法との⽐較
1
2
3
19. まとめ
n 論⽂の結論:
n タスクごとに少量のパラメタの追加するだけでSOTAの精度を達成
n 提案⼿法による⽅法は破滅的忘却しないことも⽰した
n 今後の展望:
n 今回のドメインは画像分類のみなので,セグメンテーションや物体検出に応⽤する
n 提案⼿法はキャリブレーションモジュールを追加するだけなので,通常の深層学習モデルを継続
学習のタスクを解くモデルとして拡張できる
n 感想:
n 賢いけどどうやってキャリブレーションモジュールができあがったのかよくわからない
n もともとはパラメタ固定convとタスクごとの可変convを⽤意してた→パラメタ減らす⼯夫をした説
n 分類モジュールの説明がないし実装も⾒当たらないのでよくわからない
n GAPしてチャネル数=クラス数としてクロスエントロピーロス使ってるのか︖
n タスクごとにクラス数固定っぽいのはいいのか︖距離学習とか使えば解決できそうだが…
n 実験設定も細かいとこが書いていないのでよくわからない