多目标机器学习_NIPS2018 - 用多目标优化解决多任务学习
題外話: 多任務學習可以說是機器學習的終極目標之一, 就像物理學家在追求統一所有力一樣, 個人認為機器學習也在追求一個模型解決幾乎所有問題. 雖然我們現在還離這個目標很遠, 但是多任務學習在實際應用中是非常有價值的, 對于像BERT這么復雜的模型, 用一個模型解決多個問題才能物盡其用啊. (稍稍推廣下bert-multitask-learning)
這是Intel在NIPS 2018上發表的關于多任務學習的文章: Multi-Task Learning as Multi-Objective Optimization. 多任務學習其實有很多種做法, hard parameter sharing, soft parameter sharing等等, 但是個人認為hard parameter sharing更加具有實用價值, 這里不展開說了. 這篇文章屬于用hard parameter sharing 做多任務學習, 通過loss weighting來提升效果, 而本文的主要貢獻是對這個weight的快速計算. 作者在文章中說了以下事情:
文章的idea其實很簡單, 但是理論比較多, 如果對理論不感興趣的話了解一下作者做了什么工作就好了: 通過鏈式法則的推導, 并證明了, 在梯度為full rank的情況下, 我們不需要對每個任務的向后傳播都算到底(所有層), 只需要算到共享模型的最后一層, 用這個去解出各個任務的權重, 既能加快速度, 又能得到一個比較好的解. 下面我會嘗試總結一下作者的推導過程.
符號解釋
- : 任務以及任務集合
- : 模型參數, 共享的模型參數
- : 任務權重
- : 學習率
- : 的最后一層輸出
- : 損失函數
- : 輸出空間和任務t的標簽空間
多目標優化解決多任務學習的一般形式
多任務學習可以一般可以表示為最小化下面式子:
帕累托最優
我們可以想象, 對于不同的
的取值, 我們可以學到不同的參數 , 那么我們怎么判斷參數之間的優劣呢? 顯然的, 如果對于參數 , 在每個任務上的表現都大于等于 , 那么我們就認為 比 要好(dominiate). 按照這個條件, 如果參數 不差于任何參數,那么 則稱為帕累托最優.用求解任務權重解帕累托最優
這是問題的第一步轉換, 理論基礎是這篇文章(我沒看). 文章證明了, 下面式子的解要么是帕累托靜止點(帕累托最優的必要條件), 要么是一個能優化所有任務的好的優化方向.
我們可以看到,
的梯度和 是沒啥關系的, 只作用在 的梯度上, 因此向后傳播的過程為:計算過程寫下來就是原文里面的Algorithm 2:
簡化上述計算
從Algorithm 2第8行可以看到, 對于share parameters的梯度, 需要對每個任務都算一遍, 當任務比較多的時候, 運算復雜度高, 因此, 作者提出了第二步轉換, 也是本文的主要工作.
復合函數求導的鏈式法則可得上界:
其中Z為輸入的最后一層的表示. 去掉與alpha不想關的項, 可得:
然后作者證明了
在full rank 的情況下, MGDA-UB(Multiple Gradient Descent Algorithm – Upper Bound, 就是上面的那個公式)的解要么是Pareto stationary point(Pareto optimal的必要條件), 要么是一個能優化所有任務的好的優化方向. 那么算法修改的地方是Algorithm 2中的第8行的梯度計算, 從對所有share parameters算梯度改成對最后一層表示的梯度.實驗結果
作者在MultiMNIST和CelebA數據集上取得了超過single task的結果. 訓練時間也極大地縮短了(任務越多, 訓練時間差距越大). 從作者的實驗結果也可以看到, 簡單的average的效果其實是不如single task的.
需要注意的是, 在本文我忽略了很多過程, 只把我認為的最關鍵的部分拿了出來, 主要是為了簡單敘述一下作者簡化計算的方法.
原文鏈接: https://github.com/JayYip/deep-learning-nlp-notes/blob/master/%E7%94%A8%E5%A4%9A%E7%9B%AE%E6%A0%87%E4%BC%98%E5%8C%96%E8%A7%A3%E5%86%B3%E5%A4%9A%E4%BB%BB%E5%8A%A1%E5%AD%A6%E4%B9%A0.md
總結
以上是生活随笔為你收集整理的多目标机器学习_NIPS2018 - 用多目标优化解决多任务学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delphi ui编辑工具源码_一种无侵
- 下一篇: 深度学习 占用gpu内存 使用率为0_深