Hinton膠囊網絡代碼正式開源,5天GitHub fork超1.4萬

2021-01-18 新智元


Hinton膠囊網絡論文《Dynamic Routing between Capsules》的一作Sara Sabour日前在GitHub公布了代碼,使用TensorFlow和NumPy實現,只有一臺GPU也行,僅僅5天,fork的數量就超過了1.4萬。


實際上,在官方代碼公布前,已經有很多其他版本和實現。新智元也對膠囊網絡的概念做過詳細介紹:


[1]【大神Hinton】深度學習要另起爐灶,徹底拋棄反向傳播

[2]【重磅】Hinton 大神 Capsule 論文首次公布,深度學習基石 CNN 或被取代

[3] Reddit 討論:Hinton 的 Capsule 網絡真的比 CNN 效果更好嗎?

[4]【Hinton 碰撞 LeCun】CNN 有兩大缺陷,要用 capsule 做下一代 CNN

[5]【一文讀懂 Hinton 最新 Capsules 論文】CNN 未來向何處去

[6]【一文讀懂 Hinton 最新論文】膠囊網絡 9 大優勢 4 大缺陷(視頻 + PPT)


不過,在看代碼前,還是有必要再次回顧這篇Hinton革新CNN的論文,Jonathan Hui在他的博客上對這篇論文做過拆解,從基本概念開始,讀來非常友好。



在深度學習中,神經元的激活水平通常被解釋為檢測特定特徵的可能性。



但是,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°的變體相匹配的臉。通過強制模型學習膠囊中的特徵變體,我們可以用較少的訓練數據,更有效地推斷可能的變體。此外,也可以更有效地防止對抗攻擊。



膠囊是一組神經元,不僅捕捉特徵的可能性,還捕捉具體特徵的參數。


例如,下面的第一行表示神經元檢測到數字「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數字重構任務:

