BP神经网络小结

1、逻辑回归

     理解逻辑回归是理解BP神经网络的关键,逻辑回归相当于是BP神经网络的最后一层,也就是输出层(BP神经网络用于二分类问题)。下面给出逻辑回归的简单推导过程:

公式中已经默认Z=WX+b,损失函数使用交叉熵损失函数

BP神经网络小结_第1张图片

修正:W导数中的X应该增加转置

上面推导假设一次训练一个样本,如果训练多个样本,最后公式略有不同。由于求导、链式法则的应用都是Element-Wise的,所以求导推导过程基本一样。不再重新写,把最后结果写一下:

BP神经网络小结_第2张图片

BP神经网络小结_第3张图片

由COST函数很容易可以推导出新的梯度方程。可以得到结论是,使用多个样本同时训练得到的梯度是多个样本计算得到的平均,所以使用多个样本同时计算(批量SGD),具有滤除噪声的作用。

2、BP神经网络的前向传播

前向传播很简单,无外乎就是多次迭代Z=WX+b这个简单线性方程,只不过在输出都增加了激活函数。

激活函数的作用:

    激活函数的作用是引入非线性,使得网络可以拟合非线性决策面。设想一下如果没有激活函数,则整个网络就变成了Z=W3(W2(W1X+b1)+b2)+b3=W3W2W1X + W3W2b1 + W3b2 + b3,这与Z=WX+b没什么不同,所以如果没有激活函数,无论网络由多深,都与简单的线性回归没有区别。

向量化

       把神经网络从一次计算一个样本改进为 一次性计算多个样本的过程,称为向量化的过程,这个过程其实很简单。需要明确的一点是,所有的输入都是列向量,比如输入可以有10个样本,每个样本有4个特征,于是输入X的维度为(4,10)。对于l层也是如此(l层的输出就是l+1层的输入)。向量化的本质不过是将多个计算结果按行堆叠在一起,m个样本同时进行计算,最后X,A,Z都由原来的一列变为m列。反向传播时候,计算本身其实是每一个样本单独进行的,只是在计算dW和db的时候使用了平均值,否则多个样本同时计算将没有意义。

BP神经网络结构:

这是一个3层神经网络,输出使用了sigmoid激活函数

BP神经网络小结_第4张图片

前向传播过程如下(其实就是Linear+Activation的不断重复)

BP神经网络小结_第5张图片

BP神经网络反向传播:

    为了计算每一层的W和b,我们需要从后向前计算导数,利用链式求导法则,一步步向前推导,本质上是很简单的:

BP神经网络小结_第6张图片

每一次迭代都会计算出下一次迭代所需要的dA_[l-1],但是dA到dZ的计算这里只给出了L层的,因为L层明确使用了sigmoid激活函数(二分类时)。不过dA到dZ是Element-Wise的,所以很简单(因为前向传播的时候也是一个个元素计算的嘛,反向传播求导数的时候也是一个个计算的)。一般激活函数有Relu、sigmoid、tanh等,不再展开。

总结

       BP神经网络的关键在于理解激活函数和反向传播,如果没有理解这两点,就等于没有理解BP神经网络,理论上BP神经网络的深度可以很深,可以拟合十分复杂的高维非线性决策面。链式求导法则和向量化的理解也十分重要,如果没有理解这些,编程的时候会遇到很大的麻烦。

    最后还是强调性地记录一下:样本特征和神经元都是按列分布的,一列表示一个样本(层),一般一次性计算m列,能够加速计算过程。



你可能感兴趣的:(机器学习)