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

天天見聞 天天見聞 2024-10-11 科技 閱讀: 29
摘要: 這個問題被稱為**權重初始化。在我們訓練網絡之前,我們需要初始化所有的權重。如果網絡的所有權重都被初始化為零,所有的激活都是零,相應的梯度也是零。解決這個問題的方法之一是以小标準差的正态分布來初始化權重。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-13 閱讀: 23
(a)和(b)是同卵雙胞胎姊妹中的一人的一根手指的兩個指紋印。同卵雙胞胎絕大多數都是由一個精子一個卵子分裂而來,因此除了基本無法探查的微突變之外同卵雙胞胎所接受的遺傳财産可視作完全相同。但也有極其罕見的同卵異精現象,而在這種情況下同卵雙胞胎的基因也不能視作相同了。...
男命正官代表什麼,男命正官代表孩子

男命正官代表什麼,男命正官代表孩子

作者: 天天見聞 時間:2024-10-13 閱讀: 22
男命兩個正官必有二婚到底是不是真的呢?男命正官代表孩子正官對于男性和女性來說,是有着不一樣的寓意的,也代表着不一樣的東西。正官士異性,是男命中的女兒,天幹為異性相見,故男命正官為女兒。...
訓練過程--學習率與權重衰減

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

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

生而有時,活而有命

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

獻上中國四大名雞的制作工藝配方,幾代人的心血彌足珍貴

作者: 天天見聞 時間:2024-10-02 閱讀: 68
德州扒雞五香脫骨,香飄四溢,很大程度得益于秘不示人的香料包,雖然料包中所用的13種香料大多為人熟知,比例配方卻經過十代人不斷試驗調整,彌足珍貴。詳細研究道口燒雞的香料配方和工藝流程,對更好地烹制雞有有極大的幫助。...

雞的25種吃法每一道都是必學的經典-微信精選-吃貨愛美食

作者: 天天見聞 時間:2024-10-02 閱讀: 79
特點:保持了雞肉的鮮美、原汁原味5.香酥雞8.雲南氣鍋雞11.四川棒棒雞雞塊,加湯并下冬筍、鮮蘑。要點:要把握好火候,雞塊入鍋沖炸時間不宜過長。17.咖喱雞塊要點:雞不宜煮得太老,而失其鮮嫩。20.栗子焖雞...
我來說兩句

年度爆文