卷積神經網絡-BN、Dropout、leaky_relu (tensorflow)

神經網絡是一種比較難以理解的結構,關於神經網絡的各種層次的說明解釋,大家請移步百度、google

本次的分享會從人類視覺角度、生物角度談一談神經網絡中的一些優化算法。

 

首先,計算機領域設計出來的算法、模型和數據結構,都可以理解爲一種建模操作(這是一種解釋方式)。比如:決策樹,可以理解爲把數據結構仿造樹枝樹幹的結構進行設計的,以樹爲模型;SVM,可以理解爲把數據堆從多維的角度,進行高維分類,以超平面爲模型;然後,神經網絡,以生物神經結構爲出發點,仿生物進行計算機建模。

因此,數學模型,計算機模型,跟現實中的東西不能一一對應,也不需要一一對應,我們只需要用一些存在的形式,來作爲設計模型的解釋。也許很多東西不能理解,比如全連接層的結構跟神經結構是天壤之別的,但是我們仿造這種神經結構設計全連接層的結構,它的效果非常顯著,這就足夠了。

 

一、relu和leaky_relu

其圖像分別如下:

 

怎麼解釋這兩個圖像呢?

先說relu。

比如:人的聽力,在20Hz以下咱們是聽不到的,任何低於20Hz的振動頻率的發聲,我們是感受不到的。換句話說,我們的神經元對此完全沒反應。但是在高於20Hz以後,聲音變大變小我們能比較清晰的感知的,這部分relu函數用線性函數來體現。所以,relu反應的就是這一種情況。relu圖像看出,在某一個閾值(x<0)以下,函數的值都是0,此處就是用數學的方法來模擬生物進行模型設計的典例。

 

那leaky_relu呢?

說完聲音,我們聊聊溫度。大家都應該聽說過溫水煮青蛙的故事吧。我們把一直青蛙放在20度的涼水中,如果慢慢的給它加熱,到50度、70度,他就被溫柔地熱死了,但如果我們瞬間把它丟進溫度爲70度的熱水裏,它可能一下就蹦出來。這個故事有點不太靠譜,但是它足以說明的一個問題。神經元的反應是有強弱之分的。

其實人的神經不完全如relu函數表達的那樣。就比如剛纔說的溫度。如果我們把手放在20度的涼水中,然後慢慢加熱,在50度之前,我們是能感受到一點點溫度在升高的,但是不足以我們熱得把手拿出來,這個溫度變化非常慢,我們感受到的變化自然也很微弱,但是不管怎麼樣,我們還是能感受到。因此,leaky_relu體現的就是這一現象。不是所有的神經元反應都是如同relu一樣的。所以才提出leaky_relu這一優化算法。說來說去,都是對的,因爲從仿生角度,兩者都可。只是筆者個人比較偏向後者的用法。

至於其他的各種relu變體,大家繼續移步百度和google

 

二、dropout

dropout,簡單理解爲“丟棄”,舉個栗子說明這個“丟棄”的意思。我們看下面一張圖

我們玩一個找茬遊戲,在上圖中找出彼此不一樣的局部。其中黃色標註部分是我一眼就看到的,然後我們着重說一下紅色標註部分。紅色部分是我們基本可以確認,找不出相異點的部分,即:即使你在這些地方怎麼找,都找不出不同之處。也就是說,這些部位,對我們找不同沒有用,因爲真正不同的地方在黃色區域。

再舉一個例子,在一個十字路口,我們讓一個紅綠色盲用兩分鐘去辨認哪盞燈是紅燈,哪盞燈是綠燈,是不可能的(有人說,我看車什麼時候走,就知道了。。。別戳破,咱們聊點正經的)。也就是說,紅綠色盲本身就對紅綠不敏感,甚至沒感覺,而你倒好,偏偏讓人家去識別紅綠燈,不管怎麼識別,他唯一能做的就是,猜。。。所以你說,他說上面是綠燈時,你信不信?

在神經網絡中,有些神經元或者神經元參數,對接下來的訓練層是沒有任何激活作用的,即:我們所謂的不敏感。如同上例的色盲,無論你再怎麼讓他辨認,十分鐘二十分鐘,甚至十個小時,他都沒有辦法認出哪個是紅燈,哪個是綠燈。這部分辨識紅綠的神經元對他來說,已經沒用了。於是在神經網絡中,我們使用“丟棄”的方式,drop掉部分神經元。但是,在神經網絡中,我們並非把所謂的“不敏感”或者“無用”的神經元丟掉,而是隨機丟棄一部分神經元,這麼做是爲了防止邊界“死亡”神經元的對網絡層的0貢獻,和各種神經元之間的強連接,讓機器真正學到其“規律”。

L1、L2和Dropout傳送門:

http://lib.csdn.net/article/deeplearning/51257

 

三、BN

https://blog.csdn.net/hjimce/article/details/50866313

BN是一個前兩三年才提出的一個優化神經網絡的措施,在一定程度上代替了標準化和歸一化、L1、L2以及Dropout。它在某種程度上,打亂了原有的特徵分佈,形成新的統一的分佈態,具體對複雜的神經網絡是好是壞,難以用有限的數據做說明。只是很多研究以及筆者自己做了幾套訓練數據對比,BN配合Dropout相對比較號,比較明顯的就是收斂速度相對快一點。詳細研究文獻,大家可參考google文獻進行查閱。

左圖是單純的Dropout做的訓練,右圖是BN+Dropout做的訓練,說實話差異並不大,怎麼用還得視具體數據集觀察。但是在設計神經網絡的時候,建議把口留出來。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章