MelonTeam 移动终端前沿技术的探索者

跬步神经网络1-基本模型解析

2017-08-08
yanjun

| 导语 最近开始看NN,很多疑问。微积分什么的早丢了,边看边查,记录备忘。 本篇主要是针对最基本的网络模型,解释反向传播(backpropagation)原理。

目录
跬步神经网络1-基本模型解析
跬步神经网络2-C++简单实现
跬步神经网络3-MNIST手写库初步识别


 整个神经网络可以理解成变量是所有 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++写个小程序动手跑一遍,加深理解,尝试解决简单问题,

然后熟悉成熟框架。


上一篇 多端排版杂谈

说一说

目录