强化学习入门(1)

521 阅读5分钟

文章正文第一句:“这是我参与更文挑战的第3天,活动详情查看: 更文挑战

009.jpeg

如果想观看相关视频可以在西瓜视频(账号zidea)或者哔哩哔哩(账号zidea2015)找到我发布视频解说,注意头像和简书使用头像一致。

Deepmind 自从在围棋战胜了围棋世界冠军之后就开始着手让 AI 来玩更复杂游戏 starcraft。我想大家可能和一样对于 AI 能够玩游戏的项目是如何实现的非常感兴趣。兴趣归兴趣如果要实现一个这样项目还是具有挑战性,不过不管有多难,我们还是从基础做起一步一步。

010.png

概率基础知识

首先在开始之前简单地回归一下可能在本次分享中用到一些概率知识。

随机变量以及分布函数

首先函数自变量可以从实数扩展到例如自变量为两点,输出两点距离。用大写字母表示随机变量,而用小写来表示观测值。事件用于语言来描述样本集合,这些样本具有一定属性才聚集在一起

P(X=0)=0.5P(X=1)=0.5\begin{aligned} P(X=0) = 0.5\\ P(X=1) = 0.5\end{aligned}

概率密度函数(PDF)

PDF 是 Probability Density Function 的缩写,表示随机变量某一个确定值出现的可能性,也就是我们熟悉的 PDF。

002.png

003.png

p(x)=12πσ2exp((xμ)22σ2)p(x) = \frac{1}{\sqrt{2\pi \sigma^2}}\exp \left(- \frac{(x - \mu)^2}{2 \sigma^2}\right)

期望

对于连续分布的期望 E[f(x)]=xp(x)f(x)dxE[f(x)] = \int_x p(x)f(x)dx

对于离散分布的期望 E[f(x)]=xp(x)f(x)E[f(x)] = \sum_x p(x)f(x)

随机抽样

随机采样就是调查对象总体中每个部分都有同等被抽中的可能,是一种完全依照机会均等的原则进行的抽样调查,被称为是一种等概率

术语

006.png

001.jpg

状态(State)

所谓状态就是观测到游戏画面的每一帧,也就是从环境中可以观察到内容,或者理解环境让我们观察到的东西。

012.png

Action

a{left,right,up,down} a \in \{left,right,up,down\}

动作就是智能体(接下来会介绍什么是智能体),根据当前状态给出的反应。随后我们会看到

Agent

智能体,在不同强化学习任务中 Agent 就是动作(Action)的发起者,坦克大战游戏中的 Agent 就是坦克,在无人驾驶中 Agent 就变为 🚗。

Policy

首先 Policy 是一个函数,如果是函数,那么就需要有输入和输出,在 Policy 函数中,输入 State 而输出是 Agent 执行 Action 的概率分布,从而可见即使相同的输入 State , Policy 也可能输出不同的 Action,而不是某一个确定的 Action。

在数学上 Policy 函数表示为 π(s,a)[0,1]\pi(s,a) \rightarrow [0,1] π(as)=P(A=aS=s)\pi(a|s) = P(A=a|S=s)

  • π(lefts)=0.1\pi(left|s) = 0.1
  • π(rights)=0.2\pi(right|s) = 0.2
  • π(ups)=0.6\pi(up|s) = 0.6
  • π(downs)=0.1\pi(down|s) = 0.1

从上面公式我们不难发现强化学习主要就是学习这个 Policy 函数,只要有了这个 Policy 函数,输入一个状态后,Policy 就会做一个随机抽样来采取动作,这里做随机抽样是为来避免对手通猜透机器,找到规律,所以 Policy 策略是随机。

reward

RR 来表示奖励,就是根据动作和状态给出一个分数,这个分数可以理解为奖励,如何设计奖励这个一点非常重要,设计好的奖励会事倍功半。

  • 击毁敌方坦克会的一定奖励
  • 如果鹰巢被敌方攻破,就会损失很多奖励

状态转移(state transition)

根据当前动作和上一个状态我们会得到新的状态, p(ss,a)=P(S=sS=s,A=a)p(s^{\prime}|s,a) = \mathbb{P}(S^{\prime}=s^{\prime}|S=s,A=a)

有关状态转移我们隐马尔可夫链分享以图解方式已经说很清楚,那么状态转移是由环境决定的,游戏中的环境就是系统。

