機(jī)器學(xué)習(xí)入門(mén)之 — 神經(jīng)網(wǎng)絡(luò)權(quán)值初始化

在初始化權(quán)值的時(shí)候藏斩,常用的一個(gè)函數(shù)是 np.random.randn() 函數(shù)。這個(gè)函數(shù)會(huì)產(chǎn)生一個(gè)均值是0却盘,方差是1的的分布狰域。

import numpy as np
import matplotlib.pyplot as plt

w= np.random.randn(10000)   #產(chǎn)生1*1w的數(shù)組
print(w.mean())
print(w.var())

plt.hist(w,bins=100)  #繪制數(shù)據(jù)分布的直方圖
plt.show()

數(shù)據(jù)分布直方圖窜觉,如下圖所示:
絕大多數(shù)的隨機(jī)數(shù)都產(chǎn)生在0附近,從0開(kāi)始到+4和-4的區(qū)間上面北专,數(shù)據(jù)量越來(lái)越小。(服從正態(tài)分布)


產(chǎn)生的數(shù)據(jù)基本服從正態(tài)分布

但是旬陡,這樣的初始化方式拓颓,放入神經(jīng)網(wǎng)絡(luò)訓(xùn)練的時(shí)候,在比較深的網(wǎng)絡(luò)里面描孟,往往效果一般驶睦。

舉個(gè)例子,分析一下匿醒。

Z = weight * X+bias

我們來(lái)看一下Z的分布:
z分布在范圍是(-100 -- +100 )之間场航。絕大多數(shù)數(shù)據(jù)分布在[-50,+50]之間廉羔。

z的分布

但是溉痢,如果我們的激活函數(shù)是sigmod的話,那么就會(huì)遇到這樣一個(gè)問(wèn)題憋他。也就是梯度消失的問(wèn)題孩饼。

sigmod函數(shù)

sigmod函數(shù)的導(dǎo)數(shù):


image.png

以sigmoid函數(shù)為例,當(dāng)z的絕對(duì)值變大時(shí)竹挡,函數(shù)值越來(lái)越平滑镀娶,趨于飽和,這個(gè)時(shí)候函數(shù)的導(dǎo)數(shù)趨于0揪罕。

例如梯码,在z=2時(shí),函數(shù)的導(dǎo)數(shù)約為1/10好啰,而在z=10時(shí)轩娶,函數(shù)的導(dǎo)數(shù)已經(jīng)變成約為1/22000,也就是說(shuō)坎怪,激活函數(shù)的輸入是10的時(shí)候比2的時(shí)候神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)速率要慢2200倍罢坝!

為了神經(jīng)網(wǎng)絡(luò)保持一個(gè)很好的性能,我們希望z的值絕大多數(shù)分布在[-5,+5]之間搅窿。

對(duì)于梯度消失嘁酿,有很多種解決辦法,比如:

  • batch normalization
  • 使用relu
  • 更改初始化的方式

這里我們只分析更改初始化的方式男应。有一個(gè)很有意思的trick:
一種簡(jiǎn)單的做法是修改w的分布闹司,使得z服從均值為0、方差為1的標(biāo)準(zhǔn)正態(tài)分布沐飘。根據(jù)正太分布期望與方差的特性游桩,將w除以sqrt(n = 輸入的結(jié)點(diǎn)個(gè)數(shù)) 即可牲迫。

這個(gè)可以簡(jiǎn)單的理解,在正常初始化weight之后借卧,然后給它除以權(quán)值個(gè)數(shù)的平方根盹憎。
weight= np.random.randn(inputnode_num)/np.sqrt(inputnode_num)
我的理解是,這樣做的方法是將輸出重新歸一化到均值是0铐刘,方差是1陪每。

調(diào)整weight的分布之后z的分布.png

如果把它放到之前的圖的坐標(biāo)系上面,即[-100,100]上面镰吵。效果更加明顯檩禾。返回z的值的分布更加集中。

如果把它放到之前的圖的坐標(biāo)系上面.png
import numpy as np
import matplotlib.pyplot as plt

def show_weight_distribution():
    w= np.random.randn(10000)
    print(w.mean())
    print(w.var())
    plt.hist(w,bins=100)
    plt.show()

def train():
    train_num=1000
    z_output=[]
    for i in range(train_num):
        bias=0
        x=np.ones(1000)
        weight= np.random.randn(1000)
        z=np.sum(weight * x)+bias
        z_output.append(z)
    print (" mean : ",np.mean(z_output))     #均值是1
    print (" var  : ",np.var(z_output))      #方差是1000
    plt.hist(z_output,bins=100)
    plt.show()


def update_train():
    train_num=1000
    z_output=[]
    for i in range(train_num):
        inputnode_num=50001
        bias=0
        x=np.ones(inputnode_num)
        weight= np.random.randn(inputnode_num)/np.sqrt(inputnode_num)   #修改的地方
        z=np.sum(weight * x)+bias
        z_output.append(z)
    print (" mean : ",np.mean(z_output))    #均值是0
    print (" var  : ",np.var(z_output))     #方差是1
    plt.hist(z_output,bins=100)
    plt.show()

