自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

半天2k贊,李飛飛高徒發(fā)布33條神經(jīng)網(wǎng)絡(luò)訓(xùn)練秘技

新聞 機(jī)器學(xué)習(xí)
AI大佬Andrej Karpathy (簡(jiǎn)稱AK) ,剛剛發(fā)布了一篇長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)博客,苦口婆心地列舉了33條技巧和注意事項(xiàng),全面避免大家踩坑,已有2,300多贊。

[[263815]]

本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

同學(xué),現(xiàn)在有一份33條神經(jīng)網(wǎng)絡(luò)訓(xùn)練秘笈,擺在你面前。

AI大佬Andrej Karpathy (簡(jiǎn)稱AK) ,剛剛發(fā)布了一篇長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)博客,苦口婆心地列舉了33條技巧和注意事項(xiàng),全面避免大家踩坑,已有2,300多贊。

AK在斯坦福讀博的時(shí)候,是飛飛實(shí)驗(yàn)室的成員,畢業(yè)去了OpenAI,然后又成了特斯拉的AI負(fù)責(zé)人,直到如今。

他的博客雖然一年一更,但一字一句皆是皆是多年心血凝結(jié)而成,每次更新必有重大回響。

有生之年,我們把內(nèi)文翻譯如下:

訓(xùn)練模型的“處方”

總的來(lái)說(shuō),Andrej Karpathy的技巧就是:不要心急 (文章結(jié)尾會(huì)道出原因) ,從簡(jiǎn)單到復(fù)雜逐步完善你的神經(jīng)網(wǎng)絡(luò)。

1、先別著急寫代碼

訓(xùn)練神經(jīng)網(wǎng)絡(luò)前,別管代碼,先從預(yù)處理數(shù)據(jù)集開始。我們先花幾個(gè)小時(shí)的時(shí)間,了解數(shù)據(jù)的分布并找出其中的規(guī)律。

Andrej有一次在整理數(shù)據(jù)時(shí)發(fā)現(xiàn)了重復(fù)的樣本,還有一次發(fā)現(xiàn)了圖像和標(biāo)簽中的錯(cuò)誤。所以先看一眼數(shù)據(jù)能避免我們走很多彎路。

由于神經(jīng)網(wǎng)絡(luò)實(shí)際上是數(shù)據(jù)集的壓縮版本,因此您將能夠查看網(wǎng)絡(luò)(錯(cuò)誤)預(yù)測(cè)并了解它們的來(lái)源。如果你的網(wǎng)絡(luò)給你的預(yù)測(cè)看起來(lái)與你在數(shù)據(jù)中看到的內(nèi)容不一致,那么就會(huì)有所收獲。

一旦從數(shù)據(jù)中發(fā)現(xiàn)規(guī)律,可以編寫一些代碼對(duì)他們進(jìn)行搜索、過(guò)濾、排序。把數(shù)據(jù)可視化能幫助我們發(fā)現(xiàn)異常值,而異常值總能揭示數(shù)據(jù)的質(zhì)量或預(yù)處理中的一些錯(cuò)誤。

2、設(shè)置端到端的訓(xùn)練評(píng)估框架

處理完數(shù)據(jù)集,接下來(lái)就能開始訓(xùn)練模型了嗎?并不能!下一步是建立一個(gè)完整的訓(xùn)練+評(píng)估框架。

在這個(gè)階段,我們選擇一個(gè)簡(jiǎn)單又不至于搞砸的模型,比如線性分類器、CNN,可視化損失。獲得準(zhǔn)確度等衡量模型的標(biāo)準(zhǔn),用模型進(jìn)行預(yù)測(cè)。

這個(gè)階段的技巧有:

· 固定隨機(jī)種子

使用固定的隨機(jī)種子,來(lái)保證運(yùn)行代碼兩次都獲得相同的結(jié)果,消除差異因素。

· 簡(jiǎn)單化

在此階段不要有任何幻想,不要擴(kuò)增數(shù)據(jù)。擴(kuò)增數(shù)據(jù)后面會(huì)用到,但是在這里不要使用,現(xiàn)在引入只會(huì)導(dǎo)致錯(cuò)誤。

· 在評(píng)估中添加有效數(shù)字

