---
# System prepended metadata

title: 'Multiclass, Multilabel 以及 Multitask 的區別'
tags: [智慧計算 › 人工智慧, 煉丹常識, AI/ML]

---

---
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 %}