tf的clip_gradient实现

本文介绍了TensorFlow中用于防止梯度爆炸的clip_gradient操作。通过对比不同类型的norm方法,包括简单的截断、l2norm限制、l2norm平均限制以及全局l2norm限制,详细阐述了每种方法的实现原理和效果,强调了clip_gradient对于稳定训练的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们平常再实现一次BP

tf.train.GradientDescentOptimizer(0.01).minimize(loss)

但是查看minimize()的源码

grads_and_vars = self.compute_gradients(
        loss, var_list=var_list, gate_gradients=gate_gradients,
        aggregation_method=aggregation_method,
        colocate_gradients_with_ops=colocate_gradients_with_ops,
        grad_loss=grad_loss)

    ...

    return self.apply_gradients(grads_and_vars, global_step=global_step,
                                name=name)

compute_gradientsapply_gradients两步:

compute_gradients:计算各组权重梯度
apply_gradients:将梯度,以BP的公式更新权重

我们clip_gradient就是在compute_gradients步骤之后,对太大的gradient进行norm操作,防止gradient explosion。
主要的norm方法有以下四种:

1.tf.clip_by_value(t, clip_value_min,clip_value_max)

最简单的方式,大于clip_value_max的就令为clip_value_max;小于clip_value_min就令为clip_value_min。

import tensorflow as tf
import numpy as np

A = np.array([[1, 1, 2, 4], [3, 4, 8, 5]])

with tf.Session() as sess:
    print(sess.run(tf.clip_by_value(A, 2, 5)))

结果:

[[2 2 2 4]
 [3 4 5 5]]
2.tf.clip_by_norm(t, clip_norm)

先计算传入的tl2norml_2norml2norm,如 l2norm(t)≤clip_norml_2norm(t) ≤ clip\_norml2norm(t)clip_norm,则t不变;否则tclip_norm=t∗clip_norml2norm(t)t_{clip\_norm}=\frac{t*clip\_norm }{l_2norm(t)}tclip_norm=l2norm(t)tclip_norm ,如:

import tensorflow as tf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值