深度学习之梯度裁剪
·
到底什么是L2 Norm_豪哥123的博客-CSDN博客_l2 norm最近复现论文有这么一个结构:池化之后有一个l2-norm。norm是normalization的缩写。ok,看看这是啥标准化?正规化?归一化?…正确答案L2归一化:将一组数变成0-1之间。pytorch调用的函数是F.normalization。文档是这样写的:对于L2来说,p=2,分母就是(x12+x22+...+xn2)\sqrt{( x_1^2 + x_2^2 + ... +...
https://blog.csdn.net/qq_22210253/article/details/86545354
梯度剪裁的原因
神经网络是通过梯度下降来学习的。而梯度爆炸问题一般会随着网络层数的增加而变得越来越明显。如果发生梯度爆炸,那么就是学过了,会直接跳过最优解。
例如:在反向传播中,假设第一层倒数乘以权重> 1,随着向前网络的传播的层数越多,梯度可能会越来越大。 (梯度消失相反)
所以需要梯度裁剪,避免模型越过最优点。
梯度裁剪的使用
常见的梯度裁剪有两种
- 确定一个范围,如果参数的gradient超过了,直接裁剪
- 根据若干个参数的gradient组成的的vector的L2 Norm进行裁剪
第一种方法,比较直接,对应于pytorch中的nn.utils.clip_grad_value(parameters, clip_value). 将所有的参数剪裁到 [ -clip_value, clip_value]
第二中方法也更常见,对应于pytorch中clip_grad_norm_(parameters, max_norm, norm_type=2)。 如果所有参数的gradient组成的向量的L2 norm 大于max norm,那么需要根据L2 norm/max_norm 进行缩放。从而使得L2 norm 小于预设的 clip_norm
梯度裁剪的使用位置
在backward得到梯度之后,step()更新之前,使用梯度剪裁。从而完成计算完梯度后,进行裁剪,然后进行网络更新的过程。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)