Hinton膠囊網路代碼正式開源,5天GitHub fork超1.4萬
新智元編譯
編譯:文強,馬文
【新智元導讀】萬眾期待中,Hinton膠囊網路論文《Dynamic Routing between Capsules》的代碼正式公布,僅僅5天,Github上fork數量就超過了1.4萬。Capsule真能取代CNN嗎?接下來是你動手的時間了。
Hinton膠囊網路論文《Dynamic Routing between Capsules》的一作Sara Sabour日前在GitHub公布了代碼,使用TensorFlow和NumPy實現,只有一台GPU也行,僅僅5天,fork的數量就超過了1.4萬。
實際上,在官方代碼公布前,已經有很多其他版本和實現。新智元也對膠囊網路的概念做過詳細介紹:
不過,在看代碼前,還是有必要再次回顧這篇Hinton革新CNN的論文,Jonathan Hui在他的博客上對這篇論文做過拆解,從基本概念開始,讀來非常友好。
用「Capsule」作為下一代CNN的理由
在深度學習中,神經元的激活水平通常被解釋為檢測特定特徵的可能性。
但是,CNN善於檢測特徵,卻在探索特徵(視角,大小,方位)之間的空間關係方面效果較差。例如,下面這張圖片可能會騙過一個簡單的CNN模型,讓CNN模型相信這是一張真實的人臉。
一個簡單的CNN模型可以正確提取鼻子、眼睛和嘴巴的特徵,但會錯誤地激活神經元進行人臉檢測。如果不了解空間方向,大小不匹配,那麼對於人臉檢測的激活將會太高,比如下圖95%。
現在,假設每個神經元都包含特徵的可能性和屬性。例如,神經元輸出的是一個包含 [可能性,方向,大小] 的向量。利用這種空間信息,就可以檢測鼻子、眼睛和耳朵特徵之間的方向和大小的一致性,因此對於人臉檢測的激活輸出就會低很多。
在Hinton的膠囊網路的論文中,就使用「膠囊」(capsule)來指代這樣的神經元。
從概念上講,我們可以將CNN看成是訓練神經元來處理不同方向的視角,並在最頂層有一層人臉檢測神經元。
如上所述,為了CNN能夠處理不同的視角或變體,我們添加了更多的卷積圖層和特徵圖。儘管如此,這種方法傾向於記憶數據集,而不是得出一個比較通用的解決方案,它需要大量的訓練數據來覆蓋不同的變體,並避免過擬合。MNIST數據集包含55,000個訓練數據,也即每個數字都有5,500個樣本。但是,兒童看過幾次就能記住數字。現有的包括CNN在內的深度學習模式在利用數據方面效率十分低下。引用Geoffrey Hinton的一句話:
It (convolutional network) works depressingly well.
膠囊網路不是訓練來捕捉特定變體的特徵,而是捕捉特徵及其變體的可能性。所以膠囊的目的不僅在於檢測特徵,還在於訓練模型來學習變體。
這樣,相同的膠囊就可以檢測不同方向的同一個物體類別(例如,順時針旋轉):
其中,Invariance對應特徵檢測,特徵是不變的。例如,檢測鼻子的神經元不管什麼方向,都檢測鼻子。但是,神經元空間定向的損失最終會損害這種invariance模型的有效性。
而Equivariance對應變體檢測,也即可以相互轉換的對象(例如檢測不同方向的人臉)。直觀地說,膠囊網路檢測到臉部旋轉了20°,而不是實現與旋轉了20°的變體相匹配的臉。通過強制模型學習膠囊中的特徵變體,我們可以用較少的訓練數據,更有效地推斷可能的變體。此外,也可以更有效地防止對抗攻擊。
計算一個Capsule網路的輸出:不同維度的參數
膠囊是一組神經元,不僅捕捉特徵的可能性,還捕捉具體特徵的參數。
例如,下面的第一行表示神經元檢測到數字「7」的概率。2-D膠囊是組合了2個神經元的網路。這個膠囊在檢測數字「7」時輸出2-D矢量。對於第二行中的第一個圖像,它輸出一個向量 v=(0,0.9)v=(0,0.9)。矢量的大小0.9 對應於檢測「7」的概率。每行的第二個圖像看起來更像是「1」而不是「7」。 因此,其相應的可能性為「7」較小。
在第三行,旋轉圖像20°。膠囊將產生具有相同幅度但不同方向的矢量。這裡,矢量的角度表示數字「7」的旋轉角度。最後,還可以添加2個神經元來捕捉大小和筆畫的寬度(見下圖)。
我們稱膠囊的輸出向量為活動向量 ,其幅度代表檢測特徵的概率,其方向代表其參數(屬性)。
在計算一個膠囊網路輸出的時候,首先看一個全連接的神經網路:
其中每個神經元的輸出是從前一層神經元的輸出計算而來的:
其中、和都是標量
對於capsule網路,一個capsule的輸入和輸出都是向量。
我們將一個變換矩陣(transformation matrix)應用到前一層的capsule輸出。例如,用一個矩陣,我們把一個k-D變換成一個m-D。然後計算和的加權和:
其中,是迭代動態路由過程(iterative dynamic routing process)訓練的耦合係數(coupling coefficients),被設計來求和到1。
我們不使用ReLU函數,而是使用一個擠壓函數(squashing function)來縮短0和單位長度之間的向量。
它將短向量縮小到接近0,將長向量縮小為接近單位向量(unit vectors)。因此,每個capsule的似然性在0到1之間。
迭代動態路由規則與重要性
在深度學習中,我們使用反向傳播來訓練模型參數。轉換矩陣 Wij 在膠囊中仍然用反向傳播訓練。不過,耦合係數 cij 用新的迭代動態路由方法進行計算。
以下是動態路由的最終偽代碼:
在深度學習中,我們使用反向傳播來訓練基於成本函數的模型參數。這些參數(權重)控制信號從一層到另一層的路由。如果兩個神經元之間的權重為零,則神經元的激活不會傳播到該神經元。
迭代動態路由提供了如何根據特徵參數來路由信號的替代方案。通過利用特徵參數,理論上,可以更好地將膠囊分組,形成一個高層次的結構。例如,膠囊層可能最終表現為探索「部分-整體」關係的分析樹。例如,臉部由眼睛、鼻子和嘴組成。迭代動態路由利用變換矩陣、可能性和特徵的性質,控制向上傳播到上面膠囊的信號的多少。
最後,就到了應用膠囊構建CapsNet,進而對MNIST數字進行分類和重構的時候了。下面是CapsNet的架構。一個CapsNet共有3層,兩個卷積層和一個全連接層。
論文提到的MNIST數字重構任務:
Github代碼
Capsule模型代碼在以下論文中使用:
"Dynamic Routing between Capsules」(膠囊間的動態路由) by Sara Sabour, Nickolas Frosst, Geoffrey E. Hinton.
要求:
TensorFlow(請參閱http://www.tensorflow.org了解如何安裝/升級)
NumPy(請參閱http://www.numpy.org/)
GPU
運行測試驗證設置是否正確,例如:
快速MNIST測試結果:
從以下網址下載並提取MNIST記錄到 $DATA_DIR/:https://storage.googleapis.com/capsule_toronto/mnist_data.tar.gz
從以下網址下載並提取MNIST模型checkpoint到$CKPT_DIR:https://storage.googleapis.com/capsule_toronto/mnist_checkpoints.tar.gz
快速CIFAR10 ensemble測試結果:
從以下網址下載並提取cifar10二進位版本到 $DATA_DIR/:https://www.cs.toronto.edu/~kriz/cifar.html
從以下網址下載並提取cifar10模型checkpoint到 $CKPT_DIR:https://storage.googleapis.com/capsule_toronto/cifar_checkpoints.tar.gz
將提取的二進位文件的目錄作為 data_dir 傳遞給($ DATA_DIR)
Sample CIFAR10訓練命令:
Sample MNIST的完整訓練命令:
在 training-validation pass 訓練,validate=true 也是如此
要在一個以上的GPU pass訓練,num_gpus = NUM_GPUS
Sample MNIST基線訓練命令:
在上述模型的訓練期間對validation進行測試:
訓練過程中連續運行的注意事項
在訓練中也要注意pass --validate=true
總共需要2個GPU:一個用於訓練,一個用於驗證
如果在同一台機器上進行訓練和驗證,則需要限制每個任務的RAM消耗,因為TensorFlow會填滿第一個任務的所有RAM,從而導致第二個任務失敗。
要測試/訓練 MultiMNIST pass --num_targets = 2 以及 --data_dir = $DATA_DIR/multitest_6shifted_mnist.tfrecords@10。
生成 multiMNIST / MNIST 記錄的代碼位於input_data/mnist/mnist_shift.py。
生成multiMNIST測試的示例代碼:
為 affNIST 的泛化能力建立 expanded_mnist: --shift = 6 --pad = 6。
讀取affNIST的代碼將遵循。
加入社群
新智元AI技術+產業社群招募中,歡迎對AI技術+產業落地感興趣的同學,加小助手微信號:aiera2015_1入群;通過審核後我們將邀請進群,加入社群後務必修改群備註(姓名-公司-職位;專業群審核較嚴,敬請諒解)。
此外,新智元AI技術+產業領域社群(智能汽車、機器學習、深度學習、神經網路等)正在面向正在從事相關領域的工程師及研究人員進行招募。
加入新智元技術社群 共享AI+開放平台
※三星將推首款AI晶元NPU,性能超華為蘋果,智能終端AI芯大PK
※「冷眼看CES2018」AI概念滿天飛,大型吹牛集會可休矣
TAG:新智元 |