衡阳派盒市场营销有限公司

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

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

3天內(nèi)不再提示

調(diào)試神經(jīng)網(wǎng)絡(luò)所遵循的五項原則

電子工程師 ? 來源:lp ? 2019-03-20 09:33 ? 次閱讀

很多情況下,研究人員會遇到一個問題:使用機器學習框架實現(xiàn)的神經(jīng)網(wǎng)絡(luò)可能與理論模型相去甚遠。驗證這款模型是否可靠,直接方式就是不斷修正和調(diào)參。例如,在 2018 年 8 月,谷歌大腦的 Ian Goodfellow 等人,通過引入由覆蓋性引導(dǎo)的模糊方法(coverage-guided fuzzing,CGF),推出了一款自動為神經(jīng)網(wǎng)絡(luò) debug 的開源庫 TensorFuzz。

想要調(diào)試機器學習模型其實并不容易,因為找 bug 這個過程需要付出的代價實在太高了。即便是對于相對簡單的前饋神經(jīng)網(wǎng)絡(luò),研究人員也需要經(jīng)常討論網(wǎng)絡(luò)架構(gòu)、權(quán)重初始化和網(wǎng)絡(luò)優(yōu)化等問題。

正如 Chase Robert 此前在 “如何最小化測試機器學習代碼” 的一篇文章中曾描述了這類問題:“神經(jīng)網(wǎng)絡(luò)會繼續(xù)訓(xùn)練,損失會持續(xù)減少;訓(xùn)練幾小時后會收斂,但效果卻很差……”

對此,在單一的工具之外,Cecelia Shao 通過提供一種思路以表達她對調(diào)試神經(jīng)網(wǎng)絡(luò)所遵循的五項原則:

從繁就簡

確認模型損失

檢查中間輸出和連接

診斷參數(shù)

追蹤工作

1. 從繁就簡

具有正規(guī)化和學習率(learning rate)調(diào)度器的復(fù)雜架構(gòu)的神經(jīng)網(wǎng)絡(luò),將單一神經(jīng)網(wǎng)絡(luò)更難調(diào)試。

首先,構(gòu)建一個相對簡單的模型:構(gòu)建一個具有單個隱藏層的小模型,并進行驗證;然后逐漸添加模型的復(fù)雜性,同時檢驗?zāi)P徒Y(jié)構(gòu)的每個層面(附加層、參數(shù)等)是否有效。

其次,在單個數(shù)據(jù)節(jié)點上訓(xùn)練模型:可以使用一兩個訓(xùn)練數(shù)據(jù)點(data point)以確認模型是否過度擬合。神經(jīng)網(wǎng)絡(luò)應(yīng)立即過度擬合,訓(xùn)練準確率為 100%,這表明模型符合;如果模型無法過度擬合這些數(shù)據(jù)點,就證明太小或存在 bug。

2. 確認模型損失

模型損失是評估模型性能的主要方式,也是模型設(shè)置重要參數(shù)以進行評估的依據(jù),因此需要確保:

模型損失適用于任務(wù)(使用分類交叉熵損失(cross-entropy los)進行多分類問題或使用 focal loss 以解決不平衡問題);

正確衡量損失函數(shù)的重要性。如果你使用多種類型的損失函數(shù),如 MSE、對抗性、L1、feature loss,,那么請確保所有損失以正確的方式排序。

3. 檢查中間輸出和連接

為了調(diào)試神經(jīng)網(wǎng)絡(luò),你需要理解神經(jīng)網(wǎng)絡(luò)內(nèi)部的動態(tài)、不同中間層所起的作用,以及層與層之間是如何連接起來的。不過,你可能遇到以下問題:

不正確的梯度更新表達式

權(quán)重未得到應(yīng)用

梯度消失或爆發(fā)

如果梯度值為 0,則意味著優(yōu)化器中的學習率可能太小,且梯度更新的表達式不正確。

除了關(guān)注梯度的絕對值之外,還要確保監(jiān)視每個層匹配的激活、權(quán)重的大小。例如,參數(shù)更新的大小(權(quán)重和偏差)應(yīng)為 1-e3。

需要指出的是,一種稱為 “Dying ReLU” 或“梯度消失”的現(xiàn)象中,ReLU 神經(jīng)元在學習其權(quán)重的負偏差項后將輸出為 0。這些神經(jīng)元不會在任何數(shù)據(jù)點上得到激活。

你可以采用梯度檢驗(gradient checking)通過數(shù)值方法逼近梯度以檢驗這些錯誤。如果它接近計算梯度,則正確實施反向傳播。

關(guān)于可視化神經(jīng)網(wǎng)絡(luò)的主要方法,F(xiàn)aizan Shaikh 舉出了三個例子:

