Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
很久没更新了,上周在忙,于是更新的计划一搁再搁。今天在终于有时间写这一篇。
推一首歌叭,很安静的一首,搭配下雨天食用更佳,网易云可以搜到。
曲名:Zombie 歌手:Ghostly Kisses
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线
在之前的几篇里,我们在介绍原理的同时也讲到了权重和偏置。
那么我们要找到最合适的权重和偏置,就需要引出代价函数的概念。
1 代价函数的引入(损失函数)
1.1 二次代价函数
代价函数是我们在处理机器学习问题时的一个辅助函数。我们构造一个函数,在函数中有样本的真实结果和我们求得的预测结果。我们利用代价函数来不断缩小真实和预测之间的差距,在代价函数达到最小值时完成训练,获得训练好的模型。
代价函数有很多种,我们先给出线性回归中用到的二次代价函数的定义:
式子里代表网络中所有权重的集合,是所有的偏置。是输入为时的输出向量,其值取决于、和。是用于训练的输入样本的个数。
这里的运算可以描述为:先对某个样本对应的真实结果和预测结果做差,再对差求模,对模值求平方。这是对一个样本的运算。对个样本都完成如上运算过程,在将个结果相加,最后除以。
可以看到,代价函数的结构可以让我们很好地理解神经网络中学习算法的目的,即缩小真实和误差之间的差距。
1.2 引入意义与tips
对于代价函数,有几个需要注意的点:
1.关于代价函数,它就是损失函数,常常以表示,在某些场合它也被叫做目标函数;
2.这里的二次代价函数,也被叫做均方误差函数或者MSE函数;
3.这里代价函数是非负的;
4.的自变量是权重和偏置,而不是;
5.最终的的值会相当小,因为算法的目的是最小化代价函数。
这里引入代价函数的意义在于:关于权重和偏置的代价函数是一个平滑的函数,用它能够更好地用权重和偏置中的微小改变来取得不错的效果。
那么如何找到一系列能让代价尽可能小的权重和偏置?
我们会采用梯度下降算法来完成优化。
2 梯度下降算法
2.1 梯度下降算法的原理
一般来讲,代价函数是一个复杂的多元函数。这里先将其简化为一个只有两个变量和的函数,这里用来代替,,以表示其可以是任意函数。
来看一张图,要找到全局最小值。只有两个变量时我们可以直观的看到最小值将会在自变量均取0时取到。又或者,我们可以通过微积分的方法计算极值点。但实际网络中的参数,可不止这么两个。
最大的神经网络的代价函数,有数以亿计的权重与偏置。当维度如此之高的时候,以上方法都会失效。
尝试一种新的方法吧。将这幅图想象成一个山谷,再想象一个小球从山谷的斜坡滚落。根据重力,假设山谷平滑下降,它将停在山谷的最底部。代价函数将会在滚落过程中告诉我们山谷局部地形,让我们能知道球怎样滚动。
2.1 两个变量的梯度下降算法
我们先在和方向分别将球移动一个微小距离,这两个小距离分别是和,代价函数会有以下变化量:
我们要让球体滚落,就要让纵轴的值越来越小,就要让每次的变化量为一个负值。
为了简化表示法,让关系更清晰,有以下定义:
其中表示的梯度。为转置符号。
因此可以被简化为:
通过这个式子,我们可以找到一个巧妙地、令为负数的形式:即取为与系数相乘结果的负数:
这里的 叫做学习速率,是一个很小的正数。
由上面的式子可以看出,平方项必然大于等于0,又因为学习速率为正数,的变化量就是一个负数。
因此,移动球体的位置可以表示成如下的形式,即:
这里是旧位置,是新位置。不断持续移动位置,就可以让不断缩小,直到获得全局最小值。
这里的“球体滚动”,只是一个比喻,不考虑摩擦力和动量等因素的影响。
2.2 推广:多个变量的梯度下降算法
刚才我们举例子时候说了,看图说话法和直接计算偏导数的方,在变量很多时都不适用,那么上面两变量的梯度下降法,在多个变量的情形下可用吗?
答案是肯定的。这也是刚才做出这两步定义的原因,直接在这两个式子里将变量扩展就可以了,总的式形式不变。
假设有个变量时,梯度下降法表示如下:
依然是:
其中,自变量的变化量为(这里和两个变量时不同):
新的梯度向量为(也和两变量时不同):
更新规则依旧不变:
这个规则就可以看做是梯度下降法的定义。