深度學習方法(六):神經網路weight引數怎麼初始化
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。
神經網路,或者深度學習演算法的引數初始化是一個很重要的方面,傳統的初始化方法從高斯分佈中隨機初始化引數。甚至直接全初始化為1或者0。這樣的方法暴力直接,但是往往效果一般。本篇文章的敘述來源於一個國外的討論帖子[1],下面就自己的理解闡述一下。
首先我們來思考一下,為什麼在神經網路演算法(為了簡化問題,我們以最基本的DNN來思考)中,引數的選擇很重要呢?以sigmoid函式(logistic neurons)為例,當x的絕對值變大時,函式值越來越平滑,趨於飽和,這個時候函式的倒數趨於0,例如,在x=2時,函式的導數約為1/10,而在x=10時,函式的導數已經變成約為1/22000,也就是說,啟用函式的輸入是10的時候比2的時候神經網路的學習速率要慢2200倍!
為了讓神經網路學習得快一些,我們希望啟用函式sigmoid的導數較大。從數值上,大約讓sigmoid的輸入在[-4,4]之間即可,見上圖。當然,也不一定要那麼精確。我們知道,一個神經元j的輸入是由前一層神經元的輸出的加權和,xj=∑iai⋅wi+bj。因此,我們可以通過控制權重引數初始值的範圍,使得神經元的輸入落在我們需要的範圍內。
一種比較簡單、有效的方法是:權重引數初始化從區間均勻隨機取值。
(−1d√,1d√),其中d是一個神經元的輸入數量。
為了說明這樣取值的合理性,先簡單回顧一下幾點基本知識:
1.符合均勻分佈U(a,b)的隨機變數數學期望和方差分別是——數學期望:E(X)=(a+b)/2,方差:D(X)=(b-a)²/12
2.如果隨機變數X,Y是相互獨立的,那麼Var(X+Y) = Var(X)+Var(Y),如果X,Y是相互獨立的且均值為0,那麼Var(X*Y) = Var(X)*Var(Y)
因此,如果我們限制神經元的輸入訊號(xi)是均值=0,標準差=1的,那麼
也就是說,隨機的d個輸入訊號加權和,其中權重來自於(−1d√,1d√)均勻分佈,服從均值=0,方差=1/3的正態分佈,且與d無關。所以神經元的輸入落在區間[-4,4]之外的概率非常小。
更一般的形式可以寫為:
另外一種較新的初始值方法
根據Glorot & Bengio (2010) [4], initialize the weights uniformly within the interval [−b,b], where
Hk and Hk+1 are the sizes of the layers before and after the weight matrix, for sigmoid units. Or hyperbolic tangent units: sample a Uniform [−b,b] with
b=46Hk+Hk+1−−−−−−−−−√,
其他場景的初始值方法[2]
-
in the case of RBMs, a zero-mean Gaussian with a small standard deviation around 0.1 or 0.01 works well (Hinton, 2010) to initialize the weights.
-
Orthogonal random matrix initialization, i.e. W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W) then use u as your initialization matrix.
參考資料
[2] Bengio, Yoshua. “Practical recommendations for gradient-based training of deep architectures.” Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.
[3] LeCun, Y., Bottou, L., Orr, G. B., and Muller, K. (1998a). Efficient backprop. In Neural Networks, Tricks of the Trade.
[4] Glorot, Xavier, and Yoshua Bengio. “Understanding the difficulty of training deep feedforward neural networks.” International conference on artificial intelligence and statistics. 2010.
相關推薦
深度學習方法(六):神經網路weight引數怎麼初始化
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。 技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。 神經網路,或者深度學習演算法的引數初始化是一個很重要的方面,傳統的初始化方法從高斯分佈中隨機初始化引數
深度學習方法(五):卷積神經網路CNN經典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。 技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。 關於卷積神經網路CNN,網路和文獻中有非常多的資料,我在工作/研究中也用了好一段時間各種常見的model了,就想著
深度學習方法(七):最新SqueezeNet 模型詳解,CNN模型引數降低50倍,壓縮461倍!
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。 技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。 本文講一下最新由UC Berkeley和Stanford研究人員一起完成的Sque
TensorFlow:實戰Google深度學習框架(七)迴圈神經網路
RNN網路確實可以解決和時間序列有關係的問題,但是,在實際的應用過程中,我們可以看到效能並不是很好。RNN記住了以前輸入的所有資訊,但是有時候並不需要記住以前時刻的所有資訊,增加了很多的系統記憶體負擔;有時候我們的確需要記住很長時間以前資訊,但是又容易出現梯度爆炸或者梯度消失的問題。針對於這個問題,人們開
深度學習基礎(六):LSTM模型及原理介紹
Recurrent Neural Networks 人類並不是每時每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時候,你都是基於自己已經擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄,然後用空白的大腦進行思考。我們的思想擁有永續性。 傳統的神經網路並不能做到這點
深度學習方法(八):自然語言處理中的Encoder-Decoder模型,基本Sequence to Sequence模型
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。 Encoder-Decoder(編碼-解碼)是深度學習中非常常見的一個模型框架,比如無監督演
一站式學習Wireshark(六):狙擊網路高延時點
在某些情況下,丟包可能並不是造成延時的原因。你可能會發現儘管兩臺主機之間通訊速度很慢,但這種慢速並沒有伴隨著TCP重傳或是重複ACK的徵兆。在這種情況下,需要使用另一種方式來定位高延時點。 查詢高延時點最有效的方法之一是檢查最初的握手訊號以及跟隨其後的幾個報文。例如
Deep Learning 學習筆記(二):神經網路Python實現
多層神經網路的Python實現。 程式碼先貼上,程式設計的東西不解釋。 程式碼中出現的SupervisedLearningModel、NNLayer和SoftmaxRegression,請參考上一篇筆記:Deep Learning 學習筆記(一)——softmax
深度學習系列(三):簡單網路的自編碼學習
本節將研究深度學習網路權值設計的重要思想之一:自編碼思想,在正式介紹之前先以一個簡單的介紹一篇,一層隱含層網路的自編碼學習問題。 什麼是自編碼?所謂自編碼就是自己給自己編碼,再簡單點就是令輸出等於輸入自己。以一個簡單三層網路為例如下: 這裡我們假設輸出等
深度學習系列(3)——使用神經網路去辨識手寫數字
1、人腦的數字辨識 人腦的視覺系統可以說是世界的奇蹟之一,看下面一行數字: 你會覺得你毫不費力地看出了它是 50419 ,其實識別的過程並不簡單。人類大腦的每個半球中,有一個初級視覺皮層,V1
六、改進神經網路的學習方法(2):Softmax輸出層
本部落格主要內容為圖書《神經網路與深度學習》和National Taiwan University (NTU)林軒田老師的《Machine Learning》的學習筆記,因此在全文中對它們多次引用。初出茅廬,學藝不精,有不足之處還望大家不吝賜教。
tensorflow 學習專欄(六):使用卷積神經網路(CNN)在mnist資料集上實現分類
卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。卷積神經網路CNN的結構一般包含這幾個層:輸入層:用於資料的輸入卷積層:使用卷積核進行特徵提取和
五、改進神經網路的學習方法(1):交叉熵代價函式
本部落格主要內容為圖書《神經網路與深度學習》和National Taiwan University (NTU)林軒田老師的《Machine Learning》的學習筆記,因此在全文中對它們多次引用。初出茅廬,學藝不精,有不足之處還望大家不吝賜教。
深度學習R(1):從零開始建立完全連線的神經網路
作者:PENG ZHAO 我要感謝Feiwen, Neil和所有其他的技術評論家和讀者,他們為本文提出了寶貴的意見和建議。 背景 深度神經網路(DNN)近年來取得了在影象識別、自然語言處理和自動駕駛領域取得了巨大成就,如圖1所示,從2012至2015
Unity3D之Mecanim動畫系統學習筆記(六):使用腳本控制動畫
ont nim 復制代碼 info rip esc enter machine images 控制人物動畫播放 這裏我重新弄了一個簡單的場景和新的Animator Controller來作為示例。 下面先看看Animator Controller的配置: 人物在站
.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移
ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是
java學習筆記(六):變量類型
animal 單獨使用 div 位置 fin strong pub 局部變量 變量聲明 java一共三種變量: 局部變量(本地變量):方法調用時創建,方法結束時銷毀 實例變量(全局變量):類創建時創建,類銷毀時銷毀 類變量(靜態變量):程序啟動是創建,程序銷毀時銷毀
javaweb學習筆記(六):HTML
目錄 1.HTML相關概念 2.主要標籤 2.1頭資訊 2.2文字標籤 2.3字元實體 2.4媒體標籤 2.5連結標籤 2.6影象標籤 2.7表格標籤 2.8框架標籤 2.9表單標籤 1.HTML相關概念 軟體的結構:
學習筆記(六):使用隨機森林演算法檢測FTP暴力破解
1.資料蒐集: 載入ADFA-LD中正常資料 定義遍歷目錄下檔案 從攻擊資料中篩選出和FTP暴力破解有關的資料 &n
機器學習筆記(六):KNN分類器
1 KNN演算法 1.1 KNN演算法簡介 KNN(K-Nearest Neighbor)工作原理:存在一個樣本資料集合,也稱為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類對應的關係。輸入沒有標籤的資料後,將新資料中的每個特徵與樣本集中資料對應的特