深度學習-李宏毅PPT總結


前言:

  深度學習話題十分火熱,網上的資料也非常多,這的確很頭疼,太容易迷失。個人認為尋找大牛的授課ppt作為入門方式就可以,跟隨大牛的腳步先畫出一條直線,再補充骨肉。Anyway,這篇文章十分適合機器學習初學者迅速了解深度學習,了解清楚什么是深度學習,如何做及現在最火的卷積神經網絡。

 

教材鏈接:李宏毅

 

Let us rock!


 1.什么是機器學習

機器學習就是尋找一個函數。函數的輸入是現實世界的信息,輸出是一個抽象結果。

  插入個人理解,可以跳過:每個函數的定義域、值域就確定了一個空間(貓 or 狗)。空間中的點都是同一個類別,不同的點表示他們的表現形式不同(黑貓和白貓),即他們的相同(處於同一空間),權值不同。不同點之間可以通過線性變化相互得到。 試想一下:每個類別都是一個小空間,每個小空間都分布在大空間的不同位置,他們之間相互獨立,每個小空間有自己的基。

  Anyway,只要記住一句:機器學習非常簡單,就是尋找一個函數而已。如何尋找這個函數呢?  這個是選擇題。只要從備胎函數中選擇一個就好了。如下圖,我們有一個函數集合,而我們現在想要的函數是:給這個函數一個貓的圖片,得到一個函數輸出:“cat”。我們用每個函數試一下,發現f1函數可以得到我們想要的,就選這個函數了。

我們需要再考慮點細節。

這些備胎函數從何而來?
為什么f1函數是好的?

備胎函數稍后解釋,但是一個函數是好的比較容易想明白,就是這個函數的輸出需要是合理的,簡單來說給函數一個貓咪圖像,函數結果就應該告訴我們這個是貓咪。我們可以看到f1函數能夠正確識別出各種圖片,所以是一個好的函數。而f2這種不負責任的態度,也真的只能當個備胎了。而具體這個函數的好壞是訓練數據通過監督學習得到的

所以,機器學習的具體過程也就分為3步,簡單的就像把大象放冰箱里分幾步一樣。這3個過程就叫做訓練。通過訓練我們找到了最好的函數,就可以使用這個函數判斷世間所有的貓咪了。

1.選擇一系列備胎函數。

2.定義函數的評判標准。

3.選擇最好的函數。


上回書說到,機器學習分3步走。來看看第一步:定義一大堆備胎函數

先上結論:人工神經網絡可以擬合任何函數,神經網絡由神經元Neuron構成。Amazing,我們有一個神經網絡可以表示任何備胎函數,也就是這一個東西就夠了!!
更加神的是,神經元的結構非常簡單的結構(如下)。可以認為兩個向量的內積,累加和,權值平均等各種說法。注意方程后面有個偏移量b。關於Neuron的理解請看:這里

Neuron 這個結構中的主要部分為:輸入的加權平均(帶偏置)的結果Z;對Z進行轉換(到0~1之間,為什么要這么做?)。

答:這個neuron的值域范圍太大,大到你也不知道他的邊界在哪里。所以,大牛就找來了一個函數sigma將他的值域轉換到了0到1之間。Amazing!這個函數太厲害了。函數是一一對應的關系,
可以將delta z的值推回到z。

同時,這個函數
sigma的導數很簡單。

 

同時,這個函數的導數很簡單。好處看這里。

 有了很多很多神經元(neuron),我們就可以構建神經網絡了。神經網絡可以擬合任何函數,Amazing!具體原因請看:這里。 

以下為全鏈接神經網絡示意圖:

一個神經網絡結構確定了一系列備胎函數,其參數變化就是指備胎函數的變化,例如上下兩例子:函數是指輸入各為向量,輸出也各為向量。

深度學習中的深度,就是指多層神經網絡中的隱層非常深,非常深,非常深.輸入層表示現實中的世界信息。

到此總結一下:

1.為了尋找一系列備胎函數,我們找到了人工神經網絡,這個復雜的網絡可以擬合任何函數!!!

2.神經元是構成這個網絡的基本結構。

3.網絡還有另外兩個結構:輸入層(現實世界的信息)和輸出層(我們需要的輸出,包含:推斷和決策。)

4.中間層叫做隱層:隱層就是由神經元構成的層,包含權值,偏置,激活函數。

5.這個網絡中的未知數,就是我們需要得到的信息,通過訓練得到。

 

輸出層為了達到“識別”的目的,需要定義一個稍微特殊的函數,常用的就是Softmax函數。就是通過Softmax函數給每種判斷一個概率。關於Softmax函數看這里

Softmax函數就是指每種判斷一個概率,並且保證所有概率的和為1. 對激活函數進行標准化過程即可。

舉個例子:通過機器學習識別手寫字體。輸入為含有手寫字體的圖片,我們可以看到輸出中為2的概率最大。

那么問題來了,這個函數是如何得到的,即神經網絡中的權值系數是如何得到的?我們需要知道如何選擇一個好的函數。

進入第二步之前,回答幾個問題:

總結:

至此,我們已經定義好了第1步: 找到了一系列的備胎函數集合。實際上,萬事開頭難,這一步非常非常非常困難,難道至今沒有證明這種神經網絡的有效性和合理性(我的理解,不對請指正).

但是,定性地看,這種結構與人大腦的認知類似,多層結構並且向上不斷抽象的認知過程,即通過每一層提取信息的一些基本特征,不斷向上提出更加具體的抽象概念,有點繞口,請看下圖。

 

 


上回說到,我們解決了3步走的第1步,如何定義一大堆備胎函數。下面來看第2步:什么是好的函數。

 

前面已經進行簡單說明,好的函數就是可以得到正確預期結果的函數。起碼,在訓練數據集上,我們的結果是與預期最接近的。例如我們輸入1,就應該得到該圖片是1的概率最大。


不知不覺到了第3步:如何選取最好的函數

尋找最好的函數,就是為神經網絡選取一組最好的系數theta使得損失函數最小。但,顯然我們不能通過遍歷的方式進行尋找系數。例如含有1000個neuron的兩層神經網絡結構中,第一層的輸出為1000個值,對應第二層的每個neuron就有1000個weights,所以需要的參數就是1000*1000+1000(偏置)。

梯度下降。把它列出來,是因為這個方法太過神奇,但是大家已經清楚,直接列出ppt。

每次沿着負梯度方向移動:

 

總結:

此致,為了求得最小的損失函數,我們找到了梯度下降算法。但是,網絡那么深,結構那么復雜,如何計算梯度呢? 答案是反向傳播算法反向傳播算法不是特別的算法,就是為了更有效地計算梯度,必須跟正向傳播算法結合使用。

為了得到神經網絡的全部系數,還需要了解反向傳播算法,請看這里(補充神經網絡的訓練過程)。

深度學習(很多很多層的人工神經網絡)中有兩個子問題:網絡需要多深? 神經元還可以是什么樣子?

深度學習領域的人的研究工作也就是集中在這兩個部分啦。第一個問題是:越深越好么? 參數越多當然越好了,但這里的前提是“對參數的控制性”不會下降。簡單來說,參數越少,
我們對參數的控制越簡單,所以得到的參數往往較好;而參數較多的情況下,模型比較復雜,我們得到的參數較差,此時得到的結果較差。DL中的參數是通過學習得到的,如果梯度傳播有效性得到
保證,那么應該是網絡越深越好。想想一下,如果網絡的復雜程度達到大腦級別,那就是真正的AI了。 第二個問題也是研究方向之一,例如RNN,LSTM這種不同的神經元模型。

網絡是越深越好么?

越深越好么? 參數越多當然越好了,但這里的前提是“對參數的控制性”不會下降。簡單來說,參數越少,我們對參數的控制越簡單,所以得到的參數往往較好;而參數較多的情況下,模型比較復雜,我們得到的參數較差,此時得到的結果較差。DL中的參數是通過學習得到的,如果梯度傳播有效性得到保證,那么應該是網絡越深越好。想想一下,如果網絡的復雜程度達到大腦級別,那就是真正的AI了。

但是,很早就有證明,如果有足夠的神經元,一個隱層就可以擬合任何連續函數,為什么不是一個含有多個神經元的胖網絡,而是多層的瘦高網絡

通過實驗得到瘦高的網絡好啊~~

從分析的角度看,同樣的訓練樣本,多層的神經網絡使得每一層都訓練的更加充分(訓練數據更多)。Amazing!例如,下面例子中,個別類別的訓練數據中只有一個樣本。

但是,多層的結構中,樣本被反復利用,訓練更充分。

深度就是不斷的模塊化。

從最基本的模塊開始,每層都是一個模塊。越往上得到的結果越具體。

 


 訓練深度神經網絡(Tips for Training DNN

 

1. 首先,關注訓練集和測試集的結果,根據反饋結果進行調整。

結果不好,不一定是過擬合,也可能一開始就沒訓練好。

具體排查過程如下:

 

不同的損失函數,得到的結果差別很大。

當使用softmax的時候,選擇cross entropy作為損失函數。

使用mini-batch

只是每次使用一個小的訓練集,但是所有訓練集都要經過訓練,總的損失函數並不減少。mini-batch為100,時代為20.

 mini-batch的缺點是不穩定。這個地方沒看懂。

mini-batch執行快,同樣執行了全部樣本,mini-batch得到的結果好得多。

其他的激活函數:

上回書說到,越深越好,但實際情況是,深度太深,參數控制不好,結果變得不好。

 

這個原因是梯度的消散,傳到后面跟隨機差不多了!!!

Relu函數,在z小於0的時候,丟棄這個神經元的輸出。

使用后,網絡中很多的神經元不參與計算,網絡變得更瘦。

 但是,網絡的結果變得更好。

Relu的變形

Maxout

Maxout是深度學習網絡中的一層網絡,就像池化層、卷積層一樣等,我們可以把maxout 看成是網絡的激活函數層。

(1)以前MLP的方法。我們要計算第i+1層,那個神經元的激活值的時候,傳統的MLP計算公式如下。其中f就是我們所謂的激活函數,比如Sigmod、Relu、Tanh等。

(2)Maxout 的方法。如果我們設置maxout的參數k=5,maxout層就如下所示:

相當於在每個輸出神經元前面又多了一層。這一層有5個神經元,此時maxout網絡的輸出計算公式為:

所以這就是為什么采用maxout的時候,參數個數成k倍增加的原因。本來我們只需要一組參數就夠了,采用maxout后,就需要有k組參數。

下圖就是將原來的Relu換成了Maxout結構,其中含有兩個元素,即需要2組參數。

maxout的擬合能力是非常強的,它可以擬合任意的的凸函數。最直觀的解釋就是任意的凸函數都可以由分段線性函數以任意精度擬合(學過高等數學應該能明白)。

每個elements(piece)都是一個線性函數,由於取了最大,所以變成了線性分段函數。

總結:

激活函數的不同對網絡影響巨大,例如Relu可以使得梯度消失問題得到緩解,Maxout有很好的擬合能力。

自適應的學習速率:

太大,太小都不行:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

卷積神經網絡

  卷積神經網絡是深度學習網絡的變形,是目前處理圖像和聲音最出色的算法。那么為什么不直接使用深度學習網絡呢? 答案是:不好用。因為網絡的參數太多,假設只有100*100像素的RGB圖像,一個隱層只有1000個神經元。那么網絡的參數達到:100*100*3*1000=3*10000000的數量級。

那么第二個問題來了,為什么CNN適合圖像的處理。這就要說到圖像本身的性質:

1. 圖像的特征具有局部性。所以每個神經元只需要鏈接圖像的一部分。
2. 圖像進行下采樣之后,圖像中目標的變化不大。

鳥嘴作為鳥的局部特征,只需要部分區域就可以進行表達,另外,不同圖像中的鳥嘴雖然出現在不同的位置,但是他們可以使用同樣的參數(卷積核或權值系數)對該特征進行表達。

 另外,圖像經過下采樣之后,圖像中的目標和基本性質保持不變。所以,將大圖像進行下采樣可以減少網絡中的參數。

什么時CNN?仍然是三步走:

簡單來講,就是對傳統的深度神經網絡的輸入層進行優化。卷積和池化交替進行,目的就是保留圖像的性質並減少網絡參數的個數。

什么是卷積操作?

就是傳統的圖像卷積,但是有兩個點需要注意:卷積核是訓練得到的;步長(stride)不同,得到的卷積結果不同。

出現在不同位置的同一圖像特征,也可以被有效的檢測到。

得到的卷積結果叫做Feature map

 

彩色圖像是三個圖層同時進行處理,含有3個feature map。

 CNN的另外一個操作:池化

池化就是利用圖像下采樣后性質保持不變的特性對圖像進行下采樣,只不過是將卷積結果作為圖像進行下采樣。深入思考:圖像變小,但是性質:邊緣,嘴角等依然存在,
而他們的性質已經保存在feature map中,池化相當於選擇鄰域內最明顯的性質作為特征。

將最終的結果作為新的圖像,同時排列成一列,輸入給神經網絡下一層。

將經過多次卷積和池化后的圖像進行向量排列,並且作為人工神經網絡的輸入。

整個CNN的過程如下:

1.卷積和只對圖像局部進行操作,每次計算都是卷積核大小的鏈接個數,而不是全連接,極大地減少了參數的個數。

2.卷積核相當於神經元的權值系數,所以每一種卷積核(鳥嘴)的權值系數相同,所以神經網絡的參數與圖像的特征數量有關系,大大減少了神經網絡的參數個數。

 

共享權值,進一步減少系數

所以在CNN中,參數個數不再是輸入與下一層神經元的乘積。而是僅僅表示卷積核的個數。Amazing!!!。

CNN第二步和第三步:與傳統的神經網絡並無差別

 總結

 1. 深度神經網絡每一層都是圖像的特征,從下向上不斷抽象,下層是最基本、最通用的表達,到最上面的具體分類。從空間的角度理解就是,每一層的神經元都是空間的基,該空間中的不同類別通過權值系數進行區別。

從下向上,空間的維度不斷縮小和具體。 訓練得到的最好的網絡就是:基是正交的,完備的。有時為了效率,可以是稀疏的。從信號處理的角度理解就是,每個神經元的下層的權值都表示一個濾波器,即某個特征的模板,而下層神經元與對應權值系數的內積表示了下層神經元與模板的相似程度,就得到屬於不同特征的可能性。就是下層的神經元作為上層的輸入,表示將一個向量輸入一個系統,就可以得到向量在這個系統所代表的空間的基上的投影,向量與哪個基(特征)更接近。

 


進入RNN

Slot Filling。 槽填充則可以看做是序列標注問題,即對於給定的句子中的每個詞分別打上相應的標簽。

輸入是一個向量(每個詞用向量表示),輸出也是一個向量(標簽也用向量表示)。

如何用向量表示詞? 1-of-N encoding的含義? 猜測是N=所有詞的和,同時表示編碼后的向量長度,每個詞所在的位置為1,其他的位置為0.

超越上述編碼還有啥編碼? 在詞庫中不存在的詞叫做other。另外可以使用哈希表進行表示,可以表示的詞匯量更大,但是其向量的長度也更大。例如下面長度為26^3,根據規則每個詞的字母由三個連續的字母按順序確定下來。所以,單詞的的長度就是向量中1的個數。

 最后,輸入為向量(一個單詞),輸出為這個單詞屬於各個槽的概率

問題是: 此時的Taibei,我們無法判斷是目的地還是出發地(出現了歧義)?所以,需要根據句子中其他部分的信息,對槽進行更加具體的判斷:給神經網絡增加記憶功能。

循環神經網絡

隱層的輸出進行保存,作為后續隱層的輸入循環網絡與普通的神經網絡區別是:這種方法是相當於把上文的信息也利用起來,網絡的訓練過程中利用了更多的信息。

之前的算法是:那個詞的概率大就利用哪個,但是循環網絡是可以綜合考慮上下文信息的共同概率,這樣理解對么?

具體是t時刻的隱層輸出作為t+1時刻的隱層的另一個輸入!!! 同一個神經網絡被使用多次,每次賦予時間含義。橫向展開只是為了好理解。

通過預料的訓練,到達與出發輸出的概率不一樣,所以同一個Taipei表示不同的含義。(到達或出發)

這個雙向是什么意思?把上下文倒序輸入到網絡中進行訓練!!!

訓練過程:

  以股票預測為例,我們取出某股的一個月漲跌記錄,並且以10天為一個時間段,1天為滑動步伐。輸出為第11天的股票預測結果。損失函數就是預測值與真實值的MSE.

所以,第一次輸入為1-10天的數據,第二次輸入為2-11天的數據,...然后一直輸入21-30的數據,經過多次訓練之后,我們就能得到較好的模型了。

  同樣,我們可以一每一天的數據作為訓練數據。第一次輸入第一天的,第二次輸入第二天的,...然后輸入第10天的。模型的每次輸入都是第二天的預測結果,而且與之前的輸入息息相關。這是個動態的,例如只輸入一天的漲跌,就是根據第一天的漲跌預測第二天的漲跌。輸入第一天的和第二天的漲跌作為訓練,輸出就是根據第一天和第二天的漲跌預測第三天的漲跌,以此類推...,這個就是NLP中的slot filling

  所以,RNN網絡的層數理論上跟需要記憶前序信息的長短有關系。RNN中因為記憶太長,梯度消失,所以出現了LSTM。


理解長短期記憶網絡:

Neron的結構不太一樣,4個輸入,一個輸出。

如下圖,f,h,g都是激活函數,f一般是sigmoid函數。c為上一時刻的細胞值。a是neuron的輸出。

如下兩個例子:

 c表示cell,即細胞的值,下圖為含有多個LSTM block結構的神經網絡,ct-1存儲了上一時刻的結果,當前時刻為t,輸入為xt

 

例如:

x是輸入向量(單詞),a是LSTM block的輸出,整個學習目標如下:

剩下的就是選擇最好的函數了,遺憾的是梯度下降也不太好用了。

導致這個產生的原因是w有個連乘的關系。

更多的例子:

怎么加結束標志的?

 

 


強化學習:

通過利用一個場景的反饋,使得機器學習是否好或者壞。

 

代理通過行動,尋找最大的回報期望。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM