Multi-task Learning的三個小知識

2021-03-02 AINLP

本文譯自Deep Multi-Task Learning – 3 Lessons Learned by Zohar Komarovsky

在過去幾年裡,Multi-Task Learning (MTL)廣泛用於解決多個Taboola(公司名)的業務問題。在這些業務問題中, 人們使用一組相同的特徵以及深度學習模型來解決MTL相關問題。在這裡簡單分享一下我們做MTL時學習到的一些小知識。

小知識第一條:整合損失函數

MTL模型中的第一個挑戰: 如何為multiple tasks定義一個統一的損失函數?最簡單的辦法,我們可以整合不同tasks的loss function,然後簡單求和。這種方法存在一些不足,比如當模型收斂時,有一些task的表現比較好,而另外一些task的表現卻慘不忍睹。其背後的原因是不同的損失函數具有不同的尺度,某些損失函數的尺度較大,從而影響了尺度較小的損失函數發揮作用。這個問題的解決方案是把多任務損失函數「簡單求和」替換為「加權求和」。加權可以使得每個損失函數的尺度一致,但也帶來了新的問題:加權的超參難以確定。

幸運的是,有一篇論文《Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics》通過「不確定性(uncertainty)」來調整損失函數中的加權超參,使得每個任務中的損失函數具有相似的尺度。該算法的keras版本實現,詳見github。

小知識第二條:調整學習率 learning rate

在神經網絡的參數中,learning rate是一個非常重要的參數。在實踐過程中,我們發現某一個learnig rate=0.001能夠把任務A學習好,而另外一個learning rate=0.1能夠把任務B學好。選擇較大的learning rate會導致某個任務上出現dying relu;而較小的learning rate會使得某些任務上模型收斂速度過慢。怎麼解決這個問題呢?對於不同的task,我們可以採用不同的learning rate。這聽上去很複雜,其實非常簡單。通常來說,訓練一個神經網絡的tensorflow代碼如下:

optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)

其中AdamOptimizer定義了梯度下降的方式,minimize則計算梯度並最小化損失函數。我們可以通過自定義一個minimize函數來對某個任務的變量設置合適的learning rate。

all_variables = shared_vars + a_vars + b_vars
all_gradients = tf.gradients(loss, all_variables)

shared_subnet_gradients = all_gradients[:len(shared_vars)]
a_gradients = all_gradients[len(shared_vars):len(shared_vars + a_vars)]
b_gradients = all_gradients[len(shared_vars + a_vars):]

shared_subnet_optimizer = tf.train.AdamOptimizer(shared_learning_rate)
a_optimizer = tf.train.AdamOptimizer(a_learning_rate)
b_optimizer = tf.train.AdamOptimizer(b_learning_rate)

train_shared_op = shared_subnet_optimizer.apply_gradients(zip(shared_subnet_gradients, shared_vars))
train_a_op = a_optimizer.apply_gradients(zip(a_gradients, a_vars))
train_b_op = b_optimizer.apply_gradients(zip(b_gradients, b_vars))

train_op = tf.group(train_shared_op, train_a_op, train_b_op)

值得一提的是,這樣的trick在單任務的神經網絡上效果也是很好的。

小知識第三條:任務A的評估作為其他任務的特徵

當我們構建了一個MTL的神經網絡時,該模型對於任務A的估計可以作為任務B的一個特徵。在前向傳播時,這個過程非常簡單,因為模型對於A的估計就是一個tensor,可以簡單的將這個tensor作為另一個任務的輸入。但是後向傳播時,存在著一些不同。因為我們不希望任務B的梯度傳給任務A。幸運的是,Tensorflow提供了一個API tf.stop_gradient。當計算梯度時,可以將某些tensor看成是constant常數,而非變量,從而使得其值不受梯度影響。代碼如下:

all_gradients = tf.gradients(loss, all_variables, stop_gradients=stop_tensors)

再次值得一提的是,這個trick不僅僅可以在MTL的任務中使用,在很多其他任務中也都發揮著作用。比如,當訓練一個GAN模型時,我們不需要將梯度後向傳播到對抗樣本的生成過程中。

感謝閱讀,希望本文對您有所幫助!謝謝!

如果覺得文章對您有幫助,可以關注本人的微信公眾號:機器學習小知識

推薦閱讀

AINLP年度閱讀收藏清單

自動作詩機&藏頭詩生成器:五言、七言、絕句、律詩全了

From Word Embeddings To Document Distances 閱讀筆記

模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法

這門史丹福大學自然語言處理經典入門課,我放到B站了

可解釋性論文閱讀筆記1-Tree Regularization

徵稿啟示 | 稿費+GPU算力+星球嘉賓一個都不少

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。


