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

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

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

3天內不再提示

機器學習模型切實可行的優化步驟

汽車玩家 ? 來源:AI公園 ? 作者:Cecelia Shao ? 2020-05-04 12:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

導讀

這篇文章提供了可以采取的切實可行的步驟來識別和修復機器學習模型的訓練、泛化和優化問題。

眾所周知,調試機器學習代碼非常困難。即使對于簡單的前饋神經網絡也是這樣,你經常會在網絡體系結構做出一些決定,重初始化和網絡優化——所有這些會都導致在你的機器學習代碼中出現bug。

正如Chase Roberts在一篇關于“How to unit test machine learning code”的優秀文章中所寫的,他遇到的麻煩來自于常見的陷阱:

代碼不會崩潰,不會引發異常,甚至不會變慢。

訓練網絡仍在運行,損失仍將下降。

幾個小時后,數值收斂了,但結果很差

那么我們該怎么做呢?

本文將提供一個框架來幫助你調試神經網絡:

從最簡單的開始

確認你的損失

檢查中間輸出和連接

對參數進行診斷

跟蹤你的工作

請隨意跳轉到特定的部分或通讀下面的內容!請注意:我們不包括數據預處理或特定的模型算法選擇。對于這些主題,網上有很多很好的資源。

1. 從最簡單的開始

一個具有復雜結構和正則化以及學習率調度程序的神經網絡將比一個簡單的網絡更難調試。我們在第一點上有點欺騙性,因為它與調試你已經構建的網絡沒有什么關系,但是它仍然是一個重要的建議!

從最簡單的開始:

首先建立一個更簡單的模型

在單個數據點上訓練模型

首先,構建一個更簡單的模型

首先,構建一個只有一個隱藏層的小型網絡,并驗證一切正常。然后逐步增加模型的復雜性,同時檢查模型結構的每個方面(附加層、參數等),然后再繼續。

在單個數據點上訓練模型

作為一個快速的完整性檢查,你可以使用一兩個訓練數據點來確認你的模型是否能夠過擬合。神經網絡應該立即過擬合,訓練精度為100%,驗證精度與你的模型隨機猜測相匹配。如果你的模型不能對這些數據點進行過擬合,那么要么是它太小,要么就是存在bug。

即使你已經驗證了模型是有效的,在繼續之前也可以嘗試訓練一個(或幾個)epochs。

2. 確認你的損失

你的模型的損失是評估你的模型性能的主要方法,也是模型評估的重要參數,所以你要確保:

損失適合于任務(對于多分類問題使用類別交叉熵損失或使用focal loss來解決類不平衡)

你的損失函數在以正確的尺度進行測量。如果你的網絡中使用了不止一種類型的損失,例如MSE、adversarial、L1、feature loss,那么請確保所有損失都按正確的順序進行了縮放

注意,你最初的損失也很重要。如果模型一開始就隨機猜測,檢查初始損失是否接近預期損失。在Stanford CS231n coursework中,Andrej Karpathy提出了以下建議:

在隨機表現上尋找正確的損失。確保在初始化小參數時得到預期的損失。最好先單獨檢查數據的loss(將正則化強度設置為零)。例如,對于使用Softmax分類器的CIFAR-10,我們期望初始損失為2.302,因為我們期望每個類的隨機概率為0.1(因為有10個類),而Softmax損失是正確類的負對數概率,因此:-ln(0.1) = 2.302。

對于二分類的例子,只需對每個類執行類似的計算。假設數據是20%的0和80%的1。預期的初始損失是- 0.2ln(0.5) - 0.8ln(0.5) = 0.693147。如果你的初始損失比1大得多,這可能表明你的神經網絡權重不平衡(即初始化很差)或者你的數據沒有標準化。

3. 檢查內部的輸出和連接

要調試神經網絡,通常了解神經網絡內部的動態以及各個中間層所起的作用以及這些中間層之間如何連接是很有用的。你可能會遇到以下錯誤:

梯度更新的表達式不正確

權重更新沒有應用

梯度消失或爆炸

如果梯度值為零,這可能意味著優化器中的學習率可能太小,或者你遇到了上面的錯誤#1,其中包含梯度更新的不正確的表達式。

