---
title: Multiclass, Multilabel 以及 Multitask 的區別
date: 2020-08-12
is_modified: true
disqus: cynthiahackmd
categories:
- "智慧計算 › 人工智慧"
tags:
- "AI/ML"
- "煉丹常識"
---
{%hackmd @CynthiaChuang/Github-Page-Theme %}
<br>
<p class="illustration">
<img src="https://i.imgur.com/elR7EfU.png" alt="MultiLabel Classification">
Multilabel Classification(圖片來源: <a href="https://suhitaghosh10.github.io/EurLexClassification/">EurLex classification </a>)
</p>
最近在糾結 Multiclass 與 Multilabel 的區別,順便頭疼他們該採用的 activation 與 loss function。
<!--more-->
## Binary classification
在開始前,我們先提提最常見的 Binary classification 二元分類,也就是學習 Yes/No 。
在此類型的分類任務中,會將給定訓練資料分成兩類別進行訓練,常見的二元分類(或者說我最近常見的?)包含:
1. 診斷病患是否患病?
2. 質量控制,確定生產的商品是否滿足規格?
3. 辨識此圖片是貓或狗?
實務上訓練時,標籤通常會標成 `[0] 與 [1]`。另外,在二元分類的 activation 與 loss function 會選擇 ==Sigmoid== 與 ==Binary cross-entropy==。
P.S. 是說選 Softmax 也沒關係?因為在二元分類情况下 Softmax 會退化成 Sigmoid。
## Multiclass classification
而 Multiclass classification 多類別分類。顧名思義,在此類型的分類任務中,會具有兩個以上類別的分類任務,但每個樣本只能被標記為一個類別。
舉例來說,給定一組動物圖片,牠們可能是貓、狗或是熊。在這情況下,每隻動物會被標註成這三類中的其中一種,且不可能同時被標註兩種類別,因為一隻動物不可能同時是貓又是狗。
實務上訓練時,標籤通常會標成
```
貓, 狗, 熊
[[0, 0, 1]
[0, 1, 0]
[1, 0, 0]]
```
不過也看過有人的訓練集標註是
```
貓=0, 狗=1, 熊=2
[[0], [1], [2]]
```
而此訓練任務的 activation 與 loss function 會選擇 ==Softmax== 與 ==categorical cross-entropy==。使用 Softmax 原因在於其輸出值是相互關聯,且其機率的總和始終為 1,因此一旦提升某一類別的機率時,其他類別的機率必須會相對應減少,以符合每個樣本只能被標記一類別的定義。
## Multilabel classification
<p class="illustration">
<img src="https://i.imgur.com/SiUMrKl.png" alt="Multilabel Classification">
Multillabel Classification(圖片來源: <a href="https://gombru.github.io/2018/05/23/cross_entropy_loss/">Raúl Gómez blog</a>)
</p>
Multilabel classification 多標籤分類任務,在此訓練任務中存在著兩個以上類別,但每個類別之間並不互斥。
舉例來說,進行文本分類時,一篇文章可能可以同時是 \{教育、政治\} ,這兩個類別;另一篇文章也可能屬於 \{財經、政治、國際\} ,三個類別。
實務上訓練時,標籤通常會標成:
```
教育, 政治, 財經, 國際
[[1 0 0 1]
[0 0 1 1]
[0 0 0 0]]
```
而 activation 與 loss function 則會選擇 ==Sigmoi==d 與 ==binary cross-entropy==。使用 Sigmoid 是因為它分別處理各個原始輸出值,使結果相互獨立。
## Multitask classification
最後一個 Multitask classification,這是我在找資料過程中發現的。在這類型的訓練任務中一樣存在著兩個以上類別,且每個類別之間並不互斥,但與 Multilabel 不同的地方在於每個類別的存在兩種以上的可能。
因此它的資料集標註可能會是類似這樣:
```
[[1 0 2 1]
[0 0 1 1]
[0 2 0 0]]
```
<br>
**2020-08-12 更新**
後來發現如果是在說 Multitask 時,大家會傾向是在說 **Multitask Learning(多任務學習)**。一般的學習,一次只學習一個任務,無論是上述所提到的分類文章或是分類貓狗,他們實際上都只學習一件事,所以稱作 Single Task Learning(單任務學習)。
而多任務學習,則是將多的 ==相關的(related)== 任務放在一起學習,在常見的多任務學習網路架構中,他們會共用前半部的參數,以從中習得任務之間的關聯性。
<p class="illustration">
<img src="https://i.imgur.com/94EpzyP.png" alt="Multitask Learning Architecture">
Multitask Learning Architecture(圖片來源: <a href="https://arxiv.org/pdf/1611.00851.pdf">論文</a>)
</p>
## 參考資料
1. [Multilabel classification format](https://scikit-learn.org/stable/modules/multiclass.html#multilabel-classification-format) 。檢自 scikit-learn (2020-05-21)。
2. [What is the difference between multiple outputs and multilabel output?](https://www.researchgate.net/post/What_is_the_difference_between_multiple_outputs_and_multilabel_output)。檢自 Researchgate (2020-05-21)。
3. 东明山庄 (2016-04-26)。[Multi-class, Multi-label 以及 Multi-task 问题](https://blog.csdn.net/u012176591/article/details/51251252) 。檢自 金良山庄 CSDN博客 (2020-05-21)。
4. Leoch007 (2018-06-12)。[Multi-class Multi-label Multi-task区别](https://www.geek-share.com/detail/2739811489.html) 。檢自 极客分享 (2020-05-21)。
5. 協同撰寫。[Multi-label classification](https://en.wikipedia.org/wiki/Multi-label_classification) 。檢自 Wikipedia (2020-05-21)。
6. Anu (2019-02-10)。[What is the difference between Multitask and Multiclass learning](https://stats.stackexchange.com/a/391805)。檢自 Cross Validated - StackExchange (2020-05-21)。
7. 深度学习于NLP (2017-06-06)。[模型汇总-14 多任务学习-Multitask Learning概述](https://zhuanlan.zhihu.com/p/27421983)。檢自 知乎 (2020-08-12)。
## 更新紀錄
:::spoiler 最後更新日期: 2020-08-12
- 2020-08-12 更新:新增 Multi-task 說明
- 2020-05-27 發布
- 2020-05-24 完稿
:::
{%hackmd @CynthiaChuang/Github-Page-Footer %}