知己知彼,百戰不殆:一篇文章看懂隱藏在阿爾法狗背后的深度學習

AndreaROI 8年前發布 | 31K 次閱讀 深度學習 設計 機器學習

本篇文章共分為三部分,第一部分回答關于深度學習基本的問題;第二部分介紹深度學習一些最基本的概念。第三部分我將手把手教你如何從零開始打造一款超酷的深度學習應用,由于第三部分涉及到實際編程相關的知識和步驟,在此不作介紹,感興趣的讀者可 戳原文查看

(一)

深度學習?就是那個隱藏在阿爾法狗背后神秘的技術?也是無人駕駛汽車的大腦?

沒錯。深度學習是機器學習的一個分支,在完成一些難度極高的任務中展現了驚人的功力,如從圖片中識別物體、語言理解,當然,還包括棋盤類游戲。十幾年來,一幫世界上最聰明的人一直在進行相關研究,這絕對是最先進的技術!

但是我不是什么狂熱的科學家!看不懂啊

既然你點進來了這篇文章,說明你對深度學習還是很好奇。考慮到你是零基礎,我還是先來回答你可能會問的幾個入門級問題。

深度學習究竟是什么鬼?

簡而言之,深度學習是試圖模仿人類大腦的軟件程序。如大腦的構成、行為和反饋模式。深度學習源于神經科學,可用于處理很難用編程解決的人工智能任務。

我為什么要了解深度學習?

因為目前,這是一座金礦。不信可以看看 Quora 上這個價值 1000 美元的問題: 在接下來的 2-3 年間,什么科技趨勢將給創業公司帶來大量機遇?

不論何時,只要有了大的技術突破,總會有機會去利用最新的技術創造之前從未有過的應用。深度學習有很多重大的研究成果,但是環顧四周,你能看到多少深度學習的應用?

需要龐大的數據中心嗎?

訓練驅動 Google 圖片搜索等產品的復雜模型的確需要大規模的數據中心以及強大的計算資源。但是如果要開發能在手機上運行的程序,完成不用。

如果把 Google 的數據中心比作一個人,那么我們的手機就相當于一只螞蟻。你不可能把人類的大腦植入螞蟻,對吧。但是螞蟻仍然非常聰明,可以做很多事。

(二)

回答完以上基本的問題后,這部分我們來看看深度學習究竟是如何運作的,介紹一些深度學習最基本的概念。

首先,防止你對深度學習一無所知......

一般來說,機器學習的問題是在沒有特定編程的情況下,你希望電腦去回答的問題。如,「我的房子在上海值多少錢?」或者,「這篇文章說的是事實嗎?」

這類問題可以翻譯成以下形式:

對于給定的輸入 X,正確的輸出 Y 是什么?

就拿上面的問題來說。房子的信息是輸入,預估的價格是輸出;文章的內容是輸入,輸出則為「是」或者「不是」。

這些例子就是「訓練數據」,將這些問題提供給程序的過程就是「訓練」。你不斷地向程序提供這些問題,直到程序足夠聰明,可以主動預測沒有提供過的問題的答案。試圖觀察程序是夠足夠智能的過程就是「測試」或者「評估」,而程序則稱之為「模型」。

整個過程中最大的挑戰在于如果獲取精準的訓練數據、如果設計輸入、輸出以及模型的內部結構,從而形成問題的解決方案。

深度學習有何特別之處?

舉個栗子:給定一張照片,告訴我照片里是否有一只貓。這是一個非常棒的例子,因為這對人類來說小菜一碟,但對程序而言,卻難于上青天。

傳統的機器學習需要我們人類首先定義一系列程序尋找的「特征」。比如,「它是多毛的嗎?」、「它的頭上是否有兩個眼睛和一個鼻子」、「它是否有四條腿?」、「它是黃色的嗎?」等等。然后給程序提供大量的例子,但是對于每個例子,都不會向程序展示全局圖片,而是展示預先設定的特征的變量,然后你告訴程序那個才是貓。經過訓練之后,程序就能明白這些「如果它不是多毛的,它可能不是貓,」「它是不是黃色真的沒關系,」等等。

