tf.clip_by_global_norm理解
来源:互联网 发布:ebsco外文期刊数据库 编辑:程序博客网 时间:2024/05/22 07:47
Gradient Clipping的引入是为了处理gradient explosion或者gradients vanishing的问题。当在一次迭代中权重的更新过于迅猛的话,很容易导致loss divergence。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(t_list, clip_norm, use_norm=None, name=None)
通过权重梯度的总和的比率来截取多个张量的值。
t_list
是梯度张量, clip_norm
是截取的比率, 这个函数返回截取过的梯度张量和一个所有张量的全局范数。
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]))
global_norm
是所有梯度的平方和,如果 clip_norm > global_norm
,就不进行截取。
但是这个函数的速度比clip_by_norm()
要慢,因为在截取之前所有的参数都要准备好。其他实现的函数还有这些
- tf.clip_by_global_norm理解
- tf.clip_by_global_norm理解
- 转载!tf.clip_by_global_norm理解
- TensorFlow-tf.clip_by_global_norm函数原理
- 理解TF和TF-IDF
- tf.nn.embedding_lookup理解
- tf.nn.conv2d理解
- 【tf-idf】理解
- tf矩阵乘法理解
- tf.clip_by_norm理解
- tf.identity()的理解
- tf树的一些理解
- tf-faster-rcnn代码理解
- tf.multinomial()函数的理解
- tf.reduce_sum理解(小记)
- tf.train.batch和tf.train.shuffle_batch的理解
- TF卡和SD卡理解
- TF-IDF理解及其Java实现
- SVN用户及权限配置
- 线程池简介
- jquery中eq和get
- C# Serialize() 抛出System.Runtime.Serialization.SerializationException
- Rxjava
- tf.clip_by_global_norm理解
- cocos code ide 导入cocos2d-js自带的实例
- svn-出现乱码和clear up无效解决方法
- 【video】视频编码标准汇总及比较
- 友元函数与运算符重载的结合
- Hadoop Secondarynamenode原理分析
- Why does my Authorize Attribute not work-
- Oracle数据库、实例、用户、表空间、表之间的关系
- Devtool