Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理

很久没更新了,上周在忙,于是更新的计划一搁再搁。今天在终于有时间写这一篇。

推一首歌叭,很安静的一首,搭配下雨天食用更佳,网易云可以搜到。
曲名:Zombie 歌手:Ghostly Kisses
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线

在之前的几篇里,我们在介绍原理的同时也讲到了权重ww和偏置bb
那么我们要找到最合适的权重和偏置,就需要引出代价函数的概念。

1 代价函数的引入(损失函数)

1.1 二次代价函数

代价函数是我们在处理机器学习问题时的一个辅助函数。我们构造一个函数,在函数中有样本的真实结果y(x)y(x)和我们求得的预测结果aa。我们利用代价函数来不断缩小真实和预测之间的差距,在代价函数达到最小值时完成训练,获得训练好的模型。
代价函数有很多种,我们先给出线性回归中用到的二次代价函数的定义:
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
式子里ww代表网络中所有权重的集合,bb是所有的偏置。aa是输入为xx时的输出向量,其值取决于xxwwbbnn是用于训练的输入样本的个数。
这里的运算可以描述为:先对某个样本xx对应的真实结果和预测结果做差,再对差求模,对模值求平方。这是对一个样本xx的运算。对nn个样本xx都完成如上运算过程,在将nn个结果相加,最后除以2n2n
可以看到,代价函数的结构可以让我们很好地理解神经网络中学习算法的目的,即缩小真实和误差之间的差距。

1.2 引入意义与tips

对于代价函数,有几个需要注意的点:

1.关于代价函数,它就是损失函数,常常以LossLoss表示,在某些场合它也被叫做目标函数;
2.这里的二次代价函数,也被叫做均方误差函数或者MSE函数;
3.这里代价函数CC是非负的;
4.CC的自变量是权重ww和偏置bb,而不是xx
5.最终的CC的值会相当小,因为算法的目的是最小化代价函数CC

这里引入代价函数的意义在于:关于权重和偏置的代价函数是一个平滑的函数,用它能够更好地用权重和偏置中的微小改变来取得不错的效果。

那么如何找到一系列能让代价尽可能小的权重和偏置?
我们会采用梯度下降算法来完成优化。

2 梯度下降算法

2.1 梯度下降算法的原理

一般来讲,代价函数CC是一个复杂的多元函数。这里先将其简化为一个只有两个变量v1v1v2v2的函数,这里用vv来代替wwbb,以表示其可以是任意函数。
来看一张图,要找到全局最小值。只有两个变量时我们可以直观的看到最小值将会在自变量均取0时取到。又或者,我们可以通过微积分的方法计算极值点。但实际网络中的参数,可不止这么两个。
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
最大的神经网络的代价函数,有数以亿计的权重与偏置。当维度如此之高的时候,以上方法都会失效。
尝试一种新的方法吧。将这幅图想象成一个山谷,再想象一个小球从山谷的斜坡滚落。根据重力,假设山谷平滑下降,它将停在山谷的最底部。代价函数将会在滚落过程中告诉我们山谷局部地形,让我们能知道球怎样滚动。

2.1 两个变量的梯度下降算法

我们先在v1v1v2v2方向分别将球移动一个微小距离,这两个小距离分别是Δv1\Delta v1Δv2\Delta v2,代价函数会有以下变化量:
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
我们要让球体滚落,就要让纵轴的CC值越来越小,就要让CC每次的变化量ΔC\Delta C为一个负值。
为了简化表示法,让关系更清晰,有以下定义:
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
其中C\bigtriangledown C表示CC的梯度。TT为转置符号。
因此ΔC\Delta C可以被简化为:Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
通过这个式子,我们可以找到一个巧妙地、令ΔC\Delta C为负数的形式:即取ΔV\Delta VΔC\Delta C与系数相乘结果的负数:
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
这里的η\eta 叫做学习速率,是一个很小的正数。
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
由上面的式子可以看出,平方项必然大于等于0,又因为学习速率为正数,CC的变化量就是一个负数。

因此,移动球体的位置vv可以表示成如下的形式,即vΔvv-\Delta v
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
这里vv是旧位置,vv{}'是新位置。不断持续移动位置,就可以让CC不断缩小,直到获得全局最小值。
这里的“球体滚动”,只是一个比喻,不考虑摩擦力和动量等因素的影响。

2.2 推广:多个变量的梯度下降算法

刚才我们举例子时候说了,看图说话法和直接计算偏导数的方,在变量很多时都不适用,那么上面两变量的梯度下降法,在多个变量的情形下可用吗?
答案是肯定的。这也是刚才做出这两步定义的原因,直接在这两个式子里将变量扩展就可以了,总的ΔC\Delta C式形式不变。
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
假设CCmm个变量时,梯度下降法表示如下:
ΔC\Delta C依然是:
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
其中,自变量的变化量为(这里和两个变量时不同):
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
新的梯度向量为(也和两变量时不同):
Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
更新规则依旧不变:Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理
这个规则就可以看做是梯度下降法的定义。

Deep Learning|神经网络原理学习笔记(4) :梯度下降算法原理