初始方法:展現(xiàn)訓(xùn)練模型的整體結(jié)構(gòu),這些方法包括展示神經(jīng)網(wǎng)絡(luò)各個層的形狀或過濾器(filters)以及每個層中的參數(shù);

基于激活的方法:破譯單個神經(jīng)元或一組神經(jīng)元的激活函數(shù);

基于梯度的方法:在訓(xùn)練模型時,操作由前向或后向通道形成的梯度。

還有有許多可用的工具可用于可視化各個層的激活和連接,例如 ConX 和 Tensorboard。

4. 診斷參數(shù)

神經(jīng)網(wǎng)絡(luò)具有大量彼此相互作用的參數(shù),使得優(yōu)化也變得非常困難。

Batch size:你希望 batch size 可大到足以準確評估誤差梯度,小到足以使隨機梯度下降(SGD)可以規(guī)范網(wǎng)絡(luò)。batch size 將導(dǎo)致學習過程在訓(xùn)練過程中以噪聲成本快速瘦臉,并可能導(dǎo)致優(yōu)化困難。

學習率(Learning rate):太低會導(dǎo)致收斂緩慢或陷入局部最小值的風險,太高則會導(dǎo)致優(yōu)化發(fā)散。

機器學習框架,如 Keras、Tensorflow、PyTorch、MXNet 現(xiàn)在都有關(guān)于使用學習率收斂緩慢文檔或示例:

Keras

https://keras.io/callbacks/#learningratescheduler

Tensorflow - https://www.tensorflow.org/api_docs/python/tf/train/exponential_decay

PyTorch - https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html

MXNet - https://mxnet.incubator.apache.org/versions/master/tutorials/gluon/learning_rate_schedules.html

梯度剪切(Gradient clipping?):在反向傳播中,用于剪切參數(shù)梯度的最大值或最大范數(shù)。

Batch 標準化(normalization ):用于標準化每層的輸入,以對抗內(nèi)部協(xié)變量移位問題。

隨機梯度下降(Stochastic Gradient Descent ,SGD):使用動量、自適應(yīng)學習率、Nesterov 更新。

正則化:對于構(gòu)建可推廣模型至關(guān)重要,因為它增加了對模型復(fù)雜性或極端參數(shù)值的懲罰。同時,它顯著降低了模型的方差,并且不顯著增加偏差。

Dropout:是另一種規(guī)范網(wǎng)絡(luò)以防止過度擬合的技術(shù)。在訓(xùn)練時,以某個概率 p(超參數(shù))保持神經(jīng)元活動來實現(xiàn)丟失,否則將其設(shè)置為 0。結(jié)果,網(wǎng)絡(luò)必須在每個訓(xùn)練 batch 中使用不同的參數(shù)子集,這減少了特定參數(shù)的變化而變得優(yōu)于其他參數(shù)。

5. 全程跟蹤工作

通過對工作更好地跟蹤,可以輕松查看和重現(xiàn)之前的試驗,以減少重復(fù)工作。

不過,手動記錄信息可能很難做到且進行多次實驗,像 comet.ml 這樣的工具可以幫助自動追蹤數(shù)據(jù)集、更改代碼、實驗歷史和生產(chǎn)模型,包括關(guān)于模型的關(guān)鍵信息,如超參數(shù)、模型性能指標和環(huán)境細節(jié)。

