微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pyTorch等效于SciPy.minmise

如何解决pyTorch等效于SciPy.minmise

解决最小似然问题以学习逆强化学习模型的奖励函数。我已经在NumPy中构建了该函数,并使用scipy.minimise设法通过将似然函数返回的梯度有效地最小化了似然函数

但是...

我现在已经将我的实现集成到pyTorch和scipy.minimise并不能很好地工作。它始终以ABnorMAL_TERMINATION_IN_LNSRCH错误终止。

我意识到这里有torch.optim库,我尝试使用torch.optim.lbfgs()方法,但是它似乎是为神经网络构建的,我不知道如何配置max / min可能性问题。

有人知道使用scipy.minimise配置pyTorch.optim来匹配这种可能性最小化吗?

#set likelihood variables
lh = Likelihood()
lh.set_variables_for_likehood(mdp_data,N,T,example_samples)

#minimise likelihood with analytically computed gradient
guess = torch.randn(mdp_params['n']**2,1)
res = minimize(lh.negated_likelihood,guess,jac=True,method="L-BFGS-B",options={'disp': True})

为了记录,我的似然函数是:

def negated_likelihood(self,r):

        if(torch.is_tensor(r) == False):
            r = torch.tensor(r)
            
        #Reshape R to expected
        if(r.shape != (4,5)):
            r = torch.reshape(r,(4,1))
            r = r.repeat((1,5))
            
        #Solve MDP with current reward
        v,q,logp,p = linearvalueiteration(self.mdp_data,r)

        #Calculate likelihood from logp
        likelihood = sum(sum(logP*self.mu_sa))
        likelihood = likelihood.item() #get scalar value

        #Compute state visitation count D
        D = linearmdpfrequency(self.mdp_data,p,self.initD)

        #Compute gradient.
        dr = self.muE - torch.matmul(torch.t(self.F),D)
        dr = -dr #Invert for descent.
        dr = dr.detach().cpu().numpy() #convert to array
        
        return -(likelihood),dr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。