大家好
欢迎回来
那么这一节我们继续基于神经网络的人工智能系统
我们在介绍优化器的优化函数
那么我们现上一节已经知道了
通过一个神经网络的损失函数
它能够定量的将神经网络的预测的结果的好坏
能够定量的分析出来
那么这样我们如何根据评价结果
来优化我们的这些参数
当然我们知道一个好的神经网络
它最终的参数的配置
应该要让每次的预测结果他的
损失函数降到最低
那么我们现在如何能够让它最低
当然我们知道一个神经网络当中
它的参数是海量的
就像我们手写数字识别
就这么两层的隐藏层
就有13000多个参数
那么如果如何把这13000多个参数
它们之间的无穷尽的这种组合来
进行修改
能达到每次预测他的损失
函数都能够降到最低
当然我们知道如果这种修改和调整的方案不当的话
就会耗费大量的计算时间
而且未必能够得到好的结果
当然首先第一点穷举是不行的
那么在我们损失函数本身已经
确定的情况下
那么优化网络的任务就交给所谓
的优化器来进行
那么优化器代表了说是我要反复
的调整网络的参数
使得这个损失函数达到最小的
这么一个过程叫做优化
那么我们说人们开发了很多的
各种各样的优化器
而不同的优化器也有不同的算法
那么改变损失函数的过程和效率也各不相同
当然我们需要希望能够有一个方法
让损失函数的调整这些参数
让损失函数尽快能够达到一个最小
或者说达到一个让我们满意的一个程度
我们就举一个这个例子
那么我们看到这张图这个是有两个参数的损失函数
当然相比起我们正经能够运行的神经网络来讲
两个参数实在是太少
相比起我们13000个参数
对吧
但是我们通过这个可以讲一讲
损失函数如何进行优化的一个例子
那么两个参数的损失函数它有两
个方向上的变化
所以如果再加上损失函数的数值
我们把它变成一个高度的话
那么我们就可以把这个损失函数
可以看成一个起起伏伏的一个山谷
那么有山峰也有山谷
那么我们需要做的事情就是我们
如果在这张曲面上的任意一点
这个是这个参数的随机设置
刚刚设置上了以后
我们要去调整这个点
这样每一个点都有两个参数的对应的值
那么当然也有它计算出来的损失函数的大小
那么我们可以设想一下
因为看看曲面像是有山峰有山谷
我们设想有一个人他叫小明
他就处在A点这个位置
那么我们知道损失函数要极小化
这里头最小的是哪个点是B点
那么如果他要从任意一个点出发
如果快速的能够达到B点
怎么样去选择这个路径
那么第一这有两个要素
第一是要能达到B点
第二是要能最快的达到B点
那么如果最快
那就意味着我们优化的过程很有效率
那么如果能达到
那么就说明我们优化的过程是可行的
是很好的
但是我们要同时也要注意这里
在B的附近有CD
这两个坑
我们来看看
怎么样选择最优路径
那么我们在优化算法之前
我们来介绍一个概念叫做梯度
梯度这个概念是表示一个函数
一个变化的一个函数
这样这个是一个只有单个参数的
这么一个函数
那么我们说函数在任意一点
它变化最快的一个方向
我们就把它称之为梯度
那么比如说W这个点
它的梯度方向就是黄色的切线
这叫梯度
梯度就是它的函数的数值变化的
最快的方向
好
我们这样就有一个所谓的梯度下降的算法
我们梯度下降算法基本思想
就把我们还是有两个参数的损失
函数比作一个有山峰有山谷
那么梯度下降就是一个类比为
一个下山的过程
那么我们假设小明他困在山上
而且由于山峰的浓雾特别的大
可见度很低
它只能够看到他周围的一些情况
那么这样它如何能够下山
这是一个现实当中的问题
这个比拟起我们这个对于损失
函数的认识也是一样的
如果你没有能力去掌握损失
函数的所有的函数值的话
那么也就意味着你只能够从
出发点开始
只看到出发点周围的一点的函数值
很少的一部分
那么如何掌握在浓雾当中快速下山
那么他就要利用自己周围的一些
信息去找到下山的路径
那么如何去下山
那么这时候它就可以采用梯度下降的算法来帮助自己下山
那么具体来说就是它当前的位置作为基准
然后找到一个最陡峭的一个方向
最陡峭的一个方向
沿着高度下降的方向去往下走
那么这个就叫做梯度下降
那么具体来说
那么第一就是它确实在下降
第二因为是位置最陡峭
也就是梯度的方向
所以它能够快速的下降
那么既然第一是下降
就能保证损失函数是一直在减少
然后第二是梯度方向
所以能够保证每次的行为都能
很快地减少损失函数的数值
所以对于下山来讲也是这样一个道理
这样的小明
他每次沿着这个当前的位置下山一步
它就能够保证越来越接近高度不停的下降
那么越来越接近山谷
也就是高度下降
就意味着得到了更小的损失
函数一直到到达B
B就是损失函数的最小值
但是并不是说小明的运气都会那么的好
我们在对损失函数进行梯度下降
算法的过程当中
也会有或者说更经常的会有一个什么情况
他的方向梯度下降的方向不会
引入你到最低点
而是引入到一个次低点
比如C这个坑或者D这个坑
那么一旦你到了C这个坑以后
大家想一下
C这个点是附近的最低点
那么一旦到了附近的最低点以后
你再也不可能说往更低的方向去了
因为梯度下降是每一步都要把
高度降低
一旦到这个次低点的话
那么你也再也出不来了
所以这个时候这个损失函数它的
数值到了一定小的程度
它就不能够再小
它也不可能再小
那么这个时候我们可能会得到
一个次优的解
损失函数的次优解
当然如果你对于次优解
比如C这个点不是特别满意
那么你就要通过其他的优化算法
来跳出C这个坑
试图去找到一个更深的坑
更低的一点
当然对于我们只有两个参数的这么一个损失函数来说
很多的事情你是可以看得到的
但是大家想想
如果有13000多个参数这样的函数
那么最低点出现在哪儿
你其实事先是完全没有任何的知识
这个只能够去通过不停的试探去
找到
更低
当然找到最低
它是要花费很大的代价
所以我们通常没有希望说能够
找到一个损失函数的最小值
能够找到一个令人满意的一个比较小的值就可以了
那么我们最后来总结一下
优化器它是代表了说调整网络的
神经网络的各个参数
使得损失函数能够达到最小的一这么一个过程
这叫优化器
那么不同的优化算法
它的计算的过程和效率也各不相同
在我们这一节当中介绍了一个梯度下降算法
通常来讲梯度下降算法是最常用
也是最有效的一个优化
当然如果单纯的梯度下降算法
如果不能够达到一个令人满意的值的话
那么我们就要结合其他的优化算法
辅助梯度下降来使得我们的
损失函数在短时间内在我们可以
接受的计算量内达到一个更小的一个数值
完成整个神经网络的参数的调整的优化