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

2021-07-24 08:30:14 字數 4231 閱讀 2770

深層學習開啟了

人工智慧

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

本文就是通過對深層神經網路驚人表現背後原因的思考,揭示設計乙個神經網路的本質,從而獲得乙個對「如何設計網路」的全域性指導。由於問題本身過於龐大,我們先把問題拆分成幾部分加以思考。

1、神經網路為什麼可以用於識別 

2、神經網路網路變深後我們獲得了什麼 

3、「過深」的網路的效果又變差的原因 

4、「深淺」會影響神經網路表現的背後原因 

5、rnn、cnn以及各種不同網路結構的共性是什麼 

6、設計神經網路的本質是什麼

文章分為上下兩部分。 

這部分的內容是為理解「深層」神經網路的預備知識。描述的是為何能識別和如何訓練兩部分。 

看完後能明白的是:1、為什麼神經網路能夠識別,2、訓練網路基本流程,以及深層神經網路大家族中其他技術想要解決的問題(並不需要知道具體的解決步驟)。

對神經網路有了大致了解後,《深層學習為何要「deep」(下)》會進一步圍繞「深層」二字再次討論深層學習為何要「deep」,會討論cnn、rnn、transfer learning、distillation training等技術的共性,並解釋設計網路結構的本質是什麼。

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

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

[

o0.3co

1.5]=[

010.31.5]⋅

[co]

(2)

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

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

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

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

增加層數:增加啟用函式的次數,即增加非線性轉換次數。

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

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

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

w 。

既然我們希望網路的輸出盡可能的接近真正想要**的值。那麼就可以通過比較當前網路的**值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網路的**值高了,就調整權重讓它**低一些,不斷調整,直到能夠**出目標值)。因此就需要先定義「如何比較**值和目標值的差異」,這便是損失函式或目標函式(loss function or objective function),用於衡量**值和目標值的差異的方程。loss function的輸出值(loss)越高表示差異性越大。那神經網路的訓練就變成了盡可能的縮小loss的過程。 

所用的方法是梯度下降(gradient descent):通過使loss值向當前點對應梯度的反方向不斷移動,來降低loss。一次移動多少是由學習速率(learning rate)來控制的。

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

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

試**決「卡在區域性極小值」問題的方法分兩大類:

機器學習所處理的資料都是高維資料,該如何快速計算梯度、而不是以年來計算。 

其次如何更新隱藏層的權重? 

解決方法是:計算圖:反向傳播演算法

這裡的解釋留給非常棒的computational graphs: backpropagation

需要知道的是,反向傳播演算法是求梯度的一種方法。如同快速傅利葉變換(fft)的貢獻。 

而計算圖的概念又使梯度的計算更加合理方便。

下面就簡單瀏覽一下訓練和識別過程,並描述各個部分的作用。 

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

權重初始化(weights initialization):wh

1、wh

2、w0

在訓練前不能為空,要初始化才能夠計算loss從而來降低。wh

1、wh

2、w0

初始化決定了loss在loss function中從哪個點開始作為起點訓練網路。上圖用均勻分布初始權重(uniform distribution)。

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

注:此部分內容不是這篇文章的重點,但為了理解深層神經網路,需要明白最基本的訓練過程。

若能理解訓練過程是通過梯度下降盡可能縮小loss的過程即可。

若有理解障礙,可以用python實踐一下從零開始訓練乙個神經網路

,體會整個訓練過程。若有時間則可以再體會一下計算圖自動求梯度的方便利用tensorflow

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

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

注:此部分內容不是這篇文章的重點,但為了理解深層神經網路,需要明白最基本的訓練過程。 

若能理解訓練過程是通過梯度下降盡可能縮小loss的過程即可。 

若有理解障礙,可以用python實踐一下從零開始訓練乙個神經網路,體會整個訓練過程。若有時間則可以再體會一下計算圖自動求梯度的方便利用tensorflow。

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

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

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

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

然而深層神經網路的驚人表現真的只有這些原因嗎?

為什麼神經網路過深後,**的表現又變差? 而且這時變差的原因是由於「過深」嗎?

接下來要寫的《深層學習為何要「deep」(下)》是關於「深層」二字的進一步思考,並解釋設計神經網路的本質是什麼。

附加:誰能詳細講解一下tensorflow playground所展示的神經網路的概念?結合tensorflow playground的5種空間操作和物質組成視角的理解。

一基本變換層

二理解視角

三神經網路的訓練

基本流程圖

四深層的思考真的只有這些原因嗎

為何要上電復位

1 因為微處理器 如我們常說的電腦cpu晶元和高階arm 和微控制器 微控制器 低端arm什麼的 晶元都是數位電路晶元,其正常工作是只有0低電平和1高電平這兩個電平狀態,屬於離散系統。而供給晶元的電源輸入卻是模擬電路,屬於連續線性系統。合上開關,晶元的vdd和vss之間的電壓要達到數字晶元可正常工作...

為何要學習計算機基礎

一 什麼是計算機?計算機是一種能夠按照指令對各種資料和資訊進行自動加工和處理的電子裝置。電腦系統分為硬體和軟體兩大部分,硬體相當於人的身體,而軟體相當於人的靈魂 而一套完整的計算機系統分為 計算機硬體,作業系統,軟體 程式設計師開發的就是軟體 作業系統是用來呼叫 組織計算機的各硬體來執行工作的,而應...

何為資料結構,何為演算法,為何要學習

一 何為資料結構,何為演算法 從廣義上講,資料結構就是指一組資料的儲存結構。演算法就是運算元據的一組方法。圖書館儲藏書籍你肯定見過吧?為了方便查詢,圖書管理員一般會將書籍分門別類進行 儲存 按照一定規律編號,就是書籍這種 資料 的儲存結構。那我們如何來查詢一本書呢?有很多種辦法,你當然可以一本一本地...