强化学习基础

强化学习的三种方法

  • 基于价值(value-based)
  • 基于策略(policy-based)
  • 基于模型(model-based)

一 基于价值的方法

基于价值 (Value-Based)这种方法,目标是优化价值函数V(s)。
价值函数会告诉我们,智能体在每个状态里得出的未来奖励最大预期 (maximum expected future reward) 。
一个状态下的函数值,是智能体可以预期的未来奖励积累总值,从当前状态开始算。
智能体要用这个价值函数来决定,每一步要选择哪个行动。它会采取函数值最大的那个行动。
强化学习基础_第1张图片

Bellman方程

该方程表示动作价值函数,即在某一个状态下,计算出每种动作所对应的value(或者说预期的reward)。
St表示t时刻具体的状态值
Rt表示t时刻所获得的奖励
Gt表示t时刻总的回报奖励,因为当前时刻做的某一个决定,未来不同时刻都会有不同形式的奖励。
(或者也可以这么理解:Gt代表的是当前时刻某一个动作所带来的的奖励,而v(s)就表示在当前时刻的一个奖励期望,即综合考虑所能采取的所有动作之后我们所能获得的奖励,我们把v(s)称为value function)
这个公式就是Bellman方程的基本形态。从公式上看,当前状态的价值和下一步的价值以及当前的反馈Reward有关。它表明价值函数(Value Function)是可以通过迭代来进行计算的!!!
强化学习基础_第2张图片

二 基于策略的方法

这种方式,会直接优化策略函数π(s),抛弃价值函数。
策略就是评判智能体在特定时间点的表现。把每一个状态和它所对应的最佳行动建立联系。
策略分为两种,
· 确定性策略:某一个特定状态下的策略,永远都会给出同样的行动。
· 随机性策略:策略给出的是多种行动的可能性分布。
强化学习基础_第3张图片
从图中我们可以看到,策略直接指出了每一步的最佳行动

  • 基于策略的方法往往比基于值的方法收敛到更好的解决方案。原因是,解决方案是梯度推出来的,而梯度总是指向微分函数的最陡峭方向。当运用误差函数并采用梯度下降法时,每一步都做都会让误差函数的值最小化。但是,如果几个动作间的差异比较小,基于值的方法产生的结果差异更大,无法保证收敛。
  • 值函数需要明确定义的环境,在该环境下动作会产生确定的结果。如果学习过程是随机的,那么在采取相同动作时,可能有不同的结果(观测),这样值函数就没法使用了。基于策略的方法不需要采取相同的动作来探索环境。
  • 在高维空间内,基于策略的方法的计算成本更低,计算的更快。这是因为基于值的方法要求我们为每一种可能的动作计算一个价值。如果空间中的动作太多了,值函数就不会收敛于一个解决方案。基于策略的方法不同,因为本质上只是让我们执行动作并且调整梯度。

动作价值函数

Bellman方程是价值函数,它直接估计的是某个状态下所有动作的价值期望,但是如果我们能够知道某个状态下每个动作的价值岂不是更好?这样我们可以选择价值最大的那个动作去执行,所以就有了动作价值函数(action-value function),它的表达形式其实是类似的:
在这里插入图片描述
上面公式中的pai表示动作选择策略(例如以0.1的概率随机选择action,以0.9的概率按照Q网络选择value值最大的action)
其实我们最初的目的是找到当前状态下应该执行哪个action,但是如果我们求解出最优的 ,其实也就等价于找到了这个action,这种求解方法也叫value-based方法。

其实还有policy-based(直接计算策略函数) 和 model-based(估计模型,即计算出状态转移函数,进而求解出整个MDP(马尔科夫过程)过程) 方法,下面主要以介绍value-based为主。

最优的动作价值函数为:
在这里插入图片描述
Q*(s,a)表示的是在t时刻的动作价值最优值
而仔细看看上面的等式可以发现,我们还需要求解出下一个状态S’所对应的动作价值最优解。
我们还在计算当前的Q值,怎么能有下个状态的Q值呢?
所以,在实际运用时,我们会使用之前的Q值,也就是说每次我们会根据新得到的reward和原来的Q值来更新现在的Q值,
具体的可以看看下面的算法介绍。

On-policy vs. Off-policy

  • on-policy: 生成样本的policy(value function)跟网络更新参数时使用的policy(value function)相同。典型为SARAS算法,基于当前的policy直接执行一次动作选择,然后用这个样本更新当前的policy,因此生成样本的policy和学习时的policy相同,算法为on-policy算法。
  • off-policy : 生成样本的policy(value function)跟网络更新参数时使用的policy(value function)不同。典型为Q-learning算法,计算下一状态的预期收益时使用了max操作,直接选择最优动作,而当前policy并不一定能选择到最优动作,因此这里生成样本的policy和学习时的policy不同,为off-policy算法。

On-policy意味着强化学习,例如决定行为的策略(policy)和要学习的策略。相反,Off-Policy的方法不同于您所使用的策略和您所学习的策略。
On-policy强化学习是一种积累了大量经验的学习,但如果更新了策略,这些经验将无法用于学习。因此,从数据效率的角度来看,Off-Policy是一个不错的选择。

2.1 Q-learning

