神經網絡是什麼?


人工神經網絡(ANNs)或連接系統是計算系統,其模糊地受到構成動物腦的生物神經網絡的啟發。這些系統通過考慮實例“學習”(即逐步提高性能),通常沒有特定於任務的編程。例如,在圖像識別中,他們可能會通過分析手動標記為“貓”或“無貓”的示例圖像並使用結果識別其他圖像中的貓來識別包含貓的圖像。他們沒有任何先驗知識就這樣做關於貓,例如,他們有毛皮,尾巴,鬍鬚和貓般的面孔。相反,他們從他們處理的學習資料中演變出自己的一套相關特徵。

人工神經網絡基於一組稱為人造神經元(在動物腦中的生物神經元的簡化版本)的連接單元或節點。人造神經元之間的每個連接(簡化版本的突觸)可以將信號從一個傳輸到另一個。接收信號的人工神經元可以處理它,然後發出信號傳遞與之相連的人造神經元。

在常見的ANN實現中,人造神經元之間的連接處的信號是實數,並且每個人造神經元的輸出通過其輸入之和的非線性函數來計算。人工神經元和連接通常具有隨著學習進行而調整的權重。重量增加或減少連接處信號的強度。人造神經元可能有一個閾值,只有當彙總信號超過該閾值時才會發送信號。通常,人造神經元是分層組織的。不同的層可能會對其輸入執行不同類型的轉換。信號從第一個(輸入)到最後一個(輸出)層傳播,可能在多次穿越層之後。

ANN方法的最初目標是以與人類大腦相同的方式解決問題。然而,隨著時間的推移,注意力集中在匹配具體任務上,導致生物學的偏差。人工神經網絡已用於各種任務,包括計算機視覺,語音識別,機器翻譯,社交網絡過濾,遊戲板和視頻遊戲以及醫療診斷。


瞭解更多硅谷前沿深度訊息請看 硅發佈 微信公眾號。


硅發佈

下面我們來點通俗易懂的幾個概念。如果想系統性學習,建議買一些相關的書籍看一看。

神經網絡

神經網絡技術是機器學習下屬的一個概念,本質上是從信息處理的角度對人腦神經元網絡進行抽象模擬,從而建立計算模型。

基於神經連接的計算模型在上世紀40年代開始受到重視,大量的訓練數據(包括圖像、視頻和語音)成功的實現了數據分析。在深度學習發展之前,神經網絡通常只有3到5層,和幾十個神經元/節點;深度學習之後,神經網絡擴展到7到10層,甚至更多層,模擬神經元數目增至百萬量級,從而面向更為複雜的問題實現更為可靠的處理。當下興起的人工智能,主要就是大規模的深度學習。

具體來看,神經網絡有三類主要形式:

1.1 前饋神經網絡

前饋神經網絡(Feed forward neural networks)是最常見的人工神經網絡。在這種結構下,信息只向一個方向(向前)移動,即從輸入層經過“隱藏層”到輸出層,沒有循環網絡。首個單節神經網絡在1958年提出,經過計算能力和訓練算法的大發展,前饋神經網絡展現出了更高的性能水平。

1.2 循環神經網絡

循環神經網絡(Recurrent neural networks)指結構中包含節點定向連接成環(loops)的人工神經網絡,非常適合於處理(手寫、文本、語音形式的)任意時序的輸入序列。2016年11月,牛津研究報告顯示,基於神經網絡(和卷積神經網絡)的系統在唇語識別應用中實現了95%的準確率(有經驗的人類唇語者準確率近52%)。

1.3 卷積神經網絡

卷積神經網絡(Convolutional neural networks)是一種深度前饋人工神經網絡,其邏輯結構受動物視覺大腦皮層的啟發,對於大型圖像處理(視覺感知任務)有出色表現。

▲最好的AI系統識別能力已經超過人類


智東西

以分類垃圾郵件為例。

如果用傳統程序做,怎麼做?

