日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深度学习——Xavier初始化方法

發布時間:2023/11/28 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习——Xavier初始化方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

20210609

https://blog.csdn.net/u011534057/article/details/51673458

https://blog.csdn.net/luoxuexiong/article/details/95772045

“Xavier”初始化方法是一種很有效的神經網絡初始化方法,方法來源于2010年的一篇論文《Understanding the difficulty of training deep feedforward neural networks》,可惜直到近兩年,這個方法才逐漸得到更多人的應用和認可。

為了使得網絡中信息更好的流動,每一層輸出的方差應該盡量相等。
基于這個目標,現在我們就去推導一下:每一層的權重應該滿足哪種條件。
文章先假設的是線性激活函數,而且滿足0點處導數為1,即


現在我們先來分析一層卷積:

其中ni表示輸入個數。

根據概率統計知識我們有下面的方差公式:


特別的,當我們假設輸入和權重都是0均值時(目前有了BN之后,這一點也較容易滿足),上式可以簡化為:


進一步假設輸入x和權重w獨立同分布,則有:


于是,為了保證輸入與輸出方差一致,則應該有:


對于一個多層的網絡,某一層的方差可以用累積的形式表達:


特別的,反向傳播計算梯度時同樣具有類似的形式:


綜上,為了保證前向傳播和反向傳播時每一層的方差一致,應滿足:


但是,實際當中輸入與輸出的個數往往不相等,于是為了均衡考量,最終我們的權重方差應滿足:

———————————————————————————————————————

———————————————————————————————————————

學過概率統計的都知道 [a,b] 間的均勻分布的方差為:


因此,Xavier初始化的實現就是下面的均勻分布:
——————————————————————————————————————————

———————————————————————————————————————————

下面,我們來看一下caffe中具體是怎樣實現的,代碼位于include/caffe/filler.hpp文件中。

template <typename Dtype>
class XavierFiller : public Filler<Dtype> {
public:
explicit XavierFiller(const FillerParameter& param)
: Filler<Dtype>(param) {}
virtual void Fill(Blob<Dtype>* blob) {
CHECK(blob->count());
int fan_in = blob->count() / blob->num();
int fan_out = blob->count() / blob->channels();
Dtype n = fan_in; // default to fan_in
if (this->filler_param_.variance_norm() ==
FillerParameter_VarianceNorm_AVERAGE) {
n = (fan_in + fan_out) / Dtype(2);
} else if (this->filler_param_.variance_norm() ==
FillerParameter_VarianceNorm_FAN_OUT) {
n = fan_out;
}
Dtype scale = sqrt(Dtype(3) / n);
caffe_rng_uniform<Dtype>(blob->count(), -scale, scale,
blob->mutable_cpu_data());
CHECK_EQ(this->filler_param_.sparse(), -1)
<< "Sparsity not supported by this Filler.";
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
由上面可以看出,caffe的Xavier實現有三種選擇

(1) 默認情況,方差只考慮輸入個數:


(2) FillerParameter_VarianceNorm_FAN_OUT,方差只考慮輸出個數:


(3) FillerParameter_VarianceNorm_AVERAGE,方差同時考慮輸入和輸出個數:


之所以默認只考慮輸入,我個人覺得是因為前向信息的傳播更重要一些
---------------------
作者:shuzfan
來源:CSDN
原文:https://blog.csdn.net/shuzfan/article/details/51338178
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的深度学习——Xavier初始化方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。