1. 程式人生 > >機器學習:幾種分類識別問題

機器學習:幾種分類識別問題

分類和識別是機器學習領域非常常見的一類問題,比如之前非常火熱的 ImageNet 挑戰賽,還有人臉識別,人臉表情識別等,接觸機器學習的一般來說,都是從識別開始,因為識別比較簡單直觀,而且大家都對目前識別領域比較常見的幾個資料集比如 MNIST, CIFAR-10, CIFAR-100 還有 ImageNet 等都比較熟悉了,這些都是為了解決分類識別問題而設計的資料集。

隨著深度學習的蓬勃發展,在分類識別領域,又分化出來很多不同的方式,雖然這些概念在深度學習出來之前,就已經有了,但是有了深度神經網路結合大資料,以前的這些概念又被重新翻出來,不管是新瓶裝舊酒,還是煥發了第二春,反正這些概念最近又開始被吵的火熱了,什麼 few-shot learning, zero-shot learning, incremental-learning,meta-learning 之類的又開始受到了越來越多的關注。雖然這些概念不僅僅用於分類識別,不過用分類識別問題來解釋這些概念簡單直白。

一般來說,給定一個數據集 X = { x i } i =

1 N \mathcal{X}=\{ \mathbf{x}_i \}_{i=1}^{N} ,這個資料集屬於 K K 類,假設標籤空間為 Y
= { y j } j = 1 N \mathcal{Y}=\{ \mathbf{y}_j \}_{j=1}^{N}
x \mathbf{x} 一般表示為影象,比如手寫數字的MNIST資料集,一張圖就是一個數字比如 0, 1, 2, 3, 4 等等,或者ImageNet 的影象,一張圖表示某一個物體,比如貓啊, 狗啊什麼的, y \mathbf{y} 表示一個標籤,就是我們常說的 one-hot 向量,比如 MNIST 的標籤是 10 維的向量,ImageNet 的標籤是 1000 維的向量, 只有一個位置是1,其他位置都是0,每個類的標籤按列拼在一起,就可以組成一個標準的單位矩陣。分類問題,簡單來說,就是把屬於同一類的影象聚到一起,都是手寫數字 0 的影象,應該都歸為一類,都是手寫數字 2 的影象,應該歸為另外一類,不能把手寫數字 8 的影象,歸到 0 這一類,所以分類問題,簡單來說,就是物以類聚。

從數學的角度上來說,分類識別就是影象到標籤的一個對映過程 :

X Y \mathcal{X} \Rightarrow \mathcal{Y}

說了這麼多,我們把什麼是分類識別問題解釋了,現在來看看,經過這麼多年的發展,學術界把分類識別問題又做了不同的劃分,根據不同的設定,著手解決不同的問題,歸納起來,主要有以下幾類:

  • 有監督學習(supervised learning)
  • 無監督學習(unsupervised learning)
  • 半監督學習(semi-supervised learning)
  • 小樣本學習(few-shot learning)
  • 零樣本學習(zero-shot learning)
  • 增量學習(incremental learning)
  • 元學習(meta-learning)
  • open question (classification in the real-world, open environment)

有監督學習

有監督學習,應該是最常見,發展最成熟的一種分類識別問題了,所謂的有監督,那就是類別的標籤是已知的,目前學術界研究的大多數分類識別問題都屬於這一類,所以我們見到的資料集一般都是帶著標籤的,這類問題,都是希望找到一個對映,影象空間到類別空間的一個對映,藉著類別標籤的 “指引”,把同一類的影象儘可能的對映到一塊,聚在一起,因為有標籤的“指引”,所以這類問題,相對來說比較容易解決,特別是隨著深度神經網路與算力的發展,各大從前的榜單都在被不斷重新整理,ImageNet 火了幾年之後,也不再舉辦了,估計這榜再刷下去也沒什麼意思了,有監督學習,發展到現在,越來越像在燒錢,比拼的是資料和計算資源。

無監督學習

有監督學習,正如上面說的,需要有標籤做“指引”,所以需要很多有標籤的資料,而且深度學習需要消耗大量的資料,有標籤的資料越來越難獲取,需要消耗大量的人力與物力。所以,就有人想,能不能研究一種學習模式,可以不需要類別標籤,也能讓模型學會分類,所以就發展出了所謂的無監督學習,無監督學習,顧名思義,是不需要類別標籤做“指引”的, 直接從資料影象中尋找每一類內在的聯絡,把同一類影象的特徵耦合在一起,不過,到目前為止,這類無監督學習的效果一直不太理想,沒有標籤的指引,模型好像很難學好。

