深度学习框架Caffe学习笔记(8)-BP神经网络算法

神经网络

MNIST例程中,如果将lenet_train_test.prototxt去掉两个卷积层和下采样层,剩下两个全连接层,这个网络模型就是一个简单的神经网络模型。使用该模型训练,最终准确率也可以达到97%以上。
该神经网络示意图如下:
《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

这个神经网络包含三个层:

  • 输入层: 28×28 = 784个神经元,每个神经元代表一个像素的值
  • 隐藏层: n个神经元, 例子中 n=500
  • 输出层: 10个神经元,分别代表手写数字识别可能的0~9十个数字,例如: 第一个神经元(代表0)的输出值=1, 其他的<1, 数字被识别为0

神经元

每一个神经元结构如下:
《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

神经元的输出为

y=f(i=1nxnwn+b)

其中 xi 为上一层第i个神经元的输出, wi 上一层第i个神经元的连接权重,b为偏向,用来改变神经元的活性, f 为激活函数。

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权w”和每个神经元的“偏向b”换而言之,神经网络学到的东西,蕴含在连接权与偏向中

激活函数

激活函数是用来加入非线性因素的,没有激活函数,多层神经网络也只能在线性空间内变换,最终相当于一次神经网络的效果。
常用的激活函数有几种:

Sigmoid函数

Sigmoid函数,值域为(0,1)。

sigmoid(x)=11+eax

《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

tanh函数

tanh函数,值域为(-1,1)。

tanh(x)=1e2x1+e2x

《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

ReLU函数

ReLU (Rectiied Linear Unit, 规整化线性单元 )函数, 值域为[0,+∞),是一种非饱和激活函数。

ReLU(x)=max(0,x)

《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

深度神经网络中最大的问题是梯度消失问题,这在使用Sigmod、tanh函数等饱和函数情况下尤为严重(神经网络进行反向传播时候,各层都要乘以激活函数的一阶倒数,梯度每传递一层都会衰减一次,网络层数多时,梯度会不停衰减直到消失),使得训练网络时收敛极慢,而ReLU函数这类非饱和函数收敛速度则快很多

误差逆传播算法

误差逆传播(error BackPropagation,简称BP)算法是最杰出的代表,他是迄今为止最成功的神经网络学习算法。

神经网络的目标为让计算输出y尽可能接近理想输出t,即然误差函数 E=0.5(yt)2 的值最小。BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。对给定的学习率η,
神经网络各节点的权重w的调整量为

Δw=ηEw 神经网络各节点偏向b的调整量为

Δb=ηEb

BP神经网络的计算流程为,先根据输入数据各个节点的权重偏向,计算出神经网络的输出(前向传播计算),通过计算输出与理想输出比较得到误差,再根据误差函数再各个节点的偏导数计算出各权重、偏向的调整量(反向传播计算)。该迭代过程循环进行,直到达到某些停止条件,如训练误差已经小到一定值。

以一个隐藏层的神经网络演示计算流程,每层选一个神经元进行计算。
《深度学习框架Caffe学习笔记(8)-BP神经网络算法》

前向传播计算

对Hidden层的每个单元,其值 yj=f(zj),zj=iwijxi+bj ,其中i取值所有输入层节点, zj 是对前一层的所有节点加权和加偏向。网络使用非线性变换,得到该层输出 yj

从Hidden层到Output层计算如下:

对Hidden层每个单元k,其值 yk=f(zk),zk=jwjkyk+bk ,其中j取值遍历Hidden层所有节点。

反向传播计算

每层首先计算对于该层输出节点的误差梯度,即所有相对于后一层节点的误差梯度的加权和。之后使用链式法则将误差梯度传到该层输入点。

输出单元的误差梯度通过对代价函数(或损失函数)求导得到,假设输出层单元k对应的代价函数项为 E=0.5(yktk)2 ,其中 tk 为期望输出值,可计算相对于 yk 的偏导数为 yktk ,由于 yk=f(zk) ,所以代价函数相对于 zk 的偏导数为:

Ezk=Eyk.ykzk=(yktk)f(zk)

对于学习率η,隐藏层和输出层的连接权重

wjk 和输出层偏向调整量为


Δwjk=ηEwjk=ηEzk.zkwjk=η(yktk)f(zk)yj


Δbk=ηEbk=ηEzk=η(yktk)f(zk)

对隐藏层的每个单元j,其误差梯度为

Eyj=kEzk.zkyj=kwjkEzk

对于学习率η,输入层和隐藏层的连接权重

wij 和隐藏层偏向调整量为


Δwij=ηEyj.yjzj.zjwjk=ηEyjf(zj)xi


Δbj=ηEyj.yjzj=ηEyjf(zj)

根据得到的调整量不断调整权重和偏向,让神经网络的输出误差越来越小。

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/u013407923/article/details/53140972
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