#前向传播(foward propagation, FP)
前向传播作⽤于每⼀层的输⼊,通过逐层计算得到输出结果。
假设上⼀层结点i,j,k…等⼀些结点与本层的结点w有连接,那么结点w的值怎么算呢?
①上⼀层的i,j,k…等结点以及对应的连接权值进⾏加权和运算,②给最终结果再加上⼀个偏置项(图中为了简单省略了),③将结果代入⼀个非线性函数(即激活函数),如 ,Relu、sigmoid 等函数,④最后得到的结果就是本层结点w的输出。
#反向传播(backward propagation, BP)
反向传播(backward propagation, BP)作⽤于⽹络的输出,通过计算梯度由深到浅更新⽹络参数,减小误差。
反向传播的主要思想:给定输入值a,期望输出值为b,通过不断地调整优化各个节点之间的权重值w,使得实际输出值尽可能接近于期望值b。
步骤:i 给定输入值a,期望输出值b,初始化各个节点之间的权重值w。 ii 通过前向传播求得实际输出值,计算实际输出值和期望值之间的误差E。iii 求误差E对各个权重参数w的偏导(链式法则),以得到该权重参数对误差的影响值。 iv 修改权重值w。 重复上述过程,直到实际输出值非常接近期望值。
由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢?
当前应⽤⼴泛的⼀个算法就是梯度下降算法,在过程中不断调整权值w。
#如何计算神经网络的输出?
如图,w表示两个相连接点之间的权重,w8* 表示节点8与其他各个节点之间的权重。
输出层的节点 8 的输出值y1:(w8b是节点8的偏置项)
#如何计算卷积神经网络的输出值?
xi,j表⽰图像第i⾏第j列元素。wm,n表⽰ filter 第m⾏第n列权重。wb表⽰filter的偏置项。ai,j表示feature map第i⾏第j列元素。f表示激活函数,这里以ReLU函数为例。卷积公式如下:
当步长为1(步长表示下图Image中的小蓝框每次向左或者向下一定的格数),计算过程如图:
以此类推:
当步长为2,计算结果如图:
##深度为D的卷积计算
上述例子中图像的深度为1。当图像的深度为D时,filter的深度也必须为D,此时卷积的计算公式为:
卷积后Feature map的深度和卷积层filter的个数相同。
如下图所示,图像和filter的深度都为3,filter的个数为2,feature map的深度为2。图中的Zero padding是1,也就是在输⼊元素的周围补了⼀圈0。
#如何计算Pooling层(采样层)的输出值?
Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。最常用的是Max Pooling,在n*n的样本中取最大值,作为采样后的样本值。
下图是2*2 max pooling: