设为首页 加入收藏

TOP

学习笔记TF037:实现强化学习策略网络(二)
2017-10-09 14:10:17 】 浏览:2337
Tags:学习 笔记 TF037: 实现 强化 策略 网络
d+1。Reward恒定。模型要考虑到长远利益,不只是学习当前Reward。

env.reset()方法初始化环境,获取环境第一个Observation。根据Observation预测应该采取Action,用env.step(action),在环境中执行Action,返回Observation(CartPole 4维抽象特征)、reward(当前Action即时奖励)、done(任务是否结束标记,True,reset任务)、info(额外诊断信息)。进入Action-Observation循环,期望任务结束时尽可能高奖励。Action在CartPole离散数值空间,有限几种可能。别的任务可能是连续数值空间。环境名称后带版本号,环境发生更新或变化,不修改之前环境,创建新版本,Agent性能公平比较。调用env.monitor方法,监控、记录模型训练过程。gym.upload,训练日志上传到gym service展示,与他人算法比较。简单问题评测标准,需要多少步训练可以稳定达到理想分数。复杂问题评测标准,获得分数越高越好。

TensorFlow创建基于策略网络Agent,解决CartPole问题。先安装OpenAI Gym。pip install gym 。载入Numpy、TensorFlow、gym。gym.make('CartPole-v0')创建CartPole问题环境env。

先测试CartPole环境随机Action表现,作对比baseline。env.reset()初始化环境,10次随机试验,env.render()渲染CartPole问题图像。np.random.randint(0,2)产生随机Action。env.step()执行随机Action,获取返回observation、reward、done。如done标记为True,一次试验结束,倾角超过15度或偏离中心过远,任务失败。展示试验累计奖励reward_sum,重启环境。

随机策略奖励总值在10~40,均值在20~30。任务完成目标设定200 Reward,通过尽量少次数试验完成。

策略网络用简带一个隐含层MLP。设置网络超参数,隐含节点数H设50,bactch_size设25,学习速率learning_rate 0.1,环境信息observation维度D 4,gamma Reward discount比例0.99。估算Action期望价值(估算样本学习目标),考虑Delayed Reward,Action之后获得所有Reward做discount累加,让模型学习未来可能出现的潜在Reward。discount比例小于1,防止Reward无损耗累加导致发散,可以区分当前Reward和未来Reward价值,Action直接带来的Reward不需要discount,未来Reward存在不确定性需要discount。

定义策略网络结构,网络接受observation 输入信息,输出概率值,用以选择Action,向左施加力,向右施加力。创建输入信息observation placeholder,维度D。tf.contrib.layers.xavier_initializer初始化算法创建隐含层权重W1,维度[D,H]。tf.matmul,环境信息observation乘W1,用ReLU激活函数处理得到隐含层输出layer1,不加偏置。xavier_initializer算法创建最后Sigmoid输出层权重W2,隐含层输出layer1乘W2,Sigmoid激活函数处理得到最后输出概率。

模型优化器用Adam算法。设置两层神经网络参数梯度placeholder,W1Grad、W2Grad。adam.apply_gradients定义更新模型参数操作updateGrads。计算参数梯度,积累一定样本量梯度,传入W1Grad和W2Grad,执行updateGrads更新模型参数。深度强化学习训练用batch training。不逐个样本更新参数,累计一个batch_size样本梯度再更新参数,防止单一样本随机扰动噪声对模型带来不良影响。

定义函数discount_rewards,估算每个Action对就潜在价值discount_r。CartPole问题每次获得Reward和前面Action有关,属于delayed reward。需要比较精准衡量每个Action实际带来价值,不能只看当前这步Reward,要考虑后面Delayed Reward。让Pole长时间保持在空中竖直Action,应该有较大期望价值。最终导致Pole倾例Action,有较小期望价值。越靠后Acion期望价值越小,越靠前Acion期望价值越大。倒推过程,最后Action开始计算所有Action应该对应期望价值。输入数据r ,每个Action实际获得Reward,CartPole,最后结束时Action 0,其余 1。定义每个Action除直接获得Reward外,潜在价值running_add。running_add,从后向前累计,经过discount衰减。每个Action潜在坐,后一Action潜在价值乘以衰减系数gamma,加直接获得reward,running_add*gamma+r[t]。从最后Action,向前累计计算,得到全部Action潜在价值。

定义人工设置虚拟label placeholder input_y。每个Action潜在价值placeholder advangtages。loglik,Action取值 1概率probability(策略网络输出概率),Action取值 0概率 1-probability。label取值,label=1-Action。Action 1,label 0,loglik=tf.log(probability),Action取值为1的概率对数。Action 0,label 1,loglik=tf.log(1-probability),Action取值为0的概率对数。loglik,当前Action对应概率对数。loglik与潜在坐advantages相乘,取负数作损失,优化目标。优化器优化,能获得较多advantages Action概率变大,能获得较少advantages Action概率变小,损失变小。不断训练,持续加大能获得较多advantages Action概率,学习到一个能获得更多潜在价值策略。tf.trainable_variables()获取策略网络全部可训练参数tvars,tf.gradients求解模型参数 loss梯度。

定义参数,xs环境信息observation列表,ys label列表,drs记录每个Action Reward,reward_sum累计Reward,总试验次数total_episodes10000。达到200 Reward停止训练。

创建默认Session,初始化全部参数,一开始render标志关闭。render较大延迟,一开始不太成熟模型没必要观察。初始化CartPole环境,获得初始状态。sess.run执行tvars获取所有模型参数,创建储存参数梯度缓冲器gradBuffer,gardBuffer全部初始化零。每次试验收集参数梯度存储到gr

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇R语言——任务2 下一篇学习笔记TF043:TF.Learn 机器学习..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目