AI初識:參數初始化-深度學習成功的開始

2021-02-13 極市平臺

加入極市專業CV交流群,與6000+來自騰訊,華為,百度,北大,清華,中科院等名企名校視覺開發者互動交流!更有機會與李開復老師等大牛群內互動!

同時提供每月大咖直播分享、真實項目需求對接、乾貨資訊匯總,行業技術交流點擊文末「閱讀原文」立刻申請入群~

作者:全能言有三

授權轉載自公眾號:有三AI

【導讀】神經網絡要優化一個非常複雜的非線性模型,而且基本沒有全局最優解,初始化在其中扮演著非常重要的作用。尤其在沒有BN等技術的早期,它直接影響模型能否收斂,沒有好的初始化的深度學習模型訓練起來會很難。

2006年Hinton等人在science期刊上發表了論文「Reducing the dimensionality of data with neural networks」,揭開了新的訓練深層神經網絡算法的序幕。

利用無監督的RBM網絡來進行預訓練,進行圖像的降維,取得比PCA更好的結果,通常這被認為是深度學習興起的開篇

這麼看來,是因為好的初始化方法的出現,才有了深層神經網絡工程化落地的可能性。

好的初始化應該滿足以下兩個條件:

(1) 讓神經元各層激活值不會出現飽和現象;

(2) 各層激活值也不能為0。

也就是激活值不要太大,也不要太小,應該剛剛好,當然這還只是最基本的要求。

我們都知道在早期,sigmoid激活函數是多層感知器模型的標配,上面這篇文章同樣也是用sigmoid激活函數,沒有那麼多問題,是因為使用了預訓練。

如果不使用預訓練會如何?在Xavier Glorot和Yoshua Bengio提出xavier初始化方法的論文【1】中就對不同的激活函數使用不同的數據集做過實驗。

上面是一個四層的神經網絡在sigmoid函數激活下的訓練過程,可以看到最深的layer4層剛開始的時候很快就進入了飽和區域(激活值很低),其他幾層則比較平穩,在訓練的後期才能進行正常的更新。

為什麼會這樣呢?網絡中有兩類參數需要學習,一個是權重,一個是偏置。對於上面的結果作者們提出了一個假設,就是在網絡的學習過程中,偏置項總是學的更快,網絡真正的輸出就是直接由layer4決定的,輸出就是softmax(b+Wh)。既然偏置項學的快,那Wh就沒有這麼重要了,所以激活值可以低一點。

解釋雖然比較牽強,但是畢竟實驗結果擺在那裡,從tanh函數的激活值來看會更直觀。

這個圖有個特點是,0,1和-1的值都不少,而中間段的就比較少。在0值,逼近線性函數,它不能為網絡的非線性能力作出貢獻。對於1,-1,則是飽和區,沒有用。

1、全零初始化和隨機初始化

如果神經元的權重被初始化為0, 在第一次更新的時候,除了輸出之外,所有的中間層的節點的值都為零。一般神經網絡擁有對稱的結構,那麼在進行第一次誤差反向傳播時,更新後的網絡參數將會相同,在下一次更新時,相同的網絡參數學習提取不到有用的特徵,因此深度學習模型都不會使用0初始化所有參數。

而隨機初始化就是搞一些很小的值進行初始化,實驗表明大了就容易飽和,小的就激活不動,再說了這個沒技術含量,不必再討論。

2.標準初始化

對於均勻分布,X~U(a,b),概率密度函數等於:

它的期望等於0,方差等於(b-a)^2/12,如果b=1,a=-1,就是1/3。

下面我們首先計算一下,輸出輸入以及權重的方差關係公式:

如果我們希望每一層的激活值是穩定的,w就應該用n的平方根進行歸一化,n為每個神經元的輸入數量。

所以標準的初始化方法其權重參數就是以下分布:

它保證了參數均值為0,方差為常量1/3,和網絡的層數無關。

                                 

3.Xavier初始化

首先有一個共識必須先提出:神經網絡如果保持每層的信息流動是同一方差,那麼會更加有利於優化。不然大家也不會去爭先恐後地研究各種normalization方法。

不過,Xavier Glorot認為還不夠,應該增強這個條件,好的初始化應該使得各層的激活值和梯度的方差在傳播過程中保持一致,這個被稱為Glorot條件。

如果反向傳播每層梯度保持近似的方差,則信息能反饋到各層。而前向傳播激活值方差近似相等,有利於平穩地學習。

當然為了做到這一點,對激活函數也必須作出一些約定。

