為什麼我們需要權重初始化?

天天見聞 天天見聞 2024-10-11 科技 閱讀: 9
摘要: 這個問題被稱為**權重初始化。在我們訓練網絡之前,我們需要初始化所有的權重。如果網絡的所有權重都被初始化為零,所有的激活都是零,相應的梯度也是零。解決這個問題的方法之一是以小标準差的正态分布來初始化權重。Xavier初始化的目的是初始化權重,使每一層的方差都是相同的。

在機器學習和深度學習研究中,主要目的是使損失值最小。為了盡快做到這一點,有必要根據我們的問題來啟動權重。這個問題被稱為**"權重初始化"。**我們需要知道的第一件事是,這是一個設計決定。在我們訓練網絡之前,我們需要初始化所有的權重。權重的初始值會對訓練過程産生重大影響。根據深度學習模型在訓練過程中的起點,它可以收斂到不規則損失面中任何可能的局部最小值。

讓我們一起思考。如果我們把所有的權重都從0開始,從時間和成本上來說都是一個糟糕的選擇。還是說全部從0.5開始是有意義的?從錯誤的權重開始是否會導緻梯度下降的爆炸或消失?答案是肯定的!這就是為什麼我們需要初始化。讓我們來總結一下。

為什麼我們需要權重初始化?

權重初始化技術零初始化随機初始化澤維爾初始化H-at-al初始化LeCun初始化

讓我們更深入地研究它們中的每一個!為了簡化問題,讓我對每個初始化技術使用相同的基本模型。

 model = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128, activation='relu', kernel_initializer,            bias_initializer)    ])

1.零初始化

顧名思義,零初始化就是将所有神經網絡的權重初始化為0。請注意,這樣做的前提是一半的最終權重為正,一半的權重為負。

如果網絡的所有權重都被初始化為零,所有的激活都是零,相應的梯度也是零。事實上,即使權重被初始化為任何其他常數也沒有關系。在這種情況下,激活可能不是零,但它們仍然是相同的。因此,我們可以排除零/常數的初始化。

model = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='zeros',                              bias_initializer='zeros')    ])

2.随機初始化

當激活函數為Sigmoid時,權重值離0越遠,标準差越大,輸出值就越偏向于接近0和1,然後就會失去梯度。解決這個問題的方法之一是以小标準差的正态分布來初始化權重。一般來說,初始權重以正态分布(高斯分布)随機初始化,其平均值為0,标準差為0.01,如下所示

# With normal distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='RandomNormal',                              bias_initializer='zeros')    ])'''# With Uniform Distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='RandomUniform',                              bias_initializer='zeros')'''

3.澤維爾(Glorot)初始化

随機初始化對于深度網絡來說很快就會崩潰。其原因是,激活度在幾層之後會迅速下降到零(梯度也是如此)。Xavier初始化的目的是初始化權重,使每一層的方差都是相同的。換句話說,每層輸出的方差必須等于輸入的方差,而且在反向傳播中通過各層之前和之後的梯度方差必須相同。

# With normal distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='glorot_normal',                              bias_initializer='zeros')    ])'''# With Uniform Distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='glorot_uniform',                              bias_initializer='zeros')'''

4.He-at-al初始化

何凱明提出了一種适合ReLU的初始值,以他的名字命名,稱為何初始值。他的初始化與Xavier的初始化幾乎相似,但與Xavier初始化不同。這種差異與ReLU激活函數的非線性有關,他們對權重使用了不同的縮放系數。

# With normal distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='he_normal',                              bias_initializer='zeros')    ])'''# With Uniform Distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='he_uniform',                              bias_initializer='zeros')'''

5.LeCun初始化

它也被稱為 "高效反推",考慮到每一層的輸入和輸出的大小。這種方法可用于不一定圍繞零對稱的激活函數,如雙曲切線。它産生的權重是随機選擇的數字乘以方差1/(input_layer_size)。

# With normal distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='lecun_normal',                              bias_initializer='zeros')    ])'''# With Uniform Distributionsmodel = tf.keras.models.Sequential([        tf.keras.layers.Flatten(input_shape=(64, 32)),        tf.keras.layers.Dense(128,                               activation='relu',                               kernel_initializer='lecun_uniform',                              bias_initializer='zeros')'''

我們如何理解好的初始化?如何找到合适的初始化值?參考文獻sebastianraschka.com/pdf/lecture….heartbeat.comet.ml/weight-init…wandb.ai/sauravmahes…medium.com/guidona-sof….koreascience.kr/article/JAK…web.eecs.umich.edu/~justincj/s…sebastianraschka.com/pdf/lecture…bigmeca.minesparis.psl.eu/wp-content/………

你可能想看:
其他相關
訓練過程--學習率與權重衰減

訓練過程--學習率與權重衰減

作者: 天天見聞 時間:2024-10-12 閱讀: 1
4)理論上大的參數、深的網絡在訓練時需要更少的叠代次數,但是并不是參數越大越好,參數越大使得權重更新緩慢,優化速度下降。為防止過度拟合,為訓練準則增加權重衰減項,L2歸一化為訓練準則增加λ∑iθ2i項,L1增加λ∑i|θi|。...
生而有時,活而有命

生而有時,活而有命

作者: 天天見聞 時間:2024-10-12 閱讀: 1
一、命裡有時終須有,命裡無時莫強求。我們從古到今都想掌握自己的命運,然而總是有那麼多的人在江湖身不由己。這就是第一個曆程,命裡有時終須有,命裡無時莫強求,命裡有多少就是多少。為什麼會是有同年同月同時生的人而命運不同呢?試想一下,世界那麼大,人那麼多,都是那個時間出生的人有多少?...

技術文摘二級冶金焦在2300m3高爐的應用實踐

作者: 天天見聞 時間:2024-09-25 閱讀: 47
GB50427-2008《高爐煉鐵工藝設計規範》中對2000m3高爐使用焦炭質量要求如下:煉焦工藝對高爐指标的影響(1)二級冶金焦能夠在2300m3高爐上使用并取得良好指标。朱仁良.寶鋼大型高爐操作與管理[M].北京:冶金工業出版社,2015....

盧鑄之醫案解析10(治療婦科病的經驗七)

作者: 天天見聞 時間:2024-10-01 閱讀: 40
2018年8月1日晚,中原火神傅文錄老中醫微信講述“盧鑄之治療婦科病的經驗(7)”,現将錄音内容發布如下,希望可以幫助更多喜歡扶陽醫學的同道們。5.盧鑄之醫案解讀...
拜訪了50位老狐狸才悟透的人性鐵律:1.動上層的利益如同奪他們的

拜訪了50位老狐狸才悟透的人性鐵律:1.動上層的利益如同奪他們的

作者: 天天見聞 時間:2024-10-01 閱讀: 30
拜訪了50位老狐狸才悟透的人性鐵律:1.動上層的利益如同奪他們的生命。改底層的觀念如同掘他們的祖墳。底層觀念正是上層利益的來源。看起來很離譜、想不通的事情,往利益上想。13.大部分人并不在意真相,他們隻想聽他們喜歡的,從而繼續按照他們的固有認知做事情。...

釋放黑色最狂野的激情——誰是美國的“唐伯虎”

作者: 天天見聞 時間:2024-10-02 閱讀: 29
”克蘭強勁有力的筆勢、典型的白色畫布上的黑色線條,以及巨大的畫面比例,似乎都在發表紐約畫派的宏偉宣言:強調對個性的直接表現。1960年克蘭的作品以富于動感的強烈黑色符号著稱:一般來說,我們可以從中看到與城市相關的象征和形象。...
我來說兩句

年度爆文