2017年,機器之心貢獻過的開源項目

機器之心原創

參與:蔣思源、黃小天

機器之心目前有三個 GitHub 項目,即旨在構建 AI 領域術語庫的「Artificial-Intelligence-Terminology」、旨在提供高質量模型實現與試驗的「ML-Tutorial-Experiment」和旨在開放 AI 企業評選的「AI00」。

機器之心 GitHub 項目地址:github.com/jiqizhixin

人工智慧術語計劃

目前「Artificial-Intelligence-Terminology」共有 750 個專業術語,我們將機器之心在編譯技術文章和論文過程中所遇到的專業術語記錄下來,希望有助於大家查閱和翻譯。同時也希望大家能積極指出我們編譯的不當之處。

項目地址:github.com/jiqizhixin/A

在該項目中,讀者可通過 README 界面錶盤查看自己想要了解的專業辭彙。在單個首字母中,表格的組織形式為:英文/縮寫、漢語、來源&擴展。

來源&擴展是對該辭彙的註解,內容為機器之心往期的相關文章。例如字母 A 中的「演算法」,我們關聯到的三篇文章是《回歸、分類與聚類:三大方向剖解機器學習演算法的優缺點》和《機器學習演算法附速查表》和《深度學習演算法全景圖:從理論證明其正確性》。因此,我們希望不僅能提供相對應的術語,同時還希望能為讀者提供每一個術語的來源和概念上的擴展。

我們最近的工作很大程度上都在增加每個術語的對應鏈接,我們希望每個術語不僅有對應的翻譯和表達方式,同時還能提供相關的文章。

本項目中所有英文專業辭彙對照的中文都來自機器之心編譯的文章和系列機器學習教科書(如周志華的《機器學習》和李航的《統計學習方法》和 Ian Goodfellow 的《深度學習》中譯版等),我們力求在提供準確翻譯的同時保留最常用的形式。

目前該術語庫重點更新了各辭彙的鏈接文章,並直接體現在項目中。但由於當前仍在繼續添加與完善辭彙對應的鏈接,因此我們並沒有直接更新到辭彙展示頁。我們的辭彙展示頁可以很便捷地查找便捷的 AI 辭彙,並且我們很快會添加擴展鏈接以方便讀者索引對應的辭彙和對應的術語解釋,以下是術語的展示頁面:

展示地址:jiqizhixin.github.io/AI

演算法教程與實現

目前機器學習演算法實現項目共獲得 976 次收藏,是我們今年將要重點關注和完善的項目。它目前有三篇詳細的教程文章,即 CNN 的實現、經典 GAN 的推導與實現和 CapsNet 的解讀。我們希望能提供高質量和能實現的技術文章,在這些文章中,我們所使用的代碼塊或整體實現都是我們預先測試的。且我們提供的 Jupyter Notebook 都帶有代碼注釋,非常適合初學者隨文章閱讀。

項目地址:github.com/jiqizhixin/M

在從零開始用 TensorFlow 搭建卷積神經網路的文章中,我們主要介紹的是 CNN 的實現,而並不會從理論和概念上詳細解釋深度神經網路、卷積神經網路、最優化方法等基本內容。值得注意的是,這篇文章不僅從最基礎的 TensorFlow 安裝開始,同時還詳細描述了 TensorFlow 的基本操作和構建方法。

文章地址:機器之心 GitHub 項目:從零開始用 TensorFlow 搭建卷積神經網路

該教程主要從全連接網路到 LeNet-5 介紹了如何構建基本的 CNN,如下展示了最初的 LeNet-5 架構:

def model_lenet5(data, variables): layer1_conv = tf.nn.conv2d(data, variables[w1], [1, 1, 1, 1], padding=SAME) layer1_actv = tf.sigmoid(layer1_conv + variables[b1]) layer1_pool = tf.nn.avg_pool(layer1_actv, [1, 2, 2, 1], [1, 2, 2, 1], padding=SAME) layer2_conv = tf.nn.conv2d(layer1_pool, variables[w2], [1, 1, 1, 1], padding=VALID) layer2_actv = tf.sigmoid(layer2_conv + variables[b2]) layer2_pool = tf.nn.avg_pool(layer2_actv, [1, 2, 2, 1], [1, 2, 2, 1], padding=SAME) flat_layer = flatten_tf_array(layer2_pool) layer3_fccd = tf.matmul(flat_layer, variables[w3]) + variables[b3] layer3_actv = tf.nn.sigmoid(layer3_fccd) layer4_fccd = tf.matmul(layer3_actv, variables[w4]) + variables[b4] layer4_actv = tf.nn.sigmoid(layer4_fccd) logits = tf.matmul(layer4_actv, variables[w5]) + variables[b5] return logits

