【theano-windows】学习笔记十七——梯度中的consider_constant
生活随笔
收集整理的這篇文章主要介紹了
【theano-windows】学习笔记十七——梯度中的consider_constant
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
主要是在寫玻爾茲曼機相關的theano時, 在計算梯度grad的時候發現一個參數名字叫做consider_constant,來看看這個到底做了什么事情
參考博客:
using consider_constant selectively
【theano-windows】學習筆記三——theano中的導數
理論
其實就是數學中求導中用到的將某個與變量相關的項固定, 求解其它項關于變量的梯度. 我記得有個梯度下降法叫做固定坐標梯度下降, 就是先固定x利用y優化函數, 然后固定y優化x之類的, 后續我去看看, 感覺如果它用theano實現的話可能會用到這個參數
用數學的方法表示就是, 如果有如下的操作
如果我們不使用 consider_constant, 那么對 w求導的結果是
?z?w=2w+3w2
但是如果設置 consider_constant=[x],那么求導結果就是
?z?w=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})翻譯過來就是(2?w)+(3?w2)
設置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)翻譯過來就是3?w2
后記
根據我們的cost中關于梯度計算的理論, 來合理設置是否需要固定某項來更新梯度.
總結
以上是生活随笔為你收集整理的【theano-windows】学习笔记十七——梯度中的consider_constant的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡还款了多久可以刷出来?还款了怎么还
- 下一篇: 【Ogre-windows】实例配置