tf.clip_by_global_norm理解
2017-04-01 11:57
399 查看
转载自: http://blog.csdn.net/u013713117/article/details/56281715
Gradient Clipping的引入是为了处理gradient explosion或者gradients vanishing的问题。当在一次迭代中权重的更新过于迅猛的话,很容易导致loss divergence。Gradient Clipping的直观作用就是让权重的更新限制在一个合适的范围。
具体的细节是
在solver中先设置一个clip_gradient
在前向传播与反向传播之后,我们会得到每个权重的梯度diff,这时不像通常那样直接使用这些梯度进行权重更新,而是先求所有权重梯度的平方和再求根号sumsq_diff,如果sumsq_diff > clip_gradient,则求缩放因子scale_factor = clip_gradient / sumsq_diff。这个scale_factor在(0,1)之间。
最后将所有的权重梯度乘以这个缩放因子,这时得到的梯度才是最后的梯度信息。
这样就保证了在一次迭代更新中,所有权重的梯度的平方和在一个设定范围以内,这个范围就是clip_gradient.
tf.clip_by_global_norm 函数就是用来实现这个功能的
t_list 是梯度张量, clip_norm 是截取的比率,和上面的 clip_gradient是同一个东西。 这个函数返回截取过的梯度张量和一个所有张量的全局范数。
t_list[i] 的更新公式如下:
其中global_norm = sqrt(sum([l2norm(t)**2 for t in t_list])) 。相当于上面的sumsq_diff
global_norm 是所有梯度的平方和,如果 clip_norm > global_norm ,就不进行截取。
但是这个函数的速度比clip_by_norm() 要慢,因为在截取之前所有的参数都要准备好。其他实现的函数还有这些
http://blog.csdn.net/u014595019/article/details/52805444里有更加公式化的描述。
Gradient Clipping的引入是为了处理gradient explosion或者gradients vanishing的问题。当在一次迭代中权重的更新过于迅猛的话,很容易导致loss divergence。Gradient Clipping的直观作用就是让权重的更新限制在一个合适的范围。
具体的细节是
在solver中先设置一个clip_gradient
在前向传播与反向传播之后,我们会得到每个权重的梯度diff,这时不像通常那样直接使用这些梯度进行权重更新,而是先求所有权重梯度的平方和再求根号sumsq_diff,如果sumsq_diff > clip_gradient,则求缩放因子scale_factor = clip_gradient / sumsq_diff。这个scale_factor在(0,1)之间。
最后将所有的权重梯度乘以这个缩放因子,这时得到的梯度才是最后的梯度信息。
这样就保证了在一次迭代更新中,所有权重的梯度的平方和在一个设定范围以内,这个范围就是clip_gradient.
tf.clip_by_global_norm 函数就是用来实现这个功能的
tf.clip_by_global_norm(t_list, clip_norm, use_norm=None, name=None)
t_list 是梯度张量, clip_norm 是截取的比率,和上面的 clip_gradient是同一个东西。 这个函数返回截取过的梯度张量和一个所有张量的全局范数。
t_list[i] 的更新公式如下:
t_list[i] * clip_norm / max(global_norm, clip_norm)
其中global_norm = sqrt(sum([l2norm(t)**2 for t in t_list])) 。相当于上面的sumsq_diff
global_norm 是所有梯度的平方和,如果 clip_norm > global_norm ,就不进行截取。
但是这个函数的速度比clip_by_norm() 要慢,因为在截取之前所有的参数都要准备好。其他实现的函数还有这些
http://blog.csdn.net/u014595019/article/details/52805444里有更加公式化的描述。
相关文章推荐
- tf.clip_by_global_norm理解
- 转载!tf.clip_by_global_norm理解
- tf.clip_by_norm理解
- TensorFlow-tf.clip_by_global_norm函数原理
- tensorflow clip_by_norm函数理解
- 值域范围 tf.clip_by_value的用法
- tf.clip_by_value()
- tensorflow学习笔记(2):tf.clip_by_value,tf.expand_dims等函数的用法
- tensorflow API: tf.clip_by_value
- tf.clip_by_value 用法
- TensorFlow tf.clip_by_value tf.select 绝对值用法!
- Tensorflow: tf.clip_by_value
- tf.clip_by_value:将tensor中的0和NONE进行范围限制的函数
- 关于 tf.nn.softmax_cross_entropy_with_logits 及 tf.clip_by_value
- tf.clip_by_value的用法
- 数据库设计 Step by Step (5)——理解用户需求
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
- 深入理解start with.....connect by (三)静态行转列
- TF/IDF的理解和实现
- tf.reshape()的用法与理解