强化学习基础简介


我们所熟知的有监督学习是在带标签的已知训练数据上进行学习,得到一个从数据特征到标签的映射(预测模型),进而预测新的数据实例所具有的标签。

而强化学习中则出现了两个新的概念,“智能体”“环境”在强化学习中,智能体通过与环境的交互来学习策略,从而最大化自己在环境中所获得的奖励。例如,在下棋的过程中,你(智能体)可以通过与棋盘及对手(环境)进行交互来学习下棋的策略,从而最大化自己在下棋过程中获得的奖励(赢棋的次数)。

如果说有监督学习关注的是 “预测”,是与统计理论关联密切的学习类型的话,那么强化学习关注的则是 “决策”,与计算机算法(尤其是动态规划和搜索)有着深入关联。笔者认为强化学习的原理入门相较于有监督学习而言具有更高的门槛,尤其是给习惯于确定性算法的程序员突然呈现一堆抽象概念的数值迭代关系,在大多数时候只能是囫囵吞枣。于是笔者希望通过一些较为具体的算例,以尽可能朴素的表达,为具有一定算法基础的读者说明强化学习的基本思想。

从动态规划说起

动态规划的基本思想是将待求解的问题分解成若干个结构相同的子问题,并保存已解决的子问题的答案,在需要的时候直接利用 。使用动态规划求解的问题需要满足两个性质:

  • 最优子结构:一个最优策略的子策略也是最优的。
  • 无后效性:过去的步骤只能通过当前的状态影响未来的发展,当前状态是历史的总结。

我们回顾动态规划的经典入门题目 “数字三角形” :

数字三角形问题

给定一个形如下图的 N + 1 N+1 N+1 层数字三角形及三角形每个坐标下的数字 r ( i , j ) r(i, j) r(i,j) ,智能体在三角形的顶端,每次可以选择向下( ↓ \downarrow )或者向右( ↘ \searrow )到达三角形的下一层,请输出一个动作序列,使得智能体经过的路径上的数字之和最大。

在这里插入图片描述

数字三角形示例。此示例中最优动作序列为 “向右 - 向下”,最优路径为 “(0, 0) - (1, 1) - (2, 1)”,最大数字和为 r(0, 0) + r(1, 1) + r(2, 1) = 5 。

