當前位置:
首頁 > 最新 > 想要實現深度神經網路?一張 Excel 表格就夠了

想要實現深度神經網路?一張 Excel 表格就夠了

選自Medium

作者:Blake West

機器之心編譯

卷積神經網路(CNN)經常被用於圖像識別、語音處理等領域,是人工智慧近年來快速發展的重要組成部分。然而,對於入門人士來說,我們似乎難以理解其中的原理。實際上「卷積」等概念並非遙不可及,本文作者 Blake West 向我們介紹了使用 Excel、Google Sheets 等電子表格實現卷積神經網路的方法。

下面我們會從較高角度來做一個簡短的卷積神經網路原理的介紹。

在我們開始前,我要介紹一下 FastAI,我最近完成了他們的深度學習課程,所有的靈感和功勞都歸他們。Jeremy Hdward 是一個非常棒的導師,和他的聯合創始人 Rachel Thomas 在課上展示了怎樣用 excel 做卷積神經網路。但就現在的狀況來說,這個表在網上找不到,而且我不認為這個表格是完整的網路。我做了一點擴展,然後把這個放到了谷歌表格里,這樣大家都能隨意地耍了。

如何構建?

我用 MNIST 數據集訓練了一個非常簡單的卷積神經網路,這個數據集是用來預測有手寫數字圖片里的數字的。每一個圖片都是 28×28 像素大小。每一個像素用 0(空白)到 1(深色)之間來表示。MNIST 是一個非常經典的數據集,常被用於各種新技術的研究,如 Geoffrey Hinton 等人的 Capsule。這個數據集非常的小所以訓練起來很快,但這個數據集又有足夠多的數據來展示機器學習的複雜性。這個模型的工作是預測圖片里的數字是多少。每一個圖片都明確的是 0-9 之間的一個數。

MNIST 數據集的一個例子,28×28 像素大小。注意:我加了有條件的格式,這樣有更大數字的像素會顯得更紅。

我用了一個非常著名的深度學習庫 Keras,然後把我模型中訓練好的權重放到表裡。訓練好的權重只是數字。把它們放到表格里就是說從模型里複製然後粘貼到表格里。最後一步是在表格里加上複製模型功能的公式,就用傳統的加法、乘法等。讓我再說一次:用來重現一個深度學習模型的數學就是乘法和加法。

Keras 文檔:https://keras.io

下圖是模型每一層的權重/參數。權重是機器學習模型自動學來的。這個模型有差不多 100 個權重。更複雜的模型很容易就有幾億個參數。在下圖你可以看到這模型的所有的 1000 個參數。

何時應該使用卷積神經網路?

卷積神經網路的工作方式是在序列數據中找尋模式,這個模式可能難以用語言表達,或用簡單的規則來表達。卷積神經網路假設序列的順序是很重要的。

舉個例子,圖片分類是卷積神經網路主要的用途之一,因為像素是邏輯上有序的,而且對於所有人類來說圖片里充滿了模式。但是,只要試著用語言來描述到底什麼區分開了一隻貓和吉娃娃,你就知道為什麼卷積神經網路有用了(下意識感知過程)。

另一方面,如果你收集了兩支棒球隊的各種數據,並希望從中預測出兩者對決的結果,在這種情況下卷積神經網路就是一個不太合適的選擇。你所擁有的數據(如聯賽獲勝&失敗次數,球隊擊球平均數)並無固有順序性。在這裡順序其實並不重要,而我們也已提取了自己所認為有用的特徵。在這裡,卷積神經網路並不適用。

理解 CNN

為了理解 CNN 背後的工作原理,我們將深度卷積神經網路拆分成「深度」、「卷積」和「神經網路」並分別解釋。

卷積

想像你正閉著眼睛,試圖識別手寫圖像上的數字。你可以和看著圖像的人交談,但他們並不知道這個數字是什麼。所以你只能問一些簡單的問題,該怎麼辦?

有一些可行的問題,例如,「它在頂部是基本呈直線嗎?」「它有對角線嗎?」等。問了足夠多的問題以後,你就能很好的猜測該數字到底是 7 還是 2,或任何其它數字。

直觀上,這正是卷積運算的工作方式。計算機是盲目的,所以它會按照自己的方式詢問大量的關於小區域模式的問題。