def update_train2():
    train_num=1000
    z_output=[]
    for i in range(train_num):
        inputnode_num=5000
        bias=0
        x=np.ones(inputnode_num)
        weight= np.random.randn(inputnode_num)/np.sqrt(inputnode_num)  #修改的地方
        z=np.sum(weight * x)+bias
        z_output.append(z)
    print (" mean : ",np.mean(z_output))  #均值是0
    print (" var  : ",np.var(z_output))   #方差是1
    plt.xlim([-100,100])
    plt.hist(z_output,bins=100)
    plt.show()

if __name__ =="__main__":
    update_train2()

關(guān)于梯度消失和梯度爆炸的問(wèn)題:

梯度消失的表現(xiàn):

對(duì)于下圖所示的含有3個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)疤祭,梯度消失問(wèn)題發(fā)生時(shí)盼产,接近于輸出層的hidden layer 3等的權(quán)值更新相對(duì)正常,但前面的hidden layer 1的權(quán)值更新會(huì)變得很慢勺馆,導(dǎo)致前面的層權(quán)值幾乎不變戏售,仍接近于初始化的權(quán)值。

這就導(dǎo)致hidden layer 1相當(dāng)于只是一個(gè)映射層草穆,對(duì)所有的輸入做了一個(gè)同一映射蜈项,這是此深層網(wǎng)絡(luò)的學(xué)習(xí)就等價(jià)于只有后幾層的淺層網(wǎng)絡(luò)的學(xué)習(xí)了。

為什么會(huì)產(chǎn)生這樣的情況续挟?
以下圖的反向傳播為例(假設(shè)每一層只有一個(gè)神經(jīng)元且對(duì)于每一層)
如下公式所示:


網(wǎng)絡(luò)結(jié)構(gòu)如圖所示:


可以推到出:


而sigmoid的導(dǎo)數(shù)如下圖所示:


這樣紧卒,梯度爆炸問(wèn)題的出現(xiàn)原因就顯而易見(jiàn)了
sigmod的導(dǎo)數(shù)的最大值是1/4,如果w的權(quán)值小于1 的話诗祸,那么 | sigmod‘ * w | 會(huì)小于1跑芳。如果網(wǎng)絡(luò)有很多層的話,那么這個(gè)導(dǎo)數(shù)會(huì)指數(shù)倍減小直颅。也就是前幾層的權(quán)值基本上不改變博个。因而導(dǎo)致梯度消失的情況出現(xiàn)。

如果 | sigmod‘ * w | > 1 , (也就是w比較大的情況)(雖然這種情況很少出現(xiàn))這樣就是梯度爆炸的情況了功偿。

so盆佣,小結(jié)一下:
其實(shí)梯度爆炸和梯度消失問(wèn)題都是因?yàn)榫W(wǎng)絡(luò)太深,網(wǎng)絡(luò)權(quán)值更新不穩(wěn)定造成的械荷,本質(zhì)上是因?yàn)樘荻确聪騻鞑ブ械倪B乘效應(yīng)共耍。對(duì)于更普遍的梯度消失問(wèn)題,可以考慮用ReLU激活函數(shù)取代sigmoid激活函數(shù)吨瞎。

  • 由于網(wǎng)絡(luò)太深痹兜,導(dǎo)致反向傳播出現(xiàn)一個(gè)連乘的效應(yīng)。梯度指數(shù)倍減小颤诀。
  • sigmod的導(dǎo)數(shù)兩邊都很小

參考:

  1. 斯坦福 cs231n
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末字旭,一起剝皮案震驚了整個(gè)濱河市对湃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遗淳,老刑警劉巖拍柒,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屈暗,居然都是意外死亡斤儿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)恐锦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疆液,你說(shuō)我怎么就攤上這事一铅。” “怎么了堕油?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵潘飘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我掉缺,道長(zhǎng)卜录,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任眶明,我火速辦了婚禮艰毒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搜囱。我一直安慰自己丑瞧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蜀肘。 她就那樣靜靜地躺著绊汹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扮宠。 梳的紋絲不亂的頭發(fā)上西乖,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音坛增,去河邊找鬼获雕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛收捣,可吹牛的內(nèi)容都是我干的典鸡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坏晦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼萝玷!你這毒婦竟也來(lái)了嫁乘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤球碉,失蹤者是張志新(化名)和其女友劉穎蜓斧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體睁冬,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挎春,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豆拨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片直奋。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖施禾,靈堂內(nèi)的尸體忽然破棺而出脚线,到底是詐尸還是另有隱情,我是刑警寧澤弥搞,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布邮绿,位于F島的核電站,受9級(jí)特大地震影響攀例,放射性物質(zhì)發(fā)生泄漏船逮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一粤铭、第九天 我趴在偏房一處隱蔽的房頂上張望挖胃。 院中可真熱鬧,春花似錦梆惯、人聲如沸冠骄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凛辣。三九已至,卻和暖如春职烧,著一層夾襖步出監(jiān)牢的瞬間扁誓,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蚀之, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝗敢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓足删,卻偏偏與公主長(zhǎng)得像寿谴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子失受,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容