當前位置:
首頁 > 知識 > 深度學習中的「深度」究竟怎麼理解?

深度學習中的「深度」究竟怎麼理解?

AI研習社按:本文原作者YJango,本文原載於其知乎專欄——超智能體。AI研習社已獲得原作者授權。介紹

為了研究神經網路,我們必須要對什麼網路是什麼有一個更直觀的認識。

一、基本變換:層

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

數學式子:,其中是輸入向量,是輸出向量,是偏移向量,是權重矩陣,是激活函數。每一層僅僅是把輸入經過如此簡單的操作得到。

數學理解:通過如下 5 種對輸入空間(輸入向量的集合)的操作,完成輸入空間 —> 輸出空間的變換 (矩陣的行空間到列空間)。註:用 「空間」 二字的原因是被分類的並不是單個事物,而是一類事物。空間是指這類事物所有個體的集合。

1. 升維 / 降維

2. 放大 / 縮小

3. 旋轉

4. 平移

5. 「彎曲」 這 5 種操作中,1,2,3 的操作由完成,4 的操作是由完成,5 的操作則是由來實現。

GIF/309K

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

物理理解:對的理解就是通過組合形成新物質。又符合了我們所處的世界都是非線性的特點。

情景:是二維向量,維度是碳原子和氧原子的數量,數值且定為,若確定是三維向量,就會形成如下網路的形狀 (神經網路的每個節點表示一個維度)。通過改變權重的值,可以獲得若干個不同物質。右側的節點數決定了想要獲得多少種不同的新物質。(矩陣的行數)

1. 如果權重 W 的數值如(1),那麼網路的輸出就會是三個新物質,[二氧化碳,臭氧,一氧化碳]。(1)

2. 也可以減少右側的一個節點,並改變權重 W 至(2),那麼輸出就會是兩個新物質(2)

3. 如果希望通過層網路能夠從 [C, O] 空間轉變到空間的話,那麼網路的學習過程就是將 W 的數值變成儘可能接近 (1) 的過程 。如果再加一層,就是通過組合這三種基礎物質,形成若干更高層的物質。

4. 重要的是這種組合思想,組合成的東西在神經網路中並不需要有物理意義。

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

二、理解視角:

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

數學視角:「線性可分」

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

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

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

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

GIF/414K

當然也有如下圖失敗的時候,關鍵在於 「如何扭曲空間」。所謂監督學習就是給予神經網路網路大量的訓練例子,讓網路從訓練例子中學會如何變換空間。每一層的權重 W 就控制著如何變換空間,我們最終需要的也就是訓練好的神經網路的所有層的權重矩陣。

GIF/390K