除了查看梯度更新的絕對值之外,還要確保監視激活的大小、權重的大小和每個層的更新相匹配。例如,參數更新的大小(權重和偏差)應該是1-e3。

有一種現象叫做“死亡的ReLU”或“梯度消失問題”,ReLU神經元在學習了一個表示權重的大的負偏置項后,會輸出一個零。這些神經元再也不會在任何數據點上被激活。

你可以使用梯度檢查來檢查這些錯誤,通過使用數值方法來近似梯度。如果它接近計算的梯度,則正確地實現了反向傳播。

Faizan Shaikh描述了可視化神經網絡的三種主要方法:

初步方法- 向我們展示訓練模型整體結構的簡單方法。這些方法包括打印出神經網絡各層的形狀或濾波器以及各層的參數。

基于激活的方法- 在這些方法中,我們解碼單個神經元或一組神經元的激活情況,以直觀地了解它們在做什么

基于梯度的方法- 這些方法傾向于在訓練模型時操作由前向和后向傳遞形成的梯度(包括顯著性映射和類激活映射)。

有許多有用的工具可以可視化單個層的激活和連接,比如ConX和Tensorboard。

使用ConX生成的動態呈現可視化示例

4. 參數診斷

神經網絡有大量的參數相互作用,使得優化變得困難。請注意,這是一個活躍的研究領域,所以下面的建議只是簡單的出發點。

Batch size- 你希望batch size足夠大,能夠準確地估計錯誤梯度,但又足夠小,以便小批隨機梯度下降(SGD)能夠使你的網絡歸一化。小的batch size將導致學習過程以訓練過程中的噪聲為代價快速收斂,并可能導致優化困難。論文On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima描述了:

在實踐中已經觀察到,當使用一個較大的batch size時,模型的質量會下降,這可以通過它的泛化能力來衡量。我們研究了在大批量情況下泛化下降的原因,并給出了支持large-batch方法趨向于收斂于訓練和測試函數的sharp的極小值這一觀點的數值證據——眾所周知,sharp的極小值導致較差的泛化。相比之下,小batch size的方法始終收斂于平坦的最小值,我們的實驗支持一個普遍的觀點,即這是由于梯度估計中的固有噪聲造成的。

學習速率- 學習率過低將導致收斂速度慢或陷入局部最小值的風險,而學習速率過大導致優化分歧,因為你有跳過損失函數的更深但是更窄部分的風險。考慮將學習率策略也納入其中,以隨著訓練的進展降低學習率。CS231n課程有一大部分是關于實現退火學習率的不同技術。

梯度裁剪- 在反向傳播期間的通過最大值或最大范數對梯度進行裁剪。對于處理可能在上面的步驟3中遇到的任何梯度爆炸非常有用。

Batch normalization- Batch normalization用于對每一層的輸入進行歸一化,以解決內部協變量移位問題。如果你同時使用Dropout和Batch Norm,請確保在Dropout上閱讀下面的要點。

本文來自Dishank Bansal的”TensorFlow中batch norm的陷阱和訓練網絡的健康檢查“,里面包括了很多使用batch norm的常見錯誤。

隨機梯度下降(SGD)- 有幾種使用動量,自適應學習率的SGD,和Nesterov相比并沒有訓練和泛化性能上的優勝者。一個推薦的起點是Adam或使用Nesterov動量的純SGD。

正則化- 正則化對于構建可泛化模型至關重要,因為它增加了模型復雜度或極端參數值的代價。它顯著降低了模型的方差,而沒有顯著增加其偏差。如CS231n課程所述:

通常情況下,損失函數是數據損失和正則化損失的總和(例如L2對權重的懲罰)。需要注意的一個危險是正則化損失可能會超過數據損失,在這種情況下,梯度將主要來自正則化項(它通常有一個簡單得多的梯度表達式)。這可能會掩蓋數據損失的梯度的不正確實現。

為了檢查這個問題,應該關閉正則化并獨立檢查數據損失的梯度。

Dropout- Dropout是另一種正則化你的網絡,防止過擬合的技術。在訓練過程中,只有保持神經元以一定的概率p(超參數)活動,否則將其設置為零。因此,網絡必須在每個訓練批中使用不同的參數子集,這減少了特定參數的變化成為主導。

