以神经网络为核心的深度学习是机器学习的一个领域分支。
深度学习看起来就像是一个黑箱机制,输入各种非结构化的数据之后输出来的预测结果。例如,输入一段语音,输出“Hello World”这样的文本;输入一张猫的图像,输出为“猫”这样的标签;输入一副棋局,输出下一步走棋方式;输入中文的“你好”,输出“Hi”这样的英文等。很难对输入与输出之间的模型转换过程给出一个合理的解释。在实际中,调用TensorFlow这样的深度学习框架,快速搭建起深度学习项目。
感知机
感知机,就是一个指在建立一个线性超平面对线性可分的数据集进行分类的线性模型,如下图从左到右的单层感知机模型的计算执行方向,模型接收
I
1
、
I
2
、
…
、
I
n
I_1、I_2、\dots、I_n
I1、I2、…、Inn个输入,将输入与权值参数
w
1
、
w
2
、
…
、
w
n
w_1、w_2、\dots、w_n
w1、w2、…、wn进行加权求和并经过sigmoid函数(或其他非线性函数)进行激活,将激活结果y作为输出,这便是单层感知机执行向前计算的基本过程。
在执行完向前计算得到的输出之后,模型需要根据当前的输出和实际的输出时间按照损失函数计算当前损失,计算损失函数关于权值的偏置的梯度,然后根据梯度下降法更新权值和偏置,经过不断的迭代调整权值和偏置是损失最小,这便是完整的单层感知机的训练过程。
单层感知机包含两层神经元,即输入和输出神经元,可以非常容易地实现逻辑与、逻辑或和逻辑非等线性可分情形,但是单层感知机的学习能力非常有限,对于像异或问题这样的线性不可分情形(即对于输入训练数据,不存在一个线性超平面能够将其进行线性分类),单层感知机就搞不定了(如下图)。
对于线性不可分的情况,在感知机基础上一般有两种解决方式,一个是支持向量机,指在通过核函数映射来处理非线性的情况;另一种就是神经网络模型,也就是多层感知机(MLP)。与单层感知机在结构上的区别主要在于MLP多了若干个隐藏层,这使得神经网络模型可以处理非线性问题。
什么是隐藏层,就是在神经网络的训练过程中只能观察到输入层和输出层的数据,对于中间隐藏层的数据变化石看不见的,因此在深度神经网络(DNN)中,将中间看不见又难以对其效果进行合理解释的隐藏层为“黑箱子”。与感知机一样,神经网络的训练依然包含前向计算和反向传播两个主要过程。单层感知机是没有反向传播这个概念,而是直接建立损失函数对权值和偏置参数进行梯度优化;简单而言,前向计算就是权值偏置与输入的线性加权和激活操作,在隐藏层上有个嵌套的过程。
反向传播算法 公式推导
反向传播算法,也称误差逆传播算法。作为神经网络的训练算法,反向传播算法可谓是当前最成功的神经网络学习算法,通常所说的是BP神经网络就是之应用反向传播算法进行训练的网络模型。
假设输入层为
x
x
x,输入层与隐藏层之间的权重和偏置分别为
w
1
w_1
w1和
b
1
b_1
b1,线性加权计算结果为
Z
1
=
w
1
x
+
b
1
Z_1 = w_1x+b_1
Z1=w1x+b1,采用sigmoid激活函数,激活输出为
a
1
=
σ
(
Z
1
)
a_1 = σ(Z_1)
a1=σ(Z1)。隐藏层到输出层的全职和偏置分别为
w
2
w_2
w2和
b
2
b_2
b2,线性加权计算结果为
Z
2
=
w
2
x
+
b
2
Z_2 = w_2x+b_2
Z2=w2x+b2,激活输出为
a
2
=
σ
(
Z
2
)
a_2 = σ(Z_2)
a2=σ(Z2)。所以,这个两层的前向计算过程为
x
→
Z
1
→
a
1
→
Z
2
→
a
2
x →Z_1 →a_1 →Z_2 →a_2
x→Z1→a1→Z2→a2。可以看出,反向传播的直观理解就是将前向计算过程反过来,但必须是梯度计算的方向反过来,假设采用式1的交叉熵损失函数
L
(
y
,
a
)
=
−
(
y
l
o
g
a
+
(
1
−
y
)
l
o
g
(
1
−
a
)
)
(1)
L(y,a) = -(yloga + (1-y)log(1-a))\tag{1}
L(y,a)=−(yloga+(1−y)log(1−a))(1)
反向传播是基于梯度下降策略的,主要是以目标参数的负梯度方向对参数进行更新,将前向计算过程反过来,那么基于损失函数的梯度计算顺序就是
d
a
2
→
d
Z
2
→
d
w
2
→
d
b
2
→
d
a
1
→
d
Z
1
→
d
w
1
→
d
b
1
da_2→dZ_2 →dw_2 →db_2 →da_1→dZ_1→dw_1→db_1
da2→dZ2→dw2→db2→da1→dZ1→dw1→db1。
下面从输出 a 2 a_2 a2开始进行反向推导,输出层激活输出为 a 2 a_2 a2,那么首先计算损失函数 L ( y , a ) L(y,a) L(y,a)关于 a 2 a_2 a2的微分 d a 2 da_2 da2,影响输出
∂ a 2 ∂ L = d L ( a 2 , y ) d a 2 = ( − y l o g a 2 − ( 1 − y ) l o g ( 1 − a 2 ) ) ′ = − y a 2 + 1 − y 1 − a 2 (2) \frac{\partial a_2}{\partial L} = \frac{\mathrm{d}L(a_2,y)}{\mathrm{d}a_2}=(-yloga_2-(1-y)log(1-a_2))' = -\frac{y}{a_2}+\frac{1-y}{1-a_2}\tag{2} ∂L∂a2=da2dL(a2,y)=(−yloga2−(1−y)log(1−a2))′=−a2y+1−a21−y(2)
∂ L ∂ Z 2 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 = ( − y a 2 + 1 − y 1 − a 2 ) × a 2 × ( 1 − a 2 ) = a 2 − y (3) \frac{\partial L}{\partial Z_2} = \frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2} =(-\frac{y}{a_2}+\frac{1-y}{1-a_2})×a_2×(1-a_2)= a_2-y\tag{3} ∂Z2∂L=∂a2∂L∂Z2∂a2=(−a2y+1−a21−y)×a2×(1−a2)=a2−y(3)
m 个 样 本 的 梯 度 下 降 : ∂ L ∂ w 2 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ w 2 = 1 m ( a 2 − y ) a 1 (4) m个样本的梯度下降:\\ \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial w_2} = \frac{1}{m}(a_2-y)a_1\tag{4} m个样本的梯度下降:∂w2∂L=∂a2∂L∂Z2∂a2∂w2∂Z2=m1(a2−y)a1(4)
∂ L ∂ b 2 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ b 2 = ∂ L ∂ Z 2 = a 2 − y (5) \frac{\partial L}{\partial b_2}=\frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial b_2} = \frac{\partial L}{\partial Z_2}=a_2-y\tag{5} ∂b2∂L=∂a2∂L∂Z2∂a2∂b2∂Z2=∂Z2∂L=a2−y(5)
∂ L ∂ a 1 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ a 1 = ( a 2 − y ) w 2 (6) \frac{\partial L}{\partial a_1} = \frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial a_1} = (a_2-y)w_2\tag{6} ∂a1∂L=∂a2∂L∂Z2∂a2∂a1∂Z2=(a2−y)w2(6)
∂ L ∂ Z 1 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ a 1 ∂ a 1 ∂ Z 1 = ( a 2 − y ) w 2 σ ′ ( Z 1 ) (7) \frac{\partial L}{\partial Z_1}=\frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial a_1}\frac{\partial a_1}{\partial Z_1}=(a_2-y)w_2σ'(Z_1)\tag{7} ∂Z1∂L=∂a2∂L∂Z2∂a2∂a1∂Z2∂Z1∂a1=(a2−y)w2σ′(Z1)(7)
∂ L ∂ w 1 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ a 1 ∂ a 1 ∂ Z 1 ∂ Z 1 ∂ w 1 = ( a 2 − y ) w 2 σ ′ ( Z 1 ) x (8) \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial a_1}\frac{\partial a_1}{\partial Z_1}\frac{\partial Z_1}{\partial w_1}=(a_2-y)w_2σ'(Z_1)x\tag{8} ∂w1∂L=∂a2∂L∂Z2∂a2∂a1∂Z2∂Z1∂a1∂w1∂Z1=(a2−y)w2σ′(Z1)x(8)
∂ L ∂ b 1 = ∂ L ∂ a 2 ∂ a 2 ∂ Z 2 ∂ Z 2 ∂ a 1 ∂ a 1 ∂ Z 1 ∂ Z 1 ∂ b 1 = ( a 2 − y ) w 2 σ ′ ( Z 1 ) x (9) \frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial a_2}\frac{\partial a_2}{\partial Z_2}\frac{\partial Z_2}{\partial a_1}\frac{\partial a_1}{\partial Z_1}\frac{\partial Z_1}{\partial b_1}=(a_2-y)w_2σ'(Z_1)x\tag{9} ∂b1∂L=∂a2∂L∂Z2∂a2∂a1∂Z2∂Z1∂a1∂b1∂Z1=(a2−y)w2σ′(Z1)x(9)
有了梯度下降计算结果后,便可根据公式10对权值和偏置进行更新,其中W是真实的参数,dw是模型计算的参数,lr是学习率,是一个超参数,可以手动调节以获得最优参数。
w
=
W
−
l
r
d
w
w = W-lr dw
w=W−lrdw
向前计算得到输出,反向传播调整参数,以得到损失值最小的最优参数。