鍍金池/ 教程/ 人工智能/ 訓(xùn)練神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)
深度學(xué)習(xí)簡(jiǎn)介
深度神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)的應(yīng)用
計(jì)算圖
訓(xùn)練神經(jīng)網(wǎng)絡(luò)
基本原理
機(jī)器學(xué)習(xí)基礎(chǔ)
深度學(xué)習(xí)庫和框架
深度學(xué)習(xí)開發(fā)環(huán)境

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

現(xiàn)在我們將學(xué)習(xí)如何訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)。還將學(xué)習(xí)Python深度學(xué)習(xí)中的反向傳播算法和反向傳遞。

我們必須找到神經(jīng)網(wǎng)絡(luò)權(quán)重的最優(yōu)值來獲得所需的輸出。要訓(xùn)練神經(jīng)網(wǎng)絡(luò),我們使用迭代梯度下降法,最初從權(quán)重的隨機(jī)初始化開始。 在隨機(jī)初始化之后,我們利用前向傳播過程對(duì)數(shù)據(jù)的一些子集進(jìn)行預(yù)測(cè),計(jì)算相應(yīng)的成本函數(shù)C,并且將每個(gè)權(quán)重w更新與dC/dw成比例的量,即成本函數(shù)w.r.t的導(dǎo)數(shù)。 重量。 比例常數(shù)被稱為學(xué)習(xí)率。

使用反向傳播算法可以有效計(jì)算梯度。對(duì)于向后傳播或向后傳播的關(guān)鍵觀察,由于分化鏈的規(guī)則,神經(jīng)網(wǎng)絡(luò)中每個(gè)神經(jīng)元的梯度可以利用神經(jīng)元的梯度來計(jì)算,它具有向外的邊緣。因此,我們向后計(jì)算梯度,即首先計(jì)算輸出層的梯度,然后計(jì)算最頂層的隱藏層,其次是前面的隱藏層,等等,結(jié)束于輸入層。

反向傳播算法主要使用計(jì)算圖的思想來實(shí)現(xiàn),其中每個(gè)神經(jīng)元被擴(kuò)展到計(jì)算圖中的許多節(jié)點(diǎn),并執(zhí)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,如加法,乘法。計(jì)算圖在邊上沒有任何權(quán)重;所有的權(quán)重被分配給節(jié)點(diǎn),所以權(quán)重成為它們自己的節(jié)點(diǎn)。然后向后傳播算法在計(jì)算圖上運(yùn)行。當(dāng)計(jì)算完成,只有權(quán)重節(jié)點(diǎn)的梯度才需要更新。其余的漸變可以被丟棄。

梯度下降優(yōu)化技術(shù)