相關焦點

  • Hinton膠囊網絡代碼正式開源,你也能為GitHub1.4萬fork的庫貢獻
    【新智元導讀】萬眾期待中,Hinton膠囊網絡論文《Dynamic Routing between Capsules》的代碼正式公布,僅僅5天,Github上fork數量就超過了1.4萬。Capsule真能取代CNN嗎?接下來是你動手的時間了。
  • 谷歌正式開源 Hinton 膠囊理論代碼,即刻用 TensorFlow 實現吧
    雷鋒網 AI 研習社消息,相信大家對於「深度學習教父」Geoffery Hinton 在去年年底發表的膠囊網絡還記憶猶新,在論文 Dynamic Routing between Capsules 中,Hinton 團隊提出了一種全新的網絡結構。
  • 「CVPR Oral」TensorFlow實現StarGAN代碼全部開源,1天訓練完
    近日,有研究人員將 StarGAN 在 TensorFlow 上實現的全部代碼開源,相關論文獲 CVPR 2018 Oral。近日,有研究人員將 StarGAN 在 TensorFlow 上實現的全部代碼開源,相關論文獲 CVPR 2018 Oral。開源地址:https://github.com/taki0112/StarGAN-Tensorflow作者:Junho Kim 看代碼之前,我們先來回顧一下 StarGAN 的原始論文。
  • GitHub 原始碼洩露,CEO 回應:這是個意外
    疑似洩露代碼地址:https://web.archive.org/web/20201104050026if_/https://github.com/github今年3月份,GitHub 封禁了一個屬於微軟的前端開源項目 Aurelia,理由是項目中有兩名來自伊朗的外部貢獻者。Aurelia 是微軟開發的 JavaScript 框架,已開源了5年。這再次引發了開發者們的質疑:GitHub 封禁項目是否太隨意?這難道不是與開源精神背道而馳?
  • 萬眾期待:Hinton團隊開源CapsNet源碼
    【導讀】前幾天,Hinton團隊的膠囊網絡論文第一作者Sara Sabour將其源碼在GitHub上開源,其實,該論文「Dynamic Routing Between Capsules」早在去年10月份就已經發表,直到今日,其官方實現終於開源。此前,Hinton一再強調,當前的反向傳播和CNN網絡存在很大的局限性,表明AI的下一代研究方向是「無監督學習」。
  • 基於TensorFlow2.0的中文深度學習開源書來了!GitHub趨勢日榜第一
    第一部分是1-3章。主要介紹人工智慧的初步認知,並引出相關問題。第二部分是4-5章。主要介紹TensorFlow相關基礎,為後續算法實現鋪墊。第三部分是6-9章。主要介紹神經網絡的核心理論和共性知識,助於理解深度學習的本質。
  • 推薦一些 GitHub 上值得前端學習的開源實戰項目,進階必看!
    地址:https://github.com/linlinjava/litemall4. 基於 vue2 + vuex 構建一個具有 45 個頁面的大型單頁面應用此項目大大小小共 45 個頁面,涉及註冊、登錄、商品展示、購物車、下單等等,是一個完整的流程。
  • 6月份Github上熱門的開源項目
    6月份GitHub上熱門的開源項目排行已經出爐啦,一起來看看上榜詳情吧!在本課程結束時,學生應該能夠自己開始編寫有用的 Python 程序,或者能夠理解和修改其同事編寫的 Python 代碼。3.
  • 員工竊取前東家算法,還拿到 PyTorch 開源?Facebook 被 MIT 教授起訴
    亞歷山大·茲拉特斯基早先是 MIT 的博士後,作為第一個正式員工加入了神經魔法。2018 年 3 月,他成為技術總監,基本年薪為 16.5 萬美元加期權。在擔任技術總監期間,茲拉特斯基有權限獲得公司所有的商業機密、專有信息和商業計劃,關鍵是他能夠接觸到同時也協助編寫了編譯器核心算法的原始碼。
  • 萬物皆可內卷,開源社區GitHub都有人刷數據了
    近日,有開發者曝光了某國產開源AI框架與媒體平臺,合作提供「刷star」的行為。根據爆料顯示,其最近突然收到了CSDN(國內最知名的中文IT技術交流平臺)發來的紅包私信,紅包上寫著「你點Star,我送豪禮」,點入之後發現,這是某開源AI框架的推廣頁面,其中顯示,只要為該項目點擊star就能獲得5元紅包、紀念 T 恤、定製鍵盤託、技術書籍,以及算力卡等禮品。
  • 資源|17類對抗網絡經典論文及開原始碼(附源碼)
    原標題:資源|17類對抗網絡經典論文及開原始碼(附源碼) 全球人工智慧 文章來源:Github 對抗網絡專題文獻集/buriburisuri/supervised_infogan [Image-to-image translation using conditional adversarial nets] [Paper]https://arxiv.org/pdf/1611.07004v1.pdf
  • 從噹噹看打造高星 GitHub 開源項目的經驗
    1.4 目的1.4.1 反饋社區。每個開發者都或多或少的使用過開源產品。在使用開源的同時儘量的反饋社區,讓開源成為良性循環。1.4.2 吸取社區精華。使用的人越多,看代碼的人越多,項目的缺陷和風險就會越小。而且眾多社區成員的使用,有助於疑難問題重現。
  • 以VON CHAIN為例,技術小白怎麼看懂黑貓Github開原始碼庫?
    今天,我以VON CHAIN為例,教大家怎麼以5個數據去判斷一個項目的技術基本面:1)代碼更新頻率任何技術都必定是長期不停更新的,即使其團隊技術強如IOS系統、安卓系統、微信、支付寶等等超級大公司,它們也需要不斷更新應用版本推出道市場當中。同樣的道理,任何真正的區塊鏈技術項目都不可能停止開發更新,除非這個項目倒閉了,或者它根本就沒有什麼技術含量。
  • 安全專業人士最愛的 19 個 GitHub 開源項目
    GitHub上有800多個面向安全的項目,為IT管理員和信息安全專業人士提供了豐富的工具和框架,它們可以用於惡意軟體分析、滲透測試、計算機及網絡取證分析、事件響應、網絡監控及其他眾多任務。下面介紹了一些最出色的開源安全項目,負責保護系統和網絡的人都應該仔細看一看。
  • 國產晶片革命性一步:瑞芯微RK3399系統開源!
    本土晶片廠商瑞芯微(Rockchip)今天宣布,旗下旗艦級晶片RK3399對應的Linux系統正式開源!Camera接口,雙ISP,單通道最大支持1300萬像素3、MIPI/eDP/HDMI2.0接口,支持4096x2160顯示輸出、雙屏異顯等功能4、內置PCI-e接口,支持基於PCI-e的高速Wi-Fi和存儲擴展5、支持8路數字麥克風陣列輸入6、eMMC5.1 HS4007、眾多應用開發接口API,包括OpenGL ES 1.1
  • 什麼是GitHub?你所使用的很多開源程序都是在Github上
    從較高的層面來說,GitHub是一個基於網站和雲的服務,可以幫助開發人員存儲和管理他們的代碼,以及跟蹤和控制對代碼的更改。通過分支,開發人員複製部分原始碼(稱為存儲庫)。然後,開發人員可以安全地更改代碼的這一部分,而不會影響項目的其餘部分。然後,一旦開發人員使他或她的部分代碼正常工作,他或她就可以將該代碼合併回主要原始碼以使其正式化。然後跟蹤所有這些更改,並在需要時可以還原。
  • 谷歌幫助開發,正式支持TensorBoard | 5大開源項目
    在一年一度的開發者大會F8上,Facebook放出PyTorch的1.1版本,直指TensorFlow「腹地」。不僅宣布支持TensorFlow的可視化工具TensorBoard,還正式向工業界邁進,為生產環境改進了PyTorch處理分布式訓練的方式。
  • 深度學習預測比特幣價格;基於神經網絡的自動化前端開發 | Github...
    雷鋒網 AI 研習社按:對於開發者來講,證明其編程能力最好的方式是展示他們的項目和代碼。雷鋒網 AI 研習社本周從 YouTube、知乎以及 Github 官網上搜羅了數個與 AI 相關的開源項目,為 AI 開發者的設計提供參考。
  • 微信團隊開源圍棋AI技術PhoenixGo,復現AlphaGo Zero論文
    5 月 11 日,PhoenixGo 在 Github 上正式開源,以下是技術細節:項目地址:https://github.com/Tencent/PhoenixGo如果你在研究中使用 PhoenixGo,請按以下方式引用庫:@misc{PhoenixGo2018
  • Ant-Forest v1.3.4.7.1 發布,自動收集螞蟻森林能量腳本
    Ant-Forest v1.3.4.7.1 已經發布,此版本更新內容包括:加入了基於webview和Vue的全新可視化配置工具