關於MAML的那些事

多餘的元學習廢話也不多說,直接上乾貨:

算法:
在這裏插入圖片描述
關於學習率:
兩個學習率a、b,要知道,爲了一步優化探測task最優參數的位置(inner loop),我們必須使用稍微大點的學習率a,這叫一步到位。
而優化你真正模型參數的學習率應該是很小的(outer loop),因爲他必須在參數空間中經過漫長的迭代,慢慢找到最合適的位置。

關於損失函數:分類交叉熵,迴歸MSE

關於1階和2階的MAML:
首先,Nway K shot ,support set 和query set的知識就不介紹了。
在這裏插入圖片描述
看這個圖,訓練的過程中,在每一個task中(上面算法中的4-6),我們在support set 上由g1得到θm,在query set 上由θm得到loss,如果一個meta_batch(內循環)裏面有多個task,我們是需要將這些task的loss求和,然後在外循環中更新模型參數(就是上面算法的第8步),此時φ0變爲了φ1,然後一步一步走外循環的迭代。這是正向。

那求梯度呢?L1’(φ1) =L1’(φ0) * (φ1/φ0)’ ,這個兩個導數相乘的就是2-order,而近似以後的L1’(φ0)就是1-order.
作者通過理論推導,證明了兩種方法理論差距不是很大,但是1-order會快很多。

關於算法理解
一、 爲什麼我們要在訓練集上更新一次參數,然後測試集的損失值傳回外循環,進行下一步的更新?

1.如果只在訓練集上更新損失值,那麼無法合理利用測試集,相當於pretraining預訓練。如果此時你直接反傳,繼續優化,你的model參數就沿着這個專一的任務越走越遠了。
2.訓練集數量較少,用於傳損失值不具有參考性。(N way K shot 只約束了訓練集的數量,並沒有約束測試集的數量,按理說測試集的數量增加,對模型的性能會越好。)
3.在訓練集上更新參數,其實是可以更新很多次的,但是爲了簡化運算量,因此我們只更新了一次。我們在訓練集上更新一次參數,然後將測試集上的損失值傳回,是因爲我們要找的並不是使當前模型最優的參數,而是在進行梯度更新以後能夠收斂到最優損失值的參數。即算法要根據訓練集產生一個可以很好適應測試集的agent,這樣經過多個任務的訓練之後也就學會了快速學習的方法。

在這裏插入圖片描述
MAML的優點:
可用於小樣本學習,快速適應
可以用於迴歸、分類和增強學習多種任務上。
MAML的缺點:
1.模型結構是固定的,在算法中,模型的圖像輸入尺寸也是一定的,因此泛化性不好。
2.任務可以不同,但是需要有一定的相關性
3.二次梯度可能不穩定
4. Robustness一般:不是說MAML的robustness不好,因爲也是由一階online的優化方法SGD求解出來的,會相對找到一個flatten minima location。然而這和非gradient-based meta learning方法求解出來的model的robust肯定是沒法比的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章