梯度爆炸的解决方法:Gradient Clipping

随着神经网络层数的增多,会出现梯度消失或梯度爆炸问题。原因可以参考之前写过的文章。

针对梯度爆炸问题,解决方案是引入Gradient Clipping(梯度裁剪)。通过Gradient Clipping,将梯度约束在一个范围内,这样不会使得梯度过大。

在tensorflow 文档中,可以看到Gradient Clipping板块有五个函数。这里,我们仅仅介绍其中两个:tf.clip_by_norm(t,clip_norm,name=None)tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)

  • tf.clip_by_norm(t,clip_norm,name=None)
    参数说明: t: a tensor ; clip_norm: 阈值,即maximum L2-norm。
    如果 tensor的L2-norm大于clip_norm,则 t = t * clip_norm / l2norm(t)
    否则t = t
  • tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)
    参数说明: t_list: multiple tensors; clip_norm: a clipping ratio; use_norm: 如果你已经计算出global_norm,你可以在use_norm进行指定。
t_list[i] = t_list[i] * clip_norm / max(global_norm,clip_norm)
where 
global_norm = sqrt(sum(l2norm(t)**2 for t in t_list))

Any of the entries of t_list that are of type None are ignored.
This is the correct way to perform gradient clipping (for example, see R. Pascanu, T. Mikolov, and Y. Bengio, “On the difficulty of training Recurrent Neural Networks”. http://arxiv.org/abs/1211.5063)

通过介绍这两个函数,可以意识到tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)更慢一些,因为它需要等所有的梯度都求出来才可以进行梯度截断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值