我卻選了另外一條路,它荒草萋萋,十分幽寂,顯得更誘人,更美麗;雖然在這條小路上,很少留下旅人的足跡。

12月5日,星期三。黃繼武教授邀請 Jay Kuo 來作報告 「Convolutional Neural Network via Feedforward Design」 。前前後後幾乎沒有任何宣傳,除了信工樓門前的海報和微信羣裏一條很快被刷過的消息,幾乎沒有任何痕跡,報告也是在一個小教室裏進行的。但是還是很多人來聽,大家坐的滿滿的(還有站著聽的)。Kuo 完美還原了他在 IEEE 2018 上的報告。這短短一個半鐘的報告,我看到的是學術工作者的熱情和自信(比某ASAC強了不知多少)。

總體印象

Kuo 是機器學習的前輩,看不慣幾年來的調參浪潮,因此自己開疆拓土提出了一套不用反向傳播(用傳統方法 PCA)的 CNN。雖然我不敢苟同,但是一代人有一代人熟悉的方法,這個世界需要弄潮兒,也需要擺渡人。我不會去跟著前輩的思路走,但是我覺得前輩的思路對於我們理解調參還是大有裨益的。

Kuo 對當前形式的認識

Kuo 認為深度學習在學術界和工業界都是強弩之末,對於只會調參的學生有些很鐵不成鋼(沒錯,我們總是老師帶過的最差的一屆)。

在學術界,深度學習平面發展,虛假繁榮:大多數研究只在新 task 上生成一個新數據集研究,理論模型進步緩慢;研究者並不瞭解參數的實際含義,在 Github 的基礎上抄抄改改。

在工業界,深度學習資本冷卻,人才飽和:大多數企業只是防禦性佈局,目前只有人臉識別具有較大實用意義;工具使調參門檻降低,大量從業者湧入。

所以 Kuo 認為得進行理論創新,「拋棄」 並超越 BP。

Kuo 對 CNN 的認識

儘管 CNN 已經取得了 state-of-the-art 的地位,但是仍然存在一些問題:over-parameters:大量的參數進行反向傳播,數學上難以解釋;numerous tricks:複雜的網路結構、Dropout 等讓網路變得難以理解;sensitivitity:受到攻擊時魯棒性差。

針對這些問題 Kuo 搞了一個新的 CNN 模型 FF CNN,模型有三個優點:不需要反向傳播,因此速度更快,資源佔用少;每一個 layer 可解釋,layer 也不多,沒有深度學習的黑箱;是一個半監督(甚至可以是無監督)模型,不依賴於 label。

Kuo 正在改進的缺點有:準確率目前略低於帶有 BP CNN,但是仍有提升空間;雖然沒有明確說明,但是模型應該是 problem special 的,需要根據數據集特點手動調整。

此外,Kuo 設計了兩個方面的實驗對比 FF CNN 和 BP CNN:分類問題的準確率、受到攻擊時的魯棒性。

FF CNN 的設計

CNN 的含義

CNN 是一系列的特徵映射。這些特徵映射可以分為升維和降維兩類。

大多數時候都是在降維,少數時候是在升維。其中,升維是在掃描整個圖像,得到儘可能多的有效特徵。降維則是從當前特徵中選擇最有效的特徵。升維的方法有卷積。降維的方法有PCA、pooling。保持維度,增強特徵的方法有激活函數、全連接(也可以用於降維)。

卷積的含義

對於卷積公式我們可以這樣理解訓練參數 a_k :對於傳統的 BP CNN,它是過濾器的權重(需要優化的參數),求過濾器的權重與輸入數據的內積即為匹配過濾器的過程。我們還可以這樣考慮,將它當作一組線性空間的基,求基與輸入數據的積即為特徵在低維空間的近似。

基於這種解釋,我們可以使用 PCA 求得輸入數據的本徵矩陣作為a_k。接下來我們要考慮如何添加上激活函數。

對於激活函數 ReLU 的作用,我們可以這樣理解。如果不帶有激活函數,某一層的輸入 x_n (也就是上一層的輸出)可能是正的,也可能是負的。而參數 a_k 可能是正的,也可能是負的。那麼我們會無法區分以下兩種情況:

  1. 輸入 x_n 和參數 a_k 都為正 vs 輸入 x_n 和參數 a_k 都為負
  2. 輸入 x_n 為正參數 a_k 為負 vs 輸入 x_n 為負參數 a_k 為正

如果帶有激活函數,則可以區分這兩種情況(因為負被置0了,所以x_n肯定為非負)。那麼我們能否不用激活函數實現這個要求呢。

