AI網(wǎng)紅Andrej Karpathy最新力作,傾囊相授神經(jīng)網(wǎng)絡(luò)的33條訓練技巧,干貨必看。
Andrej Kapathy 是計算機視覺和深度學習領(lǐng)域的專家之一,畢業(yè)于斯坦福人工智能實驗室,博士師從李飛飛教授,在谷歌大腦、DeepMind 實過習,與吳恩達一起共事,業(yè)界幾大深度學習實驗室都待過。
2017年6月,Karpathy加入特斯拉,擔任AI和Autopilot Vision 部門主管,直接向 Elon Musk 匯報。
更重要的是,Karpathy樂于而且善于分享自己的經(jīng)驗和見解,在推特和博客上非?;钴S,有 AI “網(wǎng)紅” 之稱。
Karpathy的推特簡介上有一句“I like to train Deep Neural Nets on large datasets.”近日,Karpathy將他訓練神經(jīng)網(wǎng)絡(luò)的經(jīng)驗傾囊相授,獲得大量好評。
以下是新智元對這篇“神經(jīng)網(wǎng)絡(luò)煉丹術(shù)”的譯介:
30行代碼訓練神經(jīng)網(wǎng)絡(luò)?Too young
幾周前,我在推特上發(fā)了一條“最常見的神經(jīng)網(wǎng)絡(luò)錯誤”的推文,列舉了一些與訓練神經(jīng)網(wǎng)絡(luò)相關(guān)的常見錯誤。這條推文獲得了比我預(yù)期的更多的參與(甚至還有一個在線研討會:)。顯然,很多人都曾親身經(jīng)歷過“這就是卷積層的工作原理”和“我們的卷積網(wǎng)絡(luò)實現(xiàn)了最先進的結(jié)果”之間的巨大差距。
所以我想,打開我差不多塵封的博客,就這個話題寫一篇長文,應(yīng)該會更好。不過,我不打算詳細列舉更多常見的錯誤,我想更深入地探討一下如何能夠完全避免這些錯誤(或快速修復它們)。這樣做的訣竅是遵循一個特定的過程,據(jù)我所知,這個過程很少有文字記錄。
那么,讓我們從兩個重要的觀察開始。
1) 神經(jīng)網(wǎng)絡(luò)訓練是一種“抽象泄漏”(leaky abstraction)
據(jù)說開始訓練神經(jīng)網(wǎng)絡(luò)很容易。許多庫和框架都以可以用30行的奇跡代碼片段解決你的數(shù)據(jù)問題而自豪,給人一種即插即用的(錯誤)印象。常見的做法是:
>>> your_data = # plug your awesome dataset here>>> model = SuperCrossValidator(SuperDuper.fit, your_data, ResNet50, SGDOptimizer)# conquer world here
這些庫和示例激活了我們大腦中熟悉的標準軟件的部分——通常可以獲得干凈的API和抽象。請求庫演示如下:
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))>>> r.status_code200
這很酷!開發(fā)者勇敢地承擔了理解查詢字符串、url、GET/POST請求、HTTP連接等重擔,并在很大程度上隱藏了幾行代碼背后的復雜性。這是我們所熟悉和期望的。
不幸的是,神經(jīng)網(wǎng)絡(luò)不是這樣的。如果你稍微偏離了訓練ImageNet分類器,那么它們就不是“現(xiàn)成的”技術(shù)。
在我以前介紹反向傳播的博文中,我試圖通過使用反向傳播并將其稱為“抽象泄漏”來說明這一點,但不幸的是,情況要糟糕得多。Backprop + SGD并不會神奇地讓你的網(wǎng)絡(luò)工作。Batch norm并不能神奇地使其更快地收斂。RNN不會神奇地讓你“插入”文本。你可以用RL表示你的問題,但僅僅是這樣并不意味著你應(yīng)該這樣做。如果你堅持使用這種技術(shù)而不了解它的工作原理,那么你很可能會失敗。這使我想到……
2) 神經(jīng)網(wǎng)絡(luò)訓練常常無聲無息地失敗
當你破壞或錯誤配置代碼時,通常會遇到某種異常。比如你插入了一個包含預(yù)期字符串的整數(shù)。這個函數(shù)只需要3個參數(shù)。但導入失敗了。這個鍵根本不存在。這兩個列表中的元素數(shù)量不相等。此外,通??梢詾槟硞€特定功能創(chuàng)建單元測試。
這只是訓練神經(jīng)網(wǎng)絡(luò)的開端。從語法上來說,一切都是正確的,但整件事的安排并不妥善,這真的很難判斷?!翱赡艿腻e誤范圍”很大,符合邏輯(與語法相反),并且很難進行單元測試。例如,在數(shù)據(jù)增強過程中,當你從左到右翻轉(zhuǎn)圖像時,可能忘記了翻轉(zhuǎn)標簽。你的網(wǎng)絡(luò)仍然可以(令人震驚地)很好地工作,因為你的網(wǎng)絡(luò)可以在內(nèi)部學習檢測翻轉(zhuǎn)的圖像,然后左右翻轉(zhuǎn)它的預(yù)測。或者你的自回歸模型會因為一個off-by-one的bug而不小心將它試圖預(yù)測的東西作為輸入?;蛘吣阍囍藜籼荻?,但結(jié)果卻減少了損失,導致在訓練期間忽略了異常值的例子。或者你從一個預(yù)訓練的檢查點初始化你的權(quán)重,但沒有使用原始平均值?;蛘吣阒皇歉阍伊苏齽t化強度、學習率、衰減率、模型大小等的設(shè)置。因此,只有在運氣好的情況下,錯誤配置的神經(jīng)網(wǎng)絡(luò)才會拋出異常;大多數(shù)情況下,它會繼續(xù)訓練,但默默地使運行變糟。
因此,用“快速而激烈”的方法來訓練神經(jīng)網(wǎng)絡(luò)是行不通的,只會導致痛苦。痛苦雖然是讓神經(jīng)網(wǎng)絡(luò)正常工作的一個非常自然的部分,但它是可以通過徹底的、防御性的、偏執(zhí)的,以及對幾乎所有可能的事情進行可視化來減輕的。根據(jù)我的經(jīng)驗,與深度學習成功最相關(guān)的品質(zhì)是耐心和關(guān)注細節(jié)。
如何訓練一個神經(jīng)網(wǎng)絡(luò)
基于以上兩個事實,我為自己開發(fā)了一個特定的過程,當我將神經(jīng)網(wǎng)絡(luò)應(yīng)用到一個新的問題時,我都遵循這個過程。本文中我將嘗試描述這個過程。
你會看到,它是非常重視上述兩個原則的。特別是,它是從簡單到復雜構(gòu)建的,每一步我們都對將要發(fā)生的事情做出具體的假設(shè),然后通過實驗驗證它們,或者進行調(diào)查,直到發(fā)現(xiàn)問題。我們極力避免的是同時引入大量“未經(jīng)驗證”的復雜性,這必然會引入錯誤/錯誤配置,而這些錯誤/錯誤配置將永遠無法找到。如果像訓練一樣編寫神經(jīng)網(wǎng)絡(luò)代碼,你會想要使用非常小的學習率并猜測,然后在每次迭代之后評估完整的測試集。
1. 梳理數(shù)據(jù)
訓練神經(jīng)網(wǎng)絡(luò)的第一步是完全不接觸任何神經(jīng)網(wǎng)絡(luò)代碼,而是從徹底檢查數(shù)據(jù)開始。這一步至關(guān)重要。我喜歡花大量時間(以小時為單位)瀏覽數(shù)千個示例,了解它們的分布并尋找模式。幸運的是,我們的大腦非常擅長做這個。有一次,我發(fā)現(xiàn)數(shù)據(jù)中包含重復的例子。另一次我發(fā)現(xiàn)了損壞的圖像/標簽。我會尋找數(shù)據(jù)中的不平衡和偏差。我通常也會關(guān)注我自己對數(shù)據(jù)進行分類的過程,這個過程暗示了我們最終要探索的各種架構(gòu)類型。
舉個例子,只有局部的特性是否足夠,還是需要全局上下文?有多少變量,它們以什么形式出現(xiàn)?哪些變量是假的,可以預(yù)先處理的?空間位置是否重要,或者我們是否想要將其平均池化?細節(jié)有多重要,我們能在多大程度上對圖像進行降采樣?標簽有多少噪音?
此外,由于神經(jīng)網(wǎng)絡(luò)實際上是數(shù)據(jù)集的壓縮/編譯版本,因此你能夠查看你的網(wǎng)絡(luò)預(yù)測并了解它們可能來自何處。如果你的網(wǎng)絡(luò)給你的預(yù)測與你在數(shù)據(jù)中看到的不一致,那就是有什么地方錯了。
一旦獲得了一種定性的感覺,那么寫一些簡單的代碼來搜索/過濾/排序也是一個好主意,不管你能想到什么(例如標簽的類型,注釋的大小,注釋的數(shù)量,等等),并將它們的分布和沿著任何軸的異常值可視化。異常值幾乎總是能揭示數(shù)據(jù)質(zhì)量或預(yù)處理中的一些bug。
2. 建立端到端的訓練/評估框架+獲取簡單的基線
現(xiàn)在我們了解了我們的數(shù)據(jù),那么就可以實現(xiàn)炫酷的多尺度ASPP FPN ResNet,并開始訓練超棒的模型了嗎?肯定不是。這是一條痛苦的道路。下一步是建立一個完整的訓練+評估框架,通過一系列的實驗獲得對其正確性的信任。在這個階段,最好選擇一些你不可能搞砸的簡單模型——例如一個線性分類器,或者一個非常小的卷積網(wǎng)絡(luò)。我們希望訓練這個網(wǎng)絡(luò),可視化損失,任何其他指標(例如準確性),模型預(yù)測,并在此過程中執(zhí)行一系列帶有明確假設(shè)的消融實驗。
這個階段的提示和技巧:
修復隨機種子(random seed)??偸鞘褂霉潭ǖ碾S機seed來保證當你運行代碼兩次時,將得到相同的結(jié)果。這消除了變異因素,將有助于保持你的理智。
簡化。確保不要有任何不必要的幻想。例如,在這個階段一定要關(guān)閉所有數(shù)據(jù)增強。數(shù)據(jù)增強是一種正則化策略,我們稍后可能會將其合并進來,但目前它只是會引入一些愚蠢的bug。
在評估中添加有效數(shù)字。當繪制測試損失時,在整個(大型)測試集上運行評估。不要只在batches上繪制測試損失,然后依賴于在Tensorboard中平滑它們。我們要追求正確,很愿意放棄時間。
在初始化時驗證損失。驗證你的損失是否以正確的損失值開始。例如,如果你正確地初始化了最后一層,你應(yīng)該在初始化時測量softmax的-log(1/n_classes)。同樣的缺省值可以用于L2回歸、Huber損失等。
正確地初始化。正確初地始化最后一層權(quán)重。例如,如果你要回歸一些平均值為50的值,那么要將最終偏差初始化為50。如果你有一個不平衡的數(shù)據(jù)集,其正負比為1:10,那么在你的日志上設(shè)置偏差,使你的網(wǎng)絡(luò)預(yù)測概率在初始化時為0.1。正確設(shè)置這些參數(shù)將加快收斂速度,并消除“hockey stick”損失曲線,在最初幾次迭代中,你的網(wǎng)絡(luò)基本上只是學習偏差。
human baseline。監(jiān)控人類可解釋和可檢查的損失以外的指標(例如準確性)。盡可能地評估你自己(人類)的準確性,并與之進行比較?;蛘撸瑢y試數(shù)據(jù)進行兩次注釋,對于每個示例,將一個注釋作為預(yù)測,將第二個注釋作為ground truth。
input-indepent baseline。訓練一個獨立于輸入的基線(例如,最簡單的方法就是將所有輸入設(shè)置為零)。這應(yīng)該比實際插入數(shù)據(jù)而不將其歸零的情況更糟。也就是說,可以知道你的模型是否學會從輸入中提取任何信息?
在單個批數(shù)據(jù)上過擬合。只過擬合包含少量例子(例如只有兩個)的一個batch。為此,我們需要增加模型的容量(例如添加層或過濾器),并驗證我們可以達到的最低損失值(例如0)。我也喜歡在同一個圖中可視化標簽和預(yù)測,并確保一旦達到最小損失,它們最終會完美地對齊。如果沒有完美對齊,那么在某個地方就有一個bug,我們無法繼續(xù)到下一個階段。
驗證訓練損失的下降。在這個階段,你可能希望在數(shù)據(jù)集上實現(xiàn)欠擬合,因為該階段的模型是一個玩具模型。試著增加一點它的容量,在看看訓練損失是否下降了。
在輸入網(wǎng)絡(luò)前進行可視化。在運行y_hat = model(x)(或tf中運行sess.run)之前,是可視化數(shù)據(jù)的正確時間。也就是說,我們需要準確地可視化輸入給你的網(wǎng)絡(luò)的東西,把原始的數(shù)據(jù)張量和標簽解碼并可視化。這是唯一的“真理之源”。這個過程為我節(jié)省了大量時間,并揭示了數(shù)據(jù)預(yù)處理和增強方面的問題。
可視化預(yù)測動態(tài)。在訓練過程中,我喜歡將固定測試batch的模型預(yù)測可視化。這些預(yù)測如何移動的“動態(tài)”將為你提供關(guān)于訓練進展的良好直覺。很多時候,如果網(wǎng)絡(luò)以某種方式太過波動,顯示出不穩(wěn)定性,你可能會覺得網(wǎng)絡(luò)“難以”擬合你的數(shù)據(jù)。非常低或非常高的學習率在波動的數(shù)量中也很容易被注意到。
使用反向傳播來繪制依賴關(guān)系圖。深度學習代碼通常包含復雜、向量化和broadcast操作。我遇到過的一個比較常見的bug是,人們使用view而不是在某個地方進行transpose/permute,無意中混淆了批處理的維度信息。然而,你的網(wǎng)絡(luò)通常仍然訓練良好,因為它將學會忽略來自其他示例的數(shù)據(jù)。一種debug的方法是將某個示例i的損失設(shè)置為1.0,然后運行反向傳播一直到輸入,并確保只在i-thexample上得到一個非零梯度。也就是說,梯度提供了網(wǎng)絡(luò)中的依賴關(guān)系信息,這對于debug非常有用。
一般化特殊案例。這是一種更為通用的編碼技巧,但是我經(jīng)??吹饺藗冊谑褂眠@個技巧時產(chǎn)生bug,尤其是從頭編寫一個相對通用的函數(shù)時。我喜歡為我正在做的事情寫非常具體的函數(shù),讓這個函數(shù)能work,然后再一般化,確保得到相同的結(jié)果。這通常適用于向量化代碼,我會先寫出完整的循環(huán)版本,然后再將它轉(zhuǎn)換為向量化代碼。
3.過擬合
在這個階段,我們應(yīng)該對數(shù)據(jù)集有一個很好的理解,我們有完整的訓練和評估pipeline。對于任何給定的模型,我們可以(可重復地)計算出一個可信的量度。我們還可以利用獨立于輸入的baseline的性能(并擊敗了這些基線性能),我們大致了解人類的表現(xiàn)。這一階段的任務(wù)是對一個性能不錯的模型進行迭代。
找到一個好模型可以分為兩個極端:首先得到一個足夠大的模型,它可以是過擬合的,然后在適當調(diào)整(放棄一些訓練損失,以改善驗證損失)。我認為采取這兩個階段的好處是,如果我們根本無法使用任何模型達到足夠低的錯誤率,這種方式可能再次暴露一些問題、bug或錯誤配置。
關(guān)于這個階段的一些提示和技巧:
挑選模型。為了獲得良好的訓練損失,需要為數(shù)據(jù)選擇合適的架構(gòu)。我的建議是:不要逞英雄。我見過很多人瘋狂的人,將神經(jīng)網(wǎng)絡(luò)工具箱的各種工具像堆樂高積木一樣堆疊在各種奇異的架構(gòu)中。應(yīng)該在項目早期階段盡力避免這樣做。
我總是建議先找到最相關(guān)的一些論文,先把其中最簡單的架構(gòu)原樣照搬過來,以獲得良好的性能。比如你做得是圖像分類,不要想著當英雄,先把ResNet-50拿過來用。后面可以做一些更自定義設(shè)置和改進,并實現(xiàn)比它更好的性能。
選Adam總沒錯。在設(shè)定baseline方法的早期階段,我喜歡使用學習率為3e-4的Adam架構(gòu)。根據(jù)我的經(jīng)驗,Adam對超參數(shù)更加寬容,包括不良的學習率。對于ConvNets來說,一個經(jīng)過適當調(diào)整的SGD幾乎總會略優(yōu)于Adam,但前者最佳學習率區(qū)域要窄得多,而且受到具體問題所限。(如果使用的是RNN和相關(guān)的序列模型,那么在項目早期階段更常用Adam。再說一遍,不要逞英雄,多參考相關(guān)論文。)
一次只針對一個對象進行復雜化。如果有多個信號進入分類器,建議逐個引入,確保每次信號的引入都獲得預(yù)期的性能提升。一開始不要一股腦地把全部信號都喂給模型。增加復雜度還有別的方法,比如可以嘗試先插入較小的圖像,然后再放大,諸如此類。
不要過于相信默認的學習率衰減。如果是重用來自其他領(lǐng)域的代碼,那么在處理學習速度衰減時一定要非常小心。您不僅希望針對不同的問題使用不同的衰減計劃,而且 - 更糟糕的是 - 在典型的實施中,計劃將基于當前的epoch數(shù),該值會根據(jù)數(shù)據(jù)集的大小而廣泛變化。
比如,ImageNet將在30個epoch上衰減10倍。如果你沒有訓練ImageNet那么這肯定不是想要的結(jié)果。如果你不小心,代碼可能會過早地將學習率趨零,導致模型無法收斂。在我自己的研究中總是完全禁用學習率衰減(學習速率為常數(shù))并在最后進行調(diào)整。
4.正則化
理想情況下,我們要處理的是大型模型,至少能夠擬合訓練集?,F(xiàn)在是時候通過放棄一些訓練準確性,進行一些正則化處理,以獲得一些驗證準確性。以下是這方面一些提示和技巧:
獲取更多的數(shù)據(jù)。首先,在任何實際環(huán)境中,最佳和首選方法是添加更多真實的訓練數(shù)據(jù)。當可以收集更多數(shù)據(jù)時,就不要再花費大量時間嘗試從小型數(shù)據(jù)集中擠性能了。據(jù)我所知,添加更多數(shù)據(jù)幾乎是唯一無限期改善配置良好的神經(jīng)網(wǎng)絡(luò)性能的方式。還有一種方式是合奏(如果你能負擔得起的話),但是在5個模型之后最高。
數(shù)據(jù)增強。僅次于真實數(shù)據(jù)的半真實的數(shù)據(jù),需要嘗試更積極的數(shù)據(jù)增強。
創(chuàng)造性數(shù)據(jù)增強。如果半假數(shù)據(jù)不能做到這一點,假數(shù)據(jù)也許可以。人們正在尋找擴展數(shù)據(jù)集的創(chuàng)新方法;例如,域隨機化,模擬的使用,巧妙的混合,比如將(可能模擬的)數(shù)據(jù)引入場景,甚至是GAN中。
預(yù)訓練。即使有足夠的數(shù)據(jù),如果可以,也很少使用預(yù)訓練網(wǎng)絡(luò)。
堅持監(jiān)督式學習。不要對無監(jiān)督的預(yù)訓練抱有過分的信心。據(jù)我所知,沒有任何一種無監(jiān)督學習在現(xiàn)代計算機視覺任務(wù)上有很強的表現(xiàn)(雖然現(xiàn)在NLP領(lǐng)域誕生了BERT等優(yōu)秀模型,但這很可能是因為文本數(shù)據(jù)更成熟的形式,以及更高的信噪比)。
更小的輸入維度。去除可能包含虛假信號的特征。如果數(shù)據(jù)集很小,任何添加的虛假輸入都可能造成過擬合。同樣,如果低級細節(jié)無關(guān)緊要,請嘗試輸入更小的圖像。
較小的模型。很多時候可以在網(wǎng)絡(luò)上使用域知識約束來減小模型大小。例如,過去在ImageNet骨干網(wǎng)頂部使用全連接層很流行,但現(xiàn)在已改用簡單的平均池化,從而去掉了過程中的大量參數(shù)。
減小批大小。由于歸一化是基于批大小的,更小的batch size會具有更明顯的正則化效果。這是因為批量經(jīng)驗均值/標準是完整均值/標準的更近似版本,因此標度和偏移量“擺動”您的批次更多。
Drop。添加dropout。對ConvNets使用dropout2d(空間丟失)。建議謹慎使用dropout,因為似乎不太不適合批歸一化。
權(quán)重衰減。增加權(quán)重衰減懲罰。
“早?!保禾嵩缤V褂柧?。根據(jù)驗證損失停止訓練,在出現(xiàn)過擬合之前獲得模型。
嘗試更大的模型。我最后提到這一點,并且只是在提前停止之后,但我在過去曾經(jīng)發(fā)現(xiàn)過幾次大模型最終過擬合,但是它們的“早停”性能往往比小模型的性能要好得多。
最后,為了進一步確保網(wǎng)絡(luò)是一個合理的分類器,我喜歡對網(wǎng)絡(luò)第一層權(quán)重進行可視化,并確保獲得有意義的邊緣。如果第一層濾波器看起來像噪音,那么可能需要去掉一些東西。類似地,網(wǎng)絡(luò)中的激活函數(shù)有時也會有異常出現(xiàn),暴露出一些問題。
5.精細調(diào)整
現(xiàn)在應(yīng)該使用數(shù)據(jù)集探索寬泛的模型空間,以獲得低驗證損失的體系結(jié)構(gòu)。下面是一些提示和技巧:
隨機網(wǎng)格搜索。為了同時調(diào)整多個超參數(shù),使用網(wǎng)格搜索確保覆蓋所有設(shè)置,這聽起來很誘人,但請記住,最好使用隨機搜索。直觀地說,這是因為神經(jīng)網(wǎng)絡(luò)通常對某些參數(shù)比其他參數(shù)更敏感。在極限情況下,如果一個參數(shù)很重要,但是改變另一個參數(shù)沒有效果,那還不如對第一個參數(shù)進行徹底采樣。
超參數(shù)優(yōu)化。目前有很多花哨的貝葉斯超參數(shù)優(yōu)化工具箱,也有一些成功應(yīng)用的實例,但我個人的經(jīng)驗是,探索優(yōu)質(zhì)大寬度模型和超參數(shù)空間的最好方式是找個實習生。哈哈,開句玩笑。
6.性能壓榨
在確定了最佳類型的體系結(jié)構(gòu)和超參數(shù)后,仍然可以利用一些技巧最后“壓榨”一下系統(tǒng)的性能:
集成。模型是一種非常有保證的方法,可以在任何事情上獲得2%的準確率。如果您在測試時無法負擔計算,請考慮使用黑暗知識將您的整體提升到網(wǎng)絡(luò)中。
保持訓練。我經(jīng)??吹饺藗冊隍炞C損失趨于平穩(wěn)時就想停止模型訓練。根據(jù)我的經(jīng)驗,網(wǎng)絡(luò)會長時間不間斷地進行訓練。有一次我在冬假期間不小心沒有停止訓練,當我第二1月份回來時,發(fā)現(xiàn)模型性能達到了SOTA水平。
寫在最后
走到這一步,相信你已經(jīng)獲得了成功的所有要素:對技術(shù),數(shù)據(jù)集和問題有了深刻的理解,建立了整個模型的訓練/評估基礎(chǔ)設(shè)施,并對其準確性有了很高的信心,并探索了越來越復雜的模型,以預(yù)測每一步的方式獲得性能改進?,F(xiàn)在是時候開始閱讀大量論文,嘗試大量實驗,準備好獲得SOTA結(jié)果吧。祝你好運!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103533 -
AI
+關(guān)注
關(guān)注
88文章
35065瀏覽量
279343 -
深度學習
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122775
原文標題:李飛飛高徒、AI“網(wǎng)紅”Karpathy:訓練神經(jīng)網(wǎng)絡(luò)不得不看的33個技巧
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
無刷電機小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測方法的研究
基于FPGA搭建神經(jīng)網(wǎng)絡(luò)的步驟解析

BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較
如何優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的學習率
BP神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點分析
什么是BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法
BP神經(jīng)網(wǎng)絡(luò)與深度學習的關(guān)系
如何訓練BP神經(jīng)網(wǎng)絡(luò)模型
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

評論