bn层初始化参数_神经网络参数初始化方式
看了文章《Understanding the difficulty of training deep feedforward neural networks》,里面提出了兩種參數(shù)初始化的方法:
以及normalized initialization——xavier方法:
最近做實驗,發(fā)現(xiàn)網(wǎng)絡(luò)的初始化太重要!其實神經(jīng)網(wǎng)絡(luò)本身就是一個dark box, 但是每一個參數(shù)怎么設(shè)置怎么調(diào)節(jié)是最有技術(shù)的。
幾種可行的初始化方式:
1. pre-training+fine-tuning
如:先使用greedy layerwise auto-encoder做unsupervised pre-training,然后再做fine-tuning。
① pretraining: 將神經(jīng)網(wǎng)絡(luò)中的每一層取出,構(gòu)造一個auto-encoder做訓(xùn)練,使得輸入層和輸出層保持一致。在這一過程中,參數(shù)得以更新,形成初始值
② fine-tuning:將pre-train過的每一層放回神經(jīng)網(wǎng)絡(luò),利用pre-train階段得到的參數(shù)初始值和訓(xùn)練數(shù)據(jù)對模型進(jìn)行整體調(diào)整。在這一過程中,參數(shù)進(jìn)一步被更新,形成最終模型。
2. random initialization: np.random.randn(m,n)
最常用的方法,但是也有弊端,一旦隨機分布選擇不當(dāng),就會陷入困境
3. Xavier initialization:
基本思想:保證輸入和輸出的方差一致,這樣就可以避免所有輸出值都趨向于0。雖然剛開始的推導(dǎo)基于線性函數(shù),但是在一些非線性神經(jīng)元也很有效。
tf.Variable(np.random.randn(node_in,node_out))/np.sqrt(node_in)
比較適合tanh
4. He initialization
RELU中非常適合:
tf.Variable(np.random.randn(node_in,node_out))/np.sqrt(node_in/2)
5. bengio還提出了一種
tf.Variable(np.random.randn(node_in,node_out))/np.sqrt((node_in+node_out)/2)
其實3、4、5三種方法都是Xavier的變體。
6. BN 其實不是初始化方法了,是一種巧妙而粗暴的削弱bad initialization的影響。
總結(jié)
以上是生活随笔為你收集整理的bn层初始化参数_神经网络参数初始化方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ocbase 数据库 蚂蚁_iOS -
- 下一篇: 如何查看无线网卡型号_如何检查笔记本电脑