相關焦點

  • Multi-Task Learning的幾篇綜述文章
    尋找輔助任務的方法:Zhang Y, Yang Q, "An overview of multi-task learning", arXiv 1707.08114, July 2018任務聚類 參數task relation learning approach 任務關係學習 參數decomposition approach 分解 參數和其他機器學習方法結合:semi-supervised learningactive learningunsupervised learningreinforcement
  • Multi-task Learning(Review)多任務學習概述
    Advances in Neural Information Processing Systems papers.nips.cc/paper/41[7] Distributed Multi-task Relationship Learning arxiv.org/abs/1612.0402[8] Regularized multi-task learning doi.org/10.1145/1014052
  • Multi-task Learning and Beyond: 過去,現在與未來
    >之前介紹的幾個 task-weighting 方法都基於一些特定的 heuristic,很難保證在 MTL optimisation 取得 optimum.比如,MTL 其實就是一種特殊形式的 AL,我們可以把其中任意一個 task 作為 primary task,其他剩餘的 task 看作為 auxiliary task。在 MTL 裡,我們默認所有 task 與 task 存在一種 mutual beneficial 的關係,因此所有 learning tasks 都 benefit 到這種相關性。
  • Multi-Label Classification with Deep Learning
    In this tutorial, you will discover how to develop deep learning models for multi-label classification.
  • 深度學習中的多任務學習(Multi-task-learning)——keras實現
    來自 | 知乎地址 | https://zhuanlan.zhihu.com/p/107737884作者 | 王鵬編輯 | 機器學習算法與自然語言處理公眾號本文僅作學術分享,若侵權,請聯繫後臺刪文處理多任務學習(Multi-task
  • 分類問題-----多標籤(multilabel)、多類別(multiclass)
    結論是PT3效果很好,PT4較好也應用比較廣泛,PT6由於數據不平衡(如果標籤密度太小會導致大量的-1)。另外,以下幾個問題是需要關注和進一步研究的Dimensionality Reduction 降維Label Dependence 標註依賴Active learning 主動學習Multi-instance multi-label learning (MIML) 多實例多標籤Multi-view learning.
  • 從Few-shot Learning再次認識機器學習
    當我看完 《Generalizing from a few examples: A survey on few-shot learning》 這篇文章的時候,我對於機器學習又有了一種新的,與其說它讓我理解了什麼是Few-shot learning,不如說它讓我明白了如何更好地處理機器學習問題,不論是科研還是在實際應用當中(可以說是所有其它模型算法),都可以從文章指出的三個角度去考慮:數據、模型、算法
  • 小樣本學習(Few-shot Learning)綜述
    在訓練階段,會在訓練集中隨機抽取 C 個類別,每個類別 K 個樣本(總共 CK 個數據),構建一個 meta-task,作為模型的支撐集(support set)輸入;再從這 C 個類中剩餘的數據中抽取一批(batch)樣本作為模型的預測對象(batch set)。
  • mlr3_建立task
    ()方法給出了任務的簡短總結:它有32個觀察結果和3列。= mlr_tasks$get("iris")print(task_iris)## <TaskClassif:iris> (150 x 5)## * Target: Species## * Properties: multiclass## * Features (4):## - dbl (4): Petal.Length, Petal.Width
  • 如何用 Python 和 BERT 做多標籤(multi-label)文本分類?
    你完全可以舉一反三,直接使用它來做多類別(multi-class)分類任務,例如三分類情感分析(正向、負向、中性)之類。這時候,《如何用 Python 和 BERT 做中文文本二元分類?》一文中其他的代碼,都是可以復用的。你只需要調整一下測量指標(Evaluation Metrics)。
  • 這裡有三點經驗
    Zohar Komarovsky機器之心編譯參與:Tianci LIU、路Taboola 算法開發者 Zohar Komarovsky 介紹了他們在利用深度學習模型實現多任務學習(MTL)時遇到的幾個典型問題及解決方案
  • 【NLP筆記】Few-shot learning 少樣本學習
    ,這裡shot 有計量的意思,指少樣本學習,機器學習模型在學習了一定類別的大量數據後,對於新的類別,只需要少量的樣本就能快速學習,對應的有one-shot learning, 一樣本學習,也算樣本少到為一的情況下的一種few-shot learning, 這裡的少樣本學習的研究領域與遷移學習有一大部分交集部分,即在源域有足夠多樣本,而在目標域樣本不足。
  • Google's Learning Software Learns to Write Learning Software
    In a project called AutoML, Google’s researchers have taught machine-learning software to build machine-learning software.
  • The Difference Between 'Task' and 'Assignment'(一)
    正如你可能知道的,「task」和「assignment」這兩個名詞描述的都是你必須完成的活動。 A task is something you have to do.「task 」是你必須要做的事情。 An assignment is usually a task that someone gives you to do.「assignment」通常是某人指派給你的活。 A task describes an activity that can be done in your daily life.
  • 春節充電系列:李宏毅2017機器學習課程學習筆記19之遷移學習(Transfer Learning)
    本文討論機器學習中transfer learning的若干主要問題:model fine-tuning, multitask learning, domain-adversarial training 以及 zero-shot learning。話不多說,讓我們一起學習這些內容吧。
  • Few-shot Learning用於個性化推薦冷啟動的探索
    人類對於動物的這種學習能力的整個過程可以歸納成神經網絡訓練模式:   訓練階段,在訓練集中隨機抽取 C 個類別,每個類別 K 個樣本(總共 C*K 個數據),構建一個meta-task,作為模型的支撐集(support set)輸入;再從這 C 個類中剩餘的數據中抽取一批(batch)樣本作為模型的預測對象(batch set)。
  • 【論文推薦】最新五篇命名實體識別(NER)相關論文—對抗學習、語料庫、深度多任務學習、先驗知識、跨語言語義
    Inspired by adversarial learning, our approach uses a common Bi-LSTM and a private Bi-LSTM for representing annotator-generic and -specific information.