這里需要注意的是:如果您同時使用dropout和批處理規范化(batch norm),那么要注意這些操作的順序,甚至要同時使用它們。這仍然是一個活躍的研究領域,但你可以看到最新的討論:

來自Stackoverflow的用戶MiloMinderBinder:Dropout是為了完全阻斷某些神經元的信息,以確保神經元不相互適應。因此,batch norm必須在dropout之后進行,否則你將通過標準化統計之后的數據傳遞信息。”

來自arXiv:Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift — 從理論上講,我們發現,當我們將網絡狀態從訓練狀態轉移到測試狀態時,Dropout會改變特定神經單元的方差。但是BN在測試階段會保持其統計方差,這是在整個學習過程中積累的。當在BN之前的使用Dropout時,該方差的不一致性(我們將此方案命名為“方差漂移”)導致不穩定的推斷數值行為,最終導致更多的錯誤預測。

5. 跟蹤你的網絡

你很容易忽視記錄實驗的重要性,直到你忘記你使用的學習率或分類權重。通過更好的跟蹤,你可以輕松地回顧和重現以前的實驗,以減少重復的工作(也就是說,遇到相同的錯誤)。

然而,手工記錄信息對于多個實驗來說是很困難的。工具如Comet.ml可以幫助自動跟蹤數據集、代碼更改、實驗歷史和生產模型(這包括關于模型的關鍵信息,如超參數、模型性能指標和環境細節)。

你的神經網絡對數據、參數甚至版本中的細微變化都非常敏感,這會導致模型性能的下降。跟蹤你的工作是開始標準化你的環境和建模工作流的第一步。

機器學習模型切實可行的優化步驟

快速回顧

我們希望這篇文章為調試神經網絡提供了一個堅實的起點。要總結要點,你應該:

從簡單的開始— 先建立一個更簡單的模型,然后通過對幾個數據點的訓練進行測試

確認您的損失— 檢查是否使用正確的損失,并檢查初始損失

檢查中間輸出和連接— 使用梯度檢查和可視化檢查看圖層是否正確連接,以及梯度是否如預期的那樣更新

診斷參數— 從SGD到學習率,確定正確的組合(或找出錯誤的)