在繪制測(cè)試集損失時(shí),對(duì)整個(gè)測(cè)試集進(jìn)行評(píng)估,不要只繪制批次測(cè)試損失圖像,然后用Tensorboard對(duì)它們進(jìn)行平滑處理。

· 在初始階段驗(yàn)證損失函數(shù)

驗(yàn)證函數(shù)是否從正確的損失值開始。例如,如果正確初始化一層,則應(yīng)在softmax初始化時(shí)測(cè)量-log(1/n_classes)。

· 初始化

正確初始化一層的權(quán)重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個(gè)比例為1:10的不平衡數(shù)據(jù)集,請(qǐng)?jiān)O(shè)置對(duì)數(shù)的偏差,使網(wǎng)絡(luò)預(yù)測(cè)概率在初始化時(shí)為0.1。正確設(shè)置這些可以加速模型的收斂。

· 人類基線

監(jiān)控除人為可解釋和可檢查的損失之外的指標(biāo)。盡可能評(píng)估人的準(zhǔn)確性并與之進(jìn)行比較?;蛘邔?duì)測(cè)試數(shù)據(jù)進(jìn)行兩次注釋,并且對(duì)于每個(gè)示例,將一個(gè)注釋視為預(yù)測(cè),將第二個(gè)注釋視為事實(shí)。

· 設(shè)置一個(gè)獨(dú)立于輸入的基線

最簡(jiǎn)單的方法是將所有輸入設(shè)置為零,看看模型是否學(xué)會(huì)從輸入中提取任何信息。

· 過(guò)擬合一個(gè)batch

增加了模型的容量并驗(yàn)證我們可以達(dá)到的損失。

· 驗(yàn)證減少訓(xùn)練損失

嘗試稍微增加數(shù)據(jù)容量。

· 在訓(xùn)練模型前進(jìn)行數(shù)據(jù)可視化

將原始張量的數(shù)據(jù)和標(biāo)簽可視化,可以節(jié)省了調(diào)試次數(shù),并揭示了數(shù)據(jù)預(yù)處理和數(shù)據(jù)擴(kuò)增中的問(wèn)題。

· 可視化預(yù)測(cè)動(dòng)態(tài)

在訓(xùn)練過(guò)程中對(duì)固定測(cè)試批次上的模型預(yù)測(cè)進(jìn)行可視化。

· 使用反向傳播來(lái)獲得依賴關(guān)系

一個(gè)方法是將第i個(gè)樣本的損失設(shè)置為1.0,運(yùn)行反向傳播一直到輸入,并確保僅在第i個(gè)樣本上有非零的梯度。

· 概括一個(gè)特例:對(duì)正在做的事情編寫一個(gè)非常具體的函數(shù),讓它運(yùn)行,然后在以后過(guò)程中確保能得到相同的結(jié)果。

3、過(guò)擬合

首先我們得有一個(gè)足夠大的模型,它可以過(guò)擬合,減少訓(xùn)練集上的損失,然后適當(dāng)?shù)卣{(diào)整它,放棄一些訓(xùn)練集損失,改善在驗(yàn)證集上的損失)。

這一階段的技巧有:

· 挑選模型

為了獲得較好的訓(xùn)練損失,我們需要為數(shù)據(jù)選擇合適的架構(gòu)。不要總想著一步到位。如果要做圖像分類,只需復(fù)制粘貼ResNet-50,我們可以在稍后的過(guò)程中做一些自定義的事。

· Adam方法是安全的

在設(shè)定基線的早期階段,使用學(xué)習(xí)率為3e-4的Adam 。根據(jù)經(jīng)驗(yàn),亞當(dāng)對(duì)超參數(shù)更加寬容,包括不良的學(xué)習(xí)率。

· 一次只復(fù)雜化一個(gè)

如果多個(gè)信號(hào)輸入分類器,建議逐個(gè)輸入,然后增加復(fù)雜性,確保預(yù)期的性能逐步提升,而不要一股腦兒全放進(jìn)去。比如,嘗試先插入較小的圖像,然后再將它們放大。

· 不要相信學(xué)習(xí)率衰減默認(rèn)值

如果不小心,代碼可能會(huì)過(guò)早地將學(xué)習(xí)率減少到零,導(dǎo)致模型無(wú)法收斂。我們完全禁用學(xué)習(xí)率衰減避免這種狀況的發(fā)生。

