一、概念

神经网络是已知自变量x和真实结果y,要求拟合出F(x)
神经网络的架构可以看做是黑箱测试,但你不知道黑箱指代的F(x)到底是什么,不过没关系,我们知道其中的参数(是随机初始化的),即神经元之间做连接的那些个边指代的权值。一个神经网络的参数是非常庞大的,自变量一般是非常多个,以至于参数也是有很多,且神经网络一般会有很多个隐藏层,所以一个神经网络是一个多元复合函数。

我们向黑箱中输入你的自变量x后得到一个预测值y拔,和真实值y做对比,怎么比呢?答:通过损失函数G(y拔,y)

我们假设一个比较简单的损失函数如下:

神经网络 梯度下降 神经网络梯度下降计算_神经网络


可见,我们希望的是预测值y拔y相差不大,所以整个架构的优化目标是让G(y拔,y)达到最小值。

二、人话版

我们以最简单的一元函数举例。

由于黑箱指代的F(x)是随机初始化的,即F(x)的参数wibi是随机初始化的。
因为我们这里假设神经网络是最简单的一元函数y = wx + b,所以有一个参数wb

假设w和b被分别随机初始化成5和1,即目前黑箱指代的F(x)=5x +1
假设我们现在有自变量x = 2, 真实值y =14
x = 2传入黑箱F(x)得到一个预测值y拔 = 5*2+1 = 11
调用上面的损失函数G,得到一个损失loss = (11-14)² = 9

我们有xy,优化w,所以神经网络指代的函数可看是F(w)=w*2 +b
因为x=2是已知的,参数w是变化的。

这里引入梯度的带概念,一个参数梯度是函数对这个参数的导数。

神经网络 梯度下降 神经网络梯度下降计算_损失函数_02


由此链式求导可以求得损失函数G对w的导数是(22-28)x2= -12 所以w的梯度r = -12.

参数更新一般是:参数=参数 - 学习率*梯度。我们假设学习率lr=0.1.
所以w = 5 - [0.1x(-12)] = 6.2
可见,通过优化w,我们的w由之前的5变为了更新后的6.2。此时黑箱指代函数变为F(x)=6.2x +1

我们再来看一下现在的loss,传入参数x=2,得到预测值y拔=13.4
带入损失函数G求得loss = (13.4-14)² = 0.36

可见 ,loss已经由刚才的9降低到0.36。

可见我们的参数更新是很有用的,当然我们这里只对w更新,b其实也要更新,但为了简单举例,咱们只考虑w。

question:

至于为什么参数更新公式是:参数=参数 - 学习率*梯度 为什么要去梯度(导数)?

神经网络 梯度下降 神经网络梯度下降计算_人工智能_03

假设我们现在的参数w导致的损失loss在橙色点。

我们计算的lossw的导数(梯度),我可以直观的发现,w顺着导数的方向减小一定的步长,才能够离loss的最小值点更接近。

所以公式是用参数=参数 - 学习率*梯度,说白了就是为了更接近min

我们这里只举例最简单的一元函数,实际上庞大的神经网络是一个多元复合函数,我们对一个参数w求梯度就是在求Gwi的偏导数,换汤不换药~

over~我可真是是大聪明。


补充: 想要理解透彻神经网络的梯度下降,要明白我们的条件:已经有了许多个x和y,但不知道F(x),所以我们调整的是那些个参数wi,所以wi可以看成是函数的自变量,拟合的函数可以看成是F(w),即神经网络关于参数wi的函数。 和一般数学上的已知x求y是反着的。

上面的举例是根据一个样本进行的计算,当然在实际应用中我们采用的mini-batch策略,即每次想模型中投入一批数据,计算的loss是这个batch的均方误差(误差的均值),这样更有利于提高模型计算效率和更快速的找到最优wi。