国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

構建神經網絡的經驗和教訓總結

汽車玩家 ? 來源:AI公園 ? 作者:Matt H and Daniel R ? 2020-05-04 11:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

導讀

從成千上萬小時的模型訓練中累計的經驗和教訓。

在我們的機器學習實驗室,我們在許多高性能的機器已經積累了成千上萬個小時的訓練。然而,并不是只有計算機在這個過程中學到了很多東西:我們自己也犯了很多錯誤,修復了很多錯誤。

在這里,我們根據我們的經驗(主要基于 TensorFlow)提出了一些訓練深度神經網絡的實用技巧。有些建議對你來說可能是顯而易見的,但對我們中的某個人來說卻不是。其他的建議可能不適用,甚至對你的特定任務來說是不好的建議:謹慎使用!

我們承認這些都是眾所周知的方法。我們也站在巨人的肩膀上!我們這篇文章的目的僅僅是對它們進行高層次的總結,以便在實踐中使用。

通用 Tips

使用 ADAM 優化器。它真的很好用。比起傳統的優化方法,如原始的梯度下降,我更喜歡它。注意:如果要保存和恢復權重,記得在設置好AdamOptimizer之后設置Saver ,因為 ADAM 也有需要恢復的狀態(即每個權重的學習率)。

ReLU 是最好的非線性(激活函數)。這有點像說 Sublime 是最好的文本編輯器。但實際上,ReLUs 是快速的、簡單的,而且令人驚訝的是,它們能夠工作,并且沒有梯度衰減的問題。雖然 sigmoid 是一種常見的教科書式激活函數,但它不能很好地通過 DNNs 傳播梯度。

不要在輸出層使用激活函數。這應該是顯而易見的,但這是一個很容易犯的錯誤,如果你用一個共享函數構建每個層:一定要在輸出處關閉激活函數。

一定要在每一層添加一個偏差。這是 ML 101:偏差本質上是將飛機轉換成最佳位置。在y=mx+b中,b 是偏差,允許直線向上或向下移動到“最合適”的位置。

使用 variance-scaled 初始化。在 Tensorflow 中,就像tf.contrib.layers.variance_scaling_initializer()。在我們的經驗中,這比常規的高斯分布、截斷的正太分布和 Xavier 更能泛化/縮放。粗略地說, variance scaling 初始化根據每一層的輸入或輸出的數量來調整初始隨機權重的方差(TensorFlow 中的默認值是輸入的數量),從而幫助信號更深入地傳播到網絡中,而不需要額外的“技巧”,比如 clipping 或 batch normalization。Xavier 是很相似的方法,但是 Xavier 的所有層的方差幾乎相同,在那些層的形狀變化很大的網絡(通常是卷積網絡)中,可能不能很好地處理每一層相同的變化。

白化(歸一化)你的輸入數據。訓練時,減去數據集的均值,然后除以其標準差。你需要向各個方向拉伸和拉伸的幅度越少,你的網絡學習就會越快、越容易。保持輸入數據的均值以不變的方差為中心有助于解決這個問題。你還必須對每個測試輸入執行相同的標準化,因此要確保你的訓練集與真實數據相似。

以合理保留其動態范圍的方式縮放輸入數據。這與歸一化有關,但應該在歸一化之前進行。例如,實際范圍為[0,140000000]的數據“x”通常可以用tanh(x)或tanh(x/C)來處理,其中 C是某個常數,它拉伸曲線以適應 tanh 函數動態的、傾斜的部分中的更多輸入范圍。特別是在輸入數據的一端或兩端可能是無界的情況下,神經網絡在(0,1)之間可以更好地學習。

不要費心降低學習速度(通常)。學習率下降在 SGD 中更為常見,但 ADAM 自然地處理了這個問題。如果你絕對想要榨干每一盎司的表現:在訓練結束后短時間內降低學習速度,你可能會看到一個突然的,非常小的誤差下降,然后它會再次變平。