然而,棘手的部分在于,我們很難去定義一整套正確的「特征」。如果你問我貓是什么,我可能會這樣回答:貓是一種多毛的小動物,頭小小的、兩只眼睛、兩只耳朵、身體長著四條腿和一條尾巴...... 然后,你給你看了這樣一張圖片。

完全沒有腿!完全看不到眼睛!但是我們是如何判定這是一只貓呢?我們大腦究竟是利用哪些「特征」把貓和其他物體區分開來?如果我們自己都不能找出哪些「特征」是有用的,我們又如何給模型提供可用如何給模型提供可用的「特征」?

這就是傳統機器學習方法掙扎的泥潭,而這也正是深度學習派上用場的時候。深度學習的魔力在于我們再也不用去定義這些「特征」。我們只需要打造一個空白的「大腦」,結構上足夠「智能」,能夠自動判斷哪些特征是有用的,以及如何使用這些特征做出預測。

深度學習模型如何運作?

為了解決以上識別貓的問題,一個有效的深度學習模型為 CNN(卷積神經網絡) ,通常由圖層(layers)構成。假設我們已經有一個訓練好的 CNN,稍后我將解釋它是如何運作的。我們來看看深度學習是如何識別貓的。

首先,我們給模型提供全局圖片,而不是提供某些「特征」作為輸入。假設,這行照片尺寸為 200x200 像素。第一層神經網絡將從左上角到右下角掃描圖片,以 10x10 的色塊為單位,去尋找一些基本的特征,如「這一色塊是否有水平線」、「這一色塊是否有垂直線」、「這一色塊絕大部分是黑色嗎?」或者「這一色塊看起來是毛茸茸的嗎?」

第一層會有幾十上百個這類特征探測器,稱為 「神經元」(neurons) 。每個神經元都會逐一掃描所有色塊,找出最匹配其要尋找的樣式。為了方便起見,我們假設色塊之間是沒有重疊的,那么每個神經元的結果就是 20x20 網格的布爾值。如果這一層有 100 個神經元,那么就會有產生 100 個這樣的網格,把這些合在一起就構成了第二層的輸入源。有時候,這些網絡稱之為 特征地圖

第二層將觀察由第一層產生的特征地圖,然后再次從左上角到右下角,逐塊掃描,這不過這次色塊的尺寸更大。在 20x20 的網格中,第二層將以 3x3 的尺寸掃描,相當于 200x200 原圖 30x30 的區域。有了第一層獲取的基礎特征,第二層則研究更復雜的外形,如毛茸茸的尾巴、有顏色的眼睛或者小耳朵等等。

一層又一層,直到有一層獲取了足夠的信息足以判斷這是一只貓。下面我們再看一個使用 CNN 進行面部識別的例子。關鍵在于:每一層都利用上一層的結果,然后鑒定更復雜的樣式。

整個技術最神奇的地方在于:我們無需告訴第一層去尋找水平線、垂直線,也不用告訴第二層去尋找毛茸茸的尾巴等等。實際上,我們無需告訴模型任何關于貓的信息。我們只需設定模型的結構,然后從訓練數據中學習。如果水平線對識別貓很重要,那么模型就會有一個對應的神經元。如果顏色不是非常有用,那么顏色相關的特征就會自然褪去,然后模型就會用神經元尋找更重要的特征。

在自己開始打造深度學習應用之前,以上就是你需要了解的所有信息,是不是很神奇!在第三部分,我們將演示一個可在圖片中識別任意數字的實際應用,你會發現原來這可以如此簡單。

第三部分可戳原文查看。

來自: http://tech2ipo.com/10028992

 本文由用戶 AndreaROI 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!