强化学习
通过价值选行为: DEEP Q NETWORK 价值
直接选行为: POLICY GRADIEND 概率
想象环境并学习: MODEL BASED RL
以上都可以用于不理解环境与理解环境两种模式,区别在于, model-free依靠一步一步对环境的反馈学习, model-base预先模拟所有可能。(model-base更强)
基于概率的可以用于连续动作,使用概率分布,而基于价值的则不行。policy + dq =
actor-critic。
单步更新, policy-gradient
tkinter编写虚拟环境
DQ:
Q(s1,a2)现实 = R + r*maxQ(s2) R奖励=0
Q(s1,a2)估计 = Q(s1,a2)
Q(s1,a2) = Q(s1,a2) + a[R + r*maxQ(s2)-Q(s1,a2) ]
Q(s1)=R2 + r^2*R3 + r^3*R4...
Qtable例子:
state: 距离最终结果多少步
action: 每一步可以执行的操作,左|右
Sarsa:
Q(s1,a2)现实 = R + r*Q(s2,a2) R奖励=0
Q(s1,a2)估计 = Q(s1,a2)
Q(s1,a2) = Q(s1,a2) + a[R + r*Q(s2,a2)-Q(s1,a2) ]
DQ与Sarsa的区别在于DQ使用maxQ最快获得目标, Sarsa更加保守,是一种自己玩的在线式学习。
Sarsa(lammda):
Sarsa(0)单步更新, Sarsa(n)回合更新,因此对奖励距离进行衰减,回望所有步,距离奖励越近越重要,lammda越大。
DQN
将s输入神经网络生成a1 a2的Q值,
神经网络输出 Q估计 Q(s2)
Q现实 = R + r*maxQ(s2)
两者之差用于更新神经网络
记忆库 与固定参数, 将Q估计使用最新参数, 将Q现实使用旧参数。
两个网络,一个存储最新参数,另一个存储老参数, 老的更新最新的, 新的变为老的。
Double DQN
Q现实 = R + r*maxQ(s2) maxQ会将最大误差考虑进Qtarge, 是模型过拟合。
DDQN采用两个叠加网络:
Q现实 = R + r*Q(s2, maxQ(s2))
这里分数是连续的,但动作是11个,因此需要将动作离散化。
另一种优化方法,抽取重要记忆,而不是随机抽取。
TDerror = Q现实 - Q估计
误差值越大,代表越重要,越需要学习。
为避免每次重新排序,使用sumTree存储数据,得分高的储存在树根,得分低的储存在分支。
duelingDQN:
计算每个state的值value,计算在state基础上计算每个action的值。
Policy gradient:
不是基于值输出动作,而是通过奖惩机制增大下次选中的概率。
QLearing是基于离散点的动作,后者是基于连续动作,一个回合中的。
π(s,a)vt vt为奖励值。在网络中使用softmax计算概率,使用one-hot记录动作,因为tf只有min_loss,而这里是要求概率最大的动作,所以用max_loss。
actor critic:
policy or critic是回合更新,dq or actor是单步更新, 两者结合虽然能提升性能, 但是在连续状态上的更新增加了两个神经网络的相关性。
actor网络负责预测动作, critic网络负责打分。
因此有了DDPG:
Deep: 与DQN相似, 一个记忆库, 两个更新频率不同的网络。
Policy gradient:
动作估计网络: 预测下一步动作
动作现实网络: 打分, 并传给 value based的估计网络。
Value based:
状态估计网络: 为动作现实网络打分
状态现实网络: 为动作估计网络打分
A3c:
并发学习,通过多线程汇总减少网络相关性。