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