在反向传播过程中,神经网络需要对每一个loss对应的学习参数求偏导,算出的这个值叫做梯度,用来乘以学习率然后更新学习参数使用的
求单变量偏导
它是通过tf.gradients函数来实现的。
tf.gradients(ys,xs,grad_ys=None,name=’gradients’,colocate_gradients_with_ops=False,gate_gradients=False, aggregation_method=None,stop_gradients=None)
第一个参数为求导公式的结果,第二个参数为指定公式中的哪个变量来求偏导。实现第一个参数对第二个参数求导。
1 | import tensorflow as tf |
上面例子中,由于y是由w1与[[9],[10]]相乘而来,所以导数就是[[9],[10]],也就是斜率
求多变量偏导
这就需要用到tf.gradients的第三个参数,grad_ys。grad_ys也是一个list,其长度等于len(ys)。这个参数的意义在于对第一个参数中的每个元素的求导加权重
1 | import tensorflow as tf |
梯度停止
对于反向传播过程中某种特殊情况需要停止梯度运算时,在tensorflow中提供了一个tf.stop_gradient函数,被它定义过的节点将没有梯度运算功能
1 | import tensorflow as tf |