深度學習 變數初始化

2021-09-28 16:57:07 字數 679 閱讀 8551

權重一定不能全零初始化。因為這會導致神經元在前向傳播中計算出同樣的輸出,然後在反向傳播中計算出同樣的梯度,從而進行同樣的權重更新。這就產生了大量對稱性神經元。

通常採用小隨機數初始化,通過這樣來打破對稱性。至於使用高斯分布還是均勻分布,對結果影響很小。

之所以用小的隨機數,是因為:如果網路中存在tanh 或者 sigmoid 啟用函式,或者網路的輸出層為sigmoid 等單元,則它們的變數值必須很小。

如果使用較大的隨機數,則很有可能這些單元會飽和,使得梯度趨近於零。這意味著基於梯度下降的演算法推進的很慢,從而學習很慢。

如果網路中不存在sigmoid/tanh 等啟用函式,網路的輸出層也不是sigmoid 等單元,則可以使用較大的隨機數初始化。

通常使用 來校準權重初始化標準差。隨著輸入資料的增長,隨機初始化的神經元的輸出資料的分布中的方差也在增大。

假設權重 和輸入 之間的內積為 (不考慮非線性啟用函式)。我們檢查 的方差

其中假設輸入和權重的平均值都是0,因此有 。同時假設所有的 服從同樣的分布,假設所有的 服從同樣的分布

要使得輸出 和輸入 具有同樣的方差,則必須保證每個權重 的方差是 。則如果權重通過乙個標準高斯分布初始化,則需要將標準差除以

在glorot的**中,他推薦初始化公式為: 。其中 為輸入和輸出的數量。

通常將偏置初始化為0。這是因為隨機小數值權重已經打破了對稱性

深度學習 深度學習權重初始化

本文對cs231中的training neural networks的權重更新部分進行記錄 權重的初始化在深度神經網路中起著比較大的重要,算是乙個trick,但在實際應用上確是個大殺器。1.如果一開始把網路中的權重初始化為0,會發生什麼?因為權重初始為0,由於網路中的神經元的更新機制完全相同,由於網...

變數初始化

int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...

初始化列表成員變數的初始化

對於以下程式 include using namespace std class base base b 0 a b int get a int get b int main 本想得到的結果是a,b都為90。但是實際結果卻是 4273046 90process returned 0 0x0 exec...