Please enable JavaScript.
Coggle requires JavaScript to display documents.
Reinforcement Learning (:banana:Gym (:reminder_ribbon:概念 (:one:Environment…
Reinforcement Learning
:dagger_knife:method
:one:Policy Based
:bread:学习只考虑当前环境状态,应该采取的Action
:heavy_dollar_sign:通用, 适合多种/高维Action或者有连续取值的Action环境
-
-
:two:Value Based
:bread:预测某个环境状态下所有Action的期望价值(Q值),之后选择Q值最高的Action执行策略
-
-
policy does not need extra parameters, since policy is determined by state-action value function
:three:Model Based
-
:sweat_drops:"环境状态 * Action数量"
很庞大,内存消耗大,效率低
-
:reminder_ribbon:概念
:one:三要素
-
:three:Reward
:warning:有些Reward是delayed,不是在执行Action后能即时得到的,这些Reward叫做Discounted Future Reward
-
-
:two:Agent
:bread:观察Environment State,执行强化学习模型给出的Action.执行Action后会获得Reward
:three:observation
-
:bread:observation不一定等于Environment State, 前者在大多数情况下只包含环境的部分信息
-
:banana:Gym
-
-
-
-
:icecream:例子
:one:CartPole
:moneybag:内容
:one:Environment State
:explode:四要素:小车位置,速度, 杆的角度, 速度
:two:Action
:explode:二维: 0 或1, 表示向左施力和向右施力
:three:Reward
:explode:每坚持一秒,就获得+1的Reward
-
:maple_leaf:解决
:one:Policy Gradients方法
:banana:遇到的问题
:one:反馈的平均reward到达一定值后就跌到9左右,计算出来的梯度是nan
:explode:因为在append每个时间点的observation, action, reward的时候,错置了
:bread:我初始化的时候用observation = env.reset(),这个时候得到action,但是马上应用到env.step里,这个时候才append observation和action,但其实action对应的应该是上一个observation
-
:three:如何得到可训练变量的梯度的buffer,也就是说我怎么知道可训练变量计算出来的梯度的类型和形状
:explode:实际梯度要应用到tf.gradients第二个参数,所以形状和第二个参数相同,而类型就固定是float了
:four:什么时候计算梯度
:bread:计算梯度肯定是针对一个实例的.而在CartPole中,一个episode就是一个实例,在任务结束后就需要计算一次梯度
:baguette_bread:每次计算后都会相加到梯度的缓冲区汇总,达到一个批次的时候,直接应用到模型中(不用做平均值)
-
-
-
-
-
:pineapple:空间
:explode:Gym对空间的定义可以分为两类
:one:Box
-
:icecream:Box(-1, 1, (3, 4))
:explode:(3, 4)
的二维空间上每个数据都在[-1, 1]
之间
:two:Discrete
:explode:描述了一个Categorical分布的空间,空间由N个离散状态构成,每一个状态之间排斥
-
:cherries:Wrapper
:explode:在Gym已有环境基础上做一些改变,扩展新的功能
:snowflake:定义了一个类,然后重载_step
,_observation
等方法
:melon:强化学习研究的窘境
:one:缺乏高质量的Benchmark
:bread:相比较于图像识别,监督学习等问题,强化学习的任务环境稀缺,而且设置环境的过程也十分繁琐
-
-
Actor-Critic
-
:two:Critic
-
输入
state, next_state, reward, action