【theano-windows】学习笔记十七——梯度中的consider_constant

前言

主要是在写玻尔兹曼机相关的theano时, 在计算梯度grad的时候发现一个参数名字叫做consider_constant,来看看这个到底做了什么事情

参考博客:

using consider_constant selectively

【theano-windows】学习笔记三——theano中的导数

理论

其实就是数学中求导中用到的将某个与变量相关的项固定, 求解其它项关于变量的梯度. 我记得有个梯度下降法叫做固定坐标梯度下降, 就是先固定x利用y优化函数, 然后固定y优化x之类的, 后续我去看看, 感觉如果它用theano实现的话可能会用到这个参数

用数学的方法表示就是, 如果有如下的操作

x=w2,y=w3,z=x+y

如果我们不使用 consider_constant, 那么对 w 求导的结果是
zw=2w+3w2

但是如果设置 consider_constant=[x],那么求导结果就是
zw=3w2

其实看看我前面用 theano实现RBM的 博客中容易发现使用 consider_constant=[吉布斯采样k次的visible层输出]的原因在于这个 visible的值计算是与模型参数有关的, 如果不设置它为常量, 最终的导数不止是计算能量函数的导数了, 还会额外计算这个 visible对模型参数的导数, 这并不是RBM的正常梯度更新方法所需要的, 详细可看博客RBM的利用自由能量函数更新梯度的数学表达式

验证

先引入相关包

import theano
import theano.tensor as T

定义标量操作

w=T.dscalar('w')
x=w**2
y=w**3
z=x+y

不设置常量参数的情况下计算导数

gz=T.grad(z,w)
fn=theano.function([w],gz)
theano.pp(fn.maker.fgraph.outputs[0])

结果

Elemwise{Composite{((i0 * i1) + (i2 * sqr(i1)))}}(TensorConstant{2.0}, w, TensorConstant{3.0})

翻译过来就是 (2w)+(3w2)

设置x为常量参数的情况下

gz=T.grad(z,w,consider_constant=[x])
fn=theano.function([w],gz)
theano.pp(fn.maker.fgraph.outputs[0])

结果

Elemwise{Composite{(i0 * sqr(i1))}}(TensorConstant{3.0}, w)

翻译过来就是 3w2

后记

根据我们的cost中关于梯度计算的理论, 来合理设置是否需要固定某项来更新梯度.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风翼冰舟

额~~~CSDN还能打赏了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值