反向传播最初是在 1970 年代引入的,但直到 1986 年出版了
Rumelhart, D., Hinton, G. & Williams, R. Learning representations by back-propagating errors. Nature 323, 533–536 (1986). https://doi.org/10.1038/323533a0
,它的重要性才得到充分认识。通过反向传播,可以使用神经网络来解决以前无法解决的问题。如今,反向传播是神经网络学习的主力军。没有它,我们将浪费时间和精力。那么,反向传播如何能够减少计算梯度所花费的时间呢?这一切都归结为在正向和反向累积模式下应用链式法则之间的计算复杂性。下面分别从前向和反向传播两个过程详细分析算法的复杂度。
https://zhuanlan.zhihu.com/p/361636579
时间复杂度分析有一个基本的法则,就是四则运算法则。
- 加法法则,如果算法的代码是平行增加的,那么就需要加上相应的时间复杂度。
- 乘法法则,如果算法的代码增加的是循环内的嵌套或者函数的嵌套,那么就需要乘上相应的时间复杂度。
预备知识
1.对节点的定义,引入了相当多的符号。
符号 | 含义 |
---|---|
l l l | 隐藏层的个数(输入层 l = 0 l=0 l=0,输出层 l = L + 1 l=L+1 l=L+1) |
M l M_{l} Ml | 第 l l l层的神经元个数(输入层神经元个数 M 0 = d M_{0}=d M0=d,输出层神经元个数 M L + 1 = d ′ M_{L+1}=d' ML+1=d′) |
2.明晰损失函数和成本函数的区别
损失函数表示单个样本预测值和真实值之间的差异。主要是配合反向传播使用的,为使得在反向转播中可以找到最小值,所以损失函数必须是可导的。
成本函数表示一整个数据集(m个样本)预测值和真实值之间的差异求和再取平均,比如MSE,极大似然估计。用于衡量算法在全部样本上的表现。
代价函数再加上正则项或者别的什么优化项就叫目标函数。
极大似然估计:先有一个假设的情形,考虑何种分布下该情形出现的可能性最大。所以表示出该情形的概率,问题转化成求该情形最大化的参数p(对p求导)问题。
无论是2m,还是log都只是为了简化求导计算
前馈神经网络(FFN)
前馈神经网络(feedforward neural network),也叫作多层感知机(MLP),是典型的深度学习模型。包含
Jonas Lalin comes from Stockholm, Sweden写的帖子关于深度学习的机制。着手推导前馈神经网络背后的数学原理
https://jonaslalin.com
全连接层,意味着一层中的每个节点都连接到下一层中的每个节点(即全连接没有失活神经元)
前向传播(计算偏导/微分)
偏导是函数沿着某一分量方向的变化率。
方向导数是函数沿着任意方向的变化率。(标量)无数平面与曲面(函数)相交
梯度是矢量,方向导数最大的方向 有一个平面与曲面相交后的曲线在该点下降最快
分析函数在每个分量上的变化值
https://zhuanlan.zhihu.com/p/25356063
反向传播(计算权重、偏置)
计算的是梯度
作用就是加快速度找到变化最快的路径,从而向着理想的方向调参
https://jonaslalin.com/assets/deep-learning-notation.pdf
斯坦福大学的标准记号
小结:
1.前馈神经网络提出时只是前向传播,后来引入反向传播过程后为了和FFN做区分,称同时具有前向传播和反向传播过程的FFN为反向传播网络(BP网络)
2.以前只用前向传播更新参数太慢了,而反向传播大大加快了对参数的更新。(通过分析算法复杂度得出结论)