开发者学堂课程【深度学习与自动驾驶:深度强化学习-运动规划(2)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/533/detail/7152
深度强化学习-运动规划(2)
内容介绍:
一、Value Function
二、Q-Learning
一、Value Function
1、Future reward
R=r1十r2十r3十···十rn
Rt=rt十rt+1十rt+2十···十rn
2、Discounted future reward (environment is stochastic)
Rt = rt+ γrt+1 +γ2rt+2+···+ γn-trn
=rt十γ(rt+1十r(rt+2 十))
= rt十γRt+1
3、A good strategy for an agent would be to always choose an action that maximizes the (discounted) future reward
看这个Agent机制以价值函数运行的世界。现在价值函数取决于一个奖励,奖励来自未来,而且这个奖励会被减少。因为世界是随机的。不能期望奖励一直以这样的方式跟着我们,希望它(奖励)以决策为基础。以我们选择的行动方式为基础。而且在这还有一个超时的 gamma,随着时间的推移,奖励会减少,在研究当前事件的过程中,你要减少未来奖励的影响,因此你的目标要发展成一个决策,一个可以最大化已经被减少的未来奖励的决策,总分,减少后的总分,强化学习。很多方法都可以用来制定一个好的决策,一个接近最优的最优决策,这里有很多有趣的数学,可以尝试建立一个模型,一个用于优化对这个世界估计的模型,你可以采用 Monte Carlo方式,通过对这个世界的模拟和了解这个世界是如何展开的,而且当它展开的时候,你应该试着计算最优决策。
二、Q-Learning
1、State value function: V(s)
Expected return when starting in s and following
2、State- action value function: Q(s,a)
Expected return when starting in s,performing a, and following
3、useful for finding the optimal policy
(1)Can estimate from experience (Monte Carlo)
(2)Pick the best action using Q"(s,a)
4、Q-learning: off -policy
(1)Use any policy to estimate Q that maximizes future reward: Q(st,at) = max Rt+1
(2)Q directly approximates Q* (Bellman optimality equation)
(3)Independent of the policy being followed
(4)Only requirement: keep updating each (s,a) pair
Qt+1(st, at) = Qt(st, at)+a ( Rt+1 + γmax Qt(st+1,a)- Qt(st, at))
接着要讨论的是Q-Learning,这是一个关闭决策的方法,一个当我们行动的时候决策会被预测的方法,这个决策被定义为Q函数,在左边就是Q函数,Q函数的输入是时间是t的阶段,“st”,采取的行动和那一个阶段是“at”,你的目标是在这个阶段会选择一个可以最大化下一步奖励的决策。
Q-Learning可以用来通过经验去近似最优Q函数,告诉你如何在这个世界任何状态下行动的最优函数,你必须生活在这个世界中,你要模拟这个世界,你必须要移动它,你必须要探索以熟悉每一个可能的阶段,尝试不同的行为,获得奖励,被惩罚,弄明白要去做的最优的事情是什么。
Qt+1(st, at) = Qt(st, at)+a ( Rt+1 + γmax Qt(st+1,a)- Qt(st, at))
这使用bellman函数。在左边,输出,是一个新阶段。预测,Q 函数对于新阶段的预测,对每一个行动的预测,这就是 Q-Learning 核心的更新规则。用预测加上过去的预测,取决于0到1的学习率alpha,他们会更新对这个阶段的评测,这个被这一次收到的奖励影响的阶段,所以到达的这是一个t阶段,试着采取一个行动,会得到一个奖励,而且你更新了对这个阶段的评测,动作对取决于这个规则,当学习率是零,也就是 alpha 是0,你不会学习,你不会改变你基于收到证据形成的世界观,当alpha是1的时候,每一次改变你世界的评测以来于新的证据,这是深度学习的关键成分。
5、Exploration VS Exploitation
(1)Key ingredient of Reinforcement Learning
(2)Deterministic/greedy policy won't explore all actions
① Don't know anything about the environment at the beginning
② Need to try all actions to find the optimal one
(3)Maintain exploration
Use soft policies instead: r(s,a)>O (for all s,a)
(4)€-greedy policy
① With probability 1-E perform the optimal/greedy action
② With probability E perform a random action
③ Will keep exploring the environment
④ Slowly move it towards greedy policy:E -> 0
首先你要探索,接着你要利用它,一开始,你会用非贪心算法去探索,然后你会选择贪心算法,你会明白什么是好的而且你会坚持去做,如果你想去学习一个atari游戏,首先你要尝试每个行为,每一个阶段,你咬紧牙关,被惩罚,获得奖励,最终你会明白,到底什么是正确的事情并且坚持去做,这就是你如何打败这个世界上最伟大的人类选手,举一个例子,正如我们将要讨论的,在围棋中。你要做的方式是你有一个“Epsilon 贪婪决策”,你有(1-Epsion)的概率,执行一个贪婪优化行为,另外Epsilon概率下。你采取一个随机行为,随机探索行为,于是,当€从1减少到0,你的探索会越来越少,所以这里的算法真的很简单。
6、Q-Learning: Value Iteration
Qt+1(st,at) = Qt(st, at)+a (Rt+1 + γmax Qt(st+1,a) - Qt(st, at))
initialize Q[num_states, num_actions] arbitrarily
observe initial state s
repeat
Select and carry out an action a
observe reward r and new state s'
Q[s,a] = Q[st,at]+ a(r + γmaxa· Q[s',a'] - Q[s,a])
S=s'
Until terminated
以上是算法的版本,Bellman 方程的伪代码版本,解释了Bellman方程的迭代,你随机地初始化一对儿状态-行动的估计 Q[num_states, num_actions] 的值,初始化为一个随机数,这是重要的一点,当你开始玩游戏或者做任何你正在做的事时,无论你在用强化学习实现驾驶或者做其他的什么,你没有一个对于好或者坏的预先的概念,这是随机的,或者你怎样选择初始化它是随机的,而且它学到了一些东西这一事实是令人震惊的,这是关于Q-Learning的一件令人震惊的事,然后是Q-Learning的深度神经网络的版本,这个算法重复以下的步骤,你进入了世界,观察一个初始状态,你选择了动作“a”,如果你处于探索,这个动作就是一个随机的动作,如果你贪婪地追求最好,(事实上你可以),这将是最大化Q-Function (Qt(st+1.a)) 的动作,你在采取一个动作后观察它的奖励(r),然后你会发现自己处于一个新的状态,然后你更新了你对上一个状态的评估,使用Bllman方程迭代采取了那个动作,并且一遍遍的重复这个过程,上面是对这一循环/流程的总结。
7、Q-Learning: Representation Matters
(1)In practice, Value Iteration is impractical
① Very limited states/actions
② Cannot generalize to unobserved states
(2)Think about the Breakout game
State: screen pixels
① Image size: 84 x 84 (resized)
② Consecutive 4 images
③ Grayscale with 256 gray levels
25684x84x4 rows in the Q-table!
(3)问题:Q-Function是单值的吗?
是的。这是一个单值的(函数),Q-Function只是一个单一连续值。
(4)问题:怎么模拟世界?
模拟的方式是一个非常简单的 atari paddle 游戏(一款类似于打砖块的游戏),把它模拟成游戏里的挡板,这块挡板可以左右移动,并且你模拟了球(打砖块的球)的物理特性,这需要许多关于这个特定游戏的专业知识,所以坐在那里手工制作这个模型,这甚至对于一个简单的游戏都是困难的,另一个可以采取的模型,是以人类看世界的方式看世界,这个模型看作一个像素的集合,只是这个模型是世界上所有的像素对挡板或球或者物理特性以及颜色和点都知之甚少,这些都只是由像素组成的。这个似乎是一个对这个游戏里的世界的糟糕的模型。但是这似乎对atari有效,这似乎也对人类起作用,当出生的时候看到有光射进眼睛,并且迄今为止的认知,一点都没有,出生的时候没有获得任何指导,比如世界上有很多人,这些人良莠不齐以及如何走路,不知道这些,所接触的只是光,声音和一些其他的感知,开始去了解每一件事,模拟世界的方式体现了所学的,并且会讨论一个神经网络如何做到这些,它学着去描述这个世界,但是如果必须手工模拟这个世界,这将是个不可能的任务,这是问题所在,并且如果必须手工模拟这个世界,这个世界最好是一个简单的世界。
(5)问题:这个模型的鲁棒性(稳定性)如何?
如果描绘世界的方式与思考世界的方式稍有不同甚至完全不同,这种对世界的模拟就不够好,一直在构建它,这已经很了不起了,如果有一个对这个世界的准确的输入,如果有一个这个世界的准确的模型,这个模型可以学习任何事,这就已经令人震惊了,这是一个很重要的问题,不是关于这个世界的模型,而是奖励函数,如果奖励函数稍有不同,真正的流程或驾驶过程中的奖励函数,就会与所期望的不同,(6)问题:有什么负面的东西吗?
有,而且可能会很大,
(7)问题:会随着时间改变 a 的值吗?
是的,应该随着时间的推移改变 a 的值。
(8)问题:Q-Leaming 迭代与ε函数的复杂的相互作用是什么?
① 这是对特定的学习问题的精确调整,所以世界越复杂,状态的数量就越多,行为的数量也越多,在把ε的值减到0之前你就需要等更久,但是在把ε减小到0之前需要调整测试它,不幸的是,ε只是需要调整的参数重的一个,有很多参数,这就是为什么不能只是将一个强化学习的agent丢进这个世界,在那种情境下的影响?不,这只是像投掷一次硬币,如果那个ε的值为0.5,将会有一半的时间在采取随机的行动,所以没有明确,不会像那样才去最佳的行动,然后以一定的几率退而求其次,选择次之的行动,然后继续,但是如果仅仅采取一个随机的行动,在简单的构想下这是起作用的,因为你不想对什么是好的尝试有一个预先的概念,在你探索的时候,重要的是如果它是一个模拟,你会去尝试疯狂的东西,这个问题很棒。
② 所以,这是一个 representation 方面的问题,这是关于如何描绘这个世界的问题,所以可以将这个世界思考为几个分立的部分,比如在这个atari游戏里,这几部分有挡板的左右移动以及能击中的不同事物的确切位置,来构建这个复杂的模型,这个专业的驾驶模型需要精确地调整它到这个特定的问题上,但是事实上,这个模型越复杂,bellman方程的迭代就越糟糕,那个值尝试着构建一个Q函数为每一对单独的状态和动作的组合(构建一个Q函数),这件事变得非常困难,因为那个方程变得十分稀疏和巨大,所以如果你想以一般的方式看待这个世界,以人类的方式看,这个世界是一个像素的集合,如果只取一个像素,这个游戏就如同一个84乘84的像素集,一张图片,一张 RGB 图片,然后不只看着当前的图片,而是将这些图片看成一个连贯的画面,就像如果有一个球在移动,并且希望了解这个球的运动,所以你看了4张图片,当前的一张图片和之后的3张,因此,这就是深度学习的作用,对于这个Q-Value函数需要了解的是无论这个数字有多大。但是只要它确定大于宇宙中原子数,这是一个大数字,因此,你必须运行足够长的仿真以仿真出Q-Table中的多数状态,因此,正如 EIon Musk 所说的,你可能需要进行模拟,你可能需要模拟一个宇宙仅仅是为了计算 Q-Function,因此,这就是深度学习的作用,并且说,他们有256个灰度级,这些构成了 Q-Table 的规格,而不是把世界建模成为一个Q-Table,你尝试着学习这个函数。
8、Philosophical Motivation for Deep Reinforcement Learning
(1)Takeaway from Supervised Learning:
Neural networks are great at memorization and not (yet) great at reasoning.
(2)Hope for Reinforcement Learning:
Brute-force propagation of outcomes to knowledge about states and actions. This is a kind of brute -force "reasoning".
(3)Hope for Deep Learning + Reinforcement Learning:
General purpose artificial intelligence through efficient generalizable learning of the optimal thing to do given a formalized set of actions and states (possibly huge).
对于有监督学习,它擅长记忆或者数据存储,带着Q-learning的强化学习所能做的是,可以扩展一些偶然的奖励,并且在操作中普遍化,在游戏中采取的行动将会使你获得奖励,深度学习所做的正是我们可以将这个强化学习系统应用到一个世界这个世界不需要被定义,它可以被任意地定义,它可以包含Atari游戏的所有的像素点,它也可以包含无人机、机器人或者汽车拍摄的照片里的所有像素。
9、Deep Q-Learning
Use a function (with parameters) to approximate the Q-function
Linear
Non-linear: Q-Network
Q(s, a;θ)≈Q*(s, a)
但是我们仍然需要一个这个世界的书面化的定义,当你能理解图像数据的时候,这个定义就十分的容易了,因此深度Q-learning,深度版本,因此,我们不是学习Q-Table,Q-Function,而是估算Q-Prime,我们尝试着利用机器学习来了解它,这个十分复杂的函数尝试着学习一些参数,试着学习它,并且采取神经网络的方法,神经网络与它有着同样的类型并且展示了它学习的数字,这些数字是从一幅图中,映射成一个数字到一个分类中的,同种类型的网络习惯于采取一个状态,一个行动,以及产生一个Q-Value,现在,这就是最惊奇的事情。
Layer |
Input |
Filter size |
Stride |
Num filters |
Activation |
Output |
conv1 |
84x84x4 |
8x8 |
4 |
32 |
ReLU |
20x20x32 |
conv2 |
20x20x32 |
4x4 |
2 |
64 |
ReLU |
9x9x64 |
conv3 |
9x9x64 |
3x3 |
1 |
64 |
ReLU |
7x7x64 |
fo4 |
7x7x64 |
|
|
512 |
ReLU |
512 |
fc5 |
512 |
|
|
18 |
Linear |
18 |
Mnih et al. "Playing atari with deep reinforcement learning." 2013.
我们并不知道起始的任何事情,只有一个Q-Table并且它的起始是随机的,这个Q-Function,这个深度网络,不知道起始的任何事情,我们所知道的所有的东西就是,在这个模拟的世界,有一个特定的游戏,你必须一次又一次的玩它,并且看着你从每一次游戏的循环中获得的奖励,但是在一开始,它什么都不知道,在学习之后它可以玩得比人类更好,这是一个Deep Mind的论文,在2013年用深度强化学习玩Atary这款游戏,还有一个关键的事情可以使得所有人都感到激动,这是关于在人工智能领域深度学习的作用,它使用卷积神经网络来工作,它像其他任何网络一样也是香草网络,是一个规则网络,它采集原始的像素,并且从原始的像素中估算出Q函数为了能够玩这些游戏,比一个人做的更好。
11、Deep Q-Network Training
(1)Bellman Equation:
Q(s,a) = r+ γmaxa'Q(s',a')
(2)Loss function (squared error):
L= E[(r + γmaxa'Q(s',a')- Q(s,a))2]
Target
之前有提到过的损失函数,再一次提到香草损失函数,非常简单的目标函数,这是第一个可能实现的,有一个关于TensorFlow的教程,方差,用bellman方程,它的估算值是Q,Q-Function估算出状态和行为,这是采取任何行为所得到的最大奖励,这可以带你去任意未来的状态,你尝试着采取这个行为,观察这个行为的结果,如果这个目标与你学习目标不同,这个函数所获得的就是期望的奖励,与你真实得到的不同,你调整网络的权重,这是精确的过程。
11、Deep Q-Network Training
Given a transition, the Q-table update rule in the previous algorithm must be replaced with the following:
(1)Do a feedforward pass for the current state s to get predicted Q-values for all actions
(2)Do a feedforward pass for the next state s' and calculate maximum overall network outputs max ,Q(s', a')
(3)Set Q-value target for action to r + γmax ,Q(s', a') (use the max calculated in step 2).
For all other actions, set the Q-value target to the same as originally returned from step 1, making the error 0 for those outputs.
(4)Update the weights using backpropagation.
学习如何在这个像素世界中生存,因此你对于Q-Value的映射状态与行为,算法如上,这是训练它的方法,给出转变,正如在那个状态下的状态行为,是你所获得的奖励,一个S-Prime,正如你自己所发现的状态,因此我们替换他们的基础规则,在之前的伪代码内,通过采取一个向前的传递穿越网络并给出S-状态,将会查看预测的Q-Value是否符合这个行为,之后在进行另一个向前的传递来穿越网络,并且查看真是所得,之后如果完全地关闭它,我们将会受到惩罚,以一种方法反向传播这个权重,通过这种方法将会在下一次得到更少的错误,并且将重复这个过程,这就是一个仿真,你正在自我学习。
12、Exploration VS Exploitation
(1)Key ingredient of Reinforcement Learning
(2)Deterministic/greedy policy won't explore all actions
① Don't know anything about the environment at the beginning
② Need to try all actions to find the optimal one
(3)Maintain exploration
Use soft policies instead: r(s,a)>O (for all s,a)
(4)ε-greedy policy
① With probability 1-€perform the optimal/greedy action
② With probability E perform a random action
③ Will keep exploring the environment
④ Slowly move it towards greedy policy:E-> 0
再一次,相同的法则也运用在这里,探索与利用的对比,你从ε的值为0或1开始,主要在进行探索,之后将 ε 的值定为0。
13、Atari Breakout
A few tricks needed, most importantly: experience replay
通过 Atari Breakout 这款游戏。这就是 Deep Mind 论文的结果。这是一次训练在x-轴上,在y-轴上是平均行为值和每个片段的平均奖励,为什么它是一个很好的结果但是它很凌乱,因为它包含了很多小技巧,因此这不仅仅是放入一堆游戏中的像素点,并且得到以恶搞知道如何在游戏中取得胜利的agent,需要有许多预处理并且获得所需要的数据,因此很不幸的是,真相比所希望的更加凌乱,但是有一个至关重要的小技巧被称作experience replay,因此,相对于让一个agent来做,你需要来学习这个庞大的网络来建立一个模型,这个模型描述的是做什么与做什么不好,并且随着你自己的方法来学习,随着experience replay,你正保持着一个轨迹,关于你所做的所有的事情,每一次你回看你的记忆,并且从中取出一些旧的好经验,并且再一次尝试它们,相对于让agent自己运行以得到一些局部最优解,它尝试着学习游戏中非常巧妙的方面,这实际上在全局的层面上,不会让你获得游戏的胜利,非常像平常的生活一样。
14、Deep Q-Learning Algorithm
initialize replay memory D
initialize action-value function Q with random weights observe initial state s
repeat
select an action a
with probability€select a random action
otherwise select a = argmaxaQ(s,a')
carry out action a
observe reward r and new state s '
store experience in replay memory D
sample random transitions from replay memory D
calculate target for each minibatch transit ion ,
if ss' is terminal state then tt . rr
otherwise tt = rr + γmaxa‘,Q(ss', aa')
train the Q network using (tt - Q(ss, aa) ) * as loss
s=s'
until terminated
因此,这就是算法。深度Q学习算法的伪代码,初始化replay memory,这里有个很有必要用到的小技巧,那就是保持对之前所发生事件的跟踪,使用随机权重初始化行为值函数Q,并观察初始状态,再重复同样的事情,选择发生概率为ε的行为。还可以基于神经网络所估算出的概率,选择最有可能发生的动作,接下来执行这一行为,观察奖励,再将所获取的经验存储在replay memory内,再从记忆缓存区内对随机的转变进行采样,因此,你有一定的几率将曾经的时光带回来,以使你不会获得最低的本地成绩,接下来就可以使用,你所期望到的结果和你实际得到结果的差异处,来训练Q网络,并且不断地重复这一过程。
15、Atari Breakout
After After After
10 Minutes 120 Minutes 240 Minutes
of Training of Training of Training
这就是在训练十分钟后你所能做到的,最左侧的是训练很段时间后的结果,你所得到的只是一个学习任何东西都十分困难的挡板,它只是在不断地“死掉”,这个数字从5到5到3到2到1,这是挡板所剩余的生命数,再单个GPU上训练两个小时后,它开始学习去赢得游戏,避免“死掉”,积攒积分,并且避免球穿过挡板,这是人类的真实表现,甚至还要好过一些人,但是它有时仍会死掉,因此这十分贴近人类的游戏水平,在经历四小时训练后,它做出了一些神奇的事情。它明白了如何能够“慵懒”地去赢得游戏。 钻一个穿过上方方块的洞,一直到方块的顶部,然后让球留在方块的上方,它为你完成了所有困难的工作,将球穿过板的概率降到了最低,因为球一直留在块的上方,这或许是你玩这个游戏所无法发现的办法。
这个算法的输入只是这个游戏的像素,同样这也是人类在产生视觉感知时所收到的信息,在了解奖励与惩罚的确切定义的情况下,它就可以学习了,它可以学习如何获取高的奖励。这是普通的人工智能,这是一个很小但是普通的例子。它的主要用途,它对游戏一无所知,同时对于木浆或物理规律也一无所知,它只是对游戏的输入作出答复。
16、DQN Results in Atari
同时,对于很多Atari里面不同的游戏。它们也会做同样的事情。这个图像里的x轴显示的是Atari里不同的游戏,y轴显示的是一个百分数,100%代表人类在游戏中所取得的最好成绩。也就是人类所能得到的游戏分数,图中靠左的与居中的所有游戏,是强化学习远超人类游戏表现的游戏,在这之下的适合人类表现相同或差于人类表现的游戏,因此它可以学习很多游戏-boxing,pinball,它对所有这些游戏都是一无所知,它所收到的仅是游戏的像素,这就像你让一个人去玩这些游戏,并让他们去赢得这个游戏。
(1)问题:对于特定的游戏,他们是否自定义游戏的模型?
可以自定义游戏的模式,但是它不需要定义游戏的玩法,但是有一个很重要的因素是这仅对于 atari 上的游戏成立。
(2)问题:这一技术是否可以转移到驾驶领域?
或许不能。
(3)问题:玩游戏在哪里玩?
这是玩游戏的其中一个步骤,在一个状态下采取操作然后观察到了它,也就是有了这样的模拟过程,最大的问题之一就在于此,需要进行仿真来得到基准数据。
(4)这个意见是对于很多这些情况,操作行为可能不会改变奖励函数,大多数时间,奖励分数,会在你操作10, 20, 30步之后才到来。这也是为什么这项工作会这么神奇,因为它在本地进行学习,在对游戏进行成百上千次仿真的过程中,它能够学习应该在游戏中做什么,为了之后获取到奖励分数,如果看它的数学表达,这是十分简单的数学公式,而这个结果是难以置信的。因此这是长足的进步。
17、Gorila
(General Reinforcement Learning Architecture)
10x faster than Nature DQN on 38 out of 49 Atari games
Applied to recommender systems within Google
Nair et al. "Massively parallel methods for deep reinforcement learning." (2015).
最近,这一算法取得了长足的进步,这是一个名为gorila的一般强化学习架构,起码在模拟世界这是很酷的事情,那就是可以通过分布式方法来运行深度强化学习。你可以通过分布式方法进行模拟仿真和学习,你可以生成经验,正如这个图表所展示的,你既可以从人们当中获取经验,也可以从模拟仿真中获取经验,比如alpha go 赢得围棋的方式,就是从专业比赛以及它自己的比赛中来学习得到经验,因此,可以通过分布式方法,可以测量的分布式方法,让它进行学习,在这一指定案例中,goailla 得到了 深度强化学习网络更好的结果,这也是他们在《自然》杂志上论文的一部分。