神經網路,人工智慧這塊怎麼入門?

有比較強的編程背景,工程能力,這段看了本模式識別的書,被裡面的數學搞哭了,全部還給學校老師了。難道一定要把數學撿起來才能入門嗎


超智能體專欄

YJango 的 Live -- 深層學習入門誤區

深層學習為何要「Deep」(上) - 知乎專欄

深層學習為何要「Deep」(下) - 知乎專欄

YJango 的 Live -- 深層學習入門誤區

串講 線性代數、概率、熵 - 知乎專欄

TensorFlow基本用法 - 知乎專欄

Tensorflow代碼演示LV1 · 超智能體 (看不了gitbook請看代碼演示LV1)

Tensorflow實現神經網路(2) - 知乎專欄

Tensorflow實現深層學習完備流程 - 知乎專欄

循環神經網路(Recurrent)--介紹 - 知乎專欄

循環神經網路--實現LSTM

循環神經網路--scan實現LSTM

循環神經網路--雙向LSTMamp;amp;amp;amp;GRU

深層學習開啟了人工智慧的新時代。不論任何行業都害怕錯過這一時代浪潮,因而大批資金和人才爭相湧入。但深層學習卻以「黑箱」而聞名,不僅調參難,訓練難,「新型」網路結構的論文又如雨後春筍般地湧現,使得對所有結構的掌握變成了不現實。我們缺少一個對深層學習合理的認識。

本文就是通過對深層神經網路驚人表現背後原因的思考,揭示設計一個神經網路的本質,從而獲得一個對「如何設計網路」的全局指導。


深層學習為何要「Deep」(上)

一、基本變換:層

神經網路是由一層一層構建的,那麼每究竟在做什麼?

  • 數學式子vec{y}= a(Wcdotvec{x} + {b}),其中vec{x}是輸入向量,vec{y}是輸出向量,vec{b}是偏移向量,W是權重矩陣,a()是激活函數。每一層僅僅是把輸入vec x經過如此簡單的操作得到vec y
  • 數學理解:通過如下5種對輸入空間(輸入向量的集合)的操作,完成 輸入空間 —&> 輸出空間 的變換 (矩陣的行空間到列空間)。
    註:用「空間」二字的原因是被分類的並不是單個事物,而是一類事物。空間是指這類事物所有個體的集合。
    • 1. 升維/降維
    • 2. 放大/縮小
    • 3. 旋轉
    • 4. 平移
    • 5. 「彎曲」
      這5種操作中,1,2,3的操作由Wcdotvec{x}完成,4的操作是由+vec{b}完成,5的操作則是由a()來實現。 (此處有動態圖5種空間操作,幫助理解)

每層神經網路的數學理解:用線性變換跟隨著非線性變化,將輸入空間投向另一個空間

  • 物理理解:對 Wcdotvec{x} 的理解就是通過組合形成新物質 a()又符合了我們所處的世界都是非線性的特點。
    • 情景:vec{x}是二維向量,維度是碳原子和氧原子的數量 [C;O],數值且定為[1;1],若確定vec{y}是三維向量,就會形成如下網路的形狀 (神經網路的每個節點表示一個維度)。通過改變權重的值,可以獲得若干個不同物質。右側的節點數決定了想要獲得多少種不同的新物質。(矩陣的行數)

    • 1.如果權重W的數值如(1),那麼網路的輸出y就會是三個新物質,[二氧化碳,臭氧,一氧化碳]。
      left[ egin{matrix} CO_{2}\ O_{3}\ CO end{matrix} 
ight]= left[ egin{matrix} 1  2 \ 0  3\ 1  1 end{matrix} 
ight] cdot left[ egin{matrix} C \ O \ end{matrix} 
ight] (1)
    • 2.也可以減少右側的一個節點,並改變權重W至(2),那麼輸出vec{y} 就會是兩個新物質,[ O_{0.3};CO_{1.5}]
      left[ egin{matrix} O_{0.3}\ CO_{1.5}\ end{matrix} 
ight]= left[ egin{matrix} 0 0.3 \ 1  1.5\ end{matrix} 
ight] cdot left[ egin{matrix} C \ O \ end{matrix} 
ight](2)
      3.如果希望通過層網路能夠從[C, O]空間轉變到[CO_{2};O_{3};CO]空間的話,那麼網路的學習過程就是將W的數值變成儘可能接近(1)的過程 。如果再加一層,就是通過組合[CO_{2};O_{3};CO]這三種基礎物質,形成若干更高層的物質。
      4.重要的是這種組合思想,組合成的東西在神經網路中並不需要有物理意義。

每層神經網路的物理理解:通過現有的不同物質的組合形成新物質

二、理解視角:

現在我們知道了每一層的行為,但這種行為又是如何完成識別任務的呢?

數學視角:「線性可分」

  • 一維情景:以分類為例,當要分類正數、負數、零,三類的時候,一維空間的直線可以找到兩個超平面(比當前空間低一維的子空間。當前空間是直線的話,超平面就是點)分割這三類。但面對像分類奇數和偶數無法找到可以區分它們的點的時候,我們藉助 x % 2(取余)的轉變,把x變換到另一個空間下來比較,從而分割。

  • 二維情景:平面的四個象限也是線性可分。但下圖的紅藍兩條線就無法找到一超平面去分割。

神經網路的解決方法依舊是轉換到另外一個空間下,用的是所說的5種空間變換操作。 比如下圖就是經過放大、平移、旋轉、扭曲原二維空間後,在三維空間下就可以成功找到一個超平面分割紅藍兩線 (同SVM的思路一樣)。

上面是一層神經網路可以做到的,如果把上面是一層神經網路可以做到的,如果把vec{y} 當做新的輸入再次用這5種操作進行第二遍空間變換的話,網路也就變為了二層。最終輸出是vec{y}= a_{2}(W_{2}cdot(a_{1}(W_{1}cdotvec{x} + {b}_{1})) + {b}_{2})
設想網路擁有很多層時,對原始輸入空間的「扭曲力」會大幅增加,如下圖,最終我們可以輕鬆找到一個超平面分割空間。

當然也有如下圖失敗的時候,關鍵在於「如何扭曲空間」。所謂監督學習就是給予神經網路網路大量的訓練例子,讓網路從訓練例子中學會如何變換空間。每一層的權重W就當然也有如下圖失敗的時候,關鍵在於「如何扭曲空間」。所謂監督學習就是給予神經網路網路大量的訓練例子,讓網路從訓練例子中學會如何變換空間。每一層的權重W就控制著如何變換空間,我們最終需要的也就是訓練好的神經網路的所有層的權重矩陣。。這裡有非常棒的可視化空間變換demo,一定要打開嘗試並感受這種扭曲過程。更多內容請看Neural Networks, Manifolds, and Topology。

上面的內容有三張動態圖,對於理解這種空間變化非常有幫助。由於知乎不支持動態圖,可以在gitbook深層學習為何要「deep」上感受那三張圖。一定一定要感受

線性可分視角:神經網路的學習就是學習如何利用矩陣的線性變換加激活函數的非線性變換,將原始輸入空間投向線性可分/稀疏的空間去分類/回歸。 增加節點數:增加維度,即增加線性轉換能力。 增加層數:增加激活函數的次數,即增加非線性轉換次數。

物理視角:「物質組成」

  • 類比:回想上文由碳氧原子通過不同組合形成若干分子的例子。從分子層面繼續迭代這種組合思想,可以形成DNA,細胞,組織,器官,最終可以形成一個完整的人。繼續迭代還會有家庭,公司,國家等。這種現象在身邊隨處可見。並且原子的內部結構與太陽系又驚人的相似。不同層級之間都是以類似的幾種規則再不斷形成新物質。你也可能聽過分形學這三個字。可通過觀看從1米到150億光年來感受自然界這種層級現象的普遍性。

  • 人臉識別情景:我們可以模擬這種思想並應用在畫面識別上。由像素組成菱角再組成五官最後到不同的人臉。每一層代表不同的不同的物質層面 (如分子層)。而每層的W存儲著如何組合上一層的物質從而形成新物質
    如果我們完全掌握一架飛機是如何從分子開始一層一層形成的,拿到一堆分子後,我們就可以判斷他們是否可以以此形成方式,形成一架飛機。
    附:Tensorflow playground展示了數據是如何「流動」的。

物質組成視角:神經網路的學習過程就是學習物質組成方式的過程。 增加節點數:增加同一層物質的種類,比如118個元素的原子層就有118個節點。 增加層數:增加更多層級,比如分子層,原子層,器官層,並通過判斷更抽象的概念來識別物體。

按照上文在理解視角中所述的觀點,可以想出下面兩條理由關於為什麼更深的網路會更加容易識別,增加容納變異體(variation)(紅蘋果、綠蘋果)的能力、魯棒性(robust)。

數學視角:變異體(variation)很多的分類的任務需要高度非線性的分割曲線。不斷的利用那5種空間變換操作將原始輸入空間像「捏橡皮泥一樣」在高維空間下捏成更為線性可分/稀疏的形狀。
物理視角:通過對「抽象概念」的判斷來識別物體,而非細節。比如對「飛機」的判斷,即便人類自己也無法用語言或者若干條規則來解釋自己如何判斷一個飛機。因為人腦中真正判斷的不是是否「有機翼」、「能飛行」等細節現象,而是一個抽象概念。層數越深,這種概念就越抽象,所能涵蓋的變異體就越多,就可以容納戰鬥機,客機等很多種不同種類的飛機。

三、神經網路的訓練

知道了神經網路的學習過程就是學習控制著空間變換方式(物質組成方式)的權重矩陣後,接下來的問題就是如何學習每一層的權重矩陣W。


如何訓練:

既然我們希望網路的輸出儘可能的接近真正想要預測的值。那麼就可以通過比較當前網路的預測值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網路的預測值高了,就調整權重讓它預測低一些,不斷調整,直到能夠預測出目標值)。因此就需要先定義「如何比較預測值和目標值的差異」,這便是損失函數或目標函數(loss function or objective function),用于衡量預測值和目標值的差異的方程。loss function的輸出值(loss)越高表示差異性越大。那神經網路的訓練就變成了儘可能的縮小loss的過程。
所用的方法是梯度下降(Gradient descent):通過使loss值向當前點對應梯度的反方向不斷移動,來降低loss。一次移動多少是由學習速率(learning rate)來控制的。


梯度下降的問題:

然而使用梯度下降訓練神經網路擁有兩個主要難題。


1、局部極小值(或鞍點)

梯度下降尋找的是loss function的局部極小值,而我們想要全局最小值。如下圖所示,我們希望loss值可以降低到右側深藍色的最低點,但loss有可能「卡」在左側的局部極小值中。

試圖解決「卡在局部極小值」問題的方法分兩大類:

  • 調節步伐:調節學習速率,使每一次的更新「步伐」不同。常用方法有:
  • 隨機梯度下降(Stochastic Gradient Descent (SGD):每次只更新一個樣本所計算的梯度
  • 小批量梯度下降(Mini-batch gradient descent):每次更新若干樣本所計算的梯度的平均值
  • 動量(Momentum):不僅僅考慮當前樣本所計算的梯度;Nesterov動量(Nesterov Momentum):Momentum的改進
  • Adagrad、RMSProp、Adadelta、Adam:這些方法都是訓練過程中依照規則降低學習速率,部分也綜合動量
  • 優化起點:合理初始化權重(weights initialization)、預訓練網路(pre-train),使網路獲得一個較好的「起始點」,如最右側的起始點就比最左側的起始點要好。常用方法有:高斯分布初始權重(Gaussian distribution)、均勻分布初始權重(Uniform distribution)、Glorot 初始權重、He初始權、稀疏矩陣初始權重(sparse matrix)

2、梯度的計算

機器學習所處理的數據都是高維數據,該如何快速計算梯度、而不是以年來計算。
其次如何更新隱藏層的權重?
解決方法是:計算圖:反向傳播演算法
這裡的解釋留給非常棒的Computational Graphs: Backpropagation
需要知道的是,反向傳播演算法是求梯度的一種方法。如同快速傅里葉變換(FFT)的貢獻。
而計算圖的概念又使梯度的計算更加合理方便。


基本流程圖:

下面就結合圖簡單瀏覽一下訓練和識別過程,並描述各個部分的作用。要結合圖解閱讀以下內容。但手機顯示的圖過小,最好用電腦打開

  • 收集訓練集(train data):也就是同時有input以及對應label的數據。每個數據叫做訓練樣本(sample)。label也叫target,也是機器學習中最貴的部分。上圖表示的是我的資料庫。假設input本別是x的維度是39,label的維度是48。
  • 設計網路結構(architecture):確定層數、每一隱藏層的節點數和激活函數,以及輸出層的激活函數和損失函數。上圖用的是兩層隱藏層(最後一層是輸出層)。隱藏層所用激活函數a( )是ReLu,輸出層的激活函數是線性linear(也可看成是沒有激活函數)。隱藏層都是1000節點。損失函數L( )是用於比較距離MSE:mean((output - target)^2)。MSE越小表示預測效果越好。訓練過程就是不斷減小MSE的過程。到此所有數據的維度都已確定:
    • 訓練數據:input in R^{39} ;label in R^{48}
    • 權重矩陣:W_{h1}in R^{1000x39};W_{h2}in R^{1000x1000} ;W_{o}in R^{48x1000}
    • 偏移向量:b_{h1}in R^{1000};b_{h2}in R^{1000} ;b_{o}in R^{48}
    • 網路輸出:output in R^{48}
  • 數據預處理(preprocessing):將所有樣本的input和label處理成能夠使用神經網路的數據,label的值域符合激活函數的值域。並簡單優化數據以便讓訓練易於收斂。比如中心化(mean subtraction)、歸一化(normlization)、主成分分析(PCA)、白化(whitening)。假設上圖的input和output全都經過了中心化和歸一化。
  • 權重初始化(weights initialization)W_{h1},W_{h2},W_{0}在訓練前不能為空,要初始化才能夠計算loss從而來降低。W_{h1},W_{h2},W_{0}初始化決定了loss在loss function中從哪個點開始作為起點訓練網路。上圖用均勻分布初始權重(Uniform distribution)。
  • 訓練網路(training):訓練過程就是用訓練數據的input經過網路計算出output,再和label計算出loss,再計算出gradients來更新weights的過程。
    • 正向傳遞:,算當前網路的預測值output =linear (W_{o} cdot Relu(W_{h2}cdot Relu(W_{h1}cdot input+b_{h1})+b_{h2}) +b_{o})
    • 計算loss:loss = mean((output - target)^2)
    • 計算梯度:從loss開始反向傳播計算每個參數(parameters)對應的梯度(gradients)。這裡用Stochastic Gradient Descent (SGD) 來計算梯度,即每次更新所計算的梯度都是從一個樣本計算出來的。傳統的方法Gradient Descent是正向傳遞所有樣本來計算梯度。SGD的方法來計算梯度的話,loss function的形狀如下圖所示會有變化,這樣在更新中就有可能「跳出」局部最小值。

    • 更新權重:這裡用最簡單的方法來更新,即所有參數都 W = W - learningrate * gradient
    • 預測新值:訓練過所有樣本後,打亂樣本順序再次訓練若干次。訓練完畢後,當再來新的數據input,就可以利用訓練的網路來預測了。這時的output就是效果很好的預測值了。下圖是一張實際值預測值的三組對比圖。輸出數據是48維,這裡只取1個維度來畫圖。藍色的是實際值,綠色的是實際值。最上方的是訓練數據的對比圖,而下方的兩行是神經網路模型從未見過的數據預測對比圖。(不過這裡用的是RNN,主要是為了讓大家感受一下效果


作者:矽谷周邊
鏈接:如何高效的學習TensorFlow代碼? - 矽谷周邊的回答
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。

Google發布了Tensorflow遊樂場。Tensorflow是Google今年推出的機器學習開源平台。而有了Tensorflow遊樂場,我們在瀏覽器中就可以訓練自己的神經網路,還有酷酷的圖像讓我們更直觀地了解神經網路的工作原理。今天,就讓矽谷周邊帶你一起去Tensorflow遊樂場快樂地玩耍吧!


昨天,Google深度學習部門Google Brain的掌門人,也是Google里受萬眾景仰的神級別工程師Jeff Dean,在Google Plus上發布了Tensorflow遊樂場的消息:

於是小夥伴們都十分激動地去Tensorflow的網站上玩神經網路了!遊樂場的地址是:http://playground.tensorflow.org。讓我們快點一起去看看遊樂場里有哪些好玩的東東吧。


一打開網站,就看見上面的標語:

「在你的瀏覽器中就可以玩神經網路!不用擔心,怎麼玩也玩不壞哦!」

這簡直太令人振奮了!面對這麼多可以隨便點的按鈕,咱們從哪兒開始呢?

首先讓我們來看看數據。在這個遊樂場中,我們有4種不同形態的數據可以玩:

每組數據,都是不同形態分布的一群點。每一個點,都與生俱來了2個特徵:x1和x2,表示點的位置。而我們數據中的點有2類:橙色和藍色。我們的神經網路的目標,就是通過訓練,知道哪些位置的點是橙色、哪些位置的點是藍色。


如果橙色是橙子,藍色是藍莓。假設我們有2000個散落在各處的橙子和藍莓。前1000個,我們知道坐標(1,1)的是藍莓,(2,2)的是橙子,(0.5,0.5)的是藍莓等等。我們要用這些信息來訓練我們的神經網路,讓它能夠準確地預測出後1000個哪些是橙子、哪些是藍莓。

看上面的4組數據,我們會發現,前3中都能相對簡單地區分開,而最後一組螺旋數據會是最難的。


Tensorflow遊樂場中的數據十分靈活。我們可以調整noise(干擾)的大小,還可以改變訓練數據和測試數據的比例多少。下圖是不同noise的數據分布。

當我們把每一個數據點的信息餵給機器學習系統時,我們需要做feature extraction,也就是特徵提取。如果我們真的是在區分藍莓和橙子的話,大小、顏色等等都會是我們的特徵。而這裡,每一個點都有x1和x2兩個特徵。除此之外,由這兩個特徵還可以衍生出許多其他特徵:

抽象來說,我們的機器學習classifier(分類器)其實是在試圖畫一條或多條線。如果我們能夠100%正確地區分藍色和橙色的點,藍色的點會在線的一邊,橙色的會在另一邊。


上面這些圖其實非常的直觀。第一張圖中,如果x1作為我們的唯一特徵,我們其實就是在畫一條和x1軸垂直的線。當我們改變參數時,其實就是在將這條線左右移動。其他的特徵也是如此。


很容易可以看出,我們需要智能地結合這其中一種或多種的特徵,才能夠成功地將藍色點和橙色點分類。這樣的feature extraction,其實往往是機器學習應用中最難的部分。好在我們有神經網路,它能夠幫我們完成大部分的任務。


如果我們選定x1和x2作為特徵,我們神經網路的每一層的每個神經元,都會將它們進行組合,來算出結果:

而下一層神經網路的神經元,會把這一層的輸出再進行組合。組合時,根據上一次預測的準確性,我們會通過back propogation給每個組合不同的weights(比重)。這裡的線越粗,就表示比重越大:

下面就讓我們用最難的螺旋形數據,來試試這個神經網路的表現吧!


在神經網路出現前,我們往往會竭盡所能地想出儘可能好的特徵,把它們全都餵給系統。而系統會是個十分淺的系統,往往只有一層。用這樣的方法來完成分類。


讓我們先來實驗傳統的方法。在這裡,我們將所有能夠想到的7個特徵都輸入系統,並選擇只有1層的神經網路:

最後的結果是這樣的,可以看出我們的單層神經系統幾乎完美地分離出了橙色點和藍色點:

接下來,讓我們來體驗神經網路真正的魔法。神經網路最大的魔力,就在於我們根本不需要想出各種各樣的特徵,用來輸入給機器學習的系統。我們只需要輸入最基本的特徵x1, x2, 只要給予足夠多層的神經網路和神經元,神經網路會自己組合出最有用的特徵。


在這次試驗中,我們只輸入x1, x2,而選擇1個6層的,每層有8個神經元的神經網路:

最後的結果是這樣的。我們發現,通過增加神經元和神經網路的層數,即使沒有輸入許多特徵,我們也能夠成功地分類:

神經網路的偉大之處就在於此。當我們在解決分類橙色點和藍色點這樣的簡單問題時,想出額外的特徵似乎並不是難事。但是,當我們要處理的問題越來越複雜,想出有用的特徵就變成了最最困難的事。比如說,當我們需要識別出哪張圖片是貓,哪張圖片是狗時,哪些特徵是真正有效的呢?


而當我們有了神經網路,我們的系統自己就能學習到哪些特徵是有效的、哪些是無效的,這就大大提高了我們解決複雜機器學習問題的能力,簡直是太酷啦!


看了以上的文章,你是不是對神經網路有了更直觀的認識呢?好奇的小夥伴們,歡迎去http://playground.tensorflow.org/自己試試看,真的非常好玩!

http://weixin.qq.com/r/2Dno8IjEWNUnrcyT92zK (二維碼自動識別)


「神經網路」相對「人工智慧」是一個相對狹隘的領域。「人工智慧」的3個基本學派所謂「符號主義「、」行為主義「,」連接主義「,」神經網路「只是連接主義派的代表之作,也就是說只是人工智慧的冰山一角而已。
下面就我一己之見解讀一下怎麼入門:
1. 必須感興趣,必須感興趣,必須感興趣(重要的話重複3遍) 。認可這門科學,認識到進入這個領域你將不再是一個機械的coder,而是一個有更高追求的研究和實踐者。保持學習熱情,接下來什麼方法入門才有意義。
2. 人工智慧本身是一門複雜性科學。複雜性科學意味著它是一個多學科綜合產物,範圍相當之廣。我覺得必須具備的幾個基礎是 數學、計算機基礎(演算法 數據結構)、一些語言和邏輯學基礎。數學我覺得熟練掌握大學裡面的一些工科數學就可以,主要是矩陣、概率論;計算機基礎主要是基本的編程能力,算的法解讀能力;語言和邏輯學的基礎主要對NLP(自然語言處理)和符號計算這塊比較重要。題主說看到其中有些數學就想哭了,別哭!萬物一理,世界的本質是簡單的,要在理解的基礎上去對待數學。比如,你看到BP神經網路的反向傳播訓練演算法,一堆公式就想自掛東南枝了,打住!其實就是在網路權重張成的空間上對誤差函數做梯度下降(當看到這部分回頭好好想想我說的這句話),梯度下降找到權重極小值,網路就訓練好了,沒那麼複雜的,要理解。
3. 這個領域如果很寬泛的學習往往一無所獲很迷茫。書本上只告訴你基本原理,自己也自以為懂了,其實不是的。這時候「神經網路」不失為一個很好的切入點,神經網路裡面的前饋網路基本就是一種回歸模型的變種,在很多實戰場合做分類預測效果很好;反饋網路裡面包含了一些有趣的系統動力學特性,其中的數學也是相當漂亮,Hopfield網路的自聯想、玻爾茲曼機的能量鉗制(多層玻爾茲曼就演變成深度學習模型了)都很有吸引力。所以,我建議你學習人工智慧就從學習神經網路開始吧,雖然目前的神經網路模型距離人類的神經網路還差十萬八千里,但是這裡是能激發你學習熱情的地方
4. 好了,上面說了一堆然並卵,講講具體該干點啥。實踐出真知,不寫程序跑跑幾個神經網路,是不會真正領悟其中精髓的。書看完之後,找一些演算法包實踐其中的演算法,MATLAB就把神經網路工具箱的例子起碼運行一遍,Python的話也有很多包,找測試數據,自己編代碼試驗。如果能在你的工作項目中用到一點神經網路,那就更NB了,自豪感油然而生,接下來不多說了,到這裡你已經入門了!


作者:許鐵-巡洋艦科技
鏈接:知乎專欄
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

本文為巡洋艦神經網路分享會總結,以人工神經網路為圓心,介紹神經網路在跨學科研究中的神奇應用,以饗讀者。

感謝本次邀請嘉賓 - 楊東平博士的貢獻。楊東平博士在複雜系統,平衡態神經網路領域均有建樹, 目前在悉尼大學從事博士後工作。


神經網路這個東西,隨著最近阿法狗和深度學習的熱絡, 真是火遍全球, 人們已經快把它看成一種新興生物 , 卻忘記了它的真實出處, 我在巡洋艦的此次講座, 從物理學,複雜科學 ,計算神經科學與人工智慧的角度綜合分析了神經網路這個玩意。


從物理角度看神經網路: 自組織湧現與複雜科學

要說物理學家看神經網路, 就不能離開統計物理。 物理學家把神經網路看成無數神經細胞相互作用組成的一個整體。就如同理想氣體是無數分子的組合或金屬晶體是原子的組合類似。 雖然單個神經細胞只有一個簡單的作用, 就是把接收到的信號(stimulus)轉化為一定的輸出(spike) 。 但是這樣一個簡單的東西通過大量加和的網路效應卻可以產生智能這種十分複雜的現象,這正是物理里說的湧現性。所謂簡單的東西堆在一起足夠多, 突然之間產生了一個更加複雜和高級的現象。 這種由於尺度跨越造成的飛躍性變化。 物理學認為是自然界各種複雜的東西形成秘密之所在。

然而和神經網路最接近的物理恐怕是易辛模型。易辛模型特別簡單易懂,說的是在一個網路里,每個單元都只受到自己鄰居的影響,大家在一個集體里, 每個個體都有到與周圍人做類似行為的趨勢(趨同力), 同時也受到各種隨機性的影響來破壞這種趨同效應(溫度, 熱擾動), 最終整個網路的狀態是這兩種力量平衡的結果。 如果溫度比較低的話, 最終網路將會呈現一種整體一致的狀態,因為這個時候系統總體能量最低。而溫度高的時候,系統更加趨於無序。 這種從有序到無序,無序到有序的變化在某個溫度上突然發生。 易辛模型解釋了大規模宏觀秩序是如何從自由散漫的群體中湧現的, 還真的被用在了生物神經網路的研究上, 大名鼎鼎的Hopefield網路的理論就是用這種機制解釋大量神經元在一起如何通過微弱的相互作用來實現集體編碼和儲存一個信息的。在此處物理系統喜歡呆在能量極小點的原理忽然變成了神經網路進行決策的物理基礎。 那個使得網路總體能量最小的狀態,對應你做的決策。

易辛模型: 每個磁針都有和鄰居保持一致方向的趨勢, 這種簡單的作用力導致大規模的秩序的產生, 比如一個社區群體的意志是如何趨於一致的。

從相變的角度看神經網路, 我們可以理解很多我們常常百思不得其解的問題, 如我們是如何睡覺的。 從醒著到睡覺, 人腦會發生一個劇烈的變化, 這個變化其實跟物理裡面水結冰的現象很像。 是從自由的狀態, 到極為有序的狀態。 如果你觀察從醒著到睡著的腦電波變化,你會發現波形湊某一點上一下子變掉了,這過程與相變是多麼相似。 睡眠,冥想,愛上一個人, 或許都可以看做這種大量神經單元 在某種條件下從一個整體狀態跳到另一個整體狀態的相變。

多種多樣的腦電波反應大腦的宏觀狀態

物理學角度對神經網路的貢獻當然不止於相變和湧現性 , 更主要的貢獻是非線性動力學。非線性動力學的方程式甚至精準的預測了神經細胞放電這個極為複雜的理化過程, 這就是大名鼎鼎的Hodykin-Hulex 模型, 在這個模型中, 巨多繁瑣的實驗現象被一組精心編排的微分方程同時消滅掉, 堪稱物理解釋生物的神跡。你如果在電腦上跑一些這個方程,得到的現象近乎和細胞真正放電時候不可區分。

Hodykin Huley model預測的神經元放電動力學模型: 左圖是複雜的方程,右圖是神經元放電電位隨時間的變化,我們可以看到這組複雜的方程把神經元的離子通道變化進行了精確的定量描述。

對於神經網路的動力學解釋主要基於物理的混沌理論。 因為神經網路作為一個高維繫統, 它的行為正好符合混沌的框架, 你去擾動任何一個神經元, 則產生的後果不可預料, 符合南美洲的蝴蝶扇扇翅膀引來北美的颶風這個比喻。 我們都知道生物的神經網路可以極為精準而穩定的決定動物的各種行為, 這樣一個混沌充滿隨機性,看似不可控的網路, 是如何給出那麼精準確定的行為的? 這就與物理里降維的思想暗自相通。高維度的網路系統在某個任務的時候, 可以被化解到更低的維度里用動力學完全解釋,這個過程暗自通向人工智慧的核心。


從生物角度看神經網路

生物學眼裡的神經網路估計是最複雜的,生物學家注重細節和功能, 我們要理解網路,就要去解剖, 做電生理實驗, 做各種神經成像。 首先我們關注神經細胞之間的具體鏈接,然後我們關注這些連接實現的載體- 突觸的性質。研究細胞之間通訊的關鍵,神經遞質。 神經遞質又是由一定的DNA編碼的,最後我們又回到了遺傳學。 跑完一圈我們得到感知, 到決策,從而心理現象的生物解釋。懂得吃哪一種葯可以讓你春心大作。

再次強調生物學家是特別重視細節的, 因為生物神經網路的研究思維也是一個一個搞清楚網路的連接,搞清哪個細胞是輸入, 哪個是輸出。 來自這方面的觀點認為, 如果我們能繪製一個神經元之間聯繫的精密地圖, 我們就搞清楚了大腦是怎麼回事。 這種觀點又叫connectionsim。可惜的是這個工作太艱巨,目前離這個目標還非常遙遠。

生物對神經網路解釋最有意思的現象還是學習,神經細胞之間的連接-神經突觸是隨時間不停變化,這種微妙的變化由神經活動所致,一個細胞經常和另一個細胞一起放電,他們的聯繫就加強,因而他們所代表的信息就聯繫起來,這就是學習的基礎(Hebbian learning)。

生物學家的工作是整個學科的脊樑,尤其是有關神經活動成像的工具。 沒有光遺傳這些生物技術的開發, 人是無論如何可以直接看清大腦網路里到底在幹什麼的。 還有鈣離子成像, 神經白質成像等, 沒有神經生物學家日復一日的工作, 我們對神經網路的思考只能是一種YY, 而人工智慧也難以有更長遠的發展。

光遺傳學, 即用光對神經細胞的離子通道進行有效控制而操縱神經元的手段,是研究神經網路的神器之一


從信息角度看神經網路

從信息學的角度看, 神經網路這個東西就是整合各種信息的工具。 生物進化出神經網路, 是因為他們所面臨的信息錯綜複雜, 而如何把不同的信息整合在一起, 判斷誰是獵物誰是天地什麼時候該走什麼時候該留, 事關生死。 那麼整合信息, 就是第一要務。

信息學喜歡從貝葉斯分析的角度看神經網路。所謂貝葉斯分析, 就是把新增加的證據和之前形成的信念不停進行綜合,來做當下的決斷。要做這種綜合, 顯然一要能夠不停收集新的信息,二要儲存和調用之前信息,三要根據前兩者對未來做出預測並行動, 最後要能夠根據之前信息改變現有網路的狀態 , 這三種分別對應感知,記憶,行為和學習。

感知信息要做到盡量精準的反應與決策相關的外界信號的特徵,如在人海中抓取出一個美女。 處理信息在做的把之前的經驗和現在的信息結合在一起預測未來,如你知道根據以往的經驗美女難追, 但是這一次美女特別熱情所以你預測她和之前人不同。 最後根據這個預測進行有效的行動,並根據反饋進行學習,比如還是失敗了或被騙了錢, 那就加固你的信仰-美女難追,如果成功了,就修改之前的信仰-美女也是可以追的。 這樣一個精美的框架不僅給生物神經網路的運轉提供了天衣無縫的解釋,而且也與機器學習里的統計學習理論不謀而合 。 用這個框架我們可以很好的推測大腦是如何把所謂視覺聽覺嗅覺信號綜合在一起的,我們為什麼要思考要理解世界,我們為什麼既關注過去也關注未來,一切都是為了形成一個更準確的對世界的建模, 來預測, 預測,預測。

貝葉斯公式- 把新的證據和舊經驗結合的概率方法


作為AI基礎的神經網路

AI這個東西, 的確是靠著神經網路的功力得以發展壯大, 不過它最初倒不是模擬神經網路, 而是想要直接做出一台會思維的機器, 可惜人類的思維畢竟有瓶頸。 我們發現還是要藉助仿生,從生物那裡吸取營養, 於是有了人工神經網路。因此, 無論人工智慧無論如何吹它和其他門類神經網路的不同, 都不可擺脫其仿生基礎。

人工神經網路的第一個里程碑是感知機perceptron, 這個名字其實有點誤導, 因為它根本上是做決策的。 一個感知機其實是對神經元最基本概念的模擬 ,都未必有多少網路概念,他就是一個自動做決策的機器

比如說你要決定今天出不出去看電影, 你要考慮3個因素, 一個是女朋友在不在, 一個是電影好不好看, 另一個是今天有沒有工作, 這三個因素每個人的權重都不同,有的人看重女朋友, 有的人看重工作,所以權重就不等, 最後每個人根據自己的權重做出0或1,去或不去, to be or not to be的決策。那麼你怎麼做呢? 你把三個要素按照它們需要的權重加和在一起, 在把這個分數送到一個叫sigmoid的門面前得到去或不去的決定, 工作原理如上圖。

比單層感知機更複雜的多層感知機-或者我們常說的深度網路, 是進行數據處理和模式識別的利器。 深度神經網路之所以能夠處理這些數據類型,主要是因為這些數據本身具有的複雜結構很適合被NN識別, 而人類不需要預先設計識別這些結構的函數而是任由網路學習, D-CNN 深度卷積網路能夠同時看到一個圖像從細節到抽象的結構,所以能夠抓住一些我們人類都說不出的細節。

DCNN 深度卷積網路,信號在多級網路里一級級傳遞, 從而使得從微觀到宏觀的特徵都得到分辨 。 每一層神經元之間沒有相互連接。

而RNN- 反饋式神經網路(每一層神經元之間有相互連接)則適合處理sequnce序列類的數據, 發現序列內部的時間結構。

RNN 之所以具有這個能力,就是因為網路內部通過自反饋, 具有之前各個時間點的輸入信息, 因此它可以從無限久遠的歷史裡推測系統的未來,RNN與之前的卷積網路相比最大的特點是它包含了動力學特性,如果說卷積網路是任意函數逼近器,那麼RNN就是任意程序逼近器。 猶如包含某種工作記憶。用一個比喻來說, 就是RNN猶如一個寬闊的池塘寧靜的水面, 當你投入一個石子, 激起的漣漪會在水池裡不停反射傳播, 這是對石頭進入那一時刻信息的保存, 如果之後在落入一個石頭, 那麼它再度激起的漣漪會和之前的水波疊加作用, 形成更複雜的相互作用和紋樣。

RNN示意圖, 同層神經元之間有相互連接,從而使得歷史信息在網路里向回聲一般交替傳遞

RNN 具有相互連接的反饋式神經網路也是最接近生物組織神經網路的人工神經網路, 具有更多的未來潛力,只是它的訓練比feed forward network更複雜。

人工神經網路的訓練就如同生物神經網路的學習, 都是一個不停試錯並減少錯誤的原理, 不過人工神經網路的方法更加簡單化, 比如gradient descent,就是說在參數空間里尋找使得錯誤減少最快的方法改進。

人工神經網路對於生物神經網路的奇妙之處在於, 它反過來啟迪了生物神經網路是在幹什麼的, 就好像費曼的那句話「 你要想真正理解一個東西, 就造出一台」。

不同領域的神經網路的交叉

神經網路這個東西是最能體現跨學科交叉的概念之一。既然自然界選擇這樣一種結構作為生物決策和智能的必殺器, 必有其道理, 人類只模擬了十之一二,配以強大的計算機集群,就能夠產生阿法狗這樣的利器, 其未來潛能未曾可知。

其實各種角度的神經網路,是互相交叉, 你中有我, 我中有你的。比如物理的神經網路, 和資訊理論的神經網路有非常緊密的關係。 而它們都與生物神經網路和AI有千絲萬縷的聯繫。AI里最近引入的注意力,記憶等演算法, 也都能找到其生物學對應。區別只是AI並不關注那些生物的限制, 而可以通過任意虐計算機在一些局部領域超越生物。

各個領域的神經網路都以「學習理論」為核心, 物理里叫做尋找能量最低的解, 生物里叫神經可塑性, AI里叫深度學習,其實都是把網路理解成一個根據外界輸入不停調整的變化過程,不同學科對這過程的最終目的提出不同的解讀。

各個學科眼裡的神經網路你中有我,我中有你的關係在AI里體現特別深刻。 比如, 目前的人工神經網路不僅加入了記憶, 還加入了注意力, 甚至加入了好奇心, 一個不懂AI的人很可能誤解為這是心理學研究, 而事實上, 心理學研究的人也可以從這些AI里得到啟迪。

回到那個深刻的問題, 神經網路為什麼有作用? 單獨站在一個學科的角度絕不可能明白。 人工智慧的人研究了半個世紀, 最終回到類似生物網路的結構, 忍受因此帶來的複雜度, 這背後必有其深刻的原因。 這個深刻的原因只能通過物理和複雜科學揭示。

為了一個簡單的任務,生物進化出那個複雜的網路,為什麼? 這就與生物要適應多種而非一種複雜的環境有關, 或者說適應性, 或者說魯棒性, 一個沒有適應性的生物是沒有前途的。 同理,一個沒有類似生物的適應性和魯棒性的AI也走不了多遠。 神經網路的功用正是由於它引入了生物複雜系統的基本原理, 雖然只是冰山一角。

也正如前文不斷提到的, 從各個角度對神經網路理解的突破, 會很好的促進其他領域的理解。現在人們對AI的熱情容易讓人忽略了其他幾個角度, 而單純把神經網路變成一場集體調參數的盛宴, 則對整個領域來說是某種損失, 減少了許多發展的可能性。

本文轉載自微信公眾號混沌巡洋艦(chaoscruiser)。

(作者許鐵 微信號 562763765)


針對卷積網路,我給你提供幾個入門鏈接吧:

Neural Network for Recognition of Handwritten Digits
這個適合入門看,有代碼,裡面的兩篇paper是非常重要的。

Tech-Effigy: Neural Network Illustrated
這個對於直觀理解神經網路裡面的過程很有幫助。

接下來你可以看Caffe源代碼,有兩個重點,一個就是「im2col在做什麼」, 一個是protocol buffer裡面的prototext怎麼用。

基本上Caffe屬於入門了就能很快精通的庫。

你同時可以去看看Andrew Ng的課程,不過另外一個好的選擇是今年Li FeiFeiAndrej Karpathy的課程。Andrej Karpathy的博客非常值得關注,他對反向求導的解釋十分有意思,可以看看。

Update 2015-07-28:
Neural networks and deep learning
Machine Learning


要學好線性代數、概率論和數理統計、基本的編程,這是入門必要的。同時,學會使用網路搜索尋找前人開發出來的工具。
1. 邊做邊學,我就是這麼入門的。學HMM的時候就去翻線性代數的馬爾科夫矩陣和特徵值這一節來看。
2. 有項目最重要,實踐出真知,真實的問題下才知道演算法的優劣之處。
3. 申請個學術文獻庫的賬號,前人總結的結論就在那裡,文章質量要好於行業網站轉載的。
4. 選好研究方向,以神經網路為例,圖像優先學CNN(就是上面 @李濟深 所說的卷積神經網路),NLP方面優先學RNN和LSTM。
5. 看名校的課程吧,推薦網易公開課。

此外,『神經網路』和『人工智慧』這兩個概念不是在同一個層面上的。
其實,我還想說,計算機之外的行業經驗才是最重要的,額……,也覺得人工智慧這個詞被濫用了



Neural Networks and Deep Learning-《神經網路與深度學習》-pdf版本
這本書非常適合神經網路和深度學習入門,貫穿書中的例子就是MNIST手寫數據集的圖像識別,代碼都是用Python寫的。但是目前只有網頁版的,這裡提供一個pdf版本。


有很強的編程背景的話感覺成功一半了
不過你選的是什麼神經網路?
深度學習那部分嗎?
如果是比如CNN這些的話,你不一定非要把模式識別給看了

其實模式識別里有很多東西都是數理統計的東西,另外,凸優化這些玩意兒的話,肯定還是要了解了解高數的

好多人都滿嘴滿嘴人工智慧的,看著真煩。好多內行都懶得說人工智慧這個詞了。明明就差了十萬八千里,還非要裝逼。好好的說機器學習不就完了


擼代碼。
擼到收斂。
這期間請務必壓制住砸電腦的衝動。


樓主可參考以下資料
【框架】:
深度學習十大頂級框架: 值得我們深度學習的十大開源框架
不同語言的深度學習庫: 【轉】各種編程語言的深度學習庫整理
基於spark的異構分散式平台: 基於Spark的異構分散式深度學習平台
深度學習框架比較: 深度學習框架的評估與比較

【演算法】:
Editor: 從統計學角度來看深度學習(1):遞歸廣義線性模型
Editor: 從統計學角度來看深度學習(2):自動編碼器和自由能
Editor: 從統計學角度來看深度學習(3):記憶和核方法
可微分式編程:深度學習發展趨勢
深度學習:CNN的反向求導及練習
Hadoop 2.0 上深度學習的解決方案
深度學習與計算機視覺, 來自數螺:數據挖掘/機器學習/人工智慧 By NAUT IDEA

【書單】:
機器學習+深度學習書單: 自學成才秘籍!機器學習深度學習經典資料匯總
前沿深度學習論文+書單+著名IT公司資料: 近200篇機器學習深度學習資料分享(含各種文檔,視頻,源碼等)

【案例】:
京東DNN實驗室:大數據、深度學習與計算平台的實踐
阿里巴巴吳煒:深度學習原理和在自然語言處理上的應用
Mariana: 深度學習在騰訊的平台化和應用實踐-jiangwen127-ChinaUnix博客
基於Spark的異構分散式深度學習平台, 來自數螺:數據挖掘/機器學習/人工智慧 By NAUT IDEA

【硬體】
深度 | 史上最全面的深度學習硬體指南


強答一下。
神經網路,人工智慧這塊怎麼入門?

首先神經網路是人工智慧下一個子子目錄。

人工智慧-&>機器學習-&>神經網路。

要入門無非就是學習嘛,怎麼學,從哪兒學起。這才是關鍵!


最直接,最根本兩把鑰匙:刷論文,讀代碼。


通過論文閱讀可以積累對相關主題的探索方向感,而通過閱讀代碼,可以了解原理和工程實踐。

再提醒一下,任何事情量力而為。在學科的前沿,沒有人是樣樣精通的,也不是只要努力就一定就有回饋。

神經網路的發展已經有數十年的歷史,目前的熱度一部分原因是因為計算能力提升能支持理論的發展。另一部原因是來自於互聯網的發展帶來的大數據規模!

用簡單話說,這個領域其實很小眾,如果在學術上有突破最好馬上找科技巨頭理論結合實際。有大量基礎數據,有大量計算硬體,又有領域裡頂尖的學者。我想同時具備這些的恐怕不會太多。


深度學習跟數學有一毛錢關係嗎?


實際上就是曲線擬合的原理,
看書的話不太容易,
比較主張看一下基本原理,然後就上代碼。
再找幾個應用例子看一看。

這裡推薦一篇文章:《一篇文章讀懂徑向基神經網路原理》
http://nnetinfo.com/nninfo/showText.jsp?id=24
有代碼和原理


.fit()
.predict()
恭喜你,你已經學會機器學習了


如果你一翻這方面的書,就趕到熱血沸騰。然後巴不得一口氣讀完。那你就很有希望,其次就是可以找一個導師了、以及找一個方向。機器學習只是一個手段,你得有其他方向的知識(比如CV、NLP等等,選一個你感興趣的)。


機器學習領域存在五種不同的主要思想學派,分別是符號學派、聯結學派,進化學派,貝葉斯學派和類推學派。這年頭大家出門張口閉口的神經網路,深度學習,CNN都屬於其中的聯結學派

為什麼叫聯結學派?因為聯結學派相信知識存儲在神經元之間的聯結關係中。

而整個聯結學派是建立在赫布理論(Hebbian theory)的基礎上的。

所以要入門神經網路的話先了解一下赫布理論。

這裡有個一分多鐘的視頻,裡面有一段「神經元會隨著你思想的產生而變化.gif「 很有趣:

「第九夜」你們天天嚷嚷神經網路, 可是知道一開始的赫布律么?


這只是一個手段。

原理研究什麼的就交給大神們,我們只要理解應用即可。
數學推理,補一補,也不會很難。


搞機器學習一定不能怕數學啦,數學是基礎,其實也沒那麼難的,多看看就會了


推薦你一本書,叫《遊戲編程中的人工智慧》,非常適合入門


推薦閱讀:

如何看待國人的論文SARM作者將論文從nips撤稿?
對於 Quant 來說, Financial Modeling 和傳統的機器學習方法有什麼聯繫和區別?
Softmax 函數的特點和作用是什麼?
如何評價rcnn、fast-rcnn和faster-rcnn這一系列方法?
有誰給解釋一下流形以及流形正則化?

TAG:人工智慧 | 機器學習 | 神經網路 | Kaggle | 卷積神經網路(CNN) |