作者:严峻
导语:最近开始看NN,很多疑问。微积分什么的早丢了,边看边查,记录备忘。 本篇主要是针对最基本的网络模型,解释反向传播(backpropagation)原理。
整个神经网络可以理解成变量是所有 w、b的损失函数 L,L(w1,b1,w2,b2,w3,b3.......)。
为求L的极小值,使用梯度下降的方法,
对每个变量求偏导,算出 Δw、Δb,
更新 w = w - lr Δw,b = b - lr Δb ,其中lr 是步长(learning rate)。
激活函数、损失函数、网络结构、训练方法、连接方式、填充方式,都有很多选择,每个选择都会影响最终结果,要达到最优需要逐步积累经验。
先从最简单的开始。
需要复习的知识点,导数和偏导数、链式法则、梯度下降 。
导数:二维几何场景下,可以理解为曲线上某点的斜率,在求函数极小值的时候,可以根据斜率确定下一步 X 该增大还是减小。
偏导数:存在多个变量的情况下,x的偏导就是假设其他变量都是常数,然后对x求导。
链式法则:借一张图
梯度下降:求导或偏导得到斜率确定变化值,更新变量得到新的值,重复上面的操作,直到斜率为0或小于设置的某个阈值(比如0.000001)
x = x - lrΔx,y = y - lrΔy,其中lr 是步长
NN网络举个栗子:
神经元:
激活函数、损失函数:
网络结构:
根据上面的网络结构以及定义,可以得到:
为了更新 W24、W25,需要求 E关于W24、W25的偏导:
计算W12偏导比较麻烦一些
根据上面的结果,总结下面的公式:
不同的激活函数和损失函数,求导的方程不一样。 上面的例子使用 logistic函数和最小方差。 下一步打算根据上面的公式,用c++写个小程序动手跑一遍,加深理解,尝试解决简单问题,然后熟悉成熟框架。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。