多任務學習 是什麼?
Multi-task Learning:多任務學習 的完整解釋
多任務學習是一種機器學習方法,旨在同時訓練一個模型來執行多個相關任務,以提升模型的泛化能力和效率。
容易混淆
多任務學習 vs 遷移學習 多任務學習:同一時間學多個任務 遷移學習:先學一個,再拿去學另一個 最關鍵的區別:先看它是在比什麼,再看它怎麼做。
多任務學習 vs 多模型 多任務學習:一個模型共享底層表示 多模型:每個任務各自訓練,資源更分散 最關鍵的區別:先看它是在比什麼,再看它怎麼做。
記住這句就好
相關任務一起學,常比單獨學更省力。
實際案例
客服 NLP 同一套模型同時做意圖辨識、情緒判斷、和關鍵資訊抽取,整體流程更快。
醫療文書 一個模型同時判斷疾病分類與症狀抽取,因為兩個任務都在看同一份病歷。
算法與應用
多任務學習最怕負遷移,任務不相干時,共享參數反而會互相干擾。 常見做法有硬共享、軟共享、和任務專屬頭。 好的設計會讓主幹學共通表示,尾端保留每個任務自己的細節。
中英對照與常見說法
| 說法 | 出現場合 |
|---|---|
| 多任務學習 | 中文正式用語 |
| 多任务学习 | 簡體寫法 |
| Multi-Task Learning | 英文原名 |
| MTL | 標準縮寫 |
| 多目標學習 | 常見混用,但嚴格說多目標最佳化是另一個領域的詞 |
兩種參數共享方式
| 硬共享(hard sharing) | 軟共享(soft sharing) | |
|---|---|---|
| 結構 | 底層完全共用,每個任務只有自己的輸出頭 | 每個任務有自己的完整網路,用正則化項拉近彼此參數 |
| 參數量 | 少 | 多 |
| 過度擬合風險 | 低,共享層被多個任務約束 | 較高 |
| 任務衝突時 | 影響大,會互相拉扯 | 影響小,各自保有彈性 |
硬共享是預設做法,因為它最省參數也最容易實作。任務之間關聯不強的時候才考慮軟共享,或改用專家混合(Mixture-of-Experts)這類讓不同任務走不同路徑的架構。
為什麼有時候會變差
多任務學習的賣點是「任務之間互相幫忙」,但實際上經常出現負遷移(negative transfer),也就是一起學反而比各自學差。
主因一,梯度衝突。 兩個任務對同一組共享參數要求相反的更新方向,合起來互相抵銷。PCGrad 這類方法就是在偵測到梯度夾角為負時,把其中一個投影掉。
主因二,損失尺度差太多。 一個任務的損失是 0.001 量級,另一個是 10 量級,直接相加等於只在訓練後者。常見對策是手動加權、用不確定性自動加權(Kendall 等人的方法),或用 GradNorm 讓各任務的梯度大小維持平衡。
主因三,資料量嚴重不平衡。 樣本多的任務主導了共享層。對策是調整取樣比例,或對小任務的損失加權。
判斷值不值得做多任務的實用準則:先各自單獨訓練當基準線。多任務版本至少要在主要任務上不輸單任務版本,才算成功。純粹為了省一個模型而犧牲主任務精度,通常不划算。
什麼場景真的適合
任務彼此相關且共用同一批輸入時效果最好,例如自駕感知(同一張影像同時做偵測、分割、深度估計)、推薦系統(同時預測點擊率與轉換率)、語音(同時做辨識與語者識別)。
一個常被忽略的好處是推論成本。三個任務一個模型跑一次,比三個模型跑三次省,這在邊緣裝置上往往才是採用多任務的真正理由。
情境判斷
Q1(直覺題):你有分類、抽取、摘要三個任務,而且資料彼此相關,最像什麼策略? → 多任務學習,因為共享表示能互相幫忙。
Q2(判斷題):如果其中一個任務非常奇怪,和其他任務差很多,還硬放一起學,風險是什麼? → 可能出現負遷移,讓本來簡單的任務也變差。
相關術語
常見問題
多任務學習一定比較好嗎?
不一定,任務相關才有機會互利。
共享越多越好嗎?
也不是,共享太多會讓任務細節被沖淡。
它和集成學習一樣嗎?
不一樣,集成是多個模型投票,多任務是單一模型一起學。