本文将会步入强化学习的殿堂,不过只是对强化学习进行概述,让大家对强化学习在做的事情有一个大体的认识
这一个具有未知数的函数其实就是我们前面所说的Actor,是一个神经网络。
并且这个网络与前面所讲过的分类器是一模一样的,输入是一个像素集,中间的神经网络可以用CNN,RNN等经典神经网络来进行建模,输出是一个类似分类器的结果,通过一个softmax函数计算出一个概率分布,然后随机选择一个输出作为本次的Action
每执行一个action后得到一个reward值,将这些reward值全部加起来作为我们的目标函数,我们的目标就是要使这个reward值最大,这个就是强化学习的损失函数。
轨迹 τ = ( s 1 , a 1 , . . . , s n , a n ) \tau=(s_1,a_1,...,s_n,a_n) τ=(s1,a1,...,sn,an),每一个reward都是 r n = f ( s n , a n ) r_n=f(s_n,a_n) rn=f(sn,an),看上去十分类似一个RNN神经网络,但是事实上由于每一次输入相同的 s n s_n sn,输出的 a n a_n an具有随机性,所以结果并不相同,大大加深了强化学习的复杂度。除此之外,environment是一个黑盒子,并不是一个神经网络,只是一个输入与输出的函数,往往也具有随机性,无法用神经网络的眼光去看待
但是可以跟生成对抗网络GAN进行比较,我们可以将Action看作生成器,而environment和reward则是判别器
我们上面说过,如果我们能获得最优的Action函数,那么我们在每次做决策的时候,总能十分优秀地往正确的决策方向去进行,但是事实上获取最优的Action函数是不合常理的,因为这需要我们具有预知未来的能力,很明显我们是无法做到的。
所以我们需要一个合适的方法去迫近这一个最优的Action函数,也就是我们所说的DQN,而这个迫近的神经网络为 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)
首先训练出DQN,将状态 s t s_t st输入到DQN神经网络中,然后选出最佳的那一个行动 a t , a t = arg max a Q ( s t , a ; w ) a_t,a_t=\argmax_aQ(s_t,a;w) at,at=argmaxaQ(st,a;w),然后环境改变了状态得到新的状态 s t + 1 ∼ p ( ⋅ ∣ s t , a t ) s_{t+1}\sim p(\cdot|s_t,a_t) st+1∼p(⋅∣st,at),然后循环上述过程即可
不需要对整个过程进行仿真,只需要看到一部分内容,即可以进行训练。
我们观察reward函数,发现其满足以下一个重要等式: U t = r t + U t + 1 U_{t}=r_t+U_{t+1} Ut=rt+Ut+1
TD算法满足以下这个式子 Q ( s t , a t ; w ) ≈ r t + γ Q ( s t + 1 , a t + 1 ; w ) = r t + γ arg max a Q ( s t + 1 , a t ; w ) Q(s_t,a_t;w)\approx r_t+\gamma Q(s_{t+1},a_{t+1};w)\\=r_t+\gamma \argmax_aQ(s_{t+1},a_t;w) Q(st,at;w)≈rt+γQ(st+1,at+1;w)=rt+γaargmaxQ(st+1,at;w) r t r_t rt是一个真实值,并不是估计量,而Q的两项都是期望值,也就是说TD算法是用真实值与估计值去迫近估计值,我们的目标就是对 Q ( s t , a t ; w ) Q(s_t,a_t;w) Q(st,at;w)进行预测,获得该迫近的神经网络,从而获得最优的Action值函数
本质上就是拿观察值去近似统计量,来降低算法的复杂度或者去求解一些无法统计的统计量值,如最优价值函数中 Q ∗ ( s t , a t ) = E [ R t + γ max a Q ∗ ( S t + 1 , a ) ] Q^*(s_t,a_t)=E[R_t+\gamma\max\limits_aQ^*(S_{t+1},a)] Q∗(st,at)=E[Rt+γamaxQ∗(St+1,a)]的得分值 R t R_t Rt全部获取是不现实的,我们可以只取其中的一个观测值 r t r_t rt即可。还有后面的那一个最优价值函数也同样只取观察值近似
我们前面说过,策略函数的输入是状态,输出是一个概率分布,而想要获得一个最佳的输出值,需要穷尽所有的状态,才能找到最佳的Action分布
对于策略函数而言,如果状态不是有限个的(离散的),我们就不可能一个个策略去尝试去找到最优的执行Action
所以我们需要用一个神经网络去近似我们的策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s)
V π ( S ) = ∑ a π ( a ∣ s ) ∗ Q π ( s , a ) V^{\pi}(S)=\sum_a\pi(a|s)*Q_{\pi}(s,a) Vπ(S)=∑aπ(a∣s)∗Qπ(s,a)中我们既不清楚策略函数也不清楚Action值函数,但如果我们用两个神经网络分别近似它们的话问题可能就能解决。
而这两个函数分别是策略网络(actor) π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)和值网络(critic) q ( s , a ; w ) q(s,a;w) q(s,a;w)
策略网络是以值网络的好坏来作为评判标准的,值网络可以理解成裁判,会给策略网络的分布进行打分,促进网络的优化。而值网络一开始是没有任何标准的,是一个随机过程,然后以分数reward来作为根据而对评判的标准进行优化值网络。
actor可以与environment交互,但是计算不出reward或者reward一直为0,这时候我们需要有一系列的示范数据,也就是我们模仿出的结果
当然我们会发现这与监督学习很像,因为我们也是利用人类已有的样本去进行学习去优化,但是我们会发现人类做的不一定是对的,如果纯模仿的话,就失去了强化学习的意义了。
原来我们是用reward function去推导出相应的行为action,现在我们使用收集到的示例去通过这个inverse RL去学习到这一个reward function,再去学习得到新的actor
但事实上这就是一个生成对抗网络GAN,判别器就是teacher,生成器就是那个actor
E x ∼ p θ ( x ) [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q θ ( x ) [ f ( x ) p ( x ) q ( x ) ] E_{x \sim p_{\theta}(x)}[f(x)]=\int f(x)p(x)dx=\int f(x)\frac{p(x)}{q(x)}q(x)dx\\=E_{x \sim q_{\theta}(x)}[f(x)\frac{p(x)}{q(x)}] Ex∼pθ(x)[f(x)]=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex∼qθ(x)[f(x)q(x)p(x)]
这样转化的原因是原函数中的分布很难获取,即使从里面随机抽取样本都极其困难,那我们就将其转化成另外一个与原概率分布很接近的分布进行计算
有了这个重要定理后,我们就可以实施我们的离线策略了,根据我们之前的累积函数,我们推导出一个新的累计函数用于输入到环境中
∇ R θ ˉ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log p θ ( τ ) ] \nabla \bar{R_{\theta}}=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)\nabla\log{p_{\theta}(\tau)}] ∇Rθˉ=Eτ∼pθ(τ)[R(τ)∇logpθ(τ)]
∇ R θ ˉ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ log p θ ( τ ) ] \nabla \bar{R_{\theta}}=E_{\tau \sim p'_{\theta}(\tau)}[\frac{p_{\theta}(\tau)}{p'_{\theta}(\tau)}R(\tau)\nabla\log{p_{\theta}(\tau)}] ∇Rθˉ=Eτ∼pθ′(τ)[pθ′(τ)pθ(τ)R(τ)∇logpθ(τ)]
我们要做的是利用我们假设的预估项 θ ′ \theta' θ′去输入到环境中从而更新真实的项所产生的参数 θ \theta θ
J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}(\theta)=E_{(s_t,a_t)\sim \pi_\theta'}[\frac{p_{\theta}(a_t|s_t)}{p'_{\theta}(a_t|s_t)}A^{\theta'}(s_t,a_t)] Jθ′(θ)=E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)]
而在PPO中则加入了一个KL散度作为限制来使两个参数之间的值尽可能接近。
J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta'}_{PPO}(\theta)=J^{\theta'}(\theta)-\beta KL(\theta,\theta') JPPOθ′(θ)=Jθ′(θ)−βKL(θ,θ′)
本文主要介绍了强化学习的概述,由于强化学习涉及到的方面很多,无法进入深入地讨论,只是在框架上留下印象,帮助理解强化学习的运用