容易想到的一個思路是在郵件中搜索一些關鍵詞,比如“代開發票”之類的,然後給每個關鍵詞分配一個分數,再將這些特徵的分數加起來,得到一個總分。將這個總分和一個目標分數比較,大於這個分數結果為真(分類為垃圾郵件),小於這個分數結果為假(分類為正常郵件)。

Boolean detectSpam(f1, f2, ..., fn) {

if (w1 * f1 + w2 * f2 + ... + wn * fn > t) {

return true;

} else {

return false;

}

}

其中,f1 ... fn 代表匹配到的關鍵詞,w1 ... wn 代表相應的分數。

正如你所說:

傳統程序就是循環判斷什麼的

那上面就是一個判斷。detectSpam是分類一封郵件的,將它應用到所有郵件上,不正是循環嘛。所以說,這是一個標準的傳統程序。

好了,現在我們給上面提到的東西起些新名字。分配的分數,我們起名叫權重,目標分數,我們起名叫閾值。最後我們再把返回的布爾值(true、false)改成數字1和0。

那麼上面的detectSpam變成了什麼,感知器(perceptron)!

所以說,你可以將感知器看成傳統程序中某類具有一些特定性質的函數。感知器接受多個輸入,計算一個多項式的值(輸入乘以權重並相加),返回一個輸出(1或0)

之所以叫感知器,是因為它借鑑了神經末梢接受外部的輸入,決定是否激動的思路。

由於感知器主要是計算多項式的值,那麼從直覺上,線性不可分的問題,比如異或(XOR)函數,就無法轉化成感知器的形式。

但實際上,感知器並沒有這麼弱,將感知器組合一下,就可以表達異或函數。

我們準備兩個閾值為 0 的感知器,一個是x-y, 另一個是-x+y,將輸入分別發給這兩個感知器:

然後再將輸出提供給一個閾值為 0 的x+y感知器:

比較輸入和最終輸出,可以看到我們的這三個感知器運算的結果是符合異或的定義的。

這裡,前兩個感知器(x-y和-x+y)是第一層,最後一個感知器(x+y)是第二層。由此我們看到,通過組合感知器,可以構成一個分層的神經網絡,分層的神經網絡可以解決線性不可分問題。

但是感知器還是看起來很弱啊。 異或函數這麼簡單的問題,都要這麼複雜才能搞定。而稍微正常一點的編程語言,異或函數都能很直接地定義。我們何必要自廢武功用感知器和神經網絡呢?直接用傳統程序不行嗎?

實際上,感知器和神經網絡看起來很弱,但它也有優點:

  1. 感知器的“接口”很齊整,每個感知器都有多個輸入,返回一個結果,這就使得它們組合起來很容易

  2. 感知器內部都是在進行多項式運算,而不像傳統程序一樣千變萬化,因此優化起來很容易(特別是現在我們有很強勁的擅長浮點運算的GPU)。

  3. 感知器的運算結果只取決於它的輸入,因此可以很容易地以

    分佈式的方式跑。

  4. 上面那個例子中x-y, -x+y, x+y的確定,來自於我們對異或函數的理解。假設我們對異或函數一無所知,感知器的結構決定了,我們比較容易通過暴力的方式(所謂訓練神經網絡)來嘗試各種權重和閾值。相反,我們不太可能通過暴力的方式生成字符串恰巧撞對異或函數的一般定義。

  5. 神經網絡分層的結構,意味著我們可以逐層嘗試,來逼近預期的結果。

以上只是神經網絡的基本原理。實際使用的神經網絡要複雜很多。

比如,我們的感知器只能輸出 0 或者 1,而既然是暴力嘗試,那我們就希望整個網絡對參數的調整敏感一點。這時候我們就不再比較多項式的值和閾值來輸出 0 或者 1,而是將閾值轉化成

偏置加到多項式上,並使用一個激活函數對多項式的結果進行處理,得到一個浮點數。最簡單的激活函數是 ReLU, 定義很簡單 max(0, n). ReLu 雖然簡單,但出奇地好用。

同時,實際工程中使用的神經網絡,無論是規模還是結構一般都非常複雜。


分享到:


相關文章: