文章目录
- 一. 深度学习
- 1. 深度学习概念
- 2. 深度学习原理
- 3. 深度学习学习方式
- 4. 深度学习训练方法
- 二. 人工神经网络基础
- 1. 神经元感知器模型
- 2. 神经网络模型
- 2. 学习方式
- 3. 学习规则
- 3.1. 正向传播求误差
- 3.2. 反向传播求偏导(ing)
- 4. 激活函数
一. 深度学习
1. 深度学习概念
深度学习的概念来源于人工神经网络(Artificical Nerural Network,ANN),所以又被称为深度神经网络(Deep Neural Network, DNN)。人工神经网络主要使用计算机的计算单元和存储单元模拟人类神经大脑系统中大量的神经细胞(神经元)通过神经纤维传导并相互协同工作的原理。
深度学习通过算法构造多层神经网络,经过多层处理,逐渐将初始的底层特征转换为高层特征表示,再用自学习模型便可完成复杂的分类等学习任务。
因此,可将深度学习理解为深度特征学习或深度表示学习。
典型的深度学习模型又卷积神经网络(Convolutional Neural Network,CNN)、循环神经网路(Recurrent Neural Network,RNN)、长短时记忆神经网络(Long Short-Term Memory,LSTM)
深度置信网络(Deep Belief Network ,DBN)。
2. 深度学习原理
传统的机器学习算法需要手工编码特征
,这个过程不仅耗时
,而且需要较高的专业知识和一定的人工参与
才能完成。相比之下,深度学习直接从数据中自动学习各种特征并且进行分类或识别。因此,在解决复杂问题(如目标识别、自然语言处理等)时,传统的机器学习通常把问题分为几块,一个一个地解决再进行组合,但是深度学习则是端到端(end-to-end)的解决。如下图
具体来说,深度学习与机器学习的不同之处在于:
- 强调模型结构的深度,隐藏层一般5、6层,多者甚至十几、几十层。
- 明确特征学习的重要性,逐层进行特征变换,将样本在原空间的特征表示变换到一个新的特征空间。与人工构造特征相比,更能刻画丰富的内在信息
通过设计建立适量的神经元计算节点和多层运算层次结构,选择合适的输入层和输出层,加上网络的学习和调优,从而建立从输入到输出的函数关系,虽然不能100%地找到输入与输出的函数关系,但是可以尽可能地逼近现实的关联关系,进而使用训练成功的网络模型实现对复杂任务处理的自动化需求。
3. 深度学习学习方式
根据训练数据有无标签将深度学习的学习方式分为三类,分别是监督学习,无监督学习和半监督学习。
-
监督学习
将训练样本的数据加入到神经网络的输入段,将期望答案和实际输出作差,可以得到误差信号,通过得到的误差信号调整权值大小,一次来优化模型输出。监督学习算法训练含有很多特征的数据集,不过数据集中的样本都有一个标签或目标。监督学习包含随机变量x及其相关联的值或向量y,然后用x预测y,通常是估计p(y|x),例如Iris数据集注明了每个花卉样本属于什么品种,监督学习算法通过研究该数据集,学习如何通过测量结果将样本划分为3个不同品种。 -
无监督学习
不确定数据标签,直接训练数据,模型根据数据特征进行自动学习,无监督学习算法续联含有很多特征的数据集x,在该数据集上学习出有用的结构性质。在深度学习中,通过学习生成数据集的整个概率分布p(x),显式地入概率估计、隐式地入合成或去噪。还有一些其他类型的无监督任务,如聚类将数据集分为相似样本的集合。 -
半监督学习
介于有监督和无监督之间,不需要给定具体的数据标签,但需要对神经网络的输出进行评价,以此来调整网络参数。
在半监督学习的框架下,p(x)产生的未标记样本和p(x,y)中的标记样本都用于估计p(y|x)。
4. 深度学习训练方法
对深度学习的所有层通过进行训练,复杂度会很高。如果每次只训练一层,偏差就会逐层传递。因此在2006年,Geoffrey Hinten提出了一个训练多层神经网络的有效方法,使原始表示X向上生成的高级表示R和改高级表示R向下生成的X尽可能一致,向上的权重用于"认知",向下的权重用于"生成",通过训练让认知和生成达成一致,也就是保证顶层能正确复原底层的节点。例如顶层的一个节点表示人脸,那么所有人脸的图像应该激活这个节点,并且这个方向向下生成的图像应该能够表现为一个大致的人脸图像。
具体来说,就是第一步逐层构建单层神经元,每次训练一个单层网络;第二步当所有层都训练完成后,使用Wake-Sleep算法进行调优,如下图。
-
使用自下而上的非监督学习。
采用无标签或有标签数据分层训练各层函数,这一步可以看成无监督训练过程,或者特征学习过程。先用数学学习第一层,学习第一层的参数,在学习并得到N-1层后,将N-1的输出作为第N层的输入,训练第N层,从而得到各层的参数。 -
自顶而下的监督学习
基于第1步得到的各层参数来进一步调整多层模型的参数,这一步 是一个有监督训练过程。第1步类似神经网络的随机初始化初值过程, 由于深度学习的第1步不是随机初始化,而是通过学习输入数据的结构 得到,因而这个初值更接近全局最优,从而能够取得更好的效果,所 以深度学习效果好在很大程度上归功于第1步的特征学习过程。
二. 人工神经网络基础
人工神经网络是基于生物学中脑认知神经网络
的基本原理,模仿大脑神经系统
工作原理所创建的数学模型,它有并行的分布处理能力、高容错性、自我学习等特征。
1. 神经元感知器模型
人工神经网络中最基本的单元叫神经元,又叫感知器,如图所示。它是模拟人脑神经系统的神经元(分析和记忆)
、树突(感知)
、轴突(传导)
的工作原理,借助计算机的快速计算和存储来实现。
从上图可以看到,人工神经网络中一个基本的神经元由以下几个部分组成:
- 输入 ( Input ) : 一个神经元可以接收多个输入 { x 1 , x 2 , . . . , x n ∣ x i ∈ R } \{x_1,x_2,...,x_n|x_i∈R\} {x1,x2,...,xn∣xi∈R}
- 权值(Weight):每个输入都有一个权值 w i ∈ R w_i∈R wi∈R。
- 偏置值(Bias):b∈R
- 激活函数(Activate Function):激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数, 从而可以应用到众多非线性模型中。
- 输出(Output): 神经元输出,该输出可由下面公式计算: y = f { Σ i = 0 n ( w i ∗ x i ) + b } y = f\{ Σ_{i=0}^n(w_i * x_i) +b \} y=f{Σi=0n(wi∗xi)+b}
2. 神经网络模型
下图为神经网络的结构模型图,最左边的层叫作输入层(Input Layer)
,最右边的层叫作输出层(Output Layer)
。输入层和输出层之间的层叫作隐藏层(Hidden Layer)
。含多个隐藏层的神经网络叫作深度神经网络。
对于拟合任意一个函数而言,浅层神经网络浅而宽,需要大量的神经元,而深层神经网络深而窄,需要更多的层和较 少的神经元。
一般来说深层网络参数更少,更节省资源,但是深层网络并不好训练,需要大量的数据和很好的技巧才能去拟合并训练出好的神经网络。
2. 学习方式
神经网络的学习方式很多,根据有无数据训练可以将其分为3大 类。
(1)有监督学习:将训练样本的数据加入到神经网络的输入端, 将期望答案和实际输出做差,可以得到误差信号,通过误差信号来调 整权值大小,以此来优化模型输出。
(2)无监督学习:首先并不给定标准数据样本,而是直接将网络 置于环境之中,由自身根据数据特征进行自动学习。
(3)半监督学习:输入信息介于有监督和无监督之间,不需要给 定标准数据样本,但需要对网络的输出做出评判,以此来调整网络参 数。
3. 学习规则
学习规则是用来修改神经网络的权值和偏置值的过程和方法,其目的是训练网络,更好地拟合应用的需求,从而完成特殊的任务。常见的学习规则有:
- Hebb学习规则
- Delta算法及
- 反向传播算法(Back- propagation,BP)算法
BP算法基本思想
- BP算法是人工神经网络较常采用的学习方法,其基本思想是逐一地由样本集中的样本 ( X k , Y k ) (X_k ,Y_k) (Xk,Yk)计算出实际输出 O k O_k Ok和误差测度 E p E_p Ep,对 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn权值做调整,重复这个循环,直到误差降至最低。
- 用输出层的误差调整输出层权值矩阵,并用此误差估计输出层的直接前导层误差,再用输出层前导层误差估计更前一层的误差,如此获得所有其他各层的误差估计,并用这些估计实现对权矩阵的修改,形成将输出端表现出的误差沿着与输入信号相反的方向逐级向输入端传递的
链式求解
过程。
BP算法学习过程:
- BP算法学习过程应用到深度学习中分为两个子过程:输入数据正向传递子过程和误差数据反向传递子过程,即
“正向传播求误差,反向传播求偏导”
。- 完整的学习过程是:对于一个训练样本,将输入正向传播到输出此时产生误差,然后将误差信号反向从输出层传递到输入层,利用该误差信号求出权重修改量 W j i ( h ) W_{ji}^{(h)} Wji(h) ( h表示层数),通过它更新权值 W j i ( h ) W_{ji}^{(h)} Wji(h) ,称为一次迭代过程。当误差或者 W j i ( h ) W_{ji}^{(h)} Wji(h)仍不满足要求时重复上述操作。
下图以三层神经网络模型为例,详细说明BP算法的原理及推导求解过程。
3.1. 正向传播求误差
至此,完成了从输入层到输出层的数学表达与计算推导。其中, 在初始化计算时,即第一次完成从输入经过隐藏层计算后到输出的权 值 矩阵的初始值,一般根据实际情况采用随机值或者经验值。
3.2. 反向传播求偏导(ing)
BP算法虽然是经典的深度学习算法,但对于深层网络仍然有许多不足,主要原因是Sigmoid激活函数易出现梯度减小甚至消失
,这也是为什么深层卷积神经网络利用ReLU函数代替Sigmoid激活函数的原因。
4. 激活函数
激活函数又叫激励函数,主要作用是对神经元所获得的输入进行非线性变换
,以此反映神经元的非线性特性
。常用的激活函数有以下几种类型。
激活函数 | 描述 |
---|---|
线性激活函数 | f(x) = kx + c k、c为常数,线性函数常用于线性神经网络中 |
符号激活函数 | f ( x ) = { 0 , x < 0 1 , x > = 0 f(x)=\{^{1 , x>=0}_{0, x<0} f(x)={0,x<01,x>=0 |
Sigmoid激活函数 |
f
(
x
)
=
1
/
(
1
+
e
−
x
)
f(x)=1/(1+e^{-x})
f(x)=1/(1+e−x) ![]() |
双曲正切激活函数 | ![]() |
高斯激活函数 | ![]() |
ReLU激活函数 | f ( x ) = { 0 , x < 0 x , x > = 0 f(x)=\{^{x , x>=0}_{0, x<0} f(x)={0,x<0x,x>=0 也可表示为 f(x)=max(0,x)。 |
在神经网络中,ReLU激活函数得到广泛应用,如图5-10所示,尤其在卷积神经网络中
,往往不选择Sigmoid或tanh函数而选择ReLU函数,原因有以下几点:
- 代价更小,计算速度更快:与Sigmoid函数必须计算指数和导数比较,
ReLU代价小,计算速度更快
。- 梯度不会丢失:Sigmoid函数导数最大值为1/4,并且链式求导导致梯度越来越小,训练深度神经网络容易导致
梯度丢失
,但是ReLU函数的导数为1,不会出现梯度下降,以及梯度消失问题,从而更易于训练深层网络。- 较为理想的激活率:有研究表明,人脑在工作时只有大概5%的神经元被激活,而Sigmoid函数大概有50%的神经元被激活,而人工神经网络
在理想状态时有15%~30%的激活率
,所以ReLU函数在小于0的时候是完全不激活的,所以可以适应理想网络的激活率要求。
当然,没有一种完美的激活函数,不同的神经网络有不同的需求函数,需要根据具体的模型选取合适的激活函数。