跟蹤您的工作— 作為基線,跟蹤你的實驗過程和關鍵的建模組件

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

    關注

    42

    文章

    4838

    瀏覽量

    107756
  • 機器學習
    +關注

    關注

    66

    文章

    8553

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    數據就緒型智能機器助力制造商釋放潛在價值

    在全球制造業加速向智能化轉型的背景下,企業普遍面臨提升運營效率、增強生產敏捷性的挑戰。為此,亞太地區已有約 93% 的制造商開始應用或正在評估需要應用的智能制造技術。然而,僅僅采集數據已不足以應對動態的市場需求,如何將數據轉化為切實可行的洞察成為關鍵。
    的頭像 發表于 03-02 11:44 ?326次閱讀

    強化學習會讓自動駕駛模型學習更快嗎?

    是一種讓機器通過“試錯”學會決策的辦法。與監督學習不同,監督學習是有人提供示范答案,讓模型去模仿;而強化學習不會把每一步的“正確答案”都告訴
    的頭像 發表于 01-31 09:34 ?641次閱讀
    強化<b class='flag-5'>學習</b>會讓自動駕駛<b class='flag-5'>模型</b><b class='flag-5'>學習</b>更快嗎?

    機器學習和深度學習中需避免的 7 個常見錯誤與局限性

    無論你是剛入門還是已經從事人工智能模型相關工作一段時間,機器學習和深度學習中都存在一些我們需要時刻關注并銘記的常見錯誤。如果對這些錯誤置之不理,日后可能會引發諸多麻煩!只要我們密切關注
    的頭像 發表于 01-07 15:37 ?189次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>和深度<b class='flag-5'>學習</b>中需避免的 7 個常見錯誤與局限性

    基于ETAS嵌入式AI工具鏈將機器學習模型部署到量產ECU

    AI在汽車行業的應用日益深化,如何將機器學習領域的先進模型(如虛擬傳感器)集成到ECU軟件中,已成為業界面臨的核心挑戰。
    的頭像 發表于 12-24 10:55 ?6103次閱讀
    基于ETAS嵌入式AI工具鏈將<b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>模型</b>部署到量產ECU

    芯行紀機器學習優化工具AmazeME-Place簡介

    布局(Placement)是芯片后端設計中最需要全局視角的步驟,它前置約束所有后續環節,直接決定了PPAC(Performance、Power、Area、Congestion)各項指標趨勢和設計目標實現的可行性。
    的頭像 發表于 08-13 14:11 ?3252次閱讀
    芯行紀<b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>優化</b>工具AmazeME-Place簡介

    超小型Neuton機器學習模型, 在任何系統級芯片(SoC)上解鎖邊緣人工智能應用.

    Neuton 是一家邊緣AI 公司,致力于讓機器 學習模型更易于使用。它創建的模型比競爭對手的框架小10 倍,速度也快10 倍,甚至可以在最先進的邊緣設備上進行人工智能處理。在這篇博文
    發表于 07-31 11:38

    FPGA在機器學習中的具體應用

    隨著機器學習和人工智能技術的迅猛發展,傳統的中央處理單元(CPU)和圖形處理單元(GPU)已經無法滿足高效處理大規模數據和復雜模型的需求。FPGA(現場可編程門陣列)作為一種靈活且高效的硬件加速平臺
    的頭像 發表于 07-16 15:34 ?2889次閱讀

    通過NVIDIA Cosmos模型增強機器人學習

    通用機器人的時代已經到來,這得益于機械電子技術和機器人 AI 基礎模型的進步。但目前機器人技術的發展仍面臨一個關鍵挑戰:機器人需要大量的訓練
    的頭像 發表于 07-14 11:49 ?1084次閱讀
    通過NVIDIA Cosmos<b class='flag-5'>模型</b>增強<b class='flag-5'>機器人學習</b>

    無法在NPU上推理OpenVINO?優化的 TinyLlama 模型怎么解決?

    在 NPU 上推斷 OpenVINO?優化的 TinyLlama 模型。 遇到的錯誤: get_shape was called on a descriptor::Tensor with dynamic shape
    發表于 07-11 06:58

    模型在半導體行業的應用可行性分析

    的應用,比如使用機器學習分析數據,提升良率。 這一些大模型是否真的有幫助 能夠在解決工程師的知識斷層問題 本人純小白,不知道如何涉足這方面 應該問什么大模型比較好,或者是看什么視頻能夠
    發表于 06-24 15:10

    邊緣計算中的機器學習:基于 Linux 系統的實時推理模型部署與工業集成!

    你好,旅行者!歡迎來到Medium的這一角落。在本文中,我們將把一個機器學習模型(神經網絡)部署到邊緣設備上,利用從ModbusTCP寄存器獲取的實時數據來預測一臺復古音頻放大器的當前健康狀況。你將
    的頭像 發表于 06-11 17:22 ?994次閱讀
    邊緣計算中的<b class='flag-5'>機器</b><b class='flag-5'>學習</b>:基于 Linux 系統的實時推理<b class='flag-5'>模型</b>部署與工業集成!

    【「# ROS 2智能機器人開發實踐」閱讀體驗】視覺實現的基礎算法的應用

    視覺巡線,展示了如何從數據采集、模型訓練到機器人部署的完整流程。 值得注意的是,深度學習模型的實時性對機器人計算資源提出了較高要求,
    發表于 05-03 19:41

    【「# ROS 2智能機器人開發實踐」閱讀體驗】機器人入門的引路書

    的限制和調控) 本書還有很多前沿技術項目的擴展 比如神經網絡識別例程,機器學習圖像識別的原理,yolo圖像追蹤的原理 機器學習訓練三大點: 先準備一個基本的
    發表于 04-30 01:05

    十大鮮為人知卻功能強大的機器學習模型

    本文轉自:QuantML當我們談論機器學習時,線性回歸、決策樹和神經網絡這些常見的算法往往占據了主導地位。然而,除了這些眾所周知的模型之外,還存在一些鮮為人知但功能強大的算法,它們能夠以驚人的效率
    的頭像 發表于 04-02 14:10 ?1094次閱讀
    十大鮮為人知卻功能強大的<b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>模型</b>

    Vgg16模型無法使用模型優化器重塑怎么解決?

    Vgg16 模型無法使用模型優化器重塑。
    發表于 03-06 06:29