多任務學習 是什麼?

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(判斷題):如果其中一個任務非常奇怪,和其他任務差很多,還硬放一起學,風險是什麼? → 可能出現負遷移,讓本來簡單的任務也變差。

相關術語

常見問題

多任務學習一定比較好嗎?

不一定,任務相關才有機會互利。

共享越多越好嗎?

也不是,共享太多會讓任務細節被沖淡。

它和集成學習一樣嗎?

不一樣,集成是多個模型投票,多任務是單一模型一起學。