当前位置:首页 >> 开发者生态 >> 【theano-windows】学习笔记十七——梯度中的consider_constant,lgkc550(梯度设置)

【theano-windows】学习笔记十七——梯度中的consider_constant,lgkc550(梯度设置)

cpugpu芯片开发光刻机 开发者生态 2
文件名:【theano-windows】学习笔记十七——梯度中的consider_constant,lgkc550 【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 theanoimport theano.tensor as T

定义标量操作

w=T.dscalar('w')x=w**2y=w**3z=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中关于梯度计算的理论, 来合理设置是否需要固定某项来更新梯度.

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接