如果你的卷積層有 64 或 128 個濾波器,那可能就足夠了。特別是對于深度網絡。實際上,128 已經很多了。如果你已經有了大量的濾波器,那么添加更多的濾波器可能不會改善性能。

池化用于轉換不變性。池化本質上是讓網絡學習圖像“那部分”的“大意”。例如,最大池可以幫助卷積網絡對圖像中特征的平移、旋轉和縮放變得健壯。

調試神經網絡

如果你的網絡沒有學習(意思是:在訓練過程中,損失沒有收斂,或者你沒有得到你期望的結果),試試下面的建議:

過擬合!如果你的網絡沒有在學習,首先要做的就是在單個數據樣本上讓網絡過擬合。這樣的話,準確度應該是 100%或 99.99%,或者接近于 0 的誤差。如果你的神經網絡不能對單個數據點進行過擬合,那么可能是體系結構出現嚴重問題,但問題可能很微妙。如果你可以過擬合一個數據點,但是在更大的集合上的訓練仍然不收斂,請嘗試以下建議。

降低學習率。你的網絡學習速度會變慢,但它可能會進入一個以前無法進入的最小值,因為之前它的步長太大了。(直覺上,當你真正想進入溝底時,你的錯誤是最低的,想象一下跨過路邊的水溝。)

提高學習率。這將加快訓練,幫助收緊反饋回路,這意味著你會更早知道你的網絡是否在工作。雖然網絡應該更快地收斂,但它的結果可能不會很好,而且“收斂”的過程實際上可能會跳來跳去。(使用 ADAM 的時候,我們發現~0.001 是一個非常好的值,在許多實驗中都是這樣。)

減小 minibatch 大小。將 minibatch 大小減少到 1 可以提供與權重更新相關的更細粒度的反饋,你可以使用 TensorBoard(或其他調試/可視化工具)報告這些更新。

去掉 batch normalization。隨著批大小減少到 1,這樣做可以梯度消失或梯度爆炸。幾個星期以來,我們的網絡都沒有收斂,當我們刪除了 batch normalization 之后,我們意識到在第二次迭代時輸出都是 NaN。Batch norm 的作用是給需要止血帶的東西貼上創可貼。它有它用的位置,但只有在你網絡是沒有 bug 的情況下才可以用。

增加 minibatch 大小。更大的 minibatch — 如果可以的話,使用整個訓練集 — 減少梯度更新中的方差,使每次迭代更精確。換句話說,讓權重更新的方向是正確的。但是!它的有用性有一個有效的上限,物理內存的限制。通常,我們發現這不如前兩個建議那么有用,這兩個建議將 minibatch 大小減少到 1 并刪除 batch normalization。

