深度学习中的Logistic Regression 2---简单神经网络的反向传播推导

为什么要关注反向传播(Back Propagation)计算

其实单节点的神经网络也就是Logistic Regression。虽然之前的文章想从一元线性回归一直慢慢过渡到Logisitc回归,但是有些细节还不是特别明白。所以这篇小文着重说明一下,单神经节点的反向传播计算公式的推导。其实从工程的角度,软件工程师是不需要特别了解这些细节,因为具体做工程的时候都会利用现有的深度学习框架,比如 TensorFlow, Caffe,编程框架往往已经把神经网络的反向传播都已经实现的很傻瓜了,框架使用者不必关注这些细节了。但是如果能够把反向传播背后的原理搞的清楚一点,还是有利于做一些创新的工作。

单个神经网络的简单架构

架构如下图:

深度学习中的Logistic Regression 2---简单神经网络的反向传播推导_第1张图片
arch

这是一个识别猫咪的简单的case study,输入像素值,输出0 or 1,代表是否是猫!只有一层,一个神经网络,也叫Logistic Regression。从图上我们可以先把前向传播的计算公式列出来:

对于一个实例数据 :



简单解释一下,其实要解释的内容也正是逻辑回归的精髓,不知道只言片语可否表达清楚。式子1表示的是神经网络节点的前半段的计算,即多元线性回归,其中向量w和b是学习算法想要找到或者说训练的参数,这和一元线性回归是一样的,即找到一个最优的直线,多元回归则是找到最优的超平面。但是逻辑回归要求输出的值只有1或者0,所以必须加上式子2的补充, 即sigmoid函数,sigmoid函数定义如下:

他的函数图像是这样的:

深度学习中的Logistic Regression 2---简单神经网络的反向传播推导_第2张图片
Sigmoid

从图像可知,sigmoid函数可以把几乎是全实数的定义域,转化成只有(0, 1)之间的实数,满足Logistic Regresion(逻辑回归)的要求

然后基于全部m个样本数据的总代价函数为:

式子3代表的代价函数的细节和线性回归不太一样,在这里先做为已知结论,以后有时间再做解释。

什么是反向传播计算

反向传播这个名比较酷,好像不明觉厉。但是其实说白了就是在梯度下降法里的对代价函数J求w和b的偏导数,可以继续迭代下去找到最优解即:

反向传播计算其实就是要计算这两个偏导数。

开始推导

推导背后的原理其实很简单,就是对多元函数的链式求导数,把高等数学的微积分好好了解一下就有希望推导出来。说得简单,其实还不是很容易,深度神经网络学习里的反向传播公式计算简直是灾难!所以先从单节点的推导比较容易理解。

将上面的代价函数结合起来:

再加上其他前向计算公式:


a. 先求

通过链式求导得:

\left\{ \begin{aligned} \frac{\partial J}{\partial w} = \frac{\partial J}{\partial Z} \frac{\partial Z}{\partial w}\\ \frac{\partial J}{\partial Z} = \frac{\partial J}{\partial A} \frac{\partial A}{\partial Z}\\ \end{aligned} \right.

A是组成的向量,所以先直接对J求A的偏导数得:

而 就是对Sigmoid函数的求导,直接用结论就行,因为比较容易:

然后将和 相乘得到:


再求

最后得到:

b. 再求

同样是应用链式求导大法:

可以将上面的中间结果代入:

这里是因为

最后结论总结

再把结果综合一下在这里:

你可能感兴趣的:(深度学习中的Logistic Regression 2---简单神经网络的反向传播推导)