方框 1 中的數字和方框 2 中的數字分別對應相乘,然後得到所有乘積的和,即方框 3 的數字。這就是卷積運算。

為了詢問這些問題,圖像中的每一個像素需要運行一個函數(即卷積運算),生成相應的像素值,以回答對應的關於小區域模式的問題。卷積運算利用卷積核尋找模式。例如,上圖方框 2 中的數字在右側的紅色更深(值更大),左側更淺(值更小)。則該卷積核的作用就是尋找豎直的顏色從左向右變深的邊緣(簡稱左邊緣)。

這可能不夠直觀,但只要在該表格中嘗試交互你就能發現卷積核的工作方式。卷積核尋找的是和自己相似的模式。並且一個 CNN 通常有數百個卷積核,你可以對所有像素捕捉不同類型的模式,例如左邊緣、上邊緣、對角線、角等。

尋找邊緣是很基本的要素,那對於更複雜的形狀要怎麼處理呢?這正是「深度」即多層的用武之地。通過底部卷積層的運算中,我們已經有了圖像的「左邊緣」、「上邊緣」和其它簡單的卷積模式的分布。現在添加更多的層,對前面得到的所有模式分布再次進行卷積操作,然後組合起來。所以結合一個左邊緣和一個上邊緣各 50% 可以給你一個任意的左角,怎麼樣,很強大吧。

第二個卷積層取上一個卷積層得到的像素輸出為輸入,並用自己的卷積核對其進行卷積運算。和之前一樣,我們得到了第二個卷積層的新的對應像素值。

實際應用的 CNN 會有很多個層,使得網路能構建越來越抽象和複雜的形狀。即使僅僅經過 4 到 5 層的卷積,模型也能開始尋找關於臉部、動物等物體的關鍵特徵。

神經網路

現在你或許會問自己,「這都很好,但是把所有的卷積結果一起提出來聽起來很乏味?怎樣才能把所有這些卷積核給出的結果結合起來變成有意義的東西呢。

首先,在一個更高的層面上,我們的卷積網路可以分成兩個部分。第一個是卷積,卷積在圖片數據里找出有用的特徵。

第二部分是,在表格靠後的」密集層「(即全連接層,這麼命名是因為這裡每一個神經元都有好多參數)是用來分類的。一但你有了這些紋理,這些密集層的作用其實就是對每一個可能的數計算一堆線性回歸,然後給一個分數。最高的分數就是模型的最終預測。

矩陣 1 是我們的卷積輸出。每個矩陣 1 中的像素乘以矩陣 2 中的數字,求和之後的結果生成方框 3 里的數字。接下來對綠色框里的矩陣重複同樣的運算。在這裡,我們最終得到了 8 個輸出,在深度學習里它們被稱為「神經元」。

想要最終找出這些卷積核和密集層中正確的權重,是非常繁雜的一項工作。幸運的是,自動更新權重是神經網路工作的一部分,所以我們不必擔心這一點。如果你對此比較好奇,請查找「反向傳播」的有關內容(可參閱:被 Geoffrey Hinton 拋棄,反向傳播為何飽受質疑?(附 BP 推導))。

總結

每個卷積神經網路都包含兩大部分:卷積,它總是先開始行動,尋找圖片中有用的特徵;而分層在其後,經常被稱為「密集」層,它們會根據特徵對事物進行分類。

為了對這些概念有一個清晰的認識,我推薦你使用電子表格對它們進行操作。

在這裡,你可以從頭到尾跟蹤一個像素,看著它通過過濾器,最終會發生些什麼。我還在電子表格的評論中加入了更多技術細節的解釋。

資源

想要學習更多?我推薦這些資源:

Notes

訓練卷積神經網路需要的數學基礎包括微積分,這樣才能自動調整權重。但隨著模型訓練完成,它實際上只需要乘法與加法進行預測。在實踐中,微積分部分的內容是由你使用的深度學習庫來處理的。

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

------------------------------------------------


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

要不要買延誤險?來,先看看Google Flight預測大法
302頁吳恩達Deeplearning.ai課程筆記,詳記基礎知識與作業代碼

TAG:機器之心 |