大家好
欢迎回来
那么这一节我们还是继续基于神经网络的人工
智能系统当中
强化学习的过程
那么在强化学习当中
我们来看看一个所谓的价值判断
那么实际上强化学习的过程
其实就是一个对于行动的策略的寻找
当然行动的策略要是一个最优的策略
我们都希望我们的一系列的行动能够导致非常
好的后果
所以非常严密的来讲
它就应该是一个不同的局面
一个状态
即就是局面在某一个局面上
我要采取一个什么样的动作
这么一个对应关系
那么有很多局面
在每一个局面采取这个动作
都应该哪个哪些动作是一个比较好的动作
那么这样有很多局面-动作
也就是状态动作之间的一个对应关系
这种就是称作为一个策略
当我碰到这个局面的时候
我就应该采取什么样的一个动作
然后到了一个新的一个局面之后
我再采取什么样的动作
那么这一系列的局面动作局面的动作
最后导致一个最好的结果
所以这叫一个优化的一个策略
那么跟监督学习的这种手写数字的识别不同的是
在监督学习里头
实际上是把输入的数据进行分类
分完了以后打上标签
将来新的数据进来以后
我就可以知道新的数据图像是属于哪个标签的
从而识别出它是0123456789这十个
数字的标签数字
那么在强化学习当中
他并不关心说我现在目前的局面或者状态
它分成了哪些类
要打上什么标签
不是这么做
而是关心在我当前的状态或者说局面下
我采取什么样的动作是最优的
我应该怎么样去指导我将来的行动
这是监督学习和强化学习的不同
那么所以我们其实又会引入状态下的估值
说这个状态本身
它是不是一个好的状态
这个在我们以前基于决策树和搜索的人工智能
算法里头当然有用到
比如像下棋的时候
我棋盘的局面
它的估值好不好
如果好
我就尽量的往这个局面去演化
我下的棋会最好是导致这个局面
如果不好
我就下的棋尽量的避免进入这么一个棋局
这是一个只跟状态
也就是只跟棋面局势相关的这么一个估值函数
那么对于强化学习来说
不光是这样
这个是不够的
它必须是一个状态加上动作
也就是这个函数必须要跟状态以及在这个状态
下采取的动作相关
所以它具有两个参数
一个是我目前所面临的状态
目前的局势
然后第二个是在这个状态或者是在局势下
我采取的每一个动作
对于每个动作都做一个估值
所以这叫做状态动作函数我们一般就要给它起
名叫做Q函数
那么Q函数用于在某一个局面或者状态下采取
某个动作进行估值
比如我采取的动作评估的值是多少
另一个动作评估的值是多少
当然我们尽量就有这么一个函数之后
我们尽量当遇到这个局面之后
按照评估值更高的动作来去做的
这是很自然的
那么所以一个在强化学习当中
一个最常用的算法就是去找这么一个
状态和动作的函数Q函数
那么这种算法叫做Q learning
那么Q learning就是说首先找到这么一个状态动作函数
而且如果知道的说某一个状态下每一个动作的
估值的话
那么我们其实在进行选取决策的时候
就可以选择估值最好的动作
直接去执行这个动作就可以了
那么在Q learning当中
我们就要通过算法
通过学习去找到这么一个Q函数
那么简单的Q函数它表现为一个表格
那么这个表格它的行表示状态列表示动作
就是说在格子当中的值
就表示说我在这个状态下采取行动
它的估值是多少
那么这里会有一系列的整个估值就叫做评估值Q
那么我们在通过强化学习
就是让主体不断的去跟环境进行交互
进行尝试
那么在每次的尝试
它都会有得到不同的回报
然后根据这个回报来去不断的更新这个表
当然在进行不断学习的过程
它也需要一个初始的表去指导他进行动作
那么一旦的进行动作之后
他就会把回报回过来
才去不停的更新这个表
那么在这个表的过程应用这个表的过程当中
他也会根据当前的状态选取一个回报最高的
动作去执行
执行完了以后看有什么回报
如果是正面的回报
我回来比如说提高这个评估值
如果是一个负面的回报
那我就降低局面评估值
那么在经过不断的学习不断的更新
我们可想而知这样的一个Q函数表它就会变得
越来越好
怎么好
我只要根据这个表里头所列的
我碰到了什么样的一个状态
我就采取一个估值高的动作
将来最终就能够导致最好的结果
所以我们说常在Q learning里头最主要的就是通过
学习来找到这么一张终极的一个行动指南这么一个表
那么再简单的一个Q函数表
我们来看看这个例子
这是一个很简单例子
一只老鼠和奶酪的故事
当然这个老鼠他所在的位置是这六个格子当中的一个
那么这个格子当中有空格子也有一个奶酪
有两个奶酪和一一堆奶酪的
那么当然作为老鼠来说
它的回报就是吃到更多的奶酪
那么所以我们按照这样的一个环境以及它的
动作以及它的回报
我们会构造这么一个Q函数表
那么函数表里头有一共有六行
为什么
因为老鼠它可以处于六个格子当中
这就六行
那么每一行它都有一个动作
它是往上走还是往下走
还是往左移还是往右移
但是有的时候
比如说在这个开始点的时候
它只能够往右或者往下
而不能往上或者往左
但是我们这里可以看到
从这一张现成的Q函数表里头
我们可以看到一个行动指南
是吧
这个相当于说老鼠身上带了一个锦囊
我们所谓的锦囊妙计吗
比如老鼠走到了一个奶酪格子里边的时候
要怎么办
他不知道
好
他就翻出这张锦囊里头的一个纸条
这个纸条说
如果你往下走
你就遭殃了
-100
但是如果你往左走是1往右走是评估值是2
为什么
因为往左走
你有可能能够吃到两块奶酪儿
往右走
更有可能吃到一堆的奶酪
所以在这个位置上往右走是最好的一个行动
方案
好
你按照这个锦囊说
我应该往右走
他就按照评估值最高的
一旦到了一小块奶酪
他就应该往右走
那么这样的一个Q函数以及Q函数表所给的决策
所以我们说强化学习和Q-learning最终的目标
就是通过学习得到这么一个行动指南的表
得到一个锦囊 锦囊当中有一个纸条能够告诉你
你碰到一个什么情况
你最好应该怎么做
你采取的行动会得到什么回报
那么当然你会找到一个评估值最高的行动去
采取这样的一个动作
那么对于复杂的一些状态
我们刚才只是一个很简单最简单的一个例子
稍微复杂一些的状态
它会有特别多的状态
比如说在FlappyBird的游戏里面
你想想状态有多少
按照像素而言
每个像素又有多少种颜色
那么对于这些状态这么复杂
那就没有办法再用表格来表示
你可以想象这个表格该有多大
那么这样我们就应该用神经网络对这个Q函数进行建模
那么所谓的建模就是我生成一个多层的神经网络
那么神经网络的输入就是一系列的状态
然后输出就是说我一旦有这么一个状态
那么采取每个动作
它的评估值是多少
好
如果有这么一个Q神经网络
构建好了以后
好
我们的决策行动指南
我发现了这么一个面临的状态
把这个状态输入到神经网络里头
那么神经网络输出就会告诉我们说你采取行动一估值是多少
动作二估值多少
动作三估值多少
好
我们就可以采选取估值最高的动作去做
做完了以后又有一个新的状态
把这个新的状态再输入到神经网络里来
它又能得到一组评估值
我们还是按照最高的值去做
那么这样只要构建好这么一个Q神经网络
那么我们的强化学习就会有
人工智能就会有足够的智能把一连串的事情给做好
在游戏当中所向披靡
最后能够得到一个最高的分数
那么最后我们来看看Q learning
这样的一个算法
实际上对于Q learning算法来说
它是通过学习来得到一个状态动作函数就是这个Q函数
Q函数简单的时候就是那张表
那么复杂的时候
它就必须是一个神经网络有状态输入
然后有各种各样的评估值的输出
那么所以这个算法其实它并不是说直接去决定
你这个主体应该采取什么样的一个决策
而是提供了一个估值的参考
那么估值参考你可以按照最高或者说比较高的估值
来选择你在这个状态下所采取的一系列的这种动作
那么如果说Q函数比如说简单到一个表
或者说复杂到一个Q神经网络
如果比较好的话
那么就可以直接的采取最大的价值来决定这个动作
但如果不那么好
你可能还需要一些候选的动作来去评估后续的这些行为
所以我们将来在Q算法当中
就是要通过各种各样的这种强化学习的方法来
得到一个最优的一个Q函数
那么这如果能够得到最优的Q函数
那么我们后续的这些算法其实不需要再做什么特别多的
只需要按照估值最高的动作来进行
一直做下去就就行了