電腦視覺相關技術 Pooling(池化)與Dimension Reduction(維度縮減)
前情提要
在電腦視覺中,目前最有效的技術幾乎都是來自於深度學習這種技術。深度學習屬於機器學習的分支,而機器學習則是用來實現人工智慧的一門領域。
Pooling用在哪裡
言歸正傳,在深度學習中,我們通常會使用包含Counvolution Layer(卷積層)的神經網路,卷積層可以從圖片中萃取特徵,讓神經網路可以透過特徵來對圖片進行分類。而卷積層通常都會連接一個Pooling Layer(池化層),這個池化層通常有兩個作用:
1. 維度縮減 (Dimension Reduction)
在高解析度的圖片中,因為像素較多所以需要較多的運算資源,如果使用5*5的pooling方法,這5*5區間中的像素只會保留其中1個,像素會減少25倍。
ex: 500*500 pixels >> ( 5*5 pooling) >> 100*100
2. 對於旋轉、位移能保有不變性的特徵的特徵萃取
保有不變性的特徵表示在進行旋轉與位移時,依然能夠維持受改變的特徵。因為有效的特徵往往會出現在圖片中的不同位置,萃取有旋轉、位移不變性的特徵,通常會讓模型有更好的效果。
進行pooling時,事實上,會先對圖片切塊,並同時對每一塊做維度縮減,而這種維度縮減會同時造成 a. 隨機性的旋轉 b. 隨機性的位移。
接下來會針對維度縮減的部分做深入一點的分享。
「為什麼需要維度縮減」
在深度學習中,我們對維度縮減通常的理解就是減少特徵以減少運算量。
但如果更深入的理解其中意義,我們應該思考維度其實就是特徵,維度縮減事實上會導致特徵喪失,但特徵喪失卻有其好處。
舉例而言: 維度詛咒。
對於深度學習或其他特定算法而言,高維的特徵會非常難以訓練,這些維度詛咒大部分都是相似或相關的,不過在不同的演算法上發生時,其影響截然不同。
維度詛咒的項目留待下次討論
而想要避免維度詛咒,最直觀的解決方法就是進行維度縮減。
舉例來說:
在這次武漢肺炎的蔓延中,我們會有相當多的消息,假設我們萃取出消息中的關鍵字,將他們組成一個龐大的資料集。而我們想利用這個資料集來預測下一周病例發展狀況,我們可以使用深度學習模型來做這件事。
但首先我們很直觀的可以理解到,會有非常多的關鍵字,而且每一個關鍵字可能都來自不同的語系,或是地區、平台,所以恐怕不能混之一談。
那麼有這麼多的關鍵字,就相當於一個高維度的特徵組合,直接使用一定會難以訓練,甚至無法訓練。
這個時候我們可以利用維度縮減的技術,來將特徵減少,並進而使模型能夠訓練,而且有更好的特徵可以被使用,也可以將有些相似的特徵區分開來。
這種維度縮減的效果,對於非監督式學習的分群問題會非常非常重要,因為他們往往是使用「距離」來進行任務。
補充: 常見的維度縮減方法
- PCA (Principal Component Analysis
- LDA (Linear Discriminant Analysis)
- t-SNE (t-Distributed Stochastic Neighbor Embedding)
參考:
「Pooling的意義」
https://www.quora.com/What-is-the-motivation-for-pooling-in-convolutional-neural-networks-CNN
「為什麼需要維度縮減」
「維度詛咒」
https://www.quora.com/What-is-the-curse-of-dimensionality