深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout
https://antkillerfarm.github.io/
前言
神經網絡本質上不是什么新東西。十年前,我還在上學的時候,就接觸過皮毛。然而那時這玩意更多的還是學術界的屠龍之術,工業界幾乎沒有涉及。
及至近日重新拾起,方才發現,這十年正是神經網絡蓬勃發展,逐漸進入應用階段的十年。各種概念層出不窮,遠非昔日模樣。
Deep Learning雖然在學術界的大牛看來,屬于舊概念的炒作。然而由于神經網絡本身的非線性和連接的復雜性,其中的概念的確比一般的淺層算法復雜的多,從這個角度來說,稱其為Deep,也算有些道理。
這里最主要的參考文獻包括:
《機器學習》,周志華著。
《Deep Learning Tutorial》,李宏毅著(臺灣大學電機工程學助理教授)。
http://www.useit.com.cn/thread-13132-1-1.html
《Deep Learning》,Ian Goodfellow、Yoshua Bengio、Aaron Courville著。
原版:
http://www.deeplearningbook.org/
中文版:
https://github.com/exacity/deeplearningbook-chinese
注:這本書基于markdown文件,使用tex編譯而成,可作為編寫大型書的代碼參考項目。
安裝方法:
sudo apt install texlive-xetex texlive-lang-chinese texlive-science xindy
make
其他參考文獻將在各相關部分列出。
Deep Learning圈子的主要人物:
注:Yann LeCun,1960年生,法國科學家。Pierre and Marie Curie University博士。Geoffrey Hinton是他博士后時代的導師。CNN的發明人。紐約大學教授,Facebook AI研究所主任。由于他的姓名發音非常東方化,因此被網友起了很多中文名如燕樂存、楊樂康等。2017.3,Yann訪華期間正式公布中文名:楊立昆。
Léon Bottou,法國科學家,隨機梯度下降算法的發明人。
Yoshua Bengio,1964年生,法國出生的加拿大科學家。深度學習的另一個宗師。
這三個法國佬,都是好基友。只不過Yann LeCun和Yoshua Bengio研究神經網絡,而Léon Bottou研究SVM,學術上分屬不同派系。
Geoffrey Everest Hinton,1947年生,英國出生的加拿大科學家,愛丁堡大學博士,多倫多大學教授。連接主義的代表人物,多層神經網絡的宗師。英國皇家學會會員。
一般將Geoffrey Hinton、Yann LeCun和Yoshua Bengio并稱為深度學習的三大宗師。
MP神經元模型
MP神經元模型是1943年,由Warren McCulloch和Walter Pitts提出的。
注:Warren Sturgis McCulloch,1898~1969,美國神經生理學和控制論科學家。哥倫比亞大學博士,先后執教于MIT、Yale、芝加哥大學。
Walter Harry Pitts, Jr.,1923~1969,美國計算神經學科學家。
這個人的經歷,實在是非典型。家里貧窮,大約是讀不起大學,15歲的時候,到芝加哥大學旁聽Bertrand Russell的講座。Russell很看重這個年輕人,但由于他只是訪問學者,于是在回國之前,將Pitts介紹給Rudolf Carnap,后者為Pitts安排了一份在學校打雜的工作。這一打雜就是五六年時間,最后憑借論文,獲得芝加哥大學的準學士學位(因為他始終都不是正式學籍的學生),這也是他一生唯一的學位。
但是如果看看Pitts的合作者的陣容,就知道Pitts水平之高了。他們是:Warren McCulloch、Jerome Lettvin、Norbert Wiener。
MP神經元模型如下圖所示:
即:
yj=f(∑i=1nwijxi?θj)y_j=f\left(\sum _{i=1}^nw_{ij}x_i-\theta_j\right)yj?=f(i=1∑n?wij?xi??θj?)
f被稱為稱為激活函數(Activation Function)或轉移函數(Transfer Function),用以提供非線性表達能力。f的參數其實就是《機器學習(一)》中提到的邏輯回歸。
生物神經元和MP神經元模型的對應關系如下表:
| 神經元 | jjj |
| 輸入信號 | xix_ixi? |
| 權值 | wijw_{ij}wij? |
| 輸出信號 | yjy_jyj? |
| 總和 | ∑\sum∑ |
| 膜電位 | ∑i=1nwijxi\sum _{i=1}^nw_{ij}x_ii=1∑n?wij?xi? |
| 閾值 | θj\theta_jθj? |
從上圖亦可看出,如果將閾值看作輸入為-1.0的啞節點的連接權重,則權重和閾值可統一為權重。神經網絡訓練的過程,實際上就是根據樣本調整權重和閾值的過程。
參考:
http://blog.csdn.net/u013007900/article/details/50066315
單層感知器 vs. 多層感知器
神經網絡的層數越多,其表達力越豐富,如下表所示:
ANN簡史
BP算法
誤差逆傳播(error BackPropagation)算法最早由Paul J. Werbos于1974年提出,然而此時正值ANN的低谷,未得到人們的重視。因此到了1986年時,由David Everett Rumelhart重新發明了該算法。
注:Paul J. Werbos,1947年生,哈佛大學博士。
David Everett Rumelhart,1942~2011,美國心理學家。斯坦福大學博士,先后執教于UCSD和斯坦福。美國科學院院士。
BP算法的核心思路:
1.利用前向傳導公式,計算第n層輸出值。
2.計算輸出值和實際值的殘差。
3.將殘差梯度傳遞回第n?1,n?2,…,2n-1,n-2,\dots,2n?1,n?2,…,2層,并修正各層參數。(即所謂的誤差逆傳播)
BP算法的推導過程教材已經寫的很好了,這里只對要點做一個摘錄。
鏈式法則
Chain Rules本來是微積分中,用于求一個復合函數導數的常用法則。這里用來進行殘差梯度的逆傳播。
由《機器學習(一)》的公式3可得:
Δwhj=?η?Ek?whj\Delta w_{hj}=-\eta\frac{\partial E_k}{\partial w_{hj}}Δwhj?=?η?whj??Ek??
whjw_{hj}whj?先影響βj\beta_jβj?,再影響y^jk\hat y_j^ky^?jk?,然后影響誤差EkE_kEk?,因此有:
?Ek?whj=?Ek?y^jk??y^jk?βj??βj?whj(1)\frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y_j^k}\cdot \frac{\partial \hat y_j^k}{\partial \beta_j}\cdot \frac{\partial \beta_j}{\partial w_{hj}}\tag{1}?whj??Ek??=?y^?jk??Ek????βj??y^?jk????whj??βj??(1)
隨機初始化
神經網絡的參數的隨機初始化的目的是使對稱失效。否則的話,所有對稱結點的權重都一致,也就無法區分并學習了。
BP算法的缺點
雖然傳統的BP算法,理論上可以支持任意深度的神經網絡。然而實際使用中,卻很少能支持3層以上的神經網絡。
如上圖所示,sigmoid函數不是線性的,一個小的輸出值的改變,對應了比較大的輸入值改變。換句話說,就是輸出值的梯度較大,而輸入值的梯度較小。而梯度在基于梯度下降的優化問題中,是至關重要的。
隨著層數的增多,反向傳遞的殘差梯度會越來越小,這樣的現象,被稱作梯度消失(Vanishing Gradient)。它導致的結果是,雖然靠近輸出端的神經網絡已經訓練好了,但輸入端的神經網絡仍處于隨機狀態。也就是說,靠近輸入端的神經網絡,有和沒有都是一樣的效果,完全體現不了深度神經網絡的優越性。
和梯度消失相反的概念是梯度爆炸(Vanishing Explode),也就是神經網絡無法收斂。
神經元激活函數
tanh函數
除了階躍函數和Sigmoid函數之外,常用的神經元激活函數,還有雙曲正切函數(tanh函數):
f(z)=tanh?(x)=sinh?(x)cosh?(x)=ex?e?xex+e?xf(z)=\tanh(x)=\frac{\sinh(x)}{\cosh(x)}=\frac{e^x-e^{-x}}{e^x+e^{-x}}f(z)=tanh(x)=cosh(x)sinh(x)?=ex+e?xex?e?x?
其導數為:
f′(z)=1?(f(z))2f'(z)=1-(f(z))^2f′(z)=1?(f(z))2
上圖是sigmoid函數(藍)和tanh函數(綠)的曲線圖。
上圖是sigmoid函數(藍)和tanh函數(綠)的梯度曲線圖。從中可以看出tanh函數的梯度比sigmoid函數大,因此有利于殘差梯度的反向傳遞,這是tanh函數優于sigmoid函數的地方。但是總的來說,由于兩者曲線類似,因此tanh函數仍被歸類于sigmoid函數族中。
下圖是一些sigmoid函數族的曲線圖:
有關sigmoid函數和tanh函數的權威論述,參見Yann LeCun的論文:
http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
稀疏性
從數學上來看,非線性的Sigmoid函數對中央區的信號增益較大,對兩側區的信號增益小,在信號的特征空間映射上,有很好的效果。
從神經科學上來看,中央區酷似神經元的興奮態,兩側區酷似神經元的抑制態,因而在神經網絡學習方面,可以將重點特征推向中央區,將非重點特征推向兩側區。
無論是哪種解釋,看起來都比早期的線性激活函數y=xy=xy=x,階躍激活函數高明了不少。
2001年,Attwell等人基于大腦能量消耗的觀察學習上,推測神經元編碼工作方式具有稀疏性和分布性。
2003年,Lennie等人估測大腦同時被激活的神經元只有1~4%,進一步表明神經元工作的稀疏性。
從信號方面來看,即神經元同時只對輸入信號的少部分選擇性響應,大量信號被刻意的屏蔽了,這樣可以提高學習的精度,更好更快地提取稀疏特征。
從這個角度來看,在經驗規則的初始化W之后,傳統的Sigmoid系函數同時近乎有一半的神經元被激活,這不符合神經科學的研究,而且會給深度網絡訓練帶來巨大問題。
參考:
http://www.cnblogs.com/neopenx/p/4453161.html
https://en.wikipedia.org/wiki/Activation_function
ReLU
ReLU(Rectified Linear Units)激活函數的定義如下:
f(x)=max?(0,x)f(x) = \max(0, x)f(x)=max(0,x)
其函數曲線如下圖中的藍線所示:
從上圖可以看出,ReLU相對于Sigmoid,在解決了梯度消失問題的同時,也增加了神經網絡的稀疏性,因此ReLU的收斂速度遠高于Sigmod,并成為目前最常用的激活函數。
由于ReLU的曲線不是連續可導的,因此有的時候,會用SoftPlus函數(上圖中的綠線)替代。其定義為:
f(x)=ln?(1+ex)f(x) = \ln(1 + e^x)f(x)=ln(1+ex)
除此之外,ReLU函數族還包括Leaky ReLU、PReLU、RReLU、ELU等。
Dropout
Dropout是神經網絡中解決過擬合問題的一種常見方法。
它的具體做法是:
1.每次訓練時,隨機隱藏部分隱層神經元。
2.根據樣本值,修改未隱藏的神經元的參數。隱藏的神經元的參數保持不變。
3.下次訓練時,重新隨機選擇需要隱藏的神經元。
由于神經網絡的非線性,Dropout的理論證明尚屬空白,這里只有一些直觀解釋。
1.dropout掉不同的隱藏神經元就類似在訓練不同的網絡,整個dropout過程就相當于對很多個不同的神經網絡取平均。而不同的網絡產生不同的過擬合,一些互為“反向”的擬合相互抵消就可以達到整體上減少過擬合。這實際上就是bagging的思想。
2.因為dropout程序導致兩個神經元不一定每次都在一個dropout網絡中出現。這會迫使網絡去學習更加魯棒的特征。換句話說,假如我們的神經網絡是在做出某種預測,它不應該對一些特定的線索片段太過敏感,即使丟失特定的線索,它也應該可以從眾多其它線索中學習一些共同的模式(魯棒性)。
總結
以上是生活随笔為你收集整理的深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch(二), We
- 下一篇: 深度学习(二)——深度学习常用术语解释,