神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)、參數(shù),甚至 packages 的微小變化都非常敏感,這導(dǎo)致了模型的性能下降。工作跟蹤是標準化環(huán)境和建模工作流程的第一步。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:Debug神經(jīng)網(wǎng)絡(luò)的五項基本原則

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    神經(jīng)網(wǎng)絡(luò)教程(李亞非)

      第1章 概述  1.1 人工神經(jīng)網(wǎng)絡(luò)研究與發(fā)展  1.2 生物神經(jīng)元  1.3 人工神經(jīng)網(wǎng)絡(luò)的構(gòu)成  第2章人工神經(jīng)網(wǎng)絡(luò)基本模型  2.1 MP模型  2.2 感知器模型  2.3
    發(fā)表于 03-20 11:32

    神經(jīng)網(wǎng)絡(luò)簡介

    神經(jīng)網(wǎng)絡(luò)簡介
    發(fā)表于 08-05 21:01

    神經(jīng)網(wǎng)絡(luò)基本介紹

    神經(jīng)網(wǎng)絡(luò)基本介紹
    發(fā)表于 01-04 13:41

    全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)有什么區(qū)別

    全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別
    發(fā)表于 06-06 14:21

    卷積神經(jīng)網(wǎng)絡(luò)如何使用

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡(luò)在工程上經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    今天學習了兩個神經(jīng)網(wǎng)絡(luò),分別是自適應(yīng)諧振(ART)神經(jīng)網(wǎng)絡(luò)與自組織映射(SOM)神經(jīng)網(wǎng)絡(luò)。整體感覺不是很難,只不過一些最基礎(chǔ)的概念容易理解不清。首先ART神經(jīng)網(wǎng)絡(luò)是競爭學習的一個代表,
    發(fā)表于 07-21 04:30

    什么是LSTM神經(jīng)網(wǎng)絡(luò)

    簡單理解LSTM神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 01-28 07:16

    使用集成示波器執(zhí)行五項常見調(diào)試任務(wù),不看肯定后悔

    使用集成示波器執(zhí)行五項常見調(diào)試任務(wù),不看肯定后悔
    發(fā)表于 04-30 07:04

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預(yù)測
    發(fā)表于 07-12 08:02

    基于BP神經(jīng)網(wǎng)絡(luò)的PID控制

    最近在學習電機的智能控制,上周學習了基于單神經(jīng)元的PID控制,這周研究基于BP神經(jīng)網(wǎng)絡(luò)的PID控制。神經(jīng)網(wǎng)絡(luò)具有任意非線性表達能力,可以通過對系統(tǒng)性能的學習來實現(xiàn)具有最佳組合的PID控制。利用BP
    發(fā)表于 09-07 07:43

    輕量化神經(jīng)網(wǎng)絡(luò)的相關(guān)資料下載

    視覺任務(wù)中,并取得了巨大成功。然而,由于存儲空間和功耗的限制,神經(jīng)網(wǎng)絡(luò)模型在嵌入式設(shè)備上的存儲與計算仍然是一個巨大的挑戰(zhàn)。前面幾篇介紹了如何在嵌入式AI芯片上部署神經(jīng)網(wǎng)絡(luò):【嵌入式AI開發(fā)】篇|實戰(zhàn)篇一:STM32cubeID
    發(fā)表于 12-14 07:35

    神經(jīng)網(wǎng)絡(luò)移植到STM32的方法

    神經(jīng)網(wǎng)絡(luò)移植到STM32最近在做的一個項目需要用到網(wǎng)絡(luò)進行擬合,并且將擬合得到的結(jié)果用作控制,就在想能不能直接在單片機上做神經(jīng)網(wǎng)絡(luò)計算,這樣就可以實時計算,不依賴于上位機。所以要解決的主要是兩個
    發(fā)表于 01-11 06:20

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用轉(zhuǎn)載****地址:http://fcst.ceaj.org/CN/abstract/abstract2521.shtml深度學習是機器學習和人工智能研究的最新趨勢,作為一個
    發(fā)表于 08-02 10:39

    訓(xùn)練神經(jīng)網(wǎng)絡(luò)大算法

    神經(jīng)網(wǎng)絡(luò)模型的每一類學習過程通常被歸納為一種訓(xùn)練算法。訓(xùn)練的算法有很多,它們的特點和性能各不相同。問題的抽象人們把神經(jīng)網(wǎng)絡(luò)的學習過程轉(zhuǎn)化為求損失函數(shù)f的最小值問題。一般來說,損失函數(shù)包括誤差和正則
    發(fā)表于 11-16 15:30 ?1.3w次閱讀

    什么是神經(jīng)網(wǎng)絡(luò)?什么是卷積神經(jīng)網(wǎng)絡(luò)?

    在介紹卷積神經(jīng)網(wǎng)絡(luò)之前,我們先回顧一下神經(jīng)網(wǎng)絡(luò)的基本知識。就目前而言,神經(jīng)網(wǎng)絡(luò)是深度學習算法的核心,我們熟知的很多深度學習算法的背后其實都是神經(jīng)網(wǎng)
    的頭像 發(fā)表于 02-23 09:14 ?3685次閱讀
    百家乐娱乐城送分| 百家乐21点德州扑克| 大发888屡败屡战| 百家乐国际娱乐城| 球讯网| 网络百家乐大转轮| 博狗百家乐官网的玩法技巧和规则 | 百家乐视频对对碰| 线上百家乐官网开户| 联众博彩| 百家乐平注法口诀技巧| 网上赌百家乐可信吗| 大世界百家乐官网娱乐网| 天峻县| 香港六合彩网址| 大发888信誉| 百家乐最新产品| 百家乐投注打三断| 金博士百家乐官网娱乐城| e世博备用网址| 大发888登陆网页游戏| 茅台百家乐的玩法技巧和规则| 平台百家乐的区别| 百家乐高人破解| 百家乐官网注册送免费金| 电子百家乐| 外围赌球| 奥斯卡娱乐城| 新利88国际| 万豪娱乐| 赌博| 封丘县| 黑山县| 澳门百家乐官网秘诀| 百博百家乐官网的玩法技巧和规则 | 新全讯网777| 幸运水果机下载| 大发888娱乐城高手| 全讯网娱乐| 大发888官方 黄埔| 百乐坊娱乐城噢门|