016.png

Agent 和 Environment 的交互

接下来我们来看一看 Agent 是如何环境交互的

007.jpg

强化学习的随机性

  • Policy 根据 state 给出了 Action 随机 017.png

  • Enviroment 根据 Action 和 state 给出下一个状态是随机的

018.png

019.png

  • Policy 根据 s1s_1 给出 a1a_1
  • Enviroment 根据 s1,a1s_1,a_1 给出 s1s_1r1r_1
  • Policy 继续根据 s2s_2 给出 a2a_2 迭代重复上面的步骤形成一条路径 s1,a1,r1,s2,a2,r2,,sT,aT,rTs_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_T,a_T,r_T

回报(Return)

我们来对比奖励来说回报,回报是以当前时刻起向后一系列动作得到状态的奖励的累加,一直将奖励累积加到游戏结束最后一个奖励。

Ut=Rt+Rt+1+Rt+2++U_t = R_t + R_{t+1} + R_{t+2} + \cdots +

  • 有关 RtR_tRt+1R_{t+1} 之间差异,他们奖励的价值会随着时间而其价值会降低,这个问题我们来举一个例子来简单说明一下,由于未来的奖励没有当下奖励更有价值,所以可以加了一个 discounted 来进行调整,也就是折扣回报这里 γ\gamma 表示 γ[0,1]\gamma \in [0,1]

那么添加了 γ\gamma 的回报也就是折扣回报,如下

Ut=Rt+γRt+1+γ2Rt+2++U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots +

还需要说明一下折扣率 γ\gamma 是一个超参数,需要认为来设置, γ\gamma 的设置会对强化学习有所影响。当某一个时刻结束了,RtR_t 也就计算得到小写 rtr_t 因为 UtU_t 依赖的奖励是一个随机变量,所以 UtU_t 也是随机变量。

我们知道 Policy 生成 π(as)\pi(a|s) 而环境根据当前状态和动作给出下一个状态 ss^{\prime} 也就是 p(sa,s)p(s^{\prime}|a,s),那么当前奖励 RtR_t 是与当前 StS_t 和动作 AtA_t 有关。

那么对于 UtU_t 就与未来所有时刻 At,At+1,At+2,A_t,A_{t+1},A_{t+2},\cdotsSt,St+1,St+2,S_t,S_{t+1},S_{t+2},\cdots 都有关系了

上面介绍什么是回报,对回报有了一定了解。我们就可以开始介绍什么是价值函数,价值函数是用来衡量某一状态或动作状态的好坏的,即对智能体来说是否值得选择某一状态或在某一状态下执行某一动作。

动作价值函数(Value)

Ut=Rt+γRt+1+γ2Rt+2++U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots + UtU_t 是一个随机变量,依赖未来所有的动作和状态,UtU_t 在 t 时刻并不知道,

Qπ(st,at)=E[UtSt=st,At=at]Q_{\pi}(s_t,a_t) = E[U_t|S_t=s_t,A_t=a_t]

可以对UtU_t 求期望,把里面的随机性都用积分积掉,例如虽然我们不知道下一个时刻会发生什么,例如投掷硬币,我们不知道下一个时刻会是正面还是背面,不过我们知道出现正面或者背面的概率都是 0.5 假设上面朝上我们将随机变量 X 记做 1 反面记做 0 那么期望就是 0.5×1+0.5×0=0.50.5 \times 1 + 0.5 \times 0 = 0.5,同样的道理对 UtU_t 随机变量求期望就可以得到一个数,即 QπQ_{\pi}

除了 StS_tAtA_t 其他随机变量都被积分积掉,求出的 QπQ_{\pi} 就是动作价值函数,Qπ(st,at)Q_{\pi}(s_t,a_t)

Q=maxπQπ(st,at)Q^{*} = \max_{\pi} Q_{\pi}(s_t,a_t)

Q(st,at)Q^{*}(s_t,a_t)

状态价值函数VπV_{\pi}

意义为基于 tt 时刻的状态 sts_t 能获得的未来回报(Return)的期望

Vπ=EA[Qπ(st,A)]V_{\pi} = E_{A}[Q_{\pi}(s_t,A)]

  • 将动作看作随机变量 A 通过积分将其积掉
  • VπV_{\pi} 只与 sts_tπ\pi 函数有关
  • VπV_{\pi}可以告诉我们当前的状态好不好