一種常用的優(yōu)化功能根據(jù)它們?cè)斐傻恼`差來調(diào)整權(quán)重,稱為“梯度下降”。

坡度是坡度的另一個(gè)名稱,斜坡在xy圖上表示兩個(gè)變量如何相互關(guān)聯(lián):坡度上升,距離隨時(shí)間變化的變化等。在這種情況下,坡度為 網(wǎng)絡(luò)誤差與單一重量之間的比率; 即錯(cuò)誤如何隨著重量的變化而變化。

更準(zhǔn)確地說,我們想要找出哪個(gè)重量產(chǎn)生的誤差最小。 我們希望找到正確表示輸入數(shù)據(jù)中包含的信號(hào)的權(quán)重,并將它們轉(zhuǎn)換為正確的分類。

隨著神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),它會(huì)緩慢調(diào)整許多權(quán)重,以便它們可以正確地將信號(hào)映射到意義。 網(wǎng)絡(luò)誤差與這些權(quán)重中的每一個(gè)之間的比率是導(dǎo)數(shù)dE/dw,其計(jì)算權(quán)重中的輕微變化引起誤差的輕微變化的程度。

每個(gè)權(quán)重只是涉及許多變換的深層網(wǎng)絡(luò)中的一個(gè)因素; 權(quán)重的信號(hào)經(jīng)過幾層的激活和求和,所以我們使用微積分的鏈?zhǔn)揭?guī)則通過網(wǎng)絡(luò)激活和輸出進(jìn)行工作。這導(dǎo)致我們討論權(quán)重,以及它與整體誤差的關(guān)系。

給定兩個(gè)變量,錯(cuò)誤和權(quán)重,由第三個(gè)變量激活,通過權(quán)重傳遞。 我們可以通過首先計(jì)算激活變化如何影響誤差變化以及體重變化如何影響激活變化來計(jì)算體重變化如何影響誤差變化。

深度學(xué)習(xí)的基本思想就是:根據(jù)產(chǎn)生的錯(cuò)誤調(diào)整模型的權(quán)重,直到不能再減少錯(cuò)誤為止。

如果梯度值小,則深網(wǎng)絡(luò)緩慢,如果值很高,則深度網(wǎng)絡(luò)快。 培訓(xùn)中的任何不準(zhǔn)確都會(huì)導(dǎo)致不準(zhǔn)確的結(jié)果。 將網(wǎng)絡(luò)從輸出端訓(xùn)練回輸入端的過程稱為反向傳播或反向支撐。 我們知道前向傳播從輸入開始并繼續(xù)前進(jìn)。 后退道具反向/相反計(jì)算從右到左的漸變。

每次我們計(jì)算一個(gè)梯度時(shí),都會(huì)使用之前所有的梯度。

讓我們從輸出層的節(jié)點(diǎn)開始。 邊緣使用該節(jié)點(diǎn)處的漸變。 當(dāng)我們回到隱藏層時(shí),它變得更加復(fù)雜。 01之間的兩個(gè)數(shù)字的乘積給一個(gè)較小的數(shù)字。 漸變值越來越小,因此后支柱需要花費(fèi)大量時(shí)間進(jìn)行訓(xùn)練并且精確度受到影響。

深度學(xué)習(xí)算法面臨的挑戰(zhàn)

淺層神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)都有一定的挑戰(zhàn),如過度擬合和計(jì)算時(shí)間。 DNN受到過度擬合的影響,因?yàn)槭褂昧烁郊拥某橄髮?,這使得他們可以在訓(xùn)練數(shù)據(jù)中建立罕見的依賴關(guān)系。

在訓(xùn)練過程中應(yīng)用正常化方法,例如輟學(xué),早期停止,數(shù)據(jù)增強(qiáng),轉(zhuǎn)移學(xué)習(xí),以打擊過度擬合。在訓(xùn)練期間,剔除正規(guī)化從隱藏層中隨機(jī)省略單元,這有助于避免罕見的依賴性。 DNN考慮了幾個(gè)訓(xùn)練參數(shù),例如大小,即層數(shù)和每層單元的數(shù)量,學(xué)習(xí)速率和初始權(quán)重。由于時(shí)間和計(jì)算資源的高成本,尋找最佳參數(shù)并不總是實(shí)用的。批處理等幾個(gè)黑客可以加速計(jì)算。 GPU的巨大處理能力顯著地幫助了訓(xùn)練過程,因?yàn)樗璧木仃嚭拖蛄坑?jì)算在GPU上得到了很好的執(zhí)行。

丟失(Dropout)

丟失(Dropout)是神經(jīng)網(wǎng)絡(luò)流行的正規(guī)化技術(shù)。 深度神經(jīng)網(wǎng)絡(luò)特別容易過度擬合。

現(xiàn)在讓我們看看丟失是什么以及它是如何工作的。

用深度學(xué)習(xí)的先驅(qū)Geoffrey Hinton的話來說,“如果你有一個(gè)深層的神經(jīng)網(wǎng)絡(luò),而且不是過度擬合,那么你應(yīng)該使用一個(gè)更大的神經(jīng)網(wǎng)絡(luò)并使用丟失”。

丟失是一種技術(shù),在梯度下降的每次迭代中,我們丟棄一組隨機(jī)選擇的節(jié)點(diǎn)。 這意味著我們會(huì)隨機(jī)忽略一些節(jié)點(diǎn),就好像它們不存在一樣。

每個(gè)神經(jīng)元以概率q保持并以概率1-q隨機(jī)丟棄。 對(duì)于神經(jīng)網(wǎng)絡(luò)中的每個(gè)層,值q可能不同。 隱藏層的值為0.5,輸入層的值為0,適用于各種任務(wù)。

在評(píng)估和預(yù)測(cè)期間,不使用丟失。 每個(gè)神經(jīng)元的輸出都乘以q,以便到下一層的輸入具有相同的期望值。

丟失(Dropout)背后的想法如下 - 在一個(gè)沒有丟失(Dropout)正規(guī)化的神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元在彼此之間形成互相依賴,導(dǎo)致過度擬合。

實(shí)施訣竅
通過將隨機(jī)選擇的神經(jīng)元的輸出保持為0,在TensorFlow和Pytorch等庫中實(shí)現(xiàn)丟失。也就是說,雖然神經(jīng)元存在,但其輸出被覆蓋為0

早期停止

我們使用稱為梯度下降的迭代算法訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

早期停止的想法很直觀。 當(dāng)錯(cuò)誤開始增加時(shí),我們停止訓(xùn)練。 在這里,錯(cuò)誤的意思是在驗(yàn)證數(shù)據(jù)上測(cè)量的錯(cuò)誤,這是用于調(diào)整超參數(shù)的訓(xùn)練數(shù)據(jù)的一部分。 在這種情況下,超參數(shù)就是停止標(biāo)準(zhǔn)。

數(shù)據(jù)增強(qiáng)

我們?cè)黾訑?shù)據(jù)量的過程,或者通過使用現(xiàn)有數(shù)據(jù)并對(duì)其應(yīng)用一些變換來增加數(shù)據(jù)量。 所使用的確切轉(zhuǎn)換取決于我們打算實(shí)現(xiàn)的任務(wù)。 此外,幫助神經(jīng)網(wǎng)絡(luò)的轉(zhuǎn)換依賴于其架構(gòu)。

例如,在諸如對(duì)象分類等許多計(jì)算機(jī)視覺任務(wù)中,有效的數(shù)據(jù)增強(qiáng)技術(shù)正在添加新的數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)是裁剪或原始數(shù)據(jù)的轉(zhuǎn)換版本。

當(dāng)計(jì)算機(jī)接受圖像作為輸入時(shí),它將采用一組像素值,比如說整個(gè)圖像左移15像素。 我們?cè)诓煌姆较蛏蠎?yīng)用了許多不同的移位,導(dǎo)致數(shù)據(jù)集增大了原始數(shù)據(jù)集大小的數(shù)倍。

轉(zhuǎn)移學(xué)習(xí)

采用預(yù)先訓(xùn)練的模型并用我們自己的數(shù)據(jù)集“模擬”模型的過程稱為轉(zhuǎn)移學(xué)習(xí)。 有幾種方法可以做到這一點(diǎn)。下面介紹幾種方法 -

  • 在大型數(shù)據(jù)集上訓(xùn)練預(yù)先訓(xùn)練的模型。 然后,刪除網(wǎng)絡(luò)的最后一層,并用隨機(jī)權(quán)重的新層替換它。
  • 然后,凍結(jié)所有其他層的權(quán)重并正常訓(xùn)練網(wǎng)絡(luò)。 這里凍結(jié)圖層不會(huì)改變梯度下降或優(yōu)化期間的權(quán)重。

這背后的概念是,預(yù)先訓(xùn)練的模型將作為一個(gè)特征提取器,只有最后一層將在當(dāng)前任務(wù)上進(jìn)行訓(xùn)練。