我们先不考虑如何寻找最优动作序列的问题,而假设我们已知智能体在每个坐标 ( i , j ) (i, j) (i,j) 处会选择的动作 π ( i , j ) \pi(i, j) π(i,j) (例如 π ( 0 , 0 ) = ↘ \pi(0, 0) = \searrow π(0,0)= 代表智能体在 (0, 0) 处会选择向右的动作),我们只是单纯计算智能体会经过的路径的数字之和。我们从下而上地考虑问题,设 f ( i , j ) f(i, j) f(i,j) 为智能体在坐标 ( i , j ) (i, j) (i,j) 处的 “现在及未来将会获得的数字之和”,则可以递推地写出以下等式:
( 1 ) f ( i , j ) = { f ( i + 1 , j ) + r ( i , j ) , π ( i , j ) = ↓ f ( i + 1 , j + 1 ) + r ( i , j ) , π ( i , j ) = ↘ (1) f(i, j) = \begin{cases}f(i+1, j) + r(i, j), & \pi(i, j) = \downarrow \\ f(i+1, j+1) + r(i, j), & \pi(i, j) = \searrow\end{cases} (1)f(i,j)={ f(i+1,j)+r(i,j),f(i+1,j+1)+r(i,j),π(i,j)=π(i,j)=
上式的另一个等价写法如下:
( 2 ) f ( i , j ) = [ p 1 f ( i + 1 , j ) + p 2 f ( i + 1 , j + 1 ) ] + r ( i , j ) (2) f(i, j) = [p_1 f(i+1, j) + p_2 f(i+1, j+1)] + r(i, j) (2)f(i,j)=[p1f(i+1,j)+p2f(i+1,j+1)]+r(i,j)
其中
( p 1 , p 2 ) = { ( 1 , 0 ) , π ( i , j ) = ↓ ( 0 , 1 ) , π ( i , j ) = ↘ (p_1, p_2) = \begin{cases}(1, 0), \pi(i, j) = \downarrow \\ (0, 1), \pi(i, j) = \searrow\end{cases} (p1,p2)={ (1,0),π(i,j)=(0,1),π(i,j)=

有了上面的铺垫之后,我们要解决的问题就变为了:通过调整智能体在每个坐标 ( i , j ) (i, j) (i,j) 会选择的动作 π ( i , j ) \pi(i, j) π(i,j) 的组合,使得 f ( 0 , 0 ) f(0, 0) f(0,0) 的值最大。为了解决这个问题,最粗暴的方法是遍历所有 π ( i , j ) \pi(i, j) π(i,j) 的组合,例如在示例图中,我们需要决策 π ( 0 , 0 ) \pi(0, 0) π(0,0) π ( 1 , 0 ) \pi(1, 0) π(1,0) π ( 1 , 1 ) \pi(1, 1) π(1,1) 的值,一共有 2 3 = 8 2^3 = 8 23=8 种组合,我们只需要将 8 种组合逐个代入并计算 f ( 0 , 0 ) f(0, 0) f(0,0) ,输出最大值及其对应组合即可。

不过,这样显然效率太低了。于是我们考虑直接计算 (2) 式关于所有动作 π \pi π 组合的最大值 max ⁡ π f ( i , j ) \max_\pi f(i, j) maxπf(i,j) 。在 (2) 式中, r ( i , j ) r(i, j) r(i,j) 与任何动作 π \pi π 都无关,所以我们只需考虑 p 1 f ( i + 1 , j ) + p 2 f ( i + 1 , j + 1 ) p_1 f(i+1, j) + p_2 f(i+1, j+1) p1f(i+1,j)+p2f(i+1,j+1) 这个表达式的最大值。于是,我们分别计算 π ( i , j ) = ↓ \pi(i, j) = \downarrow π(i,j)= π ( i , j ) = ↘ \pi(i, j) = \searrow π(i,j)= 时该表达式关于任何动作 π \pi π 的最大值,并取两个最大值中的较大者,如下所示:
max ⁡ π f ( i , j ) = max ⁡ π [ p 1 f ( i + 1 , j ) + p 2 f ( i + 1 , j + 1 ) ] + r ( i , j ) = max ⁡ [ max ⁡ π ( 1 f ( i + 1 , j ) + 0 f ( i + 1 , j + 1 ) ) ⏟ π ( i , j ) = ↓ , max ⁡ π ( 0 f ( i + 1 , j ) + 1 f ( i + 1 , j + 1 ) ) ⏟ π ( i , j ) = ↘ ] + r ( i , j ) = max ⁡ [ max ⁡ π f ( i + 1 , j ) ⏟ π ( i , j ) = ↓ , max ⁡ π f ( i + 1 , j + 1 ) ⏟ π ( i , j ) = ↘ ] + r ( i , j ) \max_\pi f(i, j) = \max_\pi [p_1 f(i+1, j) + p_2 f(i+1, j+1)] + r(i, j) \\ = \max [\underbrace{\max_\pi(1 f(i+1, j) + 0 f(i+1, j+1))}_{\pi(i, j) = \downarrow}, \underbrace{\max_\pi(0 f(i+1, j) + 1 f(i+1, j+1))}_{\pi(i, j) = \searrow}] + r(i, j) \\ = \max [\underbrace{\max_\pi f(i+1, j)}_{\pi(i, j) = \downarrow}, \underbrace{\max_\pi f(i+1, j+1)}_{\pi(i, j) = \searrow}] + r(i, j) πmaxf(i,j)=πmax[p1f(i+1,j)+p2f(i+1,j+1)]+r(i,j)=max[π(i,j)= πmax(1f(i+1,j)+0f(i+1,j+1)),π(i,j)= πmax(0f(i+1,j)+1f(i+1,j+1))]+r(i,j)=max[π(i,j)= πmaxf(i+1,j),π(i,j)=

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值