虽然神经网络的概念简单,但是很容易由于刚接触而一头雾水。该文章是在阅读相关书籍理解神经网络后,摘取些内容帮助新人更容易理解神经网络。
神经网络
神经网络是由节点和节点间的相互连接组成的。网络中每层的每个节点代表一种特定的函数,来对输入进行计算。每个函数都是由不同参数(权重w和偏置b)组成。神经网络训练的过程,就是不断让这些函数的参数进行学习、优化,以能够更好的处理后面输入的过程。(内容来源PaddlePaddle文档)
矩阵运算
图片来源 《TensorFlow 实战Google深度学习框架(第2版)》
W的上标表明了神经网络的层数,比如W(1)表示第一层节点的参数,而W(2)表示第二层节点的参数:
前向传播算法可以表示为矩阵乘法,将输入 x1, x2 组织成一个 1×2 矩阵 x = [x1, x2],而 W(1) 组织成一个 2×3 的矩阵,这样通过矩阵乘法可以得到隐藏层三个节点所组成的向量取值:
类似的输出层可以表示为:
反向传播
为了让神经网络的判断更加准确,首先需要有衡量效果的工具,于是损失函数应运而生。如果你想要神经网络的效果好,那么就要让损失函数尽可能的小,于是深度学习引入了能够有效计算函数最小值的算法–梯度下降等优化算法,以及参数优化更新过程–反向传播。
反向传播是通过 loss 值来指导前向节点中的函数参数如何改变,并更新每层中每个节点的参数,来让整个神经网络达到更小的 loss 值。(内容来源PaddlePaddle文档)
梯度下降
假设有一个函数 y=f(x),其中 x 和 y 是实数。这个函数的导数(derivative)记为 f'(x)。导数f'(x)代表f(x)在点x处的斜率。因此导数对于最小化一个函数很有用,因为它告诉我们如何更改 x来略微地改善 y。(内容来源《深度学习(异步图书出品)》)
图片来源 《深度学习》
链式求导
微积分中的链式法则:
反向传播的求导算法:
图片来源 《深度学习》
参考资料
- 神经网络的描述摘自《TensorFlow 实战Google深度学习框架(第2版)》
- 梯度下降和链式求导的描述摘自《深度学习(异步图书出品)》
- 自动微分机制介绍 PaddlePaddle官方文档