目录
一、Q-Learning
(Q:状态动作价值)
1.value-based、off-policy
2.算法思想:将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。
3.更新公式:
Q表格更新:重复执行多次episode,直至:Q矩阵达到收敛或无变化或变化很小、或平稳分布。
二、Sarsa
(该算法由于更新一次动作值函数需要用到 5 个量(s,a,r,s′,a′),所以被称为 Sarsa 算法)
1.value based、on-policy
2.算法思想:Sarsa 算法与 Q-Learning 算法相似,也是利用 Q 表来选择动作,唯一不同的是两者 Q 表的更新策略不同。
3.更新公式:
三、DQN
1.value based、off-policy
2.算法思想:神经网络+Q-Learning
3.更新公式:
4.DQN两大创新点:
(1)经验回放:off-policy,解决样本关联性
(2)固定Q目标:Q现实:之前的参数;Q估计:最新参数,解决非平稳性
从而引出两个神经网络:一个用于记忆库(重复学习)、一个用于暂时冻结Qtarget参数(切断相关性)
四、Policy Gradients
1.policy-based
2.算法思想:基于策略Policy来做梯度下降从而优化我们的模型(为使Agent能够尽量执行较好的动作,需要使用执行了该动作后得到的反馈reward来判定本次的策略好坏,也就是说我们想要训练我们的Agent倾向于做出那些reward较高的动作。)
3.更新公式:
4.value-based与policy-based
五、Actor-Critic
1.算法思想:结合了Policy Gradient(Actor)和Function Approximation(Critic)的方法。Actor基于概率选行为,Critic基于Actor的行为评判行为的得分,Actor再根据Critic的评分修改选行为的概率。
(1)优势:可进行单步更新,比传统的PolicyGradient更快。
(2)劣势:取决于Ctric的价值判断,再加上Actor的更新,更难收敛。
2.改进:Actor-Critic+DQN得到DDPG,成功解决了在连续动作上预测学不到东西的问题。
六、DDPG
(Deep Deterministic Policy Gradient——连续动作空间上求解RL)
1.离散动作VS连续动作
cr:https://www.bilibili.com/video/BV1yv411i7xd?p=18绝绝子!
2.算法思想
注:
(1)target_Q和target_P网络:为了让Q_target计算更稳定
(2)DDPG:求解让Q值最大的Action (DQN:训练很好的Q网络,让选取的动作对应的Q值最大)
(3)网络代码的框架:
class Actor(object):
def __init__(self, sess, action_dim, action_bound, learning_rate, replacement):
def _build_net(self, s, scope, trainable):
def learn(self, s): # batch update
def choose_action(self, s):
def add_grad_to_graph(self, a_grads):
class Critic(object):
def __init__(self, sess, state_dim, action_dim, learning_rate, gamma, replacement, a, a_):
def _build_net(self, s, a, scope, trainable):
def learn(self, s, a, r, s_):
class Memory(object):
def __init__(self, capacity, dims):
def store_transition(self, s, a, r, s_):
def sample(self, n):
完整代码:MorvanZhou (Morvan) · GitHub
七、算法选择
一般,我们需要根据环境中的agent的动作是连续还是离散的来选择相应的强化学习方法,通常
(1)离散动作(动作是一个离散值,比如:CartPole-v0):Q-Learning、DQN
(2)连续动作(动作是一个连续值,比如:Pendulum-v0):Policy gradient、DDPG