反向传播算法

xiaoxiao2021-02-28  91

《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 层)加权输入zl=wlal1 blzl=wlal−1 bl,则输出为 al=σ(zl) a l = σ ( z l ) 。其矩阵形式为, zlj=kwljkal1k+blj z j l = ∑ k w j k l a k l − 1 + b j l ,其中 ωljk ω j k l 表示第 l l 层的j个神经元和第l1l−1层的第k个神经元之间的权值。 下面我们再定义第 l l 层第j个神经元的误差δlj=Czljδjl=∂C∂zjl,引入误差 δl δ l 是因为反向传播算法是通过计算每一层的误差得到梯度值( C/ωljkC/blj ∂ C / ∂ ω j k l 和 ∂ C / ∂ b j l )的。 反向传播算法基于四个公式,

其中 表示哈马德乘积,即矩阵对应元素相乘。根据 δl δ l 的定义及链式求导法则可以证明这四个公式(证明略)。 基于上述定义,现在可以引入反向传播算法:

1输入 a1 a 1 (X)2前向反馈 zl=wlal1+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输出 Cwljk=al1kδlj,Cblj=δ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ωjkl增加 Δωljk Δ ω j k l ,则这个权值增量会影响 l+1 l + 1 层的输出 al+1j a j l + 1 ,继而又会影响 l+2 l + 2 层的所有输出 al+2 a l + 2 ,然后又影响之后各层的输出……从而影响代价函数C。(因此神经网络需要经过多轮训练,从而找到所有相互依赖的参数的最优值) 用数学描述上述过程,即

ΔCmnpqCaLmaLmaL1naL1naL2pal+1qaljaljwljkΔwljk,(1) (1) Δ C ≈ ∑ m n p … q ∂ C ∂ a m L ∂ a m L ∂ a n L − 1 ∂ a n L − 1 ∂ a p L − 2 … ∂ a q l + 1 ∂ a j l ∂ a j l ∂ w j k l Δ w j k l , Cwljk=mnpqCaLmaLmaL1naL1naL2pal+1qaljaljwljk.(2) (2) ∂ C ∂ w j k l = ∑ m n p … q ∂ C ∂ a m L ∂ a m L ∂ a n L − 1 ∂ a n L − 1 ∂ a p L − 2 … ∂ a q l + 1 ∂ a j l ∂ a j l ∂ w j k l . 综上,反向传播算法是一种巧妙的追踪参数( ω ω ,b)影响的算法,这种影响的描述即是梯度。


最后用流程对神经网络整体框架做一简单总结:

CC(GD)δ(BP)w,b(Cw,Cb)a C ↓→ ∇ C ( G D ) → δ ( B P ) → w , b ( ∂ C ∂ w , ∂ C ∂ b ) → a

转载请注明原文地址: https://www.6miu.com/read-52242.html

最新回复(0)