深度學(xué)習(xí)中的初始化方法

  • 在深度學(xué)習(xí)中的各種操作實(shí)際上是矩陣乘法操作,使用乘法操作就容易造成數(shù)值的消失和爆炸,就是一個(gè)非常小的數(shù)乘以一個(gè)非常小的數(shù)可能就下溢了,一個(gè)大的數(shù)乘以一個(gè)大的數(shù)字就上溢了,并且由于梯度的原因,即使不溢出也會(huì)很難收斂。
  • 所以問(wèn)題就變?yōu)榱巳绾握业?code>sweet point,這樣就會(huì)加速收斂。

推理過(guò)程

  • 假設(shè)我們有一個(gè)100層的網(wǎng)絡(luò),沒(méi)有激活函數(shù),因此每個(gè)網(wǎng)絡(luò)的參數(shù)是一個(gè)矩陣,假設(shè)我們已經(jīng)將參數(shù)scale到均值0方差1。
  • 我們的輸入是a,因此到最終輸出結(jié)果要和這100個(gè)矩陣做矩陣乘法,我們接下來(lái)可以看到從一個(gè)標(biāo)準(zhǔn)的正態(tài)分布中初始化不是一個(gè)好的選擇,可以看到經(jīng)過(guò)100次乘法以后已經(jīng)Nan了。
  • 可以看到在29層的時(shí)候就已經(jīng)數(shù)值爆炸了,因此使用標(biāo)準(zhǔn)的正太分布初始化的值太大了。
  • 當(dāng)初始化的值太小了,會(huì)數(shù)值消失,盡管此時(shí)的均值仍是0,標(biāo)準(zhǔn)差是0.1。


  • y表示網(wǎng)絡(luò)的輸出,輸入x和使用標(biāo)準(zhǔn)正太分布初始化的權(quán)重矩陣a的乘積的標(biāo)準(zhǔn)差與輸入連接數(shù)(此處是512)的平方根非常相近。因此如果我們對(duì)權(quán)重矩陣的所有值除以他連接數(shù)目的根號(hào)(√512)那么就可以保證輸出y的方差是1。
  • 因此這次的權(quán)重矩陣再次規(guī)范化以后得到的值就是連乘后不會(huì)讓輸出爆炸和消失的數(shù)值,可以看到盡管是100層的網(wǎng)絡(luò)但是還是沒(méi)有數(shù)值爆炸或者數(shù)值消失。

Xavier Initialization

  • 在使用了比如sigmoidtanh這樣的對(duì)稱的激活函數(shù),初始化的時(shí)候就要更加的小心了,因?yàn)榻?jīng)過(guò)這些激活函數(shù)一樣,只有很小的部分是在激活區(qū)里面,其他地方都很平(在飽和區(qū)里面),因此梯度信息就會(huì)非常趨近于0,因此難以訓(xùn)練。
  • Glorot and Bengio提出了一種叫做Xavier initialization的初始化方法,這種初始化的方式是從下面的上下界中進(jìn)行隨機(jī)均勻初始化,ni是輸入的連接數(shù)目,ni+1是輸出的連接數(shù)目。
  • 可以看到這樣的方法和之前的方法表現(xiàn)是差不多的。


kaiming Initialization

  • 當(dāng)我們使用relu作為激活函數(shù)的時(shí)候,可以看到使用標(biāo)準(zhǔn)的正太分布初始化的方差與輸入連接數(shù)目除以二(512/2)的平方根很接近。
  • 在實(shí)驗(yàn)中可以發(fā)現(xiàn)使用何凱明初始化100層的網(wǎng)絡(luò)可以prevent activation outputs from exploding or vanishing
  • 使用的是relu激活函數(shù),如果使用Xavier初始化方式的話直接爆炸。
  • 可以看到一個(gè)30層的CNN網(wǎng)絡(luò),使用Xavier初始化幾乎不能學(xué)習(xí)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容