(1) 激活函數是線性的,至少在0點附近,而且導數為1。

(2) 激活值關於0對稱。

這兩個都不適用於sigmoid函數和ReLU函數,而適合tanh函數。

要滿足上面的兩個條件,就是下面的式子。

推導可以參考前面標準初始化的方法,這裡的ni,ni+1分別就是輸入和輸出的神經元個數了,因為輸入輸出不相等,作為一種權衡,文中就建議使用輸入和輸出的均值來代替。

再帶入前面的均勻分布的方差(b-a)^2/12,就得到了對於tanh函數的xavier初始化方法。

下面這兩個圖分別是標準初始化和xavier初始化帶來的各層的反傳梯度方差,可以看出xavier確實保持了一致性。


4.He初始化

Xavier初始化雖然美妙,但它是針對tanh函數設計的,而激活函數現在是ReLU的天下,ReLU只有一半的激活,另一半是不激活的,所以前面的計算輸入輸出的方差的式子多了一個1/2,如下。

因為這一次沒有使用均勻初始化,而是使用了正態分布,所以對下面這個式子:

綜上,對於兩大最經典的激活函數,各自有了對應的初始化方法。雖然後面還提出了一些其他的初始化方法,但是在我們這個系列中就不再詳述了。

初始化這個問題明顯比較麻煩,不然大家也不會這麼喜歡用pretrained模型了。

從前面我們可以看到,大家努力的方向有這麼幾個。

(1) 預訓練啊。

機智地一比,甩鍋給別人,😄。

(2) 從激活函數入手,讓梯度流動起來不要進入飽和區,則什麼初始化咱們都可以接受。

這其實就要回到上次我們說的激活函數了,ReLU系列的激活函數天生可以緩解這個問題,反過來,像何凱明等提出的方法,也是可以反哺激活函數ReLU。

(3) 歸一化,讓每一層的輸入輸出的分布比較一致,降低學習難度。

回想一下,這不就是BN幹的活嗎?所以才會有了BN之後,初始化方法不再需要小心翼翼地選擇。假如不用BN,要解決這個問題有幾個思路,我覺得分為兩派。

首先是理論派,就是咱們從理論上分析出設計一個怎麼樣的函數是最合適的。

對於Sigmoid等函數,xavier設計出了xavier初始化方法,對於ReLU函數,何凱明設計了he初始化方法。

在此之上,有研究者分別針對零點平滑的激活函數和零點不平滑的激活函數提出了統一的框架,見文【2】,比如對於sigmoid,tanh等函數,方差和導數的關係如此。

然後是實踐派,在訓練的時候手動將權重歸一化的,這就是向歸一化方法靠攏。

[1] Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural networks[C]//Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010: 249-256.

[2] Kumar S K. On weight initialization in deep neural networks[J]. arXiv preprint arXiv:1704.08863, 2017.

[3] Mishkin D, Matas J. All you need is a good init[J]. arXiv preprint arXiv:1511.06422, 2015.

-完-

點擊左下角閱讀原文」,即可申請加入極市目標跟蹤、目標檢測、工業檢測、人臉方向、視覺競賽等技術交流群,更有每月大咖直播分享、真實項目需求對接、乾貨資訊匯總,行業技術交流,一起來讓思想之光照的更遠吧~

△長按關注極市平臺

覺得有用麻煩給個在看啦~  

