大家好
欢迎回来
我们这一节是继续我们基于神经网络的人工智能系统
那么在这节当中我们来谈一谈如何持续更新这个Q函数
那么我们知道在强化学习当中
我们需要决策支持的时候
最终是需要得到一个所谓的叫做Q函数
这个Q函数其实就是一个行动指南
或者说一个决策的你的行为指导
当你碰到一个什么状态
处在一个什么状况的情况下
你就应该采取什么样的动作
这个在整个的Q函数当中都会给你明确的指出来
那么而且你只要是一个最优的一个Q函数
那么你只需要在这个表当中让你存在一个状态之下
只要看看我采取每一个动作
它都有一个估值
你只要找到一个最高的估值
那么所对应的动作你就继续做下去
那么Q函数就能够保证最后你能够得到最优的结果
所以强化学习当中最关键的就是怎么样得到
这个Q函数
所以我们在这就有一个Q函数的一个学习的过程
当然首先Q函数在我们没有任何的开始学习
没有任何的经验的情况下
初始化就Q函数
就是做一个随机数把它放进去
然后接下来就是进行试错式的这种探索
不断的重复每一局的游戏
在每一局的重复的过程当中
当然就是面临一个局面
然后选择一个动作
然后选择动作完了以后
游戏的状态就会发生变化
然后同时会得到一个回报
那么再根据回报你来去更新Q函数的估值
那么持续的这样反复的迭代的做下去
一局一局的去试
经过很多局之后
最终就能够得到一个比较好的Q函数
那么这样最终得到好的Q函数之后
我们就可以把它当作我们将来行动的指南
那么在Q函数当中
在我们强化学习的过程当中
每一次的每一局的这种试错的枚举
那么他其实每一局都是一个动作和状态的一个序列
这个动作状态的序列就是这样一个反复的一个循环的过程
一个主体
当他处在这个环境的某一个状态S这个状态的
情况下
那么它会从当前状态看到一个回报
那么根据状态和回报
他制定一个动作
这个动作跟环境交互
环境交互完了以后
环境发生出响应
那么响应的有两个
一个是这个环境转入了新的一个局面
第二个他得到了一个新的一个回报
那么在这个过程当中反复的反复进行
最后直到这个游戏结束为止
那么从一个循环看来
其实我们可以明确地看到
那么下一个状态就是所谓的下一个状态
它只是和当前的状态和在当前状态下所做的动作有关
而跟前面历史其实没有关系
也就是说你在当前的局面
是如何到这个当前局面的
这个跟你后一个状态是没有关系的
我只要处在这个局面
做了这个动作
那就必然导致下一个状态
那么像这种性质跟历史无关
这种性格称之为马尔科夫性质
当然也并不是说所有的游戏它都具有马尔科夫性质
但是我们在强化学习当中
如果具有马尔科夫性质
那么我们就可以用强化学习
用Q函数这种方法来解决它
那么在强化学习当中
除了我们说试错式的搜索这样的一个特点
那么强化学习另一个重要的特点就是回报的滞后性
那么也就是说我当前状态下所做的动作
当然它会发生状态的改变
然后得到一个回报
我们知道这个回报实际上并不仅仅取决于说我
进入的下一个状态
下一个状态是好还是坏
就能够完全决定这个回报
那么实际上还要取决于我一旦触发了序列之后
序列后面的每一个状态
每一个状态的都要累计的回报
然后才是这个状态下做的动作所产生的一个回报
那么拿这个例子来说
老鼠吃奶酪这个例子来说
某一些动作它的产生的当前回报值可能会很高
比如说像他到了一堆奶酪
下面还有一堆奶酪
你说到一堆奶酪回报值会相当的高
但是长远来看可能并没有那么高
因为这一堆奶酪可是不那么好吃
因为它最后导致的状态就是他一定会吃到毒药
所以你如果说只关注当前的回报值
那么后边长远可能也不会不见得就一定就有那么好
当你当前不那么贪婪一点
你吃一块
最后导致你还是可以安全平安回家
所以这个性质其实也验证了一个中国的老话
叫做人无远虑必有近忧
是吧
一定要往前看
不仅仅是说我现在做这个动作得到的下一个状态
下一个状态如果能够很好的话
我就必须要选择下一个状态
而是你要多往前看几步
那么所谓的长期回报
那么当然长期回报也不是说越远越好
当然这个影响会一个逐步一个削弱的过程
也就是说我现在当前做的动作对于下一个状态的影响
就是紧接着下一个状态的影响
这个影响是最直接的
但是下一个状态的下一个状态继续的所有的后续状态的它的
影响就不是那么间直接
它可能越来越间接
那么影响力就会越来越小
所以我们说在学习的过程当中
我们会用一个所谓的回报率来平衡长期以及计算量的问题
那么回报下一个状态的回报和更远状态的回报
那么比如说我们下一个状态
它的回报率是0.9
那么在下一个它就降低了0.81
再下一个可能0.729
那么越远它的影响力就越小
这个回报率也呈现出这么一个平衡
那么这样我们每次游戏都会产生
每一局的游戏
都会产生不同的状态-动作 状态-动作这样一个序列
所以每一次的这种游戏对于后续的状态
它的回报计算都是不一样的
都有可能不一样
所以我们说在这个状态下
我采取动作一
它有一系列的动作状态
采取动作二也有一系列的动作状态
采取动作三他后面也有一系列动作状态
那么我们就把所有的后续的状态的这个所谓的
叫做期望值
也就是简单来说
可以说是所有后续状态的这些回报的平均值来
作为回报函数的值
那么这个回报函数的值就是在这个状态下
采取这个动作
它的评估值也就是Q值了
那么这样我们就可以计算出Q值出来
那么当然Q值只计算一次当然不行
我们要反复的一个试错一个更新的过程
那么每完成一局就能够持续的去更新一次Q函数
那么所以如果完成的局数越多
更新的次数越多的话
那么这个结果就会越来越精确
所以我们把这个更新的过程就像这张图1样
那么我有一个就的Q值的情况下
再进行这一次尝试以后
再把这个更新的回报给他跟旧的Q值结合在
一起
更新出一个新的Q值出来
当然如何去结合在一起
这当然也有讲究
那么这个讲究就是我要尊重我的经验
那么旧的Q值需要能够发生作用
我们肯定不会说计算处新的值就完全把旧的值覆盖掉
而是新的值跟旧值当中有一个有比例的一个结合
所以既要利用好已经学到的经验
也要善于去进行新的一个探索
所以这两者就用一个所谓的叫做学习率来进行平衡
那么就把更新的回报乘上学习率
然后再加上Q旧的Q值得到新的Q值
那么学习率其实他也不是说是固定的
它可以随着学习的过程来进行动态的调整
当然一刚开始学习的时候
如果旧的经验还不足以这个得到比较好的结果好
我们就更尊重新的尝试和新的探索
学习率就可以高一些
那么这个值大一些的话
那么就是新的探索
那么随着学习的越来越持续和深入
我们会发现新Q值会越来越稳定
它趋向于稳定
趋向于稳定之后
我们就把为了是说不会因为某一些偶然因素去
有一个颠覆性的一个更新
所以我们会尝试把学习率会调越来越低
然后我们如果发现新的Q值
就是整个的Q值
它趋向一个很稳定的情况之后
我们就可以停止学习了
那么停止学习得到的Q函数就可以是一个
比较优的一个Q函数
那么所以我们通过前面的整个的过程做强化学习的话
经过足够多次的尝试之后
那么人工智能所得到的状态动作值函数就是估值函数
Q函数就能够达到一个比较优的一个结果
那么再根据Q函数根据行动指南来选择动作
那么这个就能够到达熟能生巧的这么一个地步
我们经过FlappyBird的游戏的强化学习的训练
我们也发现经过了上百万次学习之后
小鸟终于能够在人工智能的控制下
达到一个非常专业的玩游戏的水准