“卷積神經網絡(CNN)的時代已經過去了!”
——Geoffrey Hinton
醞釀許久,深度學習之父Geoffrey Hinton在10月份發表了備受矚目的Capsule Networks(CapsNet)。 Hinton本次挾CapsNet而來,大有要用它取代CNN的氣勢。
今天,有科技媒體發布Capsule Networks(CapsNet)開源的消息,去尋找Github鏈接后,發現本次開源非常低調且隱蔽,隱藏在谷歌tensorflow的專題之下,沒有相關報道,谷歌也搜不到,不熟悉Github的同學很難查找。
先放上鏈接:https://github.com/Sarasra/models/tree/master/research/capsules
因為發布低調,所以,Star數只有23,Folk數也只有12個。當然,這也並不影響這個開源項目的優秀和影響力。
那么,欲取代CNN的Capsule Network究竟是什么來頭?CapsNet相比CNN到底有哪些優勢?它又是否能為AI界帶來革命性轉折呢?我們不妨來為大家科普一下這一深度學習的新里程碑。
首 先,這位被譽為深度學習之父Geoffrey Hinto究竟是何許人也呢?在上世界50年代,深度神經網絡的概念就已出現,從理論上來講可以解決眾多問題,但是一直以來卻沒有人知道該如何訓練它,漸 漸的也就被放棄。直至1986年,Hinton想到了通過反向傳播來訓練深度網絡,標志了深度學習發展的一大轉機。然而,受限於當時的計算機運算能力,直 到2012年,Hinton的發明才得以一顯神通。這一突破也為近年來人工智能的發展奠定了基礎。
2017年 10月26日,Hinton又發表了一項開創性的論文——Capsule Networks(膠囊網絡),或將再次改寫深度學習的發展歷程。(論文鏈接:https://arxiv.org/pdf/1710.09829v1.pdf)
傳統神經網絡中存在的問題
目前為止,CNNs(卷積神經網絡)仍是最先進的圖像分類識別方法。
簡單來講,CNNs通過逐層累加調整實現分類。它首先檢測到邊緣,然后是形狀,然后是實際的識別對象。CNN的實現方式極具創新,然而在這一過程中卻有一項重要的信息丟失了——特征之間的空間關系。下面是一個CNN工作原理的簡化描述:
如果有兩只眼睛,一只鼻子,一張嘴,那么這就是一張臉。
乍一看完全沒問題啊,完美!那我們拿卡戴珊大姐的照片來試一下,看看會怎么樣:
(前方高能……
請幫忙計算一下這位大姐的心理陰影面積……但話說回來,這也確實是兩只眼睛,一個鼻子和一個嘴巴呀!我們很容易就能發現,這些特征的空間位置明顯是錯誤的,不符合“臉”的特征,然而CNN在處理這一概念上卻十分笨拙。
除了被圖像的錯誤位置所迷惑,CNN在查看不同方向的圖像時也很容易混淆。解決這個問題的方法之一,就是對所有可能的角度進行大量訓練,但是這需要花費很多時間,而且似乎有些違反常理。
我們只要把Kim的照片顛倒一下,就能發現其性能的大幅下降:
顛倒的Kardashian被識別成了“炭黑色”
最后,卷積神經網絡可能很容易受到白盒對抗攻擊(攻擊者知曉機器學習所用的算法和相關參數,並據此在對抗性攻擊過程中與系統交互)。這種攻擊在對象上嵌入了一個秘密的圖案,由此使這張圖片被錯誤識別。
講到這,我們就不難理解為什么Hinton曾發表過這樣的言論:“卷積神經網絡的時代已經過去了”
膠囊網絡“拯救世界”!
膠囊網絡構架
膠囊網絡的引入使我們能夠充分利用空間關系,它可以實現以下邏輯:
如果有兩個相鄰的眼睛,眼睛下長了鼻子,鼻子下長了嘴巴:那么這就是一張臉。
你應該可以看到,這次我們定義的神經網絡在處理卡戴珊大姐的照片過程中不會那么容易被糊弄了。
這種新的架構在以下數據集上也獲得了更高的識別准確度。這個數據集經過了精心設計,是一個純粹的形狀識別任務,即從不同的角度來看也能識別物體。CapsNet在該數據集上打敗了最先進的CNN,將錯誤數量減少了45%。
CapsNet能夠識別出與上下對應的圖像同屬一個類別(動物,人類,飛機,汽車,卡車)。
另外,根據他們最近的研究成果,膠囊網絡在對抗白盒攻擊方面比卷積網絡也更有效果。
訓練CapsNet
要想使用膠囊網絡,首先你得訓練它——於是,我根據Hinton 的論文建立了一個Repo(非常感謝naturomics).
以下指南將為你提供在MNIST數據集上訓練的模型。(MNIST是手寫數字的數據集,很適合用作測試機器學習算法的基准線)
1. 復制Repo:
git clone https://github.com/bourdakos1/capsule-networks.git
2. 安裝 requirements文件:
pip install -r requirements.txt
3. 開始訓練!
python main.py
MNIST數據集包含6萬個訓練圖像。默認情況下,該模型每次批處理的大小是128個,訓練50次。每一次訓練都是數據集的一次完整運行過程。由於每次批量大小是128,所以每次訓練大約有468個批處理(60,000 / 128 ≈468)。
一旦我們的模型得到充分的訓練,我們可以通過運行以下命令來測試它:
python main.py --is_training False
最后,我想指出,雖然膠囊網絡看起來威力十足,但它現在仍然處在嬰兒期。在訓練龐大的數據集時,我們可能會遇到問題。但總體來說,我還是對膠囊網絡的未來發展充滿信心的。
來自:大數據文摘