第二個分析與實現的主題是 GAN,該文章從原論文出發,藉助 Goodfellow 在 NIPS 2016 的演講和台大李弘毅的解釋,而完成原 GAN 的推導與證明。其主要分為四部分,第一部分是描述 GAN 的直觀概念,第二部分描述概念與優化的形式化表達,第三部分將對 GAN 進行詳細的理論推導與分析,最後一部分將實現前面的理論分析。

文章地址:機器之心 GitHub 項目:GAN 完整理論推導與實現,Perfect!

在這篇文章中,我們最後描述了整個演算法的訓練過程:

對於每一次迭代:

  • 從真實數據分布 P_data 抽取 m 個樣本
  • 從先驗分布 P_prior(z) 抽取 m 個雜訊樣本
  • 將雜訊樣本投入 G 而生成數據

,通過最大化 V 的近似而更新判別器參數θ_d,即極大化

,且判別器參數的更新迭代式為

以上是學習判別器 D 的過程。因為學習 D 的過程是計算 JS 散度的過程,並且我們希望能最大化價值函數,所以該步驟會重複 k 次。

  • 從先驗分布 P_prior(z) 中抽取另外 m 個雜訊樣本 {z^1,...,z^m}
  • 通過極小化 V^tilde 而更新生成器參數θ_g,即極大化

,且生成器參數的更新迭代式為

以上是學習生成器參數的過程,這一過程在一次迭代中只會進行一次,因此可以避免更新太多而令 JS 散度上升。

除了文章中所描述的 Keras 實現,後續我們還在補充資料中添加了 TensorFlow 實現。如下所示定義了生成器與判別器:

#定義生成器def generator(z): #第一層先計算 y=z*G_W1+G-b1,然後投入激活函數計算G_h1=ReLU(y),G_h1 為第二次層神經網路的輸出激活值 G_h1 = tf.nn.relu(tf.matmul(z, G_W1) + G_b1) #以下兩個語句計算第二層傳播到第三層的激活結果,第三層的激活結果是含有784個元素的向量,該向量轉化28×28就可以表示圖像 G_log_prob = tf.matmul(G_h1, G_W2) + G_b2 G_prob = tf.nn.sigmoid(G_log_prob) return G_prob#定義判別器def discriminator(x): #計算D_h1=ReLU(x*D_W1+D_b1),該層的輸入為含784個元素的向量 D_h1 = tf.nn.relu(tf.matmul(x, D_W1) + D_b1) #計算第三層的輸出結果。因為使用的是Sigmoid函數,則該輸出結果是一個取值為[0,1]間的標量(見上述權重定義) #即判別輸入的圖像到底是真(=1)還是假(=0) D_logit = tf.matmul(D_h1, D_W2) + D_b2 D_prob = tf.nn.sigmoid(D_logit) #返回判別為真的概率和第三層的輸入值,輸出D_logit是為了將其輸入tf.nn.sigmoid_cross_entropy_with_logits()以構建損失函數 return D_prob, D_logit

第三篇描述的是 Hinton 等人提出來的 CapsNet,其旨在解釋 CapsNet 的網路架構與實現。為了解釋 CapsNet,該文章從卷積層與卷積機制開始,從工程實踐的角度解釋卷積操作的過程與輸出,這對進一步理解 Capsule 層的處理十分有利,後面文章基於對 Capsule 層的理解解釋 Geoffrey Hinton 等人最近提出來的 CapsNet 架構,並根據 naturomics 的實現進行測試與解釋。

文章地址:先讀懂 CapsNet 架構然後用 TensorFlow 實現,這應該是最詳細的教程了

根據 Dynamic Routing Between Capsules,整個層級間的傳播與分配可以分為兩個部分,第一部分是下圖 u_i 與 u_j|i hat 間的線性組合,第二部分是 u_j|i hat 與 s_j 之間的 Routing 過程:

圖:Capsule 層級結構圖

如上所示,該圖展示了 Capsule 的層級結構與動態 Routing 的過程。最下面的層級 u_i 共有兩個 Capsule 單元,該層級傳遞到下一層級 v_j 共有四個 Capsule。u_1 和 u_2 是一個向量,即含有一組神經元的 Capsule 單元,它們分別與不同的權重 W_ij(同樣是向量)相乘得出 u_j|i hat。例如 u_1 與 W_12 相乘得出預測向量 u_2|1 hat。隨後該預測向量和對應的「耦合係數」c_ij 相乘並傳入特定的後一層 Capsule 單元。不同 Capsule 單元的輸入 s_j 是所有可能傳入該單元的加權和,即所有可能傳入的預測向量與耦合係數的乘積和。隨後我們就得到了不同的輸入向量 s_j,將該輸入向量投入到「squashing」非線性函數就能得出後一層 Capsule 單元的輸出向量 v_j。然後我們可以利用該輸出向量 v_j 和對應預測向量 u_j|i hat 的乘積更新耦合係數 c_ij,這樣的迭代更新不需要應用反向傳播。