半監督學習

介紹了有監督學習和無監督學習,接下來介紹半監督學習,半監督學習結合了有監督學習和無監督學習,半監督學習,既不需要有監督學習那麼多的有標籤資料,不過與無監督學習相比,又多了一些標籤資料做 “指引”,所以基本上一種把有標籤資料和無標籤資料混合在一起學習的一種模式。

小樣本學習 (Few-shot learning)

小樣本學習,在深度學習火熱起來之前,也有一些人研究,最近兩年,這個課題又開始受到越來越多的關注,小樣本學習,應該還是屬於有監督學習的一種,只是與常規的有監督學習相比,每一類的有標註的資料非常少,學術界經常說的的 1-shot, 5-shot 等等,就是說每一類都只有一個或者五個有標籤的樣本,這個課題的起源,是為了更好的研究模擬人的認知能力,因為人去學習識別一個東西,是不需要去看那麼多的有標籤的資料的,不過,從目前學術界發表的研究成果來看,基本還是基於 metric-learning 或者 meta-learning 的方式,利用 遷移學習的概念,先在大量的有標籤的資料上訓練網路,讓網路學到一種有效的特徵提取或者學到一套有效的模型引數,然後再在小樣本資料集上進行訓練。目前,這個方向發表出來的結果,在 Mini-Image Net 上的識別率還不是很高,還有進一步的提升空間。

零樣本學習 (Zero-shot learning)

零樣本學習,是比小樣本學習更進一步,最近兩年也變得火熱起來了, 所謂零樣本,那就是完全不需要樣本的參考,而去推斷識別新的類別,這個研究目前還處於起步階段,用到的最多的方式,就是基於屬性的識別,可以把每個類別進一步拆分成很多個不同屬性的組合,某些屬性的組合,可能就大概率的對應某個類別,所以,雖然新的類別,沒有帶標籤的樣本,但是,從之前的資料集上,可以讓模型先學習識別不同的屬性,碰到新樣本的時候,先識別出該樣本的屬性,然後再結合不同的屬性,進而判斷出該樣本屬於什麼類。

增量學習 (Incremental learning)

這個也是目前比較火熱的一個研究方向,所謂增量學習,與之前見識的學習問題不太一樣,早期的分類識別,都假設類別是已知的,並且是固定的,也就是說,我們會先分好訓練集,測試集,並且知道訓練集與測試集的類別都是已知的,但是增量學習,提出了另外一種學習問題,在真實的環境中,資料肯定不是一次性就全部給定的,而是在逐漸增加的,逐漸增加的資料,有可能是新的類別,也有可能是原來的類別,這樣的話,就需要找到一種學習策略,讓模型能夠不斷的去適應環境,增量學習最想解決的一個問題就是“引數遺忘”,我們知道,神經網路在訓練的時候,都是儘可能地去擬合它所見到的資料,如果神經在學習的過程中,只能見到當前的資料,而以前的資料無法再見到的話, 那麼之前學到的關於之前資料的性質,都將被遺忘,這就有點像狗熊掰棒子一樣,只能顧到當下,以前的全給忘了,增量學習就是想解決這個問題,讓模型隨著見到的資料越來越多,模型的識別能力可以逐步提升。

元學習(meta-learning)

meta-learning, 號稱,learning to learn,是目前比較火的一種學習策略,說通俗一點,就是希望讓模型自己學會怎麼訓練,類似 auto-ML 的一些東西,這個在 few-shot learning 領域,有些研究已經結合了 meta-learning 的思想,去訓練網路。

Open question

最後,說一些題外話,現在學術界,考慮分類識別的時候,更多的時候還是在一種可控的環境下來做,比如 ImageNet 1000 類,聽起來似乎很多,但是與真實的環境相比,這 1000 類一點也不多,目前所有主流的測評,都是基於這 1000 類來進行比較,而忽略了其他類,這就是我們所說的開放環境,學術界是不考慮開放環境的,因為開放環境太複雜,沒有辦法做,如果模型在一個封閉的環境下學習,只能認識有限的類別,那這種模型永遠沒有辦法在實際環境中工作。

所以,雖然現在 AI 引爆了一股股的熱潮,但是離通用的 AI 還很遙遠,即使是在簡單的分類識別問題上,學術界的AI 研究,很多時候,都是基於 100% 的已知可控,資料集被研究了無數遍,但是真實環境中,可能 90% 都是未知的,如何用 10% 的已知去應對 90% 的未知,這可能是機器學習最大的難點。