首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >威廉斯提出的加固算法示例代码吗?

威廉斯提出的加固算法示例代码吗?
EN

Stack Overflow用户
提问于 2015-02-11 15:09:58
回答 1查看 4.2K关注 0票数 12

中提出的算法罗纳德·J·威廉姆斯的示例代码是否有人知道?

一类神经网络强化学习的梯度估计算法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 16:02:48

是的,在GitHub上搜索一下,就会得到大量的结果:

GitHub: WILLIAMS+REINFORCE

最流行的代码使用此代码(在Python中):

代码语言:javascript
复制
__author__ = 'Thomas Rueckstiess, ruecksti@in.tum.de'

from pybrain.rl.learners.directsearch.policygradient import PolicyGradientLearner
from scipy import mean, ravel, array


class Reinforce(PolicyGradientLearner):
""" Reinforce is a gradient estimator technique by Williams (see
    "Simple Statistical Gradient-Following Algorithms for
    Connectionist Reinforcement Learning"). It uses optimal
    baselines and calculates the gradient with the log likelihoods
    of the taken actions. """

def calculateGradient(self):
    # normalize rewards
    # self.ds.data['reward'] /= max(ravel(abs(self.ds.data['reward'])))

    # initialize variables
    returns = self.dataset.getSumOverSequences('reward')
    seqidx = ravel(self.dataset['sequence_index'])

    # sum of sequences up to n-1
    loglhs = [sum(self.loglh['loglh'][seqidx[n]:seqidx[n + 1], :]) for n in range(self.dataset.getNumSequences() - 1)]
    # append sum of last sequence as well
    loglhs.append(sum(self.loglh['loglh'][seqidx[-1]:, :]))
    loglhs = array(loglhs)

    baselines = mean(loglhs ** 2 * returns, 0) / mean(loglhs ** 2, 0)
    # TODO: why gradient negative?
    gradient = -mean(loglhs * (returns - baselines), 0)

    return gradient
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28457688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档