檢查一下 reshaping。劇烈的 reshaping(比如改變圖像的 X、Y 維度)會破壞空間的局部性,使得網絡更難學習,因為它也必須學習 reshaping。(自然景觀變得支離破碎。自然特征在空間上是局部的,這就是為什么 conv 網如此有效的原因。如果使用多個圖像/通道進行 reshape,要特別小心,使用numpy.stack()進行適當的對齊。

仔細檢查你的損失函數。如果使用復合函數,嘗試將其簡化為 L1 或 L2。我們發現 L1 對異常值的敏感度較低,當遇到有噪聲的批處理或訓練點時,L1 的調整幅度較小。

仔細檢查你的可視化效果,如果適用的話。你的可視化庫(matplotlib, OpenCV 等)是調整數值的比例,還是剪切它們?還可以考慮使用一種感覺上一致的配色方案。

用一個例子來學習一下

為了使上面描述的過程更接近實際,這里有一些損失圖(通過 TensorBoard 畫出來的),用于我們構建的卷積神經網絡的一些實際回歸實驗。

起初,這個網絡根本沒有學習:

構建神經網絡的經驗和教訓總結

我們嘗試對值進行 clipping,以防止它們超出界限:

構建神經網絡的經驗和教訓總結

嗯。看看這些沒做平滑的值有多瘋狂。學習率太高?我們試著降低學習速度,只對一個輸入進行訓練:

構建神經網絡的經驗和教訓總結

你可以看到學習率的最初幾個變化發生在什么地方(大約在第 300 步和第 3000 步)。顯然,我們衰減得太快了。所以,在衰減之前給它更多的時間,它可以做得更好:

構建神經網絡的經驗和教訓總結

你可以看到我們在 2000 步和 5000 步時衰減。這個更好,但仍然不是很好,因為它沒有趨近于 0。

然后,我們禁用了學習率衰減,并嘗試將值移動到一個更窄的范圍內,不過不是通過輸入 tanh。雖然這明顯使錯誤值低于 1,但我們仍然不能過擬合訓練集:

構建神經網絡的經驗和教訓總結

通過刪除 batch normalization,我們發現,在經過一兩次迭代之后,網絡可以快速輸出 NaN。我們禁用了 batch normalization,并將初始化更改為 variance scaling。這些改變了一切!我們能夠過擬合我們的測試集,只是一個或兩個輸入。雖然底部的圖表蓋住了 Y 軸,但初始誤差值遠遠高于 5,表明誤差減少了近 4 個數量級:

構建神經網絡的經驗和教訓總結

上面的圖表非常平滑,但是你可以看到它與測試輸入過擬合的速度非常快,隨著時間的推移,整個訓練集的損失降到了 0.01 以下。這并沒有降低學習率。在學習率下降一個數量級后,我們繼續訓練,得到了更好的結果:

構建神經網絡的經驗和教訓總結

這些結果好多了!但是如果我們以幾何的方式衰減學習率而不是把訓練分成兩部分呢?

將每一步的學習率乘以 0.9995,結果并不好:

構建神經網絡的經驗和教訓總結

大概是因為衰減太快了,乘數為 0.999995 的情況要好一些,但結果幾乎等于完全不衰減。我們從這個特殊的實驗序列中得出結論,batch normalization 隱藏了糟糕的初始化所導致的急劇變化的梯度,降低學習率對 ADAM 優化器并沒有特別的幫助,除了在最后可能會故意降低。與 batch normalization 一起,clipping 只是掩蓋了真正的問題。我們還通過將高方差輸入值放入 tanh 來處理它們。

我們希望隨著你對構建深度神經網絡越來越熟悉,你會發現這些基本技巧非常有用。通常,只是一些簡單的事情就能改變一切。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4838

    瀏覽量

    107767
  • ADAM
    +關注

    關注

    0

    文章

    15

    瀏覽量

    10086
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡的實現。什么是神經網絡神經網絡的核心思想是模仿生物神經系統的結構,特別是大腦中神經
    的頭像 發表于 12-17 15:05 ?325次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    自動駕駛中常提的卷積神經網絡是個啥?

    在自動駕駛領域,經常會聽到卷積神經網絡技術。卷積神經網絡,簡稱為CNN,是一種專門用來處理網格狀數據(比如圖像)的深度學習模型。CNN在圖像處理中尤其常見,因為圖像本身就可以看作是由像素排列成的二維網格。
    的頭像 發表于 11-19 18:15 ?2076次閱讀
    自動駕駛中常提的卷積<b class='flag-5'>神經網絡</b>是個啥?

    CNN卷積神經網絡設計原理及在MCU200T上仿真測試

    數的提出很大程度的解決了BP算法在優化深層神經網絡時的梯度耗散問題。當x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當x&lt;0 時,該層的輸出為0。 CNN
    發表于 10-29 07:49

    NMSIS神經網絡庫使用介紹

    NMSIS NN 軟件庫是一組高效的神經網絡內核,旨在最大限度地提高 Nuclei N 處理器內核上的神經網絡的性能并最??大限度地減少其內存占用。 該庫分為多個功能,每個功能涵蓋特定類別
    發表于 10-29 06:08

    構建CNN網絡模型并優化的一般化建議

    通過實踐,本文總結構建CNN網絡模型并優化的一般化建議,這些建議將會在構建高準確率輕量級CNN神經網絡模型方面提供幫助。 1)避免單層
    發表于 10-28 08:02

    在Ubuntu20.04系統中訓練神經網絡模型的一些經驗

    本帖欲分享在Ubuntu20.04系統中訓練神經網絡模型的一些經驗。我們采用jupyter notebook作為開發IDE,以TensorFlow2為訓練框架,目標是訓練一個手寫數字識別的神經網絡
    發表于 10-22 07:03

    CICC2033神經網絡部署相關操作

    在完成神經網絡量化后,需要將神經網絡部署到硬件加速器上。首先需要將所有權重數據以及輸入數據導入到存儲器內。 在仿真環境下,可將其存于一個文件,并在 Verilog 代碼中通過 readmemh 函數
    發表于 10-20 08:00

    液態神經網絡(LNN):時間連續性與動態適應性的神經網絡

    1.算法簡介液態神經網絡(LiquidNeuralNetworks,LNN)是一種新型的神經網絡架構,其設計理念借鑒自生物神經系統,特別是秀麗隱桿線蟲的神經結構,盡管這種微生物的
    的頭像 發表于 09-28 10:03 ?1212次閱讀
    液態<b class='flag-5'>神經網絡</b>(LNN):時間連續性與動態適應性的<b class='flag-5'>神經網絡</b>

    神經網絡的并行計算與加速技術

    隨著人工智能技術的飛速發展,神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而,神經網絡模型的復雜度和規模也在不斷增加,這使得傳統的串行計算方式面臨著巨大的挑戰,如計算速度慢、訓練時間長等
    的頭像 發表于 09-17 13:31 ?1126次閱讀
    <b class='flag-5'>神經網絡</b>的并行計算與加速技術

    基于神經網絡的數字預失真模型解決方案

    在基于神經網絡的數字預失真(DPD)模型中,使用不同的激活函數對整個系統性能和能效有何影響?
    的頭像 發表于 08-29 14:01 ?3471次閱讀

    無刷電機小波神經網絡轉子位置檢測方法的研究

    摘要:論文通過對無刷電機數學模型的推導,得出轉角:與三相相電壓之間存在映射關系,因此構建了一個以三相相電壓為輸人,轉角為輸出的小波神經網絡來實現轉角預測,并采用改進遺傳算法來訓練網絡結構與參數,借助
    發表于 06-25 13:06

    神經網絡專家系統在電機故障診斷中的應用

    摘要:針對傳統專家系統不能進行自學習、自適應的問題,本文提出了基于種經網絡專家系統的并步電機故障診斷方法。本文將小波神經網絡和專家系統相結合,充分發揮了二者故障診斷的優點,很大程度上降低了對電機
    發表于 06-16 22:09

    神經網絡RAS在異步電機轉速估計中的仿真研究

    眾多方法中,由于其結構簡單,穩定性好廣泛受到人們的重視,且已被用于產品開發。但是MRAS仍存在在低速區速度估計精度下降和對電動機參數變化非常敏感的問題。本文利用神經網絡的特點,使估計更為簡單、快速
    發表于 06-16 21:54

    基于FPGA搭建神經網絡的步驟解析

    本文的目的是在一個神經網絡已經通過python或者MATLAB訓練好的神經網絡模型,將訓練好的模型的權重和偏置文件以TXT文件格式導出,然后通過python程序將txt文件轉化為coe文件,(coe
    的頭像 發表于 06-03 15:51 ?1210次閱讀
    基于FPGA搭建<b class='flag-5'>神經網絡</b>的步驟解析

    NVIDIA實現神經網絡渲染技術的突破性增強功能

    近日,NVIDIA 宣布了 NVIDIA RTX 神經網絡渲染技術的突破性增強功能。NVIDIA 與微軟合作,將在 4 月的 Microsoft DirectX 預覽版中增加神經網絡著色技術,讓開
    的頭像 發表于 04-07 11:33 ?1177次閱讀