神經(jīng)網(wǎng)絡(luò)的“引擎”:基于梯度的優(yōu)化

訓(xùn)練循環(huán)(training loop)

1、抽取訓(xùn)練樣本 x 和對(duì)應(yīng)的目標(biāo) y 組成的數(shù)據(jù)批量;
2、在 x 上運(yùn)行網(wǎng)絡(luò)[這一步叫前向傳播(forward pass)],得到預(yù)測(cè)值 y_pred;
3、計(jì)算網(wǎng)絡(luò)在這批數(shù)據(jù)上的損失,用于衡量 y_pred 和 y 之間的距離;
4、更新網(wǎng)絡(luò)所有權(quán)重,使網(wǎng)絡(luò)在這批數(shù)據(jù)上的損失略微下降。

導(dǎo)數(shù)

導(dǎo)數(shù)完全描述了改變 x 后 f(x) 如何變化,如果想要減小 f(x) 的值,只需將 x 沿著導(dǎo)數(shù)的反方向移動(dòng)一小步。

張量運(yùn)算的導(dǎo)數(shù):梯度(gradient)

單變量函數(shù) f(x) 的導(dǎo)數(shù)可以看作函數(shù) f 曲線的斜率。同樣,gradient(f)(w0) 是函數(shù) f(w) = loss_value 在 w0 的導(dǎo)數(shù),可以看做 f(w) 在 w0 附近曲率(curvature)的張量。也可以通過(guò)將 w 向梯度的反方向移動(dòng)來(lái)減小 f(w)。如:w1 = w0 - step * gradient(f)(w0)。

隨機(jī)梯度下降

1、抽取訓(xùn)練樣本 x 和對(duì)應(yīng)目標(biāo) y 組成的數(shù)據(jù)批量;
2、在 x 上運(yùn)行網(wǎng)絡(luò),得到預(yù)測(cè)值 y_pred;
3、計(jì)算網(wǎng)絡(luò)在這批數(shù)據(jù)上的損失,用于衡量 y_pred 和 y之間的距離;
4、計(jì)算損失相對(duì)于網(wǎng)絡(luò)參數(shù)的梯度[ 一次反向傳播(backward pass) ];
5、將參數(shù)沿著梯度的反方向移動(dòng)一點(diǎn),比如 w -= step * gradient,從而使這批數(shù)據(jù)上的損失減小一點(diǎn)。

這種方法叫小批量隨機(jī)梯度下降(mini-batch stochastic gradient descent),又稱小批量 SGD。小批量 SGD 的一個(gè)變體是每次迭代只抽取一個(gè)樣本和目標(biāo)(而不是抽取一批數(shù)據(jù)),這叫真 SGD;另一種極端是,沒(méi)次迭代都在所有數(shù)據(jù)上運(yùn)行,叫作批量 SGD ,批量 SGD 會(huì)使更新更準(zhǔn)確,但計(jì)算代價(jià)也會(huì)高很多。正確的做法是兩個(gè)極端之間有效的折中,選擇合適批量大小。
此外,SGD 還有多種變體,這些變體不僅考慮當(dāng)前的梯度值,還要考慮上一次的權(quán)重更新。如帶動(dòng)量的 SGD、Adagrad、RMSProp 等。其中,動(dòng)量解決了 SGD 收斂速度和局部極小點(diǎn)的問(wèn)題。

鏈?zhǔn)角髮?dǎo):反向傳播算法(backpropagation)

反向傳播從最終損失值開(kāi)始,從最頂層反向作用至最底層,利用鏈?zhǔn)椒▌t計(jì)算每個(gè)參數(shù)對(duì)損失值的貢獻(xiàn)大小。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容