4、正則化

理想的話,我們現(xiàn)在有一個(gè)大模型,在訓(xùn)練集上擬合好了。

現(xiàn)在,該正則化了。舍棄一點(diǎn)訓(xùn)練集上的準(zhǔn)確率,可以換取驗(yàn)證集上的準(zhǔn)確率。

這里有一些技巧:

· 獲取更多數(shù)據(jù)

至今大家最偏愛(ài)的正則化方法,就是添加一些真實(shí)訓(xùn)練數(shù)據(jù)。

不要在一個(gè)小數(shù)據(jù)集花太大功夫,試圖搞出大事情來(lái)。有精力去多收集點(diǎn)數(shù)據(jù),這是一個(gè)確保性能單調(diào)提升的方法。

· 數(shù)據(jù)擴(kuò)增

把數(shù)據(jù)集做大,除了繼續(xù)收集數(shù)據(jù)之外,就是擴(kuò)增了。旋轉(zhuǎn),翻轉(zhuǎn),拉伸,做擴(kuò)增的時(shí)候可以野性一點(diǎn)。

· 有創(chuàng)意的擴(kuò)增

還有什么辦法擴(kuò)增數(shù)據(jù)集?比如域隨機(jī)化 (Domain Randomization) ,模擬 (Simulation) ,巧妙的混合 (Hybrids) ,比如把數(shù)據(jù)插進(jìn)場(chǎng)景里去。甚至可以用上GAN。

· 預(yù)訓(xùn)練

當(dāng)然,就算你手握充足的數(shù)據(jù),直接用預(yù)訓(xùn)練模型也沒(méi)壞處。

· 跟監(jiān)督學(xué)習(xí)死磕

不要對(duì)無(wú)監(jiān)督預(yù)訓(xùn)練太過(guò)興奮了。至少在視覺(jué)領(lǐng)域,無(wú)監(jiān)督到現(xiàn)在也沒(méi)有非常強(qiáng)大的成果。雖然,NLP領(lǐng)域有了BERT,有了會(huì)講故事的GPT-2,但我們看到的效果很大程度上還是經(jīng)過(guò)了人工挑選。

· 輸入低維一點(diǎn)

把那些可能包含虛假信號(hào)的特征去掉,因?yàn)檫@些東西很可能造成過(guò)擬合,尤其是數(shù)據(jù)集不大的時(shí)候。

同理,如果低層細(xì)節(jié)不是那么重要的話,就輸入小一點(diǎn)的圖片,捕捉高層信息就好了。

· 模型小一點(diǎn)

許多情況下,都可以給網(wǎng)絡(luò)加上領(lǐng)域知識(shí)限制 (Domain Knowledge Constraints) ,來(lái)把模型變小。

比如,以前很流行在ImageNet的骨架上放全連接層,但現(xiàn)在這種操作已經(jīng)被平均池化取代了,大大減少了參數(shù)。

·減小批尺寸

對(duì)批量歸一化 (Batch Normalization) 這項(xiàng)操作來(lái)說(shuō),小批量可能帶來(lái)更好的正則化效果 (Regularization) 。

· Dropout

給卷積網(wǎng)絡(luò)用dropout2d。不過(guò)使用需謹(jǐn)慎,因?yàn)檫@種操作似乎跟批量歸一化不太合得來(lái)。

· 權(quán)重衰減

增加權(quán)重衰減 (Weight Decay) 的懲罰力度。

· 早停法

不用一直一直訓(xùn)練,可以觀察驗(yàn)證集的損失,在快要過(guò)擬合的時(shí)候,及時(shí)喊停。

· 也試試大點(diǎn)的模型

注意,這條緊接上條 (且僅接上條) 。

我發(fā)現(xiàn),大模型很容易過(guò)擬合,幾乎是必然,但早停的話,模型可以表現(xiàn)很好。

如果想要更加確信,自己訓(xùn)練出的網(wǎng)絡(luò),是個(gè)不錯(cuò)的分類器,就把權(quán)重可視化一下,看看邊緣 (Edges) 美不美。

如果過(guò)濾器看起來(lái)像噪音,就需要再搞一搞了。同理,激活 (Activations) 有時(shí)候也會(huì)看出瑕疵來(lái),那樣就要研究一下哪里出了問(wèn)題。