我們還可以這樣考慮,如果 b_k 能夠讓計算結果歸正,那麼我們就不需要激活函數了,因此,我們可以利用特殊的 b_k 實現激活函數的作用,其中 b_k 是滿足上式的一個值。至此,我們可以把原來的卷積函數換成含義清晰的新卷積函數了,這也就是文中提出的 Saab。

池化的含義

卷積幫助我們得到貓的模式,池化幫助我們選擇貓的模式。池化會幫助我們選擇眾多模式中共有的部分。

比如,所有的 9 張貓都有相似的臉,池化就會抹掉其他信息,提取公共的貓臉。我們可以用統計分析模擬這個過程。

這裡 Kuo 解釋了為何 max pooling 比 average pooling 更有效。這是因為 max pooling 能夠提取窗格內較遠的信息,從而更好的表徵位置不同而形狀相同的信息。比如,圖中的貓臉位置稍有不同,但是在 pooling 的作用下都回到了畫面中心。

多層感知器的含義

多層感知器在 CNN 中充當的是分類器的角色,每一個隱藏層都是一次映射,將輸入降維。我們可以這樣理解,每一次映射是從 intra-class 到 class 的過程,多次映射後獲得所需維度的 class。

比如,第一次映射區分了蟒蛇、眼鏡蛇、加菲貓、波斯貓,第二次映射區分了蛇和貓。多次映射後得到了在我們所需維度上的分類。

我們可以使用 K-Means 模擬這一過程,對於一個 40 -> 20 -> 10 的多層感知器,我們可以使用 K-Means 聚 40 類、20 類、10 類,模擬每一個隱藏層的輸入和輸出。

有了每一層的輸入和輸出,我們可以使用最小平方回歸(如上圖),求解 intra-class 到 class 的映射過程。從而,將反向傳遞計算 w 變成了解方程計算 w

集成與疊加

我們都知道,多層的 PCA 效果較差,因此 FF CNN 無法像 BP CNN 一樣通過疊加 layer 提高對特徵的表徵能力。但是 Kuo 認為,可以通過集成(ensemble)多種 FF CNN 來提高 FF CNN 的性能。FF CNN 就像一個簡單的小機器人,BP CNN 則是一個複雜的大機器人。FF CNN 通過量取勝,BP CNN 通過複雜性取勝。

在上圖中,Kuo 構建了 3 種 FF CNN,在受到攻擊時,可以採用多數投票制進行集成。一個小機器人被打倒,其他的機器人仍能存活下來。此外,Kuo 還列舉了根據 RGB 設計 FF CNN 集成的方法。

雖然 Kuo 沒有闡述 FF CNN 在並行等領域的應用,這個模型效率高、能耗低,比 BP CNN 具有更大的並行可能,未來或許會在嵌入式等領域大放光彩。

FF CNN 與 BP CNN 的應用場景抽象

Kuo 最後的總結很正經,前輩客觀地闡述了 FF 和 BP 的應用場景,批評了一些人(也就是我們這屆差生 233)不分 data collection 青紅皁白就上 BP 的做法。他說:

FF 是一種 data-independent 模型,因此它高效,適合解簡單問題。BP 是一種 data-driven 模型,因此它耗時,適合解複雜問題。

我們拿到一個 dataset 的時候,沒有人會跟你說這個 dataset 是簡單還是複雜的,你的 dataset 可能不是 pure 的。

如果你用 data-driven 模型,複雜的 data 可能會覆蓋簡單的 data 造成過擬合。如果你用 data-independent 模型,可能會因為無法表徵複雜的 data 而效果較差。

一切設計都要因 dataset 制宜。

結束

Kuo 發表了一篇論文「 Interpretable Convolutional Neural Networks via Feedforward Design」,表述嚴謹清晰,感興趣可以瞭解一下。

我很佩服這位前輩,手動把消耗大量算力的訓練參數自己 「解」 了出來。現在,我們不止能對結果求交叉熵,對比預測結果和實際 label 的差異,還能在每一步計算 FF CNN 求得的參數和 BP CNN 訓練的參數的差異。

從上圖我們可以看出,這個解和BP求得的解仍有一定距離。

但是我相信,Kuo 的自信、熱情和對知識的執著會帶起一批人對 CNN 的理論研究。在這之中,或許會有一些研究改變了 CNN 的走向。順便一提,我肯定唯 performence 是圖,不能提 performance 的我暫時不會去研究,233


推薦閱讀:
相關文章