這是《AI初識(shí)境》第5篇,,這次我們說(shuō)說(shuō)初始化,。所謂初識(shí),,就是對(duì)相關(guān)技術(shù)有基本了解,掌握了基本的使用方法,。 神經(jīng)網(wǎng)絡(luò)要優(yōu)化一個(gè)非常復(fù)雜的非線性模型,,而且基本沒(méi)有全局最優(yōu)解,初始化在其中扮演著非常重要的作用,,尤其在沒(méi)有BN等技術(shù)的早期,,它直接影響模型能否收斂。 可以說(shuō)萬(wàn)事開(kāi)頭難,,沒(méi)有好的初始化的深度學(xué)習(xí)模型訓(xùn)練起來(lái)更難,。 作者&編輯 | 言有三 01 初始化的重要性 2006年Hinton等人在science期刊上發(fā)表了論文“Reducing the dimensionality of data with neural networks”,揭開(kāi)了新的訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)算法的序幕,。 利用無(wú)監(jiān)督的RBM網(wǎng)絡(luò)來(lái)進(jìn)行預(yù)訓(xùn)練,,進(jìn)行圖像的降維,取得比PCA更好的結(jié)果,,通常這被認(rèn)為是深度學(xué)習(xí)興起的開(kāi)篇,。 這么看來(lái),是因?yàn)楹玫某跏蓟椒ǖ某霈F(xiàn),,才有了深層神經(jīng)網(wǎng)絡(luò)工程化落地的可能性,。 好的初始化應(yīng)該滿足以下兩個(gè)條件: (1) 讓神經(jīng)元各層激活值不會(huì)出現(xiàn)飽和現(xiàn)象; (2) 各層激活值也不能為0,。 也就是激活值不要太大,,也不要太小,應(yīng)該剛剛好,,當(dāng)然這還只是最基本的要求,。 我們都知道在早期,sigmoid激活函數(shù)是多層感知器模型的標(biāo)配,,上面這篇文章同樣也是用sigmoid激活函數(shù),,沒(méi)有那么多問(wèn)題,是因?yàn)槭褂昧祟A(yù)訓(xùn)練,。 如果不使用預(yù)訓(xùn)練會(huì)如何,?在Xavier Glorot和Yoshua Bengio提出xavier初始化方法的論文【1】中就對(duì)不同的激活函數(shù)使用不同的數(shù)據(jù)集做過(guò)實(shí)驗(yàn)。 上面是一個(gè)四層的神經(jīng)網(wǎng)絡(luò)在sigmoid函數(shù)激活下的訓(xùn)練過(guò)程,,可以看到最深的layer4層剛開(kāi)始的時(shí)候很快就進(jìn)入了飽和區(qū)域(激活值很低),,其他幾層則比較平穩(wěn),在訓(xùn)練的后期才能進(jìn)行正常的更新,。 為什么會(huì)這樣呢,?網(wǎng)絡(luò)中有兩類參數(shù)需要學(xué)習(xí),一個(gè)是權(quán)重,,一個(gè)是偏置。對(duì)于上面的結(jié)果作者們提出了一個(gè)假設(shè),就是在網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程中,,偏置項(xiàng)總是學(xué)的更快,,網(wǎng)絡(luò)真正的輸出就是直接由layer4決定的,輸出就是softmax(b+Wh),。既然偏置項(xiàng)學(xué)的快,,那Wh就沒(méi)有這么重要了,所以激活值可以低一點(diǎn),。 解釋雖然比較牽強(qiáng),,但是畢竟實(shí)驗(yàn)結(jié)果擺在那里,從tanh函數(shù)的激活值來(lái)看會(huì)更直觀,。 這個(gè)圖有個(gè)特點(diǎn)是,,0,1和-1的值都不少,,而中間段的就比較少,。在0值,逼近線性函數(shù),,它不能為網(wǎng)絡(luò)的非線性能力作出貢獻(xiàn),。對(duì)于1,-1,,則是飽和區(qū),,沒(méi)有用。 02 常用的初始化方法 1,、全零初始化和隨機(jī)初始化 如果神經(jīng)元的權(quán)重被初始化為0,, 在第一次更新的時(shí)候,除了輸出之外,,所有的中間層的節(jié)點(diǎn)的值都為零,。一般神經(jīng)網(wǎng)絡(luò)擁有對(duì)稱的結(jié)構(gòu),那么在進(jìn)行第一次誤差反向傳播時(shí),,更新后的網(wǎng)絡(luò)參數(shù)將會(huì)相同,,在下一次更新時(shí),相同的網(wǎng)絡(luò)參數(shù)學(xué)習(xí)提取不到有用的特征,,因此深度學(xué)習(xí)模型都不會(huì)使用0初始化所有參數(shù),。 而隨機(jī)初始化就是搞一些很小的值進(jìn)行初始化,實(shí)驗(yàn)表明大了就容易飽和,,小的就激活不動(dòng),,再說(shuō)了這個(gè)沒(méi)技術(shù)含量,不必再討論,。 2.標(biāo)準(zhǔn)初始化 對(duì)于均勻分布,,X~U(a,b),,概率密度函數(shù)等于: 它的期望等于0,方差等于(b-a)^2/12,,如果b=1,,a=-1,就是1/3,。 下面我們首先計(jì)算一下,,輸出輸入以及權(quán)重的方差關(guān)系公式: 如果我們希望每一層的激活值是穩(wěn)定的,w就應(yīng)該用n的平方根進(jìn)行歸一化,,n為每個(gè)神經(jīng)元的輸入數(shù)量,。 所以標(biāo)準(zhǔn)的初始化方法其權(quán)重參數(shù)就是以下分布: 它保證了參數(shù)均值為0,方差為常量1/3,,和網(wǎng)絡(luò)的層數(shù)無(wú)關(guān),。 3.Xavier初始化 首先有一個(gè)共識(shí)必須先提出:神經(jīng)網(wǎng)絡(luò)如果保持每層的信息流動(dòng)是同一方差,那么會(huì)更加有利于優(yōu)化,。不然大家也不會(huì)去爭(zhēng)先恐后地研究各種normalization方法,。 不過(guò),Xavier Glorot認(rèn)為還不夠,,應(yīng)該增強(qiáng)這個(gè)條件,,好的初始化應(yīng)該使得各層的激活值和梯度的方差在傳播過(guò)程中保持一致,這個(gè)被稱為Glorot條件,。 如果反向傳播每層梯度保持近似的方差,,則信息能反饋到各層。而前向傳播激活值方差近似相等,,有利于平穩(wěn)地學(xué)習(xí),。 當(dāng)然為了做到這一點(diǎn),對(duì)激活函數(shù)也必須作出一些約定,。 (1) 激活函數(shù)是線性的,,至少在0點(diǎn)附近,而且導(dǎo)數(shù)為1,。 (2) 激活值關(guān)于0對(duì)稱,。 這兩個(gè)都不適用于sigmoid函數(shù)和ReLU函數(shù),而適合tanh函數(shù),。 要滿足上面的兩個(gè)條件,,就是下面的式子。 推導(dǎo)可以參考前面標(biāo)準(zhǔn)初始化的方法,,這里的ni,,ni+1分別就是輸入和輸出的神經(jīng)元個(gè)數(shù)了,因?yàn)檩斎胼敵霾幌嗟龋?span style="letter-spacing: 0px;box-sizing: border-box;">作為一種權(quán)衡,,文中就建議使用輸入和輸出的均值來(lái)代替,。 再帶入前面的均勻分布的方差(b-a)^2/12,,就得到了對(duì)于tanh函數(shù)的xavier初始化方法。 下面這兩個(gè)圖分別是標(biāo)準(zhǔn)初始化和xavier初始化帶來(lái)的各層的反傳梯度方差,,可以看出xavier確實(shí)保持了一致性,。 4.He初始化 Xavier初始化雖然美妙,,但它是針對(duì)tanh函數(shù)設(shè)計(jì)的,,而激活函數(shù)現(xiàn)在是ReLU的天下,ReLU只有一半的激活,,另一半是不激活的,,所以前面的計(jì)算輸入輸出的方差的式子多了一個(gè)1/2,如下,。 因?yàn)檫@一次沒(méi)有使用均勻初始化,,而是使用了正態(tài)分布,所以對(duì)下面這個(gè)式子: 需要的就是這樣的正態(tài)分布,。 綜上,,對(duì)于兩大最經(jīng)典的激活函數(shù),各自有了對(duì)應(yīng)的初始化方法,。雖然后面還提出了一些其他的初始化方法,,但是在我們這個(gè)系列中就不再詳述了。 03 關(guān)于初始化的一些思考 初始化這個(gè)問(wèn)題明顯比較麻煩,,不然大家也不會(huì)這么喜歡用pretrained模型了,。 從前面我們可以看到,大家努力的方向有這么幾個(gè),。 (1) 預(yù)訓(xùn)練啊,。 機(jī)智地一比,甩鍋給別人,,??,。 (2) 從激活函數(shù)入手,讓梯度流動(dòng)起來(lái)不要進(jìn)入飽和區(qū),,則什么初始化咱們都可以接受,。 這其實(shí)就要回到上次我們說(shuō)的激活函數(shù)了,ReLU系列的激活函數(shù)天生可以緩解這個(gè)問(wèn)題,,反過(guò)來(lái),,像何凱明等提出的方法,也是可以反哺激活函數(shù)ReLU,。 (3) 歸一化,,讓每一層的輸入輸出的分布比較一致,降低學(xué)習(xí)難度,。 回想一下,,這不就是BN干的活嗎,?所以才會(huì)有了BN之后,初始化方法不再需要小心翼翼地選擇,。假如不用BN,,要解決這個(gè)問(wèn)題有幾個(gè)思路,我覺(jué)得分為兩派,。 首先是理論派,,就是咱們從理論上分析出設(shè)計(jì)一個(gè)怎么樣的函數(shù)是最合適的。 對(duì)于Sigmoid等函數(shù),,xavier設(shè)計(jì)出了xavier初始化方法,,對(duì)于ReLU函數(shù),何凱明設(shè)計(jì)了he初始化方法,。 在此之上,,有研究者分別針對(duì)零點(diǎn)平滑的激活函數(shù)和零點(diǎn)不平滑的激活函數(shù)提出了統(tǒng)一的框架,見(jiàn)文【2】,,比如對(duì)于sigmoid,,tanh等函數(shù),方差和導(dǎo)數(shù)的關(guān)系如此,。 然后是實(shí)踐派,,在訓(xùn)練的時(shí)候手動(dòng)將權(quán)重歸一化的,見(jiàn)文【3】,,這就是向歸一化方法靠攏了,,下期咱們?cè)僦v。 [1] Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural networks[C]//Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010: 249-256. [2] Kumar S K. On weight initialization in deep neural networks[J]. arXiv preprint arXiv:1704.08863, 2017. [3] Mishkin D, Matas J. All you need is a good init[J]. arXiv preprint arXiv:1511.06422, 2015. 最后發(fā)一個(gè)通知,,2019年有三AI培養(yǎng)計(jì)劃出爐了,,一個(gè)季度一期噢。 好的初始化方法就是贏在起跑線,不過(guò)現(xiàn)在的初始化方法也不是對(duì)什么數(shù)據(jù)集都有效,,畢竟不同數(shù)據(jù)集的分布不同,,咱們以后再談。 下期預(yù)告:論深度學(xué)習(xí)中的歸一化 轉(zhuǎn)載文章請(qǐng)后臺(tái)聯(lián)系 侵權(quán)必究 |
|