强化学习基础_第4张图片

  • 初始化环境状态S
  • 将当前环境状态S输入到Q网络(即策略网络,保存了action和value对应关系的table),然后输出当前状态的动作A
  • 更新Q网络
    Qtarget = R + γ maxaQ(s’, a)表示Q真实值,简单理解就是我在S状态下采取了action,从环境中获得了R的奖励,然后对下一时刻的Q值应该也是有影响的,这个影响因子就是γ。另外这次是是一个递归的表达式,所以也可以看出离当前时刻越远,我所采取动作的影响力就越低。
    Qtarget - Q(S, A)就是常说的TD(temporal difference) error,这个error在后面的DQN中会作为损失函数。
  • 更新当前状态为S’
  • 返回第二步重复执行,直到满足限定条件

强化学习基础_第5张图片

基本Q-learning

Q学习(Q-learning)是一种无模型(model-free)学习。
这个算法核心就是两个矩阵:Q表和R表。
Q表包含了用于实现策略的环境累积知识,R表每一行代表一个状态,每一列代表这一行状态向另一行状态迁移的奖励。
不知道大家有没有感觉,Q表就是地图,R表就是世界……
用这种算法,agent的每个action都能看到R表发现这个iteration能采取的动作,但是依然是短视的。
这就是Q表存在的理由。Q表是agent在探索过程中不断画完整的地图,所以它也就是机器要学习的东西。

基本Q学习用到了epsilon-greedy算法。
我们对Q学习的目标是,由于经过了大量iteration,Q表的质量会越来越好,最后agent直接用Q表就行。
为了实现这个目标,我们希望Q算法利用Q表的信息少于探索的信息(不然就没有信息进入Q表)。
这就是著名的**探索 (Exploration) v.s. 利用(Exploitation)**折中问题。由于我们用epsilon控制这个权衡,所以叫做epsilon-greedy。
这里有一个非常好的比喻,假如你是餐馆经营者,要让客户吃菜:

  • Exploration的代价是要不停的拿用户去试菜,影响客户的体验,但有助于更加准确的估计每道菜好吃的概率
  • Exploitation会基于目前的估计拿出“最好的”菜来服务客户,但目前的估计可能是不准的(因为试吃的人还不够多)

epsilon-greedy算法用参数epsilon确定什么时候探索,什么时候利用:
算法认为,每当客人到来时:

  • 以epsilon的概率选择探索 (Exploration) ,从N道菜中随机选择(概率为 )一个让客人试吃,根据客人的反馈更新菜的做的好吃的概率 { }
  • 以1-epsilon的概率选择利用 (Exploitation),从N道菜{ }中选择好吃的概率最高的菜推荐给用户

深度Q-learning

深度Q学习(Deep Q-Learning,DQL)近似处理Q表的值,而不尝试手动填充Q表。
换句话说,DQL希望寻找到无限逼近最优解的次优解。
也可以理解为,DQL(DQN)就是自动学习Q表。
DQL依然要用到epsilon-greedy算法,这是用来权衡探索和利用的。
不同的是,DQL希望将“达到目标”和“采取动作”间的损失最小化,而这可以用梯度下降完成。
从DNN角度来看就是这幅图:
强化学习基础_第6张图片

2.2 Sarsa

强化学习基础_第7张图片
和Q-learning的区别
其实可以看到Q-learning和Sarsa的最大区别就是对Q网络的更新策略,Sarsa使用的是使用下次状态所采取的的动作所对应的Q值来更新Q值,而Q-learning使用下次状态S2的最大Q值用于更新。
感性的理解就是Sarsa会探索更多的可能性,而Q-learning会铁定心地选择最大可能性的选择。因此,Q-learning虽然具有学习到全局最优的能力,但是其收敛慢;而Sarsa虽然学习效果不如Q-learning,但是其收敛快,直观简单。因此,对于不同的问题,我们需要有所斟酌。

2.3 近端策略优化 PPO

虽然基于策略的方法已经可以比较真实地进行建模,但是容易陷入局部最优。这是因为策略的设计的粒度太粗,缺乏精致的惩罚。

近端策略优化(Proximal Policy Optimization,PPO)通过对目标函数 施加惩罚来解决这个问题。对于每个回合内的每个t,我们都算一下新策略和旧策略的KL散度,这样可以确保搜索参数的区域小,在比回合更小的粒度(iteration粒度)上调整策略。
这样,回合中的坏策略会在t级别受到惩罚(就是立刻受到惩罚),而不是过了一整个回合才受到惩罚。

这种策略本质是一种Actor-critic(参与者-批评者)模型,也就是有惩罚的参与者模型。很自然的就可以发现,策略就是actor,惩罚项就是critic。

三 基于模型的方法

这种方法是对环境建模。这表示,我们要创建一个模型,来表示环境的行为。
问题是,每个环境都会需要一个不同的模型 (马里奥每走一步,都会有一个新环境) 。这也是这个方法在强化学习中并不太常用的原因。

四 强化学习表示

S(State) = 环境, 例如迷宫的每一格是一个state
A(Actions) = 动作, 在每个状态下。有什么行动是允许的,例如迷宫中行走的方向{上,下,左,右}
R(Rewards) = 奖励, 进入每个状态时,能带来正面或负面的价值。
P(Policy) = 方案。由一个状态->行动的函数。
(S,A,R)是使用者设定的,P是算法自动计算出来的

————————————————
版权声明:本文为CSDN博主「大鹏的编程之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WSRY_GJP/article/details/123555617

你可能感兴趣的:(入口集锦,自然语言处理)