相關焦點

  • 吳恩達深度學習課補充教程:交互式demo助你理解神經網絡初始化
    初始化對深度神經網絡的收斂有重要影響。優秀的初始化模式可以加速訓練,但是需要小心操作以避免常見的陷阱。deeplearning.ai 最新上線了 AI Notes 欄目,以長文的形式作為《深度學習專項課程》的補充。其具備交互式的 demo,有助於讀者輕鬆掌握深度學習基礎概念。AI Notes 的第一篇教程就是「初始化神經網絡」。
  • 吳恩達深度學習課最新補充教程:交互式demo助你輕鬆理解神經網絡初始化
    deeplearning.ai 最新上線了 AI Notes 欄目,以長文的形式作為《深度學習專項課程》的補充。其具備交互式的 demo,有助於讀者輕鬆掌握深度學習基礎概念。AI Notes 的第一篇教程就是「初始化神經網絡」。這篇教程共包括四部分:有效初始化的重要性、梯度爆炸或消失問題、什麼是恰當的初始化,以及 Xavier 初始化的數學證明。1.
  • 如何有效地對神經網絡參數進行初始化
    神經網絡的初始化是訓練流程的重要基礎環節,會對模型的性能、收斂性、收斂速度等產生重要的影響。本文是deeplearning.ai的一篇技術博客,文章指出,對初始化值的大小選取不當,  可能造成梯度爆炸或梯度消失等問題,並提出了針對性的解決方法。 初始化會對深度神經網絡模型的訓練時間和收斂性產生重大影響。
  • 吳恩達深度學習又開新課啦!
    在這門課中,你將學習深度學習的基礎,理解如何構建神經網絡,並且學習如何領導一個成功的機器學習項目。你將學習卷積神經網絡、RNNs、LSTM、Adam、Dropout、BatchNorm、Xavier/He 初始化等等。你將從醫療保健、自動駕駛、手語閱讀、音樂生成和自然語言處理等方面進行案例研究。你不僅能掌握理論知識,還能知道它如何應用到工業領域。
  • 從頭開始構建最先進的深度學習模型
    導讀:近日,Fast.ai 發布一門新課程——從零開始學深度學習(Deep Learning from the Foundations),該課程由 Jeremy Howard 教授,展示了如何從頭開始構建最先進的深度學習模型。
  • 吳恩達深度學習筆記(37)-神經網絡的權重初始化再解析
    神經網絡的權重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)上節課,我們學習了深度神經網絡如何產生梯度消失和梯度爆炸問題,最終針對該問題,我們想出了一個不完整的解決方案,雖然不能徹底解決問題,卻很有用,有助於我們為神經網絡更謹慎地選擇隨機初始化參數
  • Andrew NG深度學習專業化課程介紹
    本專項課程介紹    如果你想了解和學習AI,這個專業化課程將可以幫助你。深度學習是技術中最受追捧的技能之一。我們將幫助您成為擅長深度學習的專業者。    在五個課程中,您將學習深度學習的基礎,了解如何構建神經網絡,並學習如何成功領導的機器學習項目。
  • 這裡有一份深度學習(.ai)詞典
    在開始閱讀前,請自問自答:什麼是Adam、ReLU、YOLO?什麼是AdaGrad、Dropout、Xavier Initialization?如果發現這很困難,請跟隨Jan Zawadzki的腳步,有條理地去回顧自己的記憶碎片。本文旨在解釋深度學習的一些常用術語,尤其是吳恩達在deeplearning.ai的Coursera課程中會頻繁提到的重要詞彙。
  • 《神經網絡和深度學習》系列文章二十八:權重初始化
    使用神經網絡識別手寫數字反向傳播算法是如何工作的改進神經網絡的學習方法改進神經網絡的學習方式交叉熵損失函數用交叉熵解決手寫數字識別問題交叉熵意味著什麼?它從哪裡來?Softmax過擬合正則化為什么正則化能夠降低過擬合?
  • 從零開始深度學習第14講:CNN經典論文研讀之Le-Net5及其TensorFlow實現
    從本次筆記開始,筆者在深度學習筆記中會不定期的對 CNN 發展過程中的經典論文進行研讀並推送研讀筆記。今天筆者就和大家一起學習卷積神經網絡和深度學習發展歷史上具有奠基性的經典論文之一的關於 LeNet-5 網絡一文。
  • 從2019 AI頂會最佳論文,看深度學習的理論基礎
    在 ICLR 2019 最佳論文 [3] 中,MIT 的研究者提出的 Lottery Ticket Hypothesis 非常有意思,它表示如果某些參數在模型中很重要,那麼開始訓練之前就是重要的。換而言之,神經網絡初始化後就有個子網絡,訓練這個子網絡能獲得整個網絡相近的性能,這樣的子結構可以稱為 winning tickets。
  • 使用Python從頭開始實現深度學習庫
    理解深度學習平臺基本構建基礎的初學者指南。深度學習已在短時間內從簡單的神經網絡演變為非常複雜的架構。為了支持這種快速擴展,在此過程中開發了許多不同的深度學習平臺和庫。這些庫的主要目標之一是提供用於構建和訓練深度學習模型的易於使用的界面,使用戶可以將更多的精力放在手頭的任務上。
  • 被吳恩達新開的深度學習課程刷屏?我們幫你做測評
    時僅僅曝光了一個logo和域名,頗為神秘,而就在昨天深夜,吳恩達發布博客稱,其初創公司deeplearning.ai將通過 Coursera 提供深度學習的最新在線課程。 「深度學習的基礎,明白如何建立神經網絡,學習如何做一項成功的機器學習項目。你會學到關於卷積網絡、循環神經網絡、長短時記憶網絡、Adam、Dropout、BatchNorm、Xavier/He 初始化等知識。
  • 資源 | 吳恩達斯坦福CS230深度學習課程全套資料放出(附下載)
    吳恩達老師對斯坦福CS230深度學習課程資源進行開放了,大家都知道吳恩達老師最出名的是他在coursera的機器學習課程,可以說讓很多剛開始接觸機器學習(ML)的小白入門該領域。最近吳恩達在斯坦福又開了一門學分課,這門課涉及到深度學習的基礎知識、神經網絡構建,以及如何完成一個成功的機器學習項目。具體將涉及卷積網絡,RNNs,LSTM,Adam,Dropout,BatchNorm,Xavier / He初始化等,還提供醫療,自動駕駛,手語閱讀,音樂創作和自然語言處理等多領域的案例研究。
  • 機器之心專訪吳恩達,深度學習課程項目Deeplearning.ai正式發布
    所以,我認為讓深度學習社區發展壯大的最好方式就是創造更好的深度學習課程,讓越來越多的人接觸深度學習。據我所知,我之前的機器學習課程——也是全世界最熱門的機器學習課程,目前已經惠及了超過 180 萬人。而在 Deeplearning.ai,我們致力於讓更多人能夠獲得有關機器學習的課程。我曾經說過,AI 是新電力,我相信人工智慧將在未來改變各行各業。
  • 深度強化學習-深度Q網絡(DQN)介紹
    在學習過程中,智能體更新Q(S,A)表(當回合結束時,任務完成,目標達到)。Q學習算法通過以下步驟實現:1、用隨機數初始化Q(S,A)表。知道了智能體所處的環境的複雜性(狀態數量,連續控制),標準的、定義明確的強化學習Q表就得被深度神經網絡(Q網絡)取代了,後者可以把環境狀態映射為智能體動作(非線性逼近)。網絡架構,網絡超參數的選擇以及學習都在訓練階段(Q網絡權重的學習)中完成。DQN允許智能體探索非結構化的環境並獲取知識,經過時間積累,他們可以模仿人類的行為。
  • PyTorch  深度學習新手入門指南
    ,這篇文章是為想開始用pytorch來進行深度學習項目研究的人準備的。  開始設置  步驟1:硬體設置:深度學習模型總是伴隨著大量的數據。顯然,GPU是必須的。有時,當模型具有 LSTM 層時,需要初始化隱藏圖層的功能。同樣,如果你嘗試構建玻爾茲曼機時,則需要對隱藏節點和可見節點進行採樣。因此,可以在我們的網絡類裡創建和使用新的成員函數。步驟5:類的參數:使用類構建網絡時,請確保使用的是最小值或沒有硬編碼值。初始化類時,可以忽略學習速率、隱藏圖層的大小。
  • ...Java工程師轉型AI的秘密法寶——深度學習框架Deeplearning4j...
    雷鋒網AI研習社按:深度學習是人工智慧發展最為迅速的領域之一,Google、Facebook、Microsoft等巨頭都圍繞深度學習重點投資了一系列新興項目,他們也一直在支持一些開源深度學習框架。目前研究人員使用的深度學習框架有 TensorFlow、Torch 、Caffe、Theano、Deeplearning4j等,而Deeplearning4j是為數不多以Java/JVM為基礎,能與Apache Spark無縫結合,支持CPU/GPU集群分布式計算的開源框架。本文就來為大家詳細介紹一下深度學習框架Deeplearning4j的重要組件,不同環境下的操作用法及實例分享。
  • 揭秘深度學習成功的數學原因:從全局最優性到學習表徵不變性
    然而,由於黑箱的存在,這種成功一度讓機器學習理論學家頗感不解。本文的目的正是要揭示深度學習成功的奧秘。通過圍繞著深度學習的三個核心要素——架構、正則化技術和優化算法,並回顧近期研究,作者為深層網絡的若干屬性,如全局最優性、幾何穩定性、學習表徵不變性,提供了一個數學證明。
  • 364 頁 PyTorch 版《動手學深度學習》pdf分享(全中文,支持 Jupyter 運行)
    《動手學深度學習》是今年6月剛出版的新書,是一本面向中文讀者的能運行、可討論的深度學習教科書。同時覆蓋深度學習的方法和實踐,不僅從數學的角度闡述深度學習的技術與應用,還包含可運行的代碼,為讀者展示如何在實際中解決問題。主要面向希望了解深度學習,特別是對實際使用深度學習感興趣的大學生、工程師和研究人員。