深度学习与人工神经网络的简介

深度学习

​ 什么是深度学习呢?我们总说,深度学习是机器学习的一个子集,说它是机器学习的进一步发展。为了说明深度学习比传统机器学习好在哪里,首先说明一下传统机器学习的两处不足。

(1)传统机器学习的两处不足:
决策边界

​ 传统机器学习中有很重要的一步是选择算法模型,模型中会有一个学习函数。学习函数有很多参数,然后机器学习会使用算法,在诸多数据输入的基础上,利用统计理论,估计参数大小,完成模型建立。

​ 当传统机器学习选择其学习函数后,其决策边界便基本已经确定,比如当你选择线性选择函数后,非线性问题此时便难以处理。而传统的机器学习并不能使用所有学习函数,对于非线性的、复杂的关系难以处理。

特征工程

​ 机器学习中除了模型选择外,另外一个重要点就是输入特征的处理。是否选择?以何种形式选择?这些特征预处理是我们需要手动预操作的。然而模型的特征处理,其实是一个黑箱,对于不同的问题,特征的处理往往需要反复的尝试验证。

​ 而当数据量巨大的时候,例如对于图像数据,一个像素就是RGB三个数据,对于10000×10000像素的一张图片,其数据总量瞬间达到了 3 × 1 0 8 3×10^8 3×108的量级,此时的特征选择采用人为的方式难度剧增。

​ 那么如何解决这两个问题呢?为了解决这两个问题,人们研究了一种算法:人工神经网络。

(2)人工神经网络

​ 人工神经网络(Arificial Neural Network),简称ANN,是从生物大脑受到启发,而对大脑的一种模拟。下面介绍ANN的几个重要概念。

人造神经元

​ 人造神经元是ANN的基本组成单位。每个神经元可以视作一种简单的机器学习算法,它可以接受多个数值输入,再输出单一实数值。神经元中存在一个阈值,类似于生物神经元中的一个“激活电位”。当生物电高于电位时,生物神经元将“导通”(输出1),反之将“抑制”(输出0)。

​ 对于一个有m个特征输入的人造线性神经元,一共有m+1个参数,分别是m个特征对应的权重和一个偏置 b i a s bias bias。当属于一个样本 x x x时,线性单元输出为:
z ( x ) = ∑ i = 1 m ω i x i + b i a s z(x)=\sum_{i=1}^m\omega_ix_i+bias z(x)=i=1mωixi+bias
为表达方便通常令 b i a s = ω 0 bias=\omega_0 bias=ω0,并为输入向量添加一个对应常数特征值1。变换输出为:
z ( x ) = ∑ i = 0 m ω i x i z(x)=\sum_{i=0}^m\omega_ix_i z(x)=i=0mωixi
z ( x ) z(x) z(x)值大于0时,我们称人造神经元为“导通”,小于等于0时,称为“抑制”。线性单元的输出值会送给下一级激活单元(激活函数)。

激活函数

​ 激活函数是对线性单元输出结果的一种变换,即 f ( z ) f(z) f(z)。激活函数 f ( z ) f(z) f(z)本身是非线性的,它将把线性神经元的输出结果非线性地导入网络。如果没有激活函数,那么ANN将只能学习线性函数,激活函数是ANN得以学习复杂关系的基础。