在最近 Sara 等研究者開放了論文 Dynamic Routing between Capsules 的官方實現代碼後,我們也對核心代碼做了簡要的解析。這一份實現是 Sara 等研究者獲得頂尖結果的依據,它與其它研究者所復現的代碼主要有三個區別。首先,Sara 的實現會添加一個 leaky_routing 函數,按照該函數的定義,它會添加額外的維度以路由分對數(logits)。如果需要執行路由的張量維度與上層任意 Capsule 單元不匹配,那麼該函數將允許激活的 Capsule 單元在額外的維度中進行路由。

其次是 Sara 的實現調用了兩次動態路由演算法(餘弦相似度),而我們從論文上理解為只有在 DigitCaps 層才會使用動態路由,因此相對於其它研究者直接將卷積後的張量投入 Squash 非線性函數,Sara 的實現會先迭代精鍊幾次卷積結果。最後一點是 naturomics 所表明的偏置項問題,他表明 Sara 等人實現的路由演算法在投入到 Squash 非線性激活函數時會添加一個偏置項。我們將官方核心代碼的解讀添加到了補充資料中。

文章地址:Capsule 官方代碼開源之後,機器之心做了份核心代碼解讀

目前這三個分析與實現並沒有成體系,比如果我們沒有從基礎的機器學習演算法開始,一步步完善各演算法的試驗與分析。在新的一年,我們將重點關注於該項目而提供高質量的教程與實現。

AI00

We believe AI should be an extension of individual human wills and, in the spirit of liberty, as broadly and evenly distributed as possible. -OpenAI

項目地址:github.com/jiqizhixin/A

這不僅是一份榜單,更是一個人人可以參與的開源項目,人工智慧是一個複雜龐大的體系,涉及眾多學科,也關乎技術、產品、行業和資本等眾多要素,本報告的寫作團隊只代表他們的專業觀點,有自己的局限性,需要更多行業專家參與進來加以修正和完善。

人工智慧技術和行業的發展瞬息萬變,而報告的製作周期較長,其中的內容和數據勢必會落後於行業的最新進展,無法同時滿足時效性和高質量的要求。而領域內參與者的及時更新可以解決這個問題。

我們深刻地理解在沒有專業用戶反饋的情況下所做出報告的質量局限性,所以希望用工程界「Agile Development」的理念來對待我們的報告,不斷收集專業反饋來持續提升報告質量。

以上是機器之心現有的一些 GitHub 項目,我們還會繼續擴展並發現對讀者有幫助的新計劃,例如漢化或製作機器學習工具包的速查表、從《Deep Learning》或其它書籍衍生出的知識點等等。在新的一年裡,機器之心希望讀者能和我們共同完善這一些目標。

目前 AI00 已經走過了一年多的時間,從 2016 年 10 月的第一份榜單開始,該項目已經更新了 15 次。我們每一次都會根據讀者與業界的反饋更新各上榜公司的主營業務、融資情況和所屬領域等。以下是自第一次榜單以來的更新情況:

機器之心選出全球最值得關注的100家人工智慧公司(中國27家)

機器之心「AI00」十一月最新榜單:兩家國內公司新上榜

機器之心「AI00」十二月最新榜單:四家公司新上榜

機器之心「AI00」一月最新榜單:英國最火的機器學習創業公司

機器之心「AI00」二月最新榜單:新增賽靈思、Argo AI和Gamalon

機器之心「AI00」三月最新榜單:新增DataRobot與值得關注的Neuralink

機器之心「AI00」四月最新榜單:新增人工智慧網路安全公司Cylance和Sift Science

機器之心「AI00」頒獎晚宴閉幕,五月最新榜單發布

機器之心「AI00」六月最新榜單:演算法商店Algorithmia與網路安全公司Spark

機器之心「AI00」七月榜單:「AI不止語音助手」的華為

機器之心「AI00」八月榜單:脫胎於谷歌TPU團隊的Groq

機器之心「AI00」九月榜單:1400萬美元A輪融資的TalkIQ

機器之心「AI00」十月榜單:卡耐基梅隆大學數位博士開創的Solvvy

機器之心「AI00」十一月榜單:OpenAI科學家創立Embodied Intelligence

機器之心「AI00」十二月榜單:緊盯AI人才的京東

機器之心「AI00」一月榜單:前谷歌自動駕駛首席工程師創立Nuro

本文為機器之心原創,轉載請聯繫本公眾號獲得授權。

推薦閱讀:

Compare.NET Objects對象比較組件
Github 預測:2018 你必須關注的開源項目
開源周報第1期:GitHub Trending 丁酉年叱吒開源項目風雲榜
HttpRunner 通過 skip 機制實現對測試用例的分組執行控制

TAG:GitHub | 人工智慧 | 開源項目 |