1 梯度裁剪
原因: 循環(huán)神經(jīng)?絡(luò)中較容易出現(xiàn)梯度衰減或梯度爆炸桂躏,裁剪的目的就是將梯度限制在一個范圍內(nèi)钻趋,避免參數(shù)被拋出很遠(yuǎn)或遠(yuǎn)離極小值的情況。
公式: 所有模型參數(shù)梯度的元素拼接成?個向量 g剂习,并設(shè)裁剪的閾值是 θ蛮位,所以模型的 L2 范數(shù)不會超過 θ。
實現(xiàn)代碼
def grad_clipping(params, theta, ctx):
norm = nd.array([0], ctx)
for param in params:
norm += (param.grad ** 2).sum()
norm = norm.sqrt().asscalar()
if norm > theta:
for param in params:
param.grad[:] *= theta / norm
2 正向傳播
所謂的正向傳播就是從輸入層開始依次求每個參數(shù)的值鳞绕。簡單說就是將值帶入模型失仁,依次往下算,把值計算出來们何。
3 反向傳播
反向傳播依據(jù)微積分中的鏈?zhǔn)椒▌t萄焦,沿著從輸出層到輸?層的順序,依次計算并存儲?標(biāo)函數(shù)有關(guān)神經(jīng)?絡(luò)各層的中間變量以及參數(shù)的梯度冤竹。
簡單說定義一個損失函數(shù)拂封,然后對其中的變量求偏微分即可,然后一邊求一邊存入數(shù)據(jù)鹦蠕。
最簡單的深度學(xué)習(xí)模型就只有一層——輸出層冒签。
4 單層神經(jīng)網(wǎng)絡(luò)線性模型的訓(xùn)練過程
- 1 獲取數(shù)據(jù)集
-
2 定義模型
- 3 初始化模型參數(shù)
-
4 定義損失函數(shù)
損失函數(shù):是一個計算過程,求模型預(yù)測輸出的值與真實值的偏差
常見的有平?損失(square loss):, 是將訓(xùn)練數(shù)據(jù) x 帶入模型中得到的結(jié)果钟病。 -
5 定義優(yōu)化算法
優(yōu)化算法:目的就是為了降低損失值萧恕,得到一個解析解,即讓最終的 w 與 b 使得模型更準(zhǔn)確肠阱,讓模型的預(yù)測值更接近真實值票唆。 優(yōu)化算法里面就有learning rate
,屹徘,每次往梯度下降方向走learning rate
這么多步走趋,使得最終[]為模型損失值最小值的最優(yōu)解。當(dāng)然這個最優(yōu)大部分情況下不是最優(yōu)噪伊,只是局部最優(yōu)吆视,想要結(jié)果更好典挑,learning rate
的設(shè)置都是至關(guān)重要的一步,初始值[]的設(shè)置是可以隨機設(shè)置的
如:小批量隨機梯度下降(mini-batch stochastic gradient descent): -
6 訓(xùn)練模型
即是讓反復(fù)使用優(yōu)化函數(shù)降低 loss啦吧, 最終得到精度更高的 w 與 b - 7 模型預(yù)測
5 參考資料
1.《動手學(xué)深度學(xué)習(xí)》視頻您觉,文檔
2.復(fù)旦大學(xué)邱錫鵬教授的書《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》開源書籍(查看其中的公式理論)