之前写的一篇关于强化学习的日志,很粗糙。简单的说了一下,动态规划,蒙特卡罗,时序差分。
也写了一些其他的内容。
用这篇文章来从头到尾总结一下。
什么是强化学习?
强化学习是机器学习的一个分支。强化学习是最像人工智能的机器学习。
强化学习指的是,从经验中学习,让机器像人类一样,有一个目标,然后在实现目标的过程中不断的失败,得到经验,最后实现目标。
强化学习中有两个存在,一个是agent,一是环境。agent相当于玩家,环境相当于所在的游戏环境。比如王者荣耀,玩的英雄就是一个agent,环境就是游戏环境。agent有一个目标,就是最大化未来的累积奖励,奖励是一个术语,之后再说。在王者荣耀里面,目标就是打赢。但是我直觉上觉得目标是可以设置的,比如可以设置成伤害越高越好,那么无论赢不赢,伤害要最高。
术语定义
奖励,回报,回合,策略函数,价值函数,状态动作价值函数,环境,agent,状态,动作,
agent:相当于在环境中学习的人类。
环境:
状态:状态,举例来说,比如王者荣耀每两帧之间的差异,可以当作一个状态。状态可以是离散的,可以是连续的,现实问题一般是连续的,无限的。
动作:在一个状态中,agent能做出的行为。比如王者荣耀,如果截图的话,那状态是前后两张图片的差异。不同的差异就是动作。
奖励:每一个状态都有一个值,标记了这个状态的价值,也就是说,可以说这个状态的价值是3,那么到达这个状态,奖励3。
回合:从开始到结束,就是一个回合。从初始状态到终止状态就是一个回合。比如王者荣耀把对面水晶拆了,就终止了,或者自己水晶没了,也终止了,或者也可以自定义其他终止状态,比如花的时间超过了一定程度就算终止状态。
回报: 回报就是在一个回合中的每一个状态的奖励的累积和。后续状态奖励一般都要设置一个递减参数。因为越是遥远的状态,不确定性越多,所以价值应该与前面的状态一致,甚至应该小一些。如果把这个参数设置为1,那么意味着长远的眼光,认为未来的状态同样重要。如果设置为0,那么意味着短视,未来的状态变得不重要,只在乎下一个状态的奖励。
策略函数:策略函数的输入是state.输出是在这个状态下采取的动作是什么。
价值函数:有状态动作价值函数和状态价值函数。状态价值函数的输入是state,输出是这个状态的价值,状态动作价值函数的输入是动作状态行为对,输出是在这个状态采取这个行为的价值。
强化学习的核心是贝尔曼方程,这个方程解决的是更新价值函数。
强化学习要做的就是,找到最好的策略。
强化学习的两个问题:1.预测问题,namely,给定一个策略,然后找到这个策略的价值函数。2.控制问题,namely,找到最佳的策略。
强化学习就是围绕着1,2展开的。
于是有了很多方法,动态规划,蒙特卡罗,时序差分,函数近似。
从第一个到最后一个是慢慢解除限制的过程,慢慢变得越来越未知。从动态规划开始,知道环境动态,也就是知道状态转移的概率分布。不用真的与环境进行交互。意思是说,我知道我在这个状态做了这个行为到达的状态的概率,所以我要求一个状态的价值,我只需要加权求平均值就行。
而蒙特卡罗并不知道环境动态,我不知道我下一个状态是什么,我不知道做了这个动作会把我带到哪个状态。所以开始需要与环境交互,在环境里做一个行为,然后环境给一个奖励,和下一状态。在蒙特卡罗,实际上是一个回合一个回合的交互,但是如果不会停止呢,假如就在一个回合里,然后达不到终止状态,这个时候蒙特卡罗就不好解决问题了。
时序差分可以解决不停止的情况。而且在这里可以实际应用到gym库里面了。直觉上讲,前面的方法除了动态规划,都可以用到gym库的环境里。只不过需要自己划分状态。因为时序差分是把价值存到二维表里,是table的存储形式,一旦状态行为数量过多,就不太好用。
这个时候就用函数近似。函数近似可以处理动作状态连续的且数量多的环境。这也是很好用的。
这个时候强化学习基础就已经结束了。然后开始加入监督学习或者深度学习其中的一些算法,工具。比如DQN,比如演员评论家算法,或者用线性回归加上特征工程。这里就是比较复杂的部分了。
而且强化学习,即使是领域的大牛,训练一个agent有时候也会花很长很长的时间,有时甚至花费一年多的时间。听起来有点让人绝望(笑)
再说强化学习和机器学习的其他类型并且和深度学习结合还是比较多。深度学习的结合就是用神经网络结合强化学习。
脑子里还有印象的机器学习,神经网络,之前看了一本书,里面讲的神经网络,其实就是分类的时候一条线不够分,所以要花多条线分类数据。回归举例来说,就是预测。比如工资和工作年限的关系,回归建立的模型最后可以输入一个年份,返回工资数量,也就是预测。简单的说就是画一条线最好的拟合数据。分类,画一条线,把不同数据区分开,因为有时候仅仅画一条线区分不了数据,所以会画很多线,这就是神经网络。梯度下降,就是画一条线,从不怎么好的拟合到最优拟合的过程。
网友评论