![d2dc044f55346a48ebb280ad4ea2936a.png](https://i-blog.csdnimg.cn/blog_migrate/fb3475973ba42c700030ac149a45e5a1.jpeg)
摘要
总结一些神经网络常用的基础的知识,本文先从梯度下降法开始。会从浅入深,从纯数学推导到神经网络中的梯度下降,供参考。
一、手动推导梯度下降法迭代公式:
我们先从纯数学公式中,手动推导一下梯度下降法的迭代公式。
(一)梯度下降法:
每一次是沿着梯度方向(垂直方向)接近最优点——锯齿现象
![1c3b2bcc7bd5c1267f2b12e9b69f3d6f.png](https://i-blog.csdnimg.cn/blog_migrate/e14c6eccaf2d46d16866c40a27ef7fd4.jpeg)
(由
1、这也就得到了
2、那么现在要做的就是从点
3、由两个向量的内积
由此,我们得到了梯度下降法的迭代公式:
补充:
1、要区分梯度下降法和最速下降法的:
梯度下降法是沿着梯度方向,以一定的步长
而最速下降法是在梯度下降法的基础上,根据已知的
![b3e144ca741495e51d73d53380a46f38.png](https://i-blog.csdnimg.cn/blog_migrate/41f58515dcb2b6b43578823b245d4377.jpeg)
2、迭代终止条件:
用过计算步长
(二)牛顿法:
直接从起始点指向最优点,下图红色为牛顿法;绿色为梯度下降法。
![1f65ee219cc67acea060dbaf23e33fa3.png](https://i-blog.csdnimg.cn/blog_migrate/23c83c2507daba84f5f5d53a4d0c8804.jpeg)
根据梯度下降法的推导过程,牛顿法的推导与上面的类似。
1、
其中,
2、令
令
其中,记
二、神经网络中的梯度下降法:
(一)权重w,偏置b的梯度下降法迭代公式:
如果将神经网络的输出写成
那么损失函数为:
w和b的梯度下降法的迭代公式为:
(二)梯度下降、随机梯度下降、批量梯度下降:
这三种方法的w和b的迭代公式都是
1、梯度下降法:
(1)计算方法:
梯度下降法是计算整个数据集的损失函数J对于w和b的梯度,并去更新参数w、b。
即
(2)特点:
这种方法也就是最普通的梯度下降法。
①优点:利用全部的训练样本,将得到的是一个全局最优解,更精确。
②缺点:利用了所有的训练数据来计算损失函数的梯度。由于我们每进行一次参数更新需要计算整体训练数据的梯度,梯度下降会变得很慢并且十分占内存。
2、随机梯度下降法:
(1)计算方法:
随机梯度下降每次只计算一个样本损失函数J对w和b的梯度,并去更新参数w、b。
即
(2)特点:
①优点:随机梯度下降是通过每个样本来迭代更新一次,收敛速度快很多。
举个例子:
如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经迭代到最优解了,对于这种情况随机梯度下降法比较适合。
对比上面普通的梯度下降,迭代一次需要用到几十万训练样本,并且一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。
②缺点:
·仅计算一个样本的梯度,带来的问题是会有较多的噪声,使得每次迭代并不都向着整体梯度下降的方向前进,相比于真实梯度而言十分不准确,使得收敛过程曲折并容易陷入局部最优解。
·难以进行并行计算(就是常见到的batch_size)。
3、批量梯度下降法:
(1)计算方法:
一种折中的计算方法,批量梯度下降每次计算m个训练样本的损失函数J对w和b的梯度。我们将这些随机的训练输入样本称为一个批量数据(batch_size)。期望m个样本的损失函数总和的平均值大致相等于所有样本损失函数总和的平均值 :
那么损失函数的计算方式为:
(2)特点:相比较于随机梯度下降计算的梯度更为准确,相比于普通梯度下降计算速度更快。
(三)batch_size、epoch、iteration、迭代终止条件以及常见的超参数
1、batch_size、epoch、iteration:
概念:
①batch_size(批大小):即每次训练在训练集中取batch_size个样本训练,并行计算;
②iteration(迭代):1个iteration等于使用batchsize个样本训练一次;
③epoch(周期):1个epoch等于使用训练集中的全部样本训练一次;
举个例子:
训练集共有1000个样本,batch_size=10。
那么训练一次1000个样本需要:1次epoch,100次iteration。
(在训练过程中,我们经常设置的是iteration迭代次数)
2、迭代终止条件:
(1)达到迭代次数
(2)early_stop:
①在训练的过程中,记录最佳的accuracy,当连续10次epoch(或者很多其它次,可依据实际情况取10、20、30….)没达到最佳accuracy或不再提升时,就认为“不再提高”,此时使用early_stop停止训练,可以防止过拟合。
(实际中可能经过某个epoch后,accuracy减少了,可是随后的epoch又让accuracy升上去了。所以并非accuracy一降下来,它就不再提高,不能依据accuracy一两次的连续减少就推断不再提高。)
②过拟合发生的时候:在模型训练过程中动态的监测每次迭代(Epoch)后训练集和验证集的识别精度,一旦出现训练集识别率继续上升而验证集识别率不再提高,就说明过拟合发生了。
【实战经验:一般用accuracy或者recall之类的指标比较好。而用loss不再下降作为early_stop可能不那么准确:因为有些时候训练大型网络时,loss不再下降了,但是accuracy却在上升,这是因为网络还在微调w权重等参数使得效果变好,即acc上升;但是对loss没有影响,即loss不再下降。】
(这种方法还会带来一个额外的收获:确定作为超参数之一的迭代数(Epoch Number)的量级。更进一步,甚至可以不设置固定的迭代次数,以过拟合为信号,一旦发生就提前停止(early_stop)训练,避免后续无效的迭代。)
3、常见的超参数:
周期Epoch、批量数据大小batch_size、学习率(步长)
学习衰减率、神经网络层数、隐藏层神经元个数、Adam及Momentmn梯度下降法的优化算法中的参数(后续会介绍)。
三、BP神经网络中梯度下降法的反向传播推导:
公式略多了,敲起来费劲,也不容易写备注,先附上图片,在做步骤总结。
![d526b8dbeebdc37503bdbbc23cb60653.png](https://i-blog.csdnimg.cn/blog_migrate/8f776cf5addbfb0f46178269b51847f0.jpeg)
步骤总结:
1、计算输出层的残差:
2、利用上面推导得到的残差迭代公式,计算隐藏层残差:
(1)全连接层:
(2)卷积层:
3、更新w和b:
(1)不考虑正则化:
(2)考虑正则化:
最后总结一下反向传播:
就是将函数分成不同的模块,这样计算局部梯度相对容易。
不需要把完整的求导公式推导出来,实际上并不用关于输入量的梯度数学公式。只需要将表达式分成不同的可以求导的模块(模块化、链式法则),然后在反向传播中一步步计算梯度即可。(前面的推导是为了找规律,就是用残差δ和激活值a的迭代。)
参考:
1、《最优化方法》张薇 薛嘉庆 东北大学出版社
2、《Neural Networks and Deep Learning》
3、https://blog.csdn.net/sinat_30071459/article/details/50721565
4、https://www.cnblogs.com/yjbjingcha/p/7094816.html
5、机器学习与深度学习讲解
、