訓(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)大小。