深度学习笔记--多层感知器以及BP算法

简介

多层感知器,是指包含1个或多个隐层的前馈神经网络。
深度学习笔记--多层感知器以及BP算法_第1张图片

前馈神经网络的特点:

  1. 第0层为输入层,最后一层为输出层,中间层为隐层。
  2. 整个网络无反馈,信号从输入层向输出层单向传播,整个网络为有向无环图。
  3. 激活函数多使用连续非线性函数,如logistic函数。 3.激活函数多使用连续非线性函数,如logistic函数。
  4. 可看成多层logistic回归模型的组合。
  5. 具有解决复杂模式分类的能力,解决简单感知不能解决的线性不可分问题。

其可以解决单层感知器不能解决异或的问题(线性不可分问题),可以用来作多元分类问题,例如手写数字识别。
深度学习笔记--多层感知器以及BP算法_第2张图片

反向传播算法

反向传播算法是在Rumelhart 以及Hinton 在1986年在nature上发表出的一篇文章介绍。在该文章发表之前,神经网络又开始焕发青春(神经网络研究寒冬),原因是该算法可以很好的解决神经网络的模型参数训练问题。以下是该文章:
Rumelhart D E, Hinton G E, Williams R J. Learning representations by back-propagating errors[J]. nature, 1986, 323(6088): 533.
以下是我个人在学习李宏毅(Hung-yi Lee)教授课程的内容,其课程讲的反向传播算法很生成,也很容易理解。以下是课程的地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLSD15_2.html
同时,李教授在YouTobe上也讲解了很多其他深度学习算法的课程,都非常不错,有兴趣的读者可以观看:https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ

学习神经网络,我们知道常用的梯度下降算法,首先需要定义损失函数。如下图所示,我们有多个样本,我们定义所有样本的总损失函数:
深度学习笔记--多层感知器以及BP算法_第3张图片
这里的话,只需要算一个样本的梯度 C r ( θ ) C^{r}\left ( \theta \right ) Cr(θ)就行了,将所有样本的进行加和就是所有的梯度了。
跟对某一个样本,来计算梯度 ▽ C r ( θ ) \triangledown C^{r}\left ( \theta \right ) Cr(θ)
针对网络中的某层的权重,计算偏微分,如下图所示:
深度学习笔记--多层感知器以及BP算法_第4张图片
在上图中,用到了微分计算中的链式法则。其中,上图中的损失函数对权重的偏微分,可以分成两部分。针对第一部分,比较容易求,求得的结果如下图所示:
深度学习笔记--多层感知器以及BP算法_第5张图片
针对第二部分,求起来还是很麻烦的,这里采用的是反向计算【反向传播】,从最后一层向隐层计算。如下图所示,核心包含两个部分,第一部分是怎么计算最后一层的偏微分,第二部分是怎么求找 l l l层与 l + 1 l+1 l+1层偏微分的关系
深度学习笔记--多层感知器以及BP算法_第6张图片
下面来计算 δ L \delta ^{L} δL,如下图所示:

深度学习笔记--多层感知器以及BP算法_第7张图片
深度学习笔记--多层感知器以及BP算法_第8张图片
计算** δ L \delta ^{L} δL使用的也是链式法则,计算起来很简单。

下面依旧利用链式法则寻找 δ l \delta ^{l} δl δ l + 1 \delta ^{l+1} δl+1的关系,如下图所示:
深度学习笔记--多层感知器以及BP算法_第9张图片
上图中的加和相当于是对 l + 1 l+1 l+1层的所有节点进行计算,求出具体的值如下图所示:深度学习笔记--多层感知器以及BP算法_第10张图片
这样就能获得每个节点的偏微分,从下图便能够看出反向的概念,即只要知道下一层的值,便能计算该层的值。
深度学习笔记--多层感知器以及BP算法_第11张图片
转化成矩阵相乘的结果,便可以计算得到 δ l \delta ^{l} δl δ l + 1 \delta ^{l+1} δl+1
深度学习笔记--多层感知器以及BP算法_第12张图片

参考

https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ
http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/DNN backprop.ecm.mp4/index.html

你可能感兴趣的:(深度学习(Deep,Learning),深度学习算法原理与代码剖析)