​ 理想情况下的激活函数为跃阶函数:
f ( z ) = { 1 , i f   z > 0 0 , o t h e r w i s e f(z)=\begin{cases} 1,if\ z>0\\ 0,otherwise \end{cases} f(z)={1,if z>00,otherwise
然而间断函数难以优化,无法使用梯度下降法。最常引入的激活函数,是于跃阶函数相类似的sigmoid函数:
σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1
它的一阶导数仍然为 σ ( z ) \sigma(z) σ(z)的函数:
d σ ( z ) d z = σ ( z ) ( 1 − σ ( z ) ) \frac{d\sigma(z)}{dz}=\sigma(z)(1-\sigma (z)) dzdσ(z)=σ(z)(1σ(z))
除了使用sigmoid函数为激活函数外,还有使用tanh、ReLu、SoftPlus作为激活函数,此处不再介绍,单纯使用sigmoid函数作为激活函数继续介绍ANN。

输入层、隐藏层、输出层

​ 通常一个神经网络由输入层、隐藏层、输出层三层组成。输入和输出层仅有一层,隐藏层则可以有一个或多个,每个隐藏层之间连接方式相同。

在这里插入图片描述

​ 如上图例中,若输入数据有3个特征,则输入层有三个输入节点,外加一个偏置项 x 0 x_0 x0对应的常数特征1。中间为隐藏层,仅有一层,有3个隐藏节点,外加一个偏置项。输出层有两个输出节点,例子中仅有两个分类结果,故是2个节点。

​ 其中,隐藏层节点数的确定,则与训练的样本个数相关,一般训练样本个数是每层隐藏层节点个数的2-10倍。

反向传播算法(Back Propagation)

​ 激活函数的非线性变换赋予了神经网络处理更复杂情况的能力,而反向传播算法(BP算法)就给予了ANN自动筛选特征的能力。

​ 对于一个结构确定的ANN,其模型参数即为所有的权值 ω i j \omega_{ij} ωij。训练过程即为从权向量空间中搜索对应值 ω \omega ω使得训练误差最小。我们用均方误差来度量模型在训练集D上的误差:
M S E ( ω ) = 1 2 ∑ d ∈ D ∑ k ∈ o u t p u t s ( y d k − o d k ) 2 MSE(\omega)=\frac{1}{2}\sum_{d\in D}\sum_{k\in outputs}(y_{dk}-o_{dk})^2 MSE(ω)=21dDkoutputs(ydkodk)2
其中,d为数据集D的样本,outputs为输出节点的集合, o d k o_{dk} odk为输出节点k的预测值,y_dk为实际值。就拿上图中的具体例子来说,假如训练集D中有10个样本,那么例子中对应的参数d则会将这10个样本遍历,并在最后的k=2个输出节点上呈现结果,其中 o d k , y d k ∈ { 0 , 1 } o_{dk},y_{dk}\in \{0,1\} odk,ydk{0,1}

​ 因为每个神经元的输出的 z ( x ) z(x) z(x)和到下一阶段的 f ( z ) f(z) f(z)都是连续可微的,因此 M S E ( ω ) MSE(\omega) MSE(ω)也是可微的,可以利用梯度下降法计算出 ω \omega ω。反向传播算法就是利用梯度下降法反向从输出层开始,到下一个隐藏层,到倒数第二个隐藏层这样更新网络中每个传递过程中的 ω i j \omega_{ij} ωij。而对于复杂的ANN,计算开销往往很大,因此通常使用随机梯度下降法进行训练,即每步只使用一个样本计算梯度更新权值。下面分两点介绍权值更新法则。

a.输出节点的权值更新

​ 我们选择训练集D中,第d个样本训练,得到训练误差为:
M S E d ( ω ) = 1 2 ∑ k ∈ o u t p u t s ( y k − o k ) 2 MSE_d(\omega)=\frac{1}{2}\sum_{k\in outputs}(y_k-o_k)^2 MSEd(ω)=21koutputs(ykok)2
若最后一层的隐藏层的节点 i i i,到输出层的节点 j j j,对应的权值为 w i j w_{ij} wij,计算梯度需要求偏导数 ∂ M S E d ∂ ω i j \frac{\partial MSE_d}{\partial \omega_{ij}} ωijMSEd,因此要考虑 w i j w_{ij} wij的变化如何影响 M S E d MSE_d MSEd,具体如下:

1.输出节点 j j j的净输出 z j z_j zj,是 ω i j \omega_{ij} ωij为系数的线性函数,故 ω i j \omega_{ij} ωij的变化首先会导致 z j z_j zj的变化;

2.输出节点 o j o_j oj的输出是 f ( z j ) f(z_j) f(zj),是 z j z_j zj的函数,故 z j z_j zj的变化导致 o j o_j oj的变化;

3. M S E d MSE_d MSEd o j o_j oj的函数,故 o j o_j oj的变化导致 z j z_j zj的变化。

由以上推导,我们利用求导的链式法则计算 ∂ M S E d ∂ ω i j \frac{\partial MSE_d}{\partial \omega_{ij}} ωijMSEd得:
∂ M S E d ∂ ω i j = ∂ M S E d ∂ z j ∗ ∂ z j ∂ ω i j = ∂ M S E d ∂ o j ∗ ∂ o j ∂ z j ∗ ∂ z j ∂ ω i j \begin{align} \frac{\partial MSE_d}{\partial \omega_{ij}} &=\frac{\partial MSE_d}{\partial z_j}*\frac{\partial z_j}{\partial \omega_{ij}}\\ &=\frac{\partial MSE_d}{\partial o_j}*\frac{\partial o_j}{\partial z_j}*\frac{\partial z_j}{\partial \omega_{ij}} \end{align} ωijMSEd=zjMSEdωijzj=ojMSEdzjojωijzj
分别计算上述三个偏导数为:
∂ M S E d ∂ o j = 1 2 ∗ ∂ ∑ k ∈ o u t p u t s ( y k − o k ) 2 ∂ o j = − ( y j − o j ) ∂ o j ∂ z j = ∂ f ( z j ) ∂ z j = o j ( 1 − o j ) ∂ z j ∂ ω i j = ∂ ∑ k ∈ o u t p u t s ω k j x k j ∂ ω i j = x i j \begin{align} \frac{\partial MSE_d}{\partial o_j}&=\frac{1}{2}*\frac{\partial \sum_{k\in outputs}(y_k-o_k)^2}{\partial o_j}=-(y_j-o_j)\\ \frac{\partial o_j}{\partial z_j}&=\frac{\partial f(z_j)}{\partial z_j}=o_j(1-o_j)\\ \frac{\partial z_j}{\partial \omega_{ij}}&=\frac{\partial \sum_{k\in outputs}\omega_{kj}x_{kj}}{\partial \omega_{ij}}=x_{ij} \end{align} ojMSEdzjojωijzj=21ojkoutputs(ykok)2=(yjoj)=zjf(zj)=oj(1oj)=ωijkoutputsωkjxkj=xij
此处,我们令:
δ j = − ∂ M S E d ∂ z j = − ∂ M S E d ∂ o j ∗ ∂ o j ∂ z j = ( y j − o j ) ∗ o j ∗ ( 1 − o j ) \delta_j=-\frac{\partial MSE_d}{\partial z_j}=-\frac{\partial MSE_d}{\partial o_j}*\frac{\partial o_j}{\partial z_j}=(y_j-o_j)*o_j*(1-o_j) δj=zjMSEd=ojMSEdzjoj=(yjoj)oj(1oj)
于是,得到 ∂ M S E d ∂ ω i j \frac{\partial MSE_d}{\partial \omega_{ij}} ωijMSEd的计算公式为:
∂ M S E d ∂ ω i j = − δ j x i j \frac{\partial MSE_d}{\partial \omega_{ij}}=-\delta_jx_{ij} ωijMSEd=δjxij
设随机梯度下降的学习率为 η \eta η,更新权值 ω i j \omega_{ij} ωij的增量为:
Δ ω i j = η δ j x i j \Delta \omega_{ij}=\eta \delta_jx_{ij} Δωij=ηδjxij
输出节点 j j j的权值 ω i j \omega_{ij} ωij的更新法则为:
ω i j : = ω i j + Δ ω i j \omega_{ij}:=\omega_{ij}+\Delta \omega_{ij} ωij:=ωij+Δωij

b.隐藏节点的权值更新

​ 上述误差对于权值的偏导公式:
∂ M S E d ∂ ω i j = ∂ M S E d ∂ o j ∗ ∂ o j ∂ z j ∗ ∂ z j ∂ ω i j \frac{\partial MSE_d}{\partial \omega_{ij}}= \frac{\partial MSE_d}{\partial o_j}*\frac{\partial o_j}{\partial z_j}*\frac{\partial z_j}{\partial \omega_{ij}} ωijMSEd=ojMSEdzjojωijzj
对于隐藏层中层与层之间的传导依然成立,并且其中:
∂ o j ∂ z j = ∂ f ( z j ) ∂ z j = o j ( 1 − o j ) ∂ z j ∂ ω i j = ∂ ∑ k ∈ o u t p u t s ω k j x k j ∂ ω i j = x i j \begin{align} \frac{\partial o_j}{\partial z_j}&=\frac{\partial f(z_j)}{\partial z_j}=o_j(1-o_j)\\ \frac{\partial z_j}{\partial \omega_{ij}}&=\frac{\partial \sum_{k\in outputs}\omega_{kj}x_{kj}}{\partial \omega_{ij}}=x_{ij} \end{align} zjojωijzj=zjf(zj)=oj(1oj)=ωijkoutputsωkjxkj=xij
依然成立。即隐藏层中,单层输出 o j o_j oj依然仅取决于单层净输出结果 z j z_j zj,单层净输出依然受 ω i j \omega_{ij} ωij直接影响。

​ 但是,对于 ∂ M S E d ∂ o j \frac{\partial MSE_d}{\partial o_j} ojMSEd来说,当隐藏层中的第 ( k − 1 ) (k-1) (k1)层中的第 j j j个节点的输出确定为 o j o_j oj时,网络会把这个结果投射到其后 k k k层开始的每一个神经元。因此后面每一个神经元的净输出 z k z_k zk都是 o j o_j oj的函数。因此 o j o_j oj的变化先导致其后所有神经元的净输出​,每个神经元的净输出 z k z_k zk影响其对输出 o k o_k ok,进而影响到 M S E d MSE_{d} MSEd。我们假设downstream为k层的神经元的集合。则有:
∂ M S E d ∂ o j = ∑ l ∈ d o w n s t r e a m ∂ M S E d ∂ z l ∗ ∂ z l ∂ o j \frac{\partial MSE_d}{\partial o_j}=\sum_{l \in downstream} \frac{\partial MSE_d}{\partial z_l}*\frac{\partial z_l}{\partial o_j} ojMSEd=ldownstreamzlMSEdojzl
其中, o j o_j oj即为(k-1)层中节点j的输出,也为k层中,每一层的输入,因此对于第k层中第 l l l个节点,有 o j = x l j o_j=x_{lj} oj=xlj。于是有:
∂ z i ∂ o j = ∂ ( w 1 j x 1 j + w 2 j x 2 j + ⋯ + w l j x l j + …   ) ∂ x l j = ω l j \frac{\partial z_i}{\partial o_j}= \frac{\partial (w_{1j}x_{1j}+w_{2j}x_{2j}+\dots+w_{lj}x_{lj}+\dots)}{\partial x_{lj}} =\omega_{lj} ojzi=xlj(w1jx1j+w2jx2j++wljxlj+)=ωlj
又因为
δ j = − ∂ M S E d ∂ z j = − ∂ M S E d ∂ o j ∗ ∂ o j ∂ z j = − ∂ M S E d ∂ o j ∗ o j ( 1 − o j ) = o j ( 1 − o j ) ∗ ∑ l ∈ d o w n s t r e a m δ l ω l j \begin{align} \delta_j &=-\frac{\partial MSE_d}{\partial z_j}\\ &=-\frac{\partial MSE_d}{\partial o_j}*\frac{\partial o_j}{\partial z_j}\\ &=-\frac{\partial MSE_d}{\partial o_j}*o_j(1-o_j)\\ &=o_j(1-o_j)*\sum_{l \in downstream}\delta_l\omega_{lj} \end{align} δj=zjMSEd=ojMSEdzjoj=ojMSEdoj(1oj)=oj(1oj)ldownstreamδlωlj
于是, ∂ M S E d ∂ ω i j \frac{\partial MSE_d}{\partial \omega_{ij}} ωijMSEd的计算公式即为
∂ M S E d ∂ ω i j = − δ j x i j \frac{\partial MSE_d}{\partial \omega_{ij}}=-\delta_jx_{ij} ωijMSEd=δjxij
设随机梯度下降法的学习率为 η \eta η,则更新权值的增量为
Δ ω i j = η δ j x i j \Delta \omega_{ij}=\eta \delta_jx_{ij} Δωij=ηδjxij
更新法则为
ω i j : = ω i j + Δ ω i j \omega_{ij}:=\omega_{ij}+\Delta \omega_{ij} ωij:=ωij+Δωij
​ 对比隐藏层节点与输出层节点的的权值更新计算法则,其主要差别就在于 δ j \delta_j δj。输出层节点的 δ j \delta_j δj计算公式为
δ j = ( y j − o j ) ∗ o j ∗ ( 1 − o j ) \delta_j=(y_j-o_j)*o_j*(1-o_j) δj=(yjoj)oj(1oj)
隐藏层节点计算依赖于其下一层的每一个节点对于的 δ l \delta_l δl,公式为
δ j = o j ( 1 − o j ) ∗ ∑ l ∈ d o w n s t r e a m δ l ω l j \delta_j=o_j(1-o_j)*\sum_{l \in downstream}\delta_l\omega_{lj} δj=oj(1oj)ldownstreamδlωlj
​ 所以,我们首先需要计算输出层所有节点对应的 δ \delta δ,然后倒序计算每一个节点对应的 δ \delta δ,这就是反向传播算法名称的由来。

(3)深度学习与人工神经网络的联系

​ 深度学习的发展源自于人工神经网络,两者在结构上都采用了相似的分层结构,这其中包括输入层、隐藏层、输出层的分类和相邻层节点间的连接等。

​ 但是人工神经网络本身也存在着一些问题,比如传统机器学习都容易发生的”过拟合“和”训练速度慢“问题。另外,人工神经网络采用了我们如上介绍的BP算法来更新和计算权值使得目标损失函数得到收敛,该算法当神经网络层数较多时,容易发生”梯度消失“和”梯度爆炸“的后果。

​ 何为”梯度消失“和”梯度爆炸“呢?我们假设有一个2层隐藏层的ANN,则第三层为输出层,每个隐藏层的权值更新取决于 Δ ω i j = η δ j x i j \Delta \omega_{ij}=\eta \delta_jx_{ij} Δωij=ηδjxij,其中学习率和输入的训练样本均可视作常数,于是 Δ ω i j \Delta \omega_{ij} Δωij的大小便主要取决于 δ j \delta_j δj。此时第一层隐藏层的 δ j ( 1 ) \delta_j^{(1)} δj(1)计算公式为:
δ j ( 1 ) = o j ( 1 ) ( 1 − o j ( 1 ) ) ∑ l ∈ d o w n s t r e a m 2 δ l ( 2 ) ω l j ( 2 ) = o j ( 1 ) ( 1 − o j ( 1 ) ) ∑ l ∈ d o w n s t r e a m 2 { o l ( 2 ) ( 1 − o l ( 2 ) ) ∑ m ∈ d o w n s t r e a m 3 δ m ( 3 ) ω m j ( 3 ) } ω l j ( 2 ) = o j ( 1 ) ( 1 − o j ( 1 ) ) ∑ l ∈ d o w n s t r e a m 2 { o l ( 2 ) ( 1 − o l ( 2 ) ) ∑ m ∈ d o w n s t r e a m 3 [ ( y j − o j ( 3 ) ) o j ( 3 ) ( 1 − o j ( 3 ) ) ] ω m j ( 3 ) } ω l j ( 2 ) \begin{align} \delta_j^{(1)} &=o_j^{(1)}(1-o_j^{(1)})\sum_{l \in downstream2}\delta_l^{(2)}\omega_{lj}^{(2)}\\ &=o_j^{(1)}(1-o_j^{(1)})\sum_{l \in downstream2}\{o_l^{(2)}(1-o_l^{(2)})\sum_{m \in downstream3}\delta_m^{(3)}\omega_{mj}^{(3)}\}\omega_{lj}^{(2)}\\ &=o_j^{(1)}(1-o_j^{(1)})\sum_{l \in downstream2}\{o_l^{(2)}(1-o_l^{(2)})\sum_{m \in downstream3}[(y_j-o_j^{(3)})o_j^{(3)}(1-o_j^{(3)})]\omega_{mj}^{(3)}\}\omega_{lj}^{(2)} \end{align} δj(1)=oj(1)(1oj(1))ldownstream2δl(2)ωlj(2)=oj(1)(1oj(1))ldownstream2{ol(2)(1ol(2))mdownstream3δm(3)ωmj(3)}ωlj(2)=oj(1)(1oj(1))ldownstream2{ol(2)(1ol(2))mdownstream3[(yjoj(3))oj(3)(1oj(3))]ωmj(3)}ωlj(2)
因此可以想象,当层数增多时, δ j \delta_j δj的变化将是不断嵌套累乘的。所以当ANN层数较多时,若 o j o_j oj w m j w_{mj} wmj的乘积小于1时,其累乘会使得前部变化几乎为0,即梯度消失;若 o j o_j oj w m j w_{mj} wmj的乘积大于1时,其累乘会使得前部变化趋向无穷,即梯度爆炸。因此传统的ANN其实无法具有太多的层数。

​ 而深度学习,就是在ANN基础上,优化ANN算法的一类模式分析方法。其中包括循环神经网络、卷积神经网络、自编码神经网络、深度置信网络等诸多算法理论和思想。

参考文章

1.深度学习与神经网络的关系

2.BP神经网络的隐含层,输入层,输出层的节点数确定

3.《Python机器学习算法原理、实现与案例》————刘硕

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值