本文主要针对强化学习做出理解,讨论强化学习是什么,为什么难,他是怎么做的三个方面给具有一定基础知识的读者介绍强化学习。
主要参考李宏毅的蘑菇书,在线阅读链接。
概述
主要示意图就是上图,强化学习主要讨论就是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。
两个部分就如上述所示,智能体、环境。然后agent交互环境生成一个动作,也被叫做决策,该动作执行,环境就输出下一个状态和奖励。强化学习就是要搞一个最好的一连串的动作。
强化学习难点
从监督学习说起,监督学习就是有大量已经说他是什么的数据(被称为被标签的数据),然后让一个判断的判别器进行判断,看最后是否正确,不正确多,损失就高,就得改判别器。就是根据类似错误写出一个损失函数(loss function),通过反向传播(back propagation)来训练神经网络。
监督学习有一些假设:
- 输入的数据(标注的数据)都应是没有关联的。因为如果输入的数据有关联,学习器(learner)是不好学习的。
- 需要告诉学习器正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。
通常假设样本空间中全体样本服从一个未知分布,我们获得的每个样本都是独立地从这个分布上采样获得的,即独立同分布(independent and identically distributed,简称 i.i.d.)。
强化学习中两个都不能满足,因为智能体得到的数据很大可能不是独立同分布,而且也得不到实时的反馈(就是走的是不是对的)。就是延迟奖励(delayed reward)的问题,延迟奖励使得训练网络非常困难。
强化学习也因此有一些特征:(1)会试错探索,它通过探索环境来获取对环境的理解。(2)智能体会从环境里面获得延迟的奖励。(3)在强化学习的训练过程中,时间非常重要。因为我们得到的是有时间关联的数据(sequential data), 而不是独立同分布的数据。在机器学习中,如果观测数据有非常强的关联,会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。(4)智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时 候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习里面一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。
可想而知,强化学习相较监督学习有点困难。
为什么要强化学习
强化学习得到的模型可以有超人类的表现。 监督学习获取的监督数据,其实是人来标注的,比如 ImageNet 的图片的标签都是人类标注的。因此我们 可以确定监督学习算法的上限(upper bound)就是人类的表现,标注结果决定了它的表现永远不可能超越人类。
强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人类的能力的表现,比如 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类顶尖的棋手打败(捷豹)。
强化学习历史
期的强化学习,我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来,就形成了深度强化学习(deep reinforcement learning),因此,深度强化学习 = 深度学习 + 强化学习。
可以把神经网络放到强化学习里面。
标准强化学习:其实就是设计特征,然后训练价值函数的过程。标准强化学习先设计很多特征,这些特征可以描述现在整个状态。 得到这些特征后,我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作。
深度强化学习:自从我们有了深度学习,有了神经网络,就可以把智能体玩游戏的过程改进成一个端到端训练(end-to-end training)的过程。我们不需要设计特征,直接输入状态就可以输出动作。我们可以用一个神经网络来拟合价值函数或策略网络,省去特征工程(feature engineering)的过程。
李宏毅老师,牛。讲的太细致了。