clip\_gradient
作者:Gein Chen
鏈接:https://www.zhihu.com/question/29873016/answer/77647103
來(lái)源:知乎
clip_gradient 的引入是為了處理gradient explosion的問(wèn)題。當(dāng)在一次迭代中權(quán)重的更新過(guò)于迅猛的話,很容易導(dǎo)致loss divergence。clip_gradient 的直觀作用就是讓權(quán)重的更新限制在一個(gè)合適的范圍。
具體的細(xì)節(jié)是,
1.在solver中先設(shè)置一個(gè)clip_gradient
2.在前向傳播與反向傳播之后,我們會(huì)得到每個(gè)權(quán)重的梯度diff,這時(shí)不像通常那樣直接使用這些梯度進(jìn)行權(quán)重更新,而是先求所有權(quán)重梯度的平方和sumsq_diff,如果sumsq_diff > clip_gradient,則求縮放因子scale_factor = clip_gradient / sumsq_diff。這個(gè)scale_factor在(0,1)之間。如果權(quán)重梯度的平方和sumsq_diff越大,那縮放因子將越小。
3.最后將所有的權(quán)重梯度乘以這個(gè)縮放因子,這時(shí)得到的梯度才是最后的梯度信息。
這樣就保證了在一次迭代更新中,所有權(quán)重的梯度的平方和在一個(gè)設(shè)定范圍以?xún)?nèi),這個(gè)范圍就是clip_gradient.
最后補(bǔ)充一點(diǎn),這個(gè)參數(shù)多用于LSTM中,而我這個(gè)回答是基于jeffdonahue 在caffe Pull的RNN 代碼,你可以在 jeffdonahue/caffe at recurrent · GitHub 中的src/caffe/solver.cpp里看到具體的實(shí)現(xiàn)代碼。
總結(jié)
以上是生活随笔為你收集整理的clip\_gradient的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查看GPU信息 nvidia-smi
- 下一篇: 谷歌系列 :Inception v1到v