赞
踩
就像引言里所描述的养成习惯的四个步骤,如果我们想让机器也有自己的“习惯”,去掉机器没有的渴求属性,就是强化学习所做的事情 —— 帮机器养成“习惯”,而 DRL 就是使用深度学习的技术去实现强化学习算法。今天是系列文章的第一篇,会介绍最基础的 policy-based 的算法 —— REINFORCE。
就像人类养成习惯需要一遍遍经历四个步骤,机器也一样,需要经历上述的三个步骤,经历 T 时刻积累的经验形成的序列叫做 Trajectory,我们用 τ\tauτ 表示(有人可能还看过 episode 的概念,一个 τ\tauτ 可以有多个 episode)。s 代表机器所处的环境产生的提示或者状态,a 代表机器的反应或者行动,r 代表机器产生反应或者行动后获得的回报。 τ=s0,a0,r1,s1,a1,r2,s2,a2…rT,sT,aT\tau = {s0, a0, r1, s1, a1, r2, s2, a2 … rT, sT, aT}τ=s0,a0,r1,s1,a1,r2,s2,a2…rT,sT,aT 那么根据 MDP 属性有 p(τ)=∏t=0Tpθ(at∣st)p(st+1∣st,at)p(\tau) = \prod_{t=0}^{T}p_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t}, a_{t})p(τ)=∏t=0Tpθ(at∣st)p(st+1∣st,at) 那么这里的 pθp_{\theta}pθ 就是机器的策略,针对 s 会产生什么样的 a。因为当 s 和 a 都确定了,下一时刻的 s 是系统的固有属性,我们没办法控制,所以我们后面只关心 pθp_{\theta}pθ 。 因为每一时刻的反应都会产生相应的回报,那么我们把每一时刻的回报加起来,就是这一系列反应产生的整体回报,我们用 R(τ)R(\tau)R(τ) 表示。有了整体回报,我们就可以衡量机器行为的好坏。
R(τ)=∑t=1TrtR(\tau) = \sum_{t=1}^{T}r_{t}R(τ)=∑t=1Trt
机器应该更关心当下的回报还是未来的回报呢?我们引入系数 γ\gammaγ ,如果它是 0,我只关注当下,它的值越大,我们会越关心未来的回报。
R(τ)=∑t=1Tγt−1rt,γ∈[0,1]R(\tau) = \sum_{t=1}{T}\gamma{t-1}r_{t},\gamma \in [0,1]R(τ)=∑t=1Tγt−1rt,γ∈[0,1]
有了上面的信息,接下来我们只要使得机器的期望回报最大,我们的机器就会牛逼起来!
Rˉθ=Eτ∼pθ(τ)[R(τ)]=∑τpθ(τ)R(τ)\bar{R}{\theta} = E{\tau\sim p_{\theta}(\tau)}[R(\tau)] = \sum_{\tau}p_{\theta}(\tau)R(\tau)Rˉθ=Eτ∼pθ(τ)[R(τ)]=∑τpθ(τ)R(τ)
由上面的期望回报的公式,我们可以通过调节策略增大可以获得更大回报的反应的概率,可以用深度神经网络表示策略,把 s 输入神经网络(可以是 MLP\CNN\LSTM\Transformer…)获得的输出就是每个反应的概率。s 输入到神经网络,得到 a,这里随机采样一个 a(为了探索,选最大的不一定是正确的) 然后得到下一时刻的 s,重复收集,就有了上面公式里的 τ\tauτ ,从而就积累了训练数据。那么有过机器学习经验的人,可以发现答案呼之欲出,就是求导,梯度下降是求最小值,那么求最大值就是加个负号。
θ←θ+α∇Rˉ(θ)\theta \leftarrow \theta + \alpha \nabla \bar{R}(\theta)θ←θ+α∇Rˉ(θ)
其中:
∇Rˉ(θ)=∇θ∑τp(τ)R(τ) =∑τ∇θp(τ)R(τ) =∑τp(τ)∇θp(τ)p(τ)R(τ) (因为∇θlog(z)=1z∇θz) =∑τp(τ)∇θlog p(τ)R(τ) ≈1m∑i=1m∇θlog p(τ(i))R(τ(i)) =1m∑i=1m∑t=1T∇θlog pθ(at(i)∣st(i))R(τ(i)) =1m∑i=1mR(τ(i))∑t=1T∇θlog pθ(at(i)∣st(i))\nabla \bar{R}(\theta) = \nabla_{\theta}\sum_{\tau}p_{}(\tau)R(\tau) ~\ \ \ \ \ \ \ \ \ \ \ \ = \sum_{\tau}\nabla_{\theta}p(\tau)R(\tau) ~\ \ \ \ \ \ \ \ \ \ \ \ = \sum_{\tau}p(\tau)\frac{\nabla_{\theta}p(\tau)}{p(\tau)}R(\tau) \ \ \ \ (因为 ∇_θlog(z)=\frac{1}{z}∇_θz) ~\ \ \ \ \ \ \ \ \ \ \ \ = \sum_{\tau}p(\tau)\nabla_{\theta}log\ p(\tau)R(\tau) ~\ \ \ \ \ \ \ \ \ \ \ \ \approx \frac{1}{m}\sum_{i=1}{m}\nabla_{\theta}log p(\tau{(i)})R(\tau^{(i)}) ~\ \ \ \ \ \ \ \ \ \ \ \ = \frac{1}{m}\sum_{i=1}{m}\sum_{t=1}{T}\nabla_{\theta}log\ p_\theta(a_{t}{(i)}|s_{t}{(i)})R(\tau^{(i)}) ~\ \ \ \ \ \ \ \ \ \ \ \ = \frac{1}{m}\sum_{i=1}{m}R(\tau{(i)})\sum_{t=1}{T}\nabla_{\theta}log p_\theta(a_{t}{(i)}|s_{t}^{(i)})∇Rˉ(θ)=∇θ∑τp(τ)R(τ) =∑τ∇θp(τ)R(τ) =∑τp(τ)p(τ)∇θp(τ)R(τ) (因为∇θlog(z)=z1∇θz) =∑τp(τ)∇θlog p(τ)R(τ) ≈m1∑i=1m∇θlog p(τ(i))R(τ(i)) =m1∑i=1m∑t=1T∇θlog pθ(at(i)∣st(i))R(τ(i)) =m1∑i=1mR(τ(i))∑t=1T∇θlog pθ(at(i)∣st(i))
实现很简单,这里结合参考很快就可以看懂。
方法很简单,虽然说大道至简,但是用上述方法训练出来的机器还是不够牛逼。主要是因为方法里存在一些缺陷: 策略产生的 τ\tauτ 不能再次用于训练,因为策略一直在更新,策略更新了,那么更新之前产生的 τ\tauτ 就得丢掉了,训练效率很低。 τ\tauτ 里的每个 a 用的都是同样的 R,更好的情况应该是每个 a 用一个 R。
针对 1,下一篇文章介绍的 PPO 提出了改进 针对 2: 我们可以这样设置 R(一种 Credit Assignment): Rt(τ)=∑t=t(a)Tγt−t(a)rt,γ∈[0,1]R_{t}(\tau) = \sum_{t=t(a)}{T}\gamma{t-t(a)}r_{t},\gamma \in [0,1]Rt(τ)=∑t=t(a)Tγt−t(a)rt,γ∈[0,1]
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。