《Neural Networks and Deep Learning》学习笔记——《Neural Networks and Deep Learning》是Michael Nielsen 所著的一本神经网络与深度学习的在线学习教材,通过Python(+Theano)实现神经网络识别MNIST手写数据集,生动易懂的讲解了神经网络与深度学习的基本原理,是一本非常不错的入门教材。本文是对其学习的总结。
目录
- 初识神经网络
1.1 感知器
1.2 Sigmoid函数
1.3 代价函数
1.4 梯度下降算法 - 反向传播算法
- 神经网络改进算法
- 深度学习
4.1 万有逼近定理(Universal Approximation Theory)
4.2 训练深度神经网络时的问题
4.3 卷积神经网络(CNN)
我们现在知道可以通过梯度下降算法来学习权值
ω
ω
和偏置b的最优值来获得目标输出,但如何快速计算梯度呢,这里就要应用到反向传播算法(Backpropagation algorithm)。
反向传播算法是目前计算梯度最常用的快速算法。
首先定义(第
l
l
层)加权输入,则输出为
al=σ(zl)
a
l
=
σ
(
z
l
)
。其矩阵形式为,
zlj=∑kwljkal−1k+blj
z
j
l
=
∑
k
w
j
k
l
a
k
l
−
1
+
b
j
l
,其中
ωljk
ω
j
k
l
表示第
l
l
层的j个神经元和第层的第k个神经元之间的权值。
下面我们再定义第
l
l
层第j个神经元的误差,引入误差
δl
δ
l
是因为反向传播算法是通过计算每一层的误差得到梯度值(
∂C/∂ωljk和∂C/∂blj
∂
C
/
∂
ω
j
k
l
和
∂
C
/
∂
b
j
l
)的。
反向传播算法基于四个公式,
其中
⊙
⊙
表示哈马德乘积,即矩阵对应元素相乘。根据
δl
δ
l
的定义及链式求导法则可以证明这四个公式(证明略)。
基于上述定义,现在可以引入反向传播算法:
1 | 输入 | a1 a 1 (X) |
---|---|---|
2 | 前向反馈 | zl=wlal−1+bl,al=σ(zl) z l = w l a l − 1 + b l , a l = σ ( z l ) |
3 | 误差 | δL=∇aC⊙σ′(zL) δ L = ∇ a C ⊙ σ ′ ( z L ) |
4 | 反向传播 | δl=((wl+1)Tδl+1)⊙σ′(zl) δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) |
5 | 输出 | ∂C∂wljk=al−1kδlj,∂C∂blj=δlj ∂ C ∂ w j k l = a k l − 1 δ j l , ∂ C ∂ b j l = δ j l |
注:反向传播算法实际上对单个输入样本计算梯度,因此这里面的代价函数C= Cx C x 。
那么反向传播算法的实质是什么呢?
假设将
l
l
层的某个权值增加
Δωljk
Δ
ω
j
k
l
,则这个权值增量会影响
l+1
l
+
1
层的输出
al+1j
a
j
l
+
1
,继而又会影响
l+2
l
+
2
层的所有输出
al+2
a
l
+
2
,然后又影响之后各层的输出……从而影响代价函数C。(因此神经网络需要经过多轮训练,从而找到所有相互依赖的参数的最优值)
用数学描述上述过程,即
或
综上,反向传播算法是一种巧妙的追踪参数( ω ω ,b)影响的算法,这种影响的描述即是梯度。
最后用流程对神经网络整体框架做一简单总结: