出處: Michael Nielsen的《Neural Network and Deep Leraning》,點擊末尾“閱讀原文”即可查看英文原文。
本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)
聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯系wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
“本文轉載自【哈工大SCIR】微信公眾號,轉載已征得同意。”
-
使用神經網絡識別手寫數字
-
感知機
-
sigmoid神經元
-
神經網絡的結構
-
用簡單的網絡結構解決手寫數字識別
-
通過梯度下降法學習參數
-
實現我們的網絡來分類數字
-
關於深度學習
-
反向傳播算法是如何工作的
-
改進神經網絡的學習方法
-
神經網絡能夠計算任意函數的視覺證明
-
為什么深度神經網絡的訓練是困難的
-
深度學習
sigmoid神經元
學習算法聽起來很好,但問題來了:我們該如何為神經網絡量身設計一種學習算法呢?現在假設有一個由感知機構成的網絡,我們想讓這個網絡學習如何去解決一些問題。舉例來說,對於一個以手寫數字的掃描圖像的原始像素數據作為輸入的網絡,我們想要這個網絡去學習權值(weights)和偏移(biases)以便最終正確地分類這些數字。為了說明學習算法如何才能有效,我們首先假設在網絡的一些權值(或偏移)上做一個小的改變。我們期望的結果是,這些在權值上的小改變,將會為網絡的輸出結果帶來相應的改變,且這種改變也必須是輕微的。我們在后面將會看到,滿足這樣的性質才能使學習變得可能。下面的圖片反映了我們想要的結果(當然,圖示的網絡非常簡單,它並不能被用來做手寫數字識別)。
如果滿足在權值(或偏移)上的小改變只會引起輸出上的小幅變化這一性質,那么以此性質為基礎,我們就可以改變權值和偏移來使得網絡的表現越來越接近我們預期。例如,假設原始的網絡會將一張寫着「9」的手寫數字圖片錯誤分類為「8」。我們可以嘗試找到一個正確的輕微改變權值和偏移的方法,來使得我們網絡的輸出更接近於正確答案——將該圖片分類為「9」。重復這個過程,不斷地修改權值和偏移並且產生越來越好的結果。這樣我們的網絡就開始學習起來了。
但問題在於,當我們的網絡包含感知機時情況就與上述描述的不同了。事實上,輕微改變網絡中任何一個感知機的權值或偏移有時甚至會導致感知機的輸出完全翻轉——比如說從0變為1。 這個翻轉行為可能以某種非常復雜的方式徹底改變網絡中其余部分的行為。所以即使現在「9」被正確分類了,但網絡在處理所有其他圖片時的行為可能因一些難以控制的方式被徹底改變了。這導致我們逐步改變權值和偏移來使網絡行為更加接近預期的學習方法變得很難實施。也許存在一些巧妙的方法來避免這個問題,但對於這種由感知機構成的網絡,它的學習算法並不是顯而易見的。
由此我們引入一種被稱為S型(sigmoid ,通常我們更習慣使用它的英文稱呼,所以本文的其他地方也將使用原始的英文)神經元的新型人工神經元來解決這個問題。sigmoid神經元與感知機有些相似,但做了一些修改使得我們在輕微改變其權值和偏移時只會引起小幅度的輸出變化。這是使由sigmoid神經元構成的網絡能夠學習的關鍵因素。
好,接下來就開始介紹本節的主角了。我們將沿用感知機的方式來描述sigmoid神經元。
和感知機一樣,sigmoid神經元同樣有輸入,x1,x2,⋯ , 但不同的是,這些輸入值不是只能取0或者1,而是可以取0到1間的任意浮點值。所以,舉例來說,0.638…對於sigmoid神經元就是一個合法輸入。同樣,sigmoid神經元對每個輸入也有相應的權值,w1,w2,…,以及一個整體的偏移,b 。不過sigmoid神經元的輸出不再是0或1,而是σ(w⋅x+b) , 其中的σ被稱為sigmoid函數(sigmoid function)1,該函數定義如下:
將上述內容總結一下,更加准確的定義,sigmoid神經元的輸出是關於輸入x1,x2,…,權值w1,w2,…,和偏移b的函數:
乍一看去,sigmoid神經元與感知機樣子很不同。如果你對它不熟悉,sigmoid函數的代數形式看起來會有些晦澀難懂。但事實上,sigmoid神經元與感知機有非常多相似的地方。sigmoid函數的代數式更多地是展現了其技術細節,而不應是成為理解它的障礙。
為了理解sigmoid神經元與感知機模型的相似性,我們假設z≡w⋅x+b是一個很大的正數。這時e−z≈0且σ(z)≈1。即是說,當z=w⋅x+b是一個很大的正數時,sigmoid神經元的輸出接近於1,與感知機類似。另一方面,當z=w⋅x+b是一個絕對值很大的負數時,e−z→∞且σ(z)≈0。所以當z=w⋅x+b是一個絕對值很大的負數時,sigmoid神經元的行為與感知機同樣很接近。只有當w⋅x+b是一個不太大的數時,其結果與感知機模型有較大的偏差。
我們不禁要問,σ的代數式到底有何含義?我們該如何地理解它呢?事實上,σ的確切形式並不是那么重要——對於我們理解問題,真正重要的是該函數畫在坐標軸上的樣子。下圖表示了它的形狀:
這個形狀可以認為是下圖所示階梯函數(step function)的平滑版本:
如果把σ函數換成階梯函數,那么sigmoid神經元就變成了一個感知機,這是因為此時它的輸出只隨着w⋅x+b的正負不同而僅在1或0這兩個離散值上變化2。所以如前面所言,當使用σ函數時我們就得到了一個平滑的感知機。而且,σ函數的平滑屬性才是其關鍵,不用太在意它的具體代數形式。σ函數的平滑屬性意味着當我們在權值和偏移上做出值為Δwj,Δb的輕微改變時,神經元的輸出也將只是輕微地變化Δoutput。事實上,由微積分的知識可知,Δoutput近似於:
其中求和運算是將所有的權值wj相加,∂output/∂wj和∂output/∂b表示分別求output對wj和b的偏導。如果你看着偏微分不開心,不要驚慌,上面的公式雖然看起來有些復雜,但其實其中的偏微分非常簡單(好消息~):Δoutput是關於權值和偏移的改變量Δwj和Δb的線性函數(linear function)。這種線性屬性,使得選擇權值和偏移的輕微改變量並使輸出按照預期發生小幅度變化成為易事。由上可知,sigmoid神經元不僅與感知機有很多相似的性質,同時也使描述「輸出怎樣隨權值和偏移的改變而改變」這一問題變得簡單。
如果真的只是σ的形狀起作用而其具體代數形式沒有什么用的話,為什么公式(3)要把σ表示為這種特定的形式?事實上,在書的后面部分我們也會偶爾提到一些在輸出f(w⋅x+b)中使用其它激活函數(activation function)f(⋅)的神經元。當我們使用其它不同的激活函數時主要改變的是公式(5)中偏微分的具體值。在我們需要計算這些偏微分值之前,使用σ將會簡化代數形式,因為指數函數在求微分時有着良好的性質。不管怎樣,σ在神經網絡工作中是最常被用到的,也是本書中最頻繁的激活函數。
我們該如何解釋sigmoid神經元的輸出呢?顯然,感知機和sigmoid神經元一個巨大的不同在於,sigmoid神經元不僅僅只輸出0或者1,而是0到1間任意的實數,比如0.173…,0.689…都是合法的輸出。在一些例子,比如當我們想要把神經網絡的輸出值作為輸入圖片的像素點的平均灰度值時,這點很有用處。但有時這個性質也很討厭。比如在我們想要網絡輸出關於「輸入圖片是9」與「輸入圖片不是9」的預測結果時,顯然最簡單的方式是如感知機那樣輸出0或者1。不過在實踐中我們可以設置一個約定來解決這個問題,比如說,約定任何輸出值大於等於0.5的為「輸入圖片是9」,而其他小於0.5的輸出值表示「輸入圖片不是9」。當以后使用類似上面的一個約定時,我都會明確地說明,所以這並不會引起任何的困惑。
1 順便提一句,σ有時也被稱作邏輯斯諦函數(logistic function),對應的這個新型神經元被稱為邏輯斯諦神經元(ogistic neurons)。記住這些術語很有用處,因為很多從事神經網絡的人都會使用這些術語。不過本書中我們仍然使用sigmoid這一稱呼。
2 事實上,當w⋅x+b=0時感知機將輸出0,但此時階梯函數輸出值為1。所以嚴格來講,我們需要修改階梯函數在0這個點的值。大家明白這點就好。
練習
-
sigmoid神經元模擬感知機(第一部分)對一個由感知機組成的神經網絡,假設將其中所有的權值和偏移都乘上一個正常數,c>0 , 證明網絡的行為並不會發生改變。
-
sigmoid神經元模擬感知機(第二部分)假設與上述問題相同的初始條件——由感知機構成的神經網絡。假設感知機的所有輸入都已經被選定。我們並不需要實際的值,只需要保證輸入固定。假定對網絡中任意感知機的輸入x都滿足w⋅x+b≠0。現在將網絡中所有的感知機都替換為sigmoid神經元,然后將所有的權值和偏移都乘上一個正常數c>0 。 證明在極限情況即c→∞下,這個由sigmoid神經元構成的網絡與感知機構成的網絡行為相同。同時想想當w⋅x+b=0時為何不是如此?
下一節我們將介紹“神經網絡的結構”,敬請關注!
-
“哈工大SCIR”公眾號
-
編輯部:郭江,李家琦,徐俊,李忠陽,俞霖霖
-
本期編輯:俞霖霖