這裡有非常棒的可視化空間變換 demo(http://t.cn/R9JxoNr),一定要打開嘗試並感受這種扭曲過程。更多內容請看Neural Networks, Manifolds, and Topology(http://t.cn/R9JxNjD)。

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

增加節點數:增加維度,即增加線性轉換能力。

增加層數:增加激活函數的次數,即增加非線性轉換次數。

物理視角:「物質組成」

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

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

物質組成視角:神經網路的學習過程就是學習物質組成方式的過程。

增加節點數:增加同一層物質的種類,比如 118 個元素的原子層就有 118 個節點。

增加層數:增加更多層級,比如分子層,原子層,器官層,並通過判斷更抽象的概念來識別物體。

三、神經網路的訓練

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

如何訓練:

既然我們希望網路的輸出儘可能的接近真正想要預測的值。那麼就可以通過比較當前網路的預測值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網路的預測值高了,就調整權重讓它預測低一些,不斷調整,直到能夠預測出目標值)。因此就需要先定義 「如何比較預測值和目標值的差異」,這便是損失函數或目標函數(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(http://t.cn/R9JJO0R)需要知道的是,反向傳播演算法是求梯度的一種方法。如同快速傅里葉變換(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 的過程。到此所有數據的維度都已確定:

訓練數據:

權重矩陣:

偏移向量:

網路輸出:

數據預處理(preprocessing):將所有樣本的 input 和 label 處理成能夠使用神經網路的數據,label 的值域符合激活函數的值域。並簡單優化數據以便讓訓練易於收斂。比如中心化(mean subtraction)、歸一化(normalization)、主成分分析(PCA)、白化(whitening)。假設上圖的 input 和 output 全都經過了中心化和歸一化。

權重初始化(weights initialization):在訓練前不能為空,要初始化才能夠計算 loss 從而來降低。初始化決定了 loss 在 loss function 中從哪個點開始作為起點訓練網路。上圖用均勻分布初始權重(Uniform distribution)。

訓練網路(training):訓練過程就是用訓練數據的 input 經過網路計算出 output,再和 label 計算出 loss,再計算出 gradients 來更新 weights 的過程。

正向傳遞:,算當前網路的預測值

計算 loss:

計算梯度:從 loss 開始反向傳播計算每個參數(parameters)對應的梯度(gradients)。這裡用 Stochastic Gradient Descent (SGD) 來計算梯度,即每次更新所計算的梯度都是從一個樣本計算出來的。傳統的方法 Gradient Descent 是正向傳遞所有樣本來計算梯度。SGD 的方法來計算梯度的話,loss function 的形狀如下圖所示會有變化,這樣在更新中就有可能 「跳出」 局部最小值。

更新權重:這裡用最簡單的方法來更新,即所有參數都

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

註:此部分內容不是這篇文章的重點,但為了理解深層神經網路,需要明白最基本的訓練過程。 若能理解訓練過程是通過梯度下降儘可能縮小 loss 的過程即可。 若有理解障礙,可以用 python 實踐一下從零開始訓練一個神經網路(http://t.cn/R9JiVlA),體會整個訓練過程。若有時間則可以再體會一下計算圖自動求梯度的方便利用 TensorFlow(http://t.cn/R9JiVlA)。

結合 Tensorflow playground(http://t.cn/RcLW6gv) 理解 5 種空間操作和物質組成視角

打開網頁後,總體來說,藍色代表正值,黃色代表負值。拿分類任務來分析。

數據:在二維平面內,若干點被標記成了兩種顏色。黃色,藍色,表示想要區分的兩類。你可以把平面內的任意點標記成任意顏色。網頁給你提供了 4 種規律。神經網路會根據你給的數據訓練,再分類相同規律的點。

輸入:在二維平面內,你想給網路多少關於 「點」 的信息。從顏色就可以看出來,左邊是負,右邊是正,表示此點的橫坐標值。同理,表示此點的縱坐標值。是關於橫坐標值的 「拋物線」 信息。你也可以給更多關於這個點的信息。給的越多,越容易被分開。

連接線:表示權重,藍色表示用神經元的原始輸出,黃色表示用負輸出。深淺表示權重的絕對值大小。滑鼠放在線上可以看到具體值。也可以更改。在(1)中,當把輸出的一個權重改為 - 1 時,的形狀直接倒置了。不過還需要考慮激活函數。(1)中用的是 linear。在(2)中,當換成 sigmoid 時,你會發現沒有黃色區域了。因為 sigmoid 的值域是 (0,1)

(1)

(2)

輸出:黃色背景顏色都被歸為黃點類,藍色背景顏色都被歸為藍點類。深淺表示可能性的強弱。

上圖中所有在黃色背景顏色的點都會被分類為 「黃點 「,同理,藍色區域被分成藍點。在上面的分類分布圖中你可以看到每一層通過上一層信息的組合所形成的。權重(那些連接線)控制了 「如何組合」。神經網路的學習也就是從數據中學習那些權重。Tensorflow playground 所表現出來的現象就是 「在我文章里所寫的 「物質組成思想」,這也是為什麼我把Tensorflow playground放在了那一部分。

不過你要是把 Tensorflow 的個名字拆開來看的話,是 tensor(張量)的 flow(流動)。Tensorflow playground 的作者想要闡述的側重點是 「張量如何流動」 的。

5 種空間變換的理解:Tensorflow playground 下沒有體現 5 種空間變換的理解。需要打開這個網站嘗試:ConvNetJS demo: Classify toy 2D data(http://t.cn/R9JxoNr)

左側是原始輸入空間下的分類圖,右側是轉換後的高維空間下的扭曲圖。

最終的扭曲效果是所有綠點都被扭曲到了一側,而所有紅點都被扭曲到了另一側。這樣就可以線性分割(用超平面(這裡是一個平面)在中間分開兩類)

四、表現原因

文章的最後稍微提一下深層神經網路。深層神經網路就是擁有更多層數的神經網路。

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

數學視角:變異體(variation)很多的分類的任務需要高度非線性的分割曲線。不斷的利用那 5 種空間變換操作將原始輸入空間像 「捏橡皮泥一樣」 在高維空間下捏成更為線性可分 / 稀疏的形狀。

物理視角:通過對 「抽象概念」 的判斷來識別物體,而非細節。比如對 「飛機」 的判斷,即便人類自己也無法用語言或者若干條規則來解釋自己如何判斷一個飛機。因為人腦中真正判斷的不是是否 「有機翼」、「能飛行」 等細節現象,而是一個抽象概念。層數越深,這種概念就越抽象,所能涵蓋的變異體就越多,就可以容納戰鬥機,客機等很多種不同種類的飛機。

點擊展開全文

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

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


請您繼續閱讀更多來自 唯物 的精彩文章:

看矽谷數據工程師如何使用TensorFlow構建、訓練和改進RNN
讓AI給顏值打分?應該是最公正的裁判了!
GAN 的理解與 TensorFlow 的實現
GAN 學習指南:從原理入門到製作生成 Demo,總共分幾步?

TAG:唯物 |

您可能感興趣

如何理解深度學習?
什麼是深度學習?
深度理解景深
什麼叫深度學習?
深度學習很難?一文讀懂深度學習!
深度學習詳解
什麼是深度強化學習:人工智慧和深度學習的下一步
深度學習,人的解析
如何理解深度學習的優化?通過分析梯度下降的軌跡
邂逅深度學習
理解深度學習中的學習率及多種選擇策略
自然語言處理中的深度學習
全文詳解:深度學習如何協助處理醫療中的數據難題
如何平衡學習的深度和廣度?
深度強化學習中的好奇心
十條深度心理學,深刻解剖人性!
深度學習引擎的終極形態是什麼?
分散式深度學習新進展:讓「分散式」和「深度學習」真正深度融合
分析梯度下降的軌跡,更好地理解深度學習中的優化問題
三位先驅共摘「圖靈獎」,深度學習呼喚深度理解