TensorFlow-tf.clip_by_global_norm函数原理
2017-08-15 15:49
351 查看
Gradient Clipping的引入是为了处理gradient explosion(不是gradients vanishing)的问题。当在一次迭代中权重的更新过于迅猛的话,很容易导致loss
divergence。Gradient Clipping的直观作用就是让权重的更新限制在一个合适的范围。
Gradient Clipping的具体细节是
1.在solver中先设置一个
2.在前向传播与反向传播之后,我们会得到每个权重的梯度
3.最后将所有的权重梯度乘以这个缩放因子,这时得到的梯度才是最后的梯度信息。
这样就保证了在一次迭代更新中,所有权重的梯度的平方和在一个设定范围以内,这个范围就是clip_gradient.
divergence。Gradient Clipping的直观作用就是让权重的更新限制在一个合适的范围。
Gradient Clipping的具体细节是
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.
相关文章推荐
- tf.clip_by_global_norm理解
- 转载!tf.clip_by_global_norm理解
- Tensorflow: tf.clip_by_value
- tf.clip_by_global_norm理解
- tensorflow API: tf.clip_by_value
- 【TensorFlow报错】initialize_all_variables改为tf.global_variables_initializer
- tf.clip_by_value的用法
- tensorflow里的tf.contrib.framework.get_global_step()
- 值域范围 tf.clip_by_value的用法
- TensorFlow tf.clip_by_value tf.select 绝对值用法!
- tensorflow学习笔记(2):tf.clip_by_value,tf.expand_dims等函数的用法
- tf.clip_by_value:将tensor中的0和NONE进行范围限制的函数
- [TensorFlow] demo1 tf.initialize_all_variables函数换成新的tf.global_variables_initializer函数
- 关于 tf.nn.softmax_cross_entropy_with_logits 及 tf.clip_by_value
- tf.clip_by_value()
- 【TensorFlow报错】initialize_all_variables改为tf.global_variables_initializer
- TensorFlow 学习(三)—— Variables(tf.initialize_all_variables()/tf.global_variables_initializer())
- tf.clip_by_value 用法
- tf.clip_by_norm理解
- TensorFlow 使用 tf.scalar tf.summary