5、調(diào)參

讀到這里,你的AI應(yīng)該已經(jīng)開始探索廣闊天地了。這里,有幾件事需要注意。

· 隨機(jī)網(wǎng)格搜索

在同時(shí)調(diào)整多個(gè)超參數(shù)的情況下,網(wǎng)格搜索聽起來(lái)是很誘人,可以把各種設(shè)定都包含進(jìn)來(lái)。

但是要記住,隨機(jī)搜索更好一些。

直覺(jué)上說(shuō),這是因?yàn)榫W(wǎng)絡(luò)通常對(duì)其中一些參數(shù)比較敏感,對(duì)其他參數(shù)不那么敏感。

如果參數(shù)a是有用的,參數(shù)b起不了什么作用,就應(yīng)該對(duì)a取樣更徹底一些,不要只在幾個(gè)固定點(diǎn)上多次取樣。

· 超參數(shù)優(yōu)化

世界上,有許多許多靚麗的貝葉斯超參數(shù)優(yōu)化工具箱,很多小伙伴也給了這些工具好評(píng)。

但我個(gè)人的經(jīng)驗(yàn)是,State-of-the-Art都是用實(shí)習(xí)生做出來(lái)的 (誤) 。

6、還能怎么壓榨**

當(dāng)你已經(jīng)找到了好用的架構(gòu)和好用的超參數(shù),還是有一些技巧,可以在幫你現(xiàn)有模型上獲得更好的結(jié)果,榨干潛能:

· 模型合體

把幾個(gè)模型結(jié)合在一起,至少可以保證提升2%的準(zhǔn)確度,不管是什么任務(wù)。

如果,你買不起太多的算力,就用蒸餾 (Distill) 把模型們集合成一個(gè)神經(jīng)網(wǎng)絡(luò)。

· 放那讓它訓(xùn)練吧

通常,人類一看到損失趨于平穩(wěn),就停止訓(xùn)練了。

但我感覺(jué),還是訓(xùn)練得昏天黑地,不知道多久了,比較好。

有一次,我意外把一個(gè)模型留在那訓(xùn)練了一整個(gè)寒假。

我回來(lái)的時(shí)候,它就成了State-of-the-Art。

One More Thing

無(wú)獨(dú)有偶,前兩天有只“陣亡的程序猿”說(shuō):

AWS的錢,不是花在你用了多少,而是花在你忘了關(guān)電腦。

同學(xué),如果你也曾經(jīng)有這樣的經(jīng)歷,那么恭喜,你也有訓(xùn)練出State-of-the-Art的潛力。

原文鏈接:

http://karpathy.github.io/2019/04/25/recipe/

 

責(zé)任編輯:張燕妮 來(lái)源: 量子位
相關(guān)推薦

2019-04-29 12:11:53

神經(jīng)網(wǎng)絡(luò)AI深度學(xué)習(xí)

2021-10-15 10:32:42

神經(jīng)網(wǎng)絡(luò)AI算法

2022-07-14 14:54:00

特斯拉AI自動(dòng)駕駛

2017-12-22 08:47:41

神經(jīng)網(wǎng)絡(luò)AND運(yùn)算

2023-05-29 09:48:36

AI李飛飛

2022-12-30 12:11:33

2017-08-28 21:31:37

TensorFlow深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2024-12-05 09:53:18

智能體AI

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2017-09-28 16:15:12

神經(jīng)網(wǎng)絡(luò)訓(xùn)練多層

2017-07-19 11:39:25

深度學(xué)習(xí)人工智能boosting

2024-11-21 13:45:00

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

2020-03-06 15:25:23

網(wǎng)絡(luò)神經(jīng)人工智能數(shù)據(jù)

2017-03-27 16:18:30

神經(jīng)網(wǎng)絡(luò)TensorFlow人工智能

2021-12-28 08:48:54

PyTorch神經(jīng)網(wǎng)絡(luò)人工智能

2017-08-29 13:50:03

TensorFlow深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2024-11-04 15:30:00

機(jī)器人訓(xùn)練

2021-07-13 09:36:26

神經(jīng)網(wǎng)絡(luò)PyTorch框架

2018-12-14 08:02:55

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)二值模型

2022-05-20 11:01:06

模型性能框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)