>100 Views
April 11, 19
スライド概要
2019/01/31
Deep Learning JP:
http://deeplearning.jp/hacks/
DL輪読会資料
Task-Embedded Control Networks for Few-Shot Imitation Learning PSI B4 近藤生也
もくじ ● ● ● ● ● ● ● ● 論文 やりたいこと どんなもの? ベースライン(MIL) TecNets 実験結果 実装パート コードは一応公開しないでください。。
論文 ● Task-Embedded Control Networks for Few-Shot Imitation Learning ○ ○ ○ ● CoRL2018 imperial college london https://arxiv.org/pdf/1810.03237.pdf One-Shot Visual Imitation Learning via Meta-Learning ○ ○ ○ CoRL 2017 BAIR(UC Berkeley) https://arxiv.org/pdf/1709.04905.pdf
やりたいこと ● ● お片付け 弁当のおかず(日本の弁当は中身がころころ変わる) ○ ● 操作物と宛先が変わっても一回教えたらできるようになってほしい 『人間がロボットのように弁当詰めてる』by nsnさん ○ 大変嘆かわしい!自動化したい。
どんなもの? ● pushingの模倣学習 ○ ○ ○ ○ ● 対象物(様々な大きさ形質量摩擦 )によって様々なタスク。 様々なタスクをこなす! ただしデモ(遠隔操作)をfew個教えてもらえる。 MIL(後述)とおんなじ問題設定 (賢い)タスクの埋め込みをする ○ ○ ○ 『視覚的な情報』 +『学習する上で必要な情報』で、デモからタスク情報を embedding。 汎用的なpushingのポリシーとembeddingベクトルを使って、タスクを捌いていく! 割とあっさりベースラインを超えた。
問題設定(from MIL) ● あるタスクのデモを(1つ)みて、 環境が少し変わった同じタスクを 遂行する。 ● 学習時 ○ ● 約800タスク×各12デモの vision+action 評価時 ○ ○ 約80タスク 1回のデモを渡された後、 sim上で実 際に画像を見ながら actionする。
ベースライン: MIL ● MAMLの拡張手法。MAMLが汎用的なので魅力ではある。 ○ ○ ● 後続論文が(同じ研究所から)3,4つ出てる ○ ○ ● MAML: どんなタスクでも few-stepの学習でtuningが終わるような、 普遍的な初期パラメータを求める手法。 タスクごとにfinetuning的なことをする。 人間のデモを使えるようにする test時にタスクを複数組み合わせたデモを見せる イマイチな点 ○ ○ ○ ○ デモがないと思い出せない ■ いろんなタスクにすぐに切り替えるためには、 モデルのパラメータをタスクごとにまるっと保存しなければならない リーチ、プッシュなど、基本的なポリシーまでいちいち finetuningにかけられてしまう。 精度 実装がスパゲッティ
ベースライン: MIL ● 精度は今ひとつ
提案手法: TecNets ● 『Task Embedding Net』 + 『Control Net』 ○ ○ ○ 『Task Embedding Net』でデモからsentence(タスク情報のベクトル )を求めて 『Control Net』に毎フレームぶち込む End2Endで同時に学習。 同じタスクなら物体の位置等変わってもこなせるようになる。 == 同じタスクに対して高い汎化性を出せるようになる。
Task Embedding Net ● 実はかなりせこい ● ● ● 入力:最初と最後のフレーム conv層*4+fc層*3のシンプルなCNN MILとほぼ同じ ○ ↓MILの図
Task Embedding Net ● 基本的なlossはmetric loss ● metric loss ○ 『ラマ』と『イヌ』の例 ● 同じクラス 同士 ○ ○ ○ ○ 違うクラス 同士 s^j_k: k番目のデモの sentence s^j: s_k^jの平均(をnormで割ったもの) Σ^j: タスクj τ^j_k: タスクjのk番目のデモ
Control Net ● ● 入力:現在の画像とsentenceベクトル。 conv層*4+fc層*3のシンプルなCNN ● 基本的にはMIと同じ↓
Control Net ● 基本のloss: Behavior Cloning ● ○ デモの画像を見て、同じ actionを出力するよ うに学習。
実際の学習の流れ ● ● 予めタスクの数だけ sentenceを用意しておく。 qは実際の使用をイメージ したクエリ用のデモ
最終的な目的関数 ● ● これを最小化すれば、どちらのモデルも最適化される。
最終的な目的関数
実験結果 ● ● MILの実験 デモでvisionだけ使える場合、 大きく精度を上回った。
実験結果 ● タスクのembedding(実機)
その他の機能 ● ● > Having such an expressive space would not only allow for few-shot learning, but also opens the possibility of inferring information from new and unfamiliar tasks in a zero-shot fashion, such as how similar a new task may be to a previously seen one 若干違う始めてのタスクに出会ってもできる ● モデル的にzero-shotでもできる可能性もある。 ○ 初期状態だけでタスクが決まる場合 ■ ドア/引き出しを開ける /閉める
実装パート ● torch沼へようこそ
実装ポイント ● ● ● ● ● LayerNorm Taskset/TaskLoader loss_all += loss & loss.backward は危険かも cos類似度lossの注意 紹介する方法が本当に良いのかわかんないので別解ありそうだったら教えてください…
Task Embedding Net ● シンプルなCNN
Control Net ● ● シンプルなCNN sentenceのconcatがちょっとトリッキー
LayerNorm ● BatchNormより良かったり悪かったりす るらしい ○ ● LayerNormの挙動→ ○ ● バッチサイズ依存ではない (個人的にありが たい。実装ミスが減る ) 各データのある中間層での値すべての平均 と分散で出力を標準化 elementeise_affine=True ○ ○ 標準化後に各要素 (ここではh*125*125の要 素)それぞれに対して *weight+biasをする。 パラメタがすごく (h*125*125個)増える
torch_utils.Taskset / TaskLoader ● torch.utils.data.Dataset/DataLoaderを参考にした
Dataset/DataLoader ● init時にあるタスクのgif とpklのpathを受け取 り、 __getitem__で 1frameのvisionと actionを返す ● DataLoader↓
Taskset/TaskLoader ● ● ☆ すべてのタスクのgifと pklの場所を保持し、 __getitem__で 1つのタスクの1つ~複数 のデモを管理する DataLoderを渡す。 “q” => “U” => TaskLoader↓ TaskLoaderは出力がtorch.Tensorではないので、 torch.data.Dataset/DataLoaderを Taskset/TaskLoaderの代わりに使うことができなかった。
loss_all += loss & loss.backward は危険かも ● 入力を変えつつlossを貯め続けてからbackwardしてるつもりでも 入力情報は蓄積し続ける(後述)。 ● ● →いちいちbackwardしとけばおk(後述) Bには64個のタスクが含まれるので、 特にL_ctrを集めるときのメモリ使用量が爆発する
loss_all += loss & loss.backward は危険かも ● 入力情報は勾配の計算に使われるので確保しておく必要がある
loss_all += loss & loss.backward は危険かも ● multi backward法 ○ ● 勝手に名前つけた https://github.com/naruya/maml-py torch/blob/develop/notebooks/pyto rch_autograd.ipynb
loss_all += loss & loss.backward は危険かも ● loss周りの実装
cos類似度lossの注意 ● 片方は固定のnetworkを使うか両方更新する かが必要。 ● 今回、embの絶対値を限りなく大きくして real-fakeを0に近づける局所解に陥りまくっ た。 ○ どっちもemb_netの出力を使い、メモリ節約のため片 方はno_gradにしていた。
retain_graph=True ● ● ● 迷ったらTrue 計算時間がほとんど変わらなかったらそのまま メモリがヤバかったら考える。
実験結果 ● ● ● うーむ embeddingだけ学習が進んだ 十分学習した後でもlossのオーダーが違う
おまけ: MILの実験(未だ格闘中) ●
おわり