Theano几何布朗运动的最大可能性

时间:2014-02-21 21:01:12

标签: python machine-learning theano

我正在尝试使用Theano对几何布朗运动进行最大似然估计(MLE)。我知道,Theano主要是一个ML库,但它应该工作......(当然我只是尝试Theano而我最终的目标是为一个稍微复杂的模型做MLE ... ..)

在SO处写数学是一个婊子,所以查找GBM,例如here

这是Theano代码,稍微修改了Theano教程中的逻辑回归示例:

training_steps = 1000
dt = 1/390
NT = len(Xdata)
rng = np.random
rate = 0.001

# Declare Theano symbolic variables
X = T.vector("X")
dX = T.vector("dX")
mu = theano.shared(rng.randn(), name="mu")
sigma2 = theano.shared(rng.random(), name="sigma2")

print("Initial model:")
print(mu.get_value())
print(sigma2.get_value())

# Construct Theano expression graph

eps = (dX - mu*dt*X)/X
summand1 = eps**2
loghood = summand1.sum()/sigma2/dt + NT*T.log(sigma2)
gmu, gsigma2 =  T.grad(loghood, [mu, sigma2])

# Compile
train = theano.function(
          inputs=[X,dX],
          outputs=[loghood],
          updates=((mu, mu - rate * gmu), (sigma2, sigma2 - rate * gsigma2)))

# Train
costlist = []
mulist = []
siglist = []
for i in range(training_steps):
    cost = train(Xdata, dXdata)
    costlist.append(cost[0])
    mulist.append(mu.get_value())
    siglist.append(sigma2.get_value())

print("Final model:")
print(mu.get_value())
print(sigma2.get_value())

plot(costlist)
  • loghood是对数似然,应该最小化w.r.t mu和sigma2
  • Xdata是从GBM模拟的,dXdata [n] = Xdata [n + 1] - Xdata [n]
  • autodifferentiation应该工作正常,我也尝试手工放置渐变
  • 为了调试目的,添加了
  • costlist,mulist,siglist

所以我得到的是火车功能评估初始mu,sigma2的OK,但是在第2步,mu,sigma2根据渐变更新,火车功能似乎适得其反,给出了疯狂的数字或楠:■...

我将结果与精确的MLE进行了比较,并通过scipy.optimize.minimize进行了最小化,两者都运行得很好。我认为问题出现在上面的“对数”中,但我无法弄明白......

那么有人可以找出代码出错的地方吗?

0 个答案:

没有答案