【云驻共创】年轻人如何入场元宇宙?未来已来!
587
2022-05-30
深度学习
人工智能具有两大核心技术:
机器学习
深度学习
本章节我们将主要围绕深度学习的相关基础知识展开。
学习目标
本课程学习完成之后,可以:
描述神经网络的定义与发展
熟悉深度学习神经网络的重要“部件”
熟悉神经网络的训练与优化
描述深度学习中常见的问题
带着这些学习目标,让我们一起学习深度学习的内容吧~
目录
深度学习简介
训练法则
正则化
优化器
神经网络类型
常见问题
1. 深度学习简介
首先,我们看下如下图传统机器学习和深度学习的一种比较。众所周知深度学习是属于机器学习,但是由于大多数深度学习的样本是没有标签的,而且在神经网络学习中特征的信息是逐层逐步去学习的。因此,深度学习又是给予无监督特征学习和特征层次结构学习的一个模型。
由于神经网络能够处理大量的数据信息,而且它能够承载数据之间的一些复杂计算,所以深度学习在处理视觉、语音、文本以及自然语言处理这些方面有着突出的优势。
接下来通过5个方面来分析和对比传统机器学习和深度学习之间的优缺点:
深度学习和机器学习的一般流程差别不大,我们先来看一下传统机器学习的一般流程:
首先,我们得定位任务——寻找挖掘数据的目标;然后,对数据进行预处理工作(主要包括数据清洗、特征提取和特征选择);数据处理完毕,将这些数据导入模型中进行训练;得到好的模型之后,我们将模型进行应用,如推理、预测和识别。
思考一个问题:特征提取特征选择是否可以在深度学习中自动选择呢?
答案当然是肯定的。所以说,传统机器学习和深度学习在特征工程方面是很较大的差别的。在深度学习中,我们并不需要做大量的特征工程工作。
接下来我们一起揭开深度学习的神秘面纱~
通常,我们所说的深度学习实则位一种深层次的学习。也就是使用了深层神经网络,其层数越多证明它的结构越深。当我们处理高维数据时,深层次的网络能够得到比较好的性能。因为学习的性能比较多。
深度学习使用的神经网络是一种类脑的算法。在发明神经网络的时候,科学家也是通过研究脑部信号在大脑之中一个传导过程,然后我们通过了解它的一个传导过程,知道这样一个大致的信号,科学家才研究了神经网络。
比如在大脑处理信号的时候,我们是由不同神经元之间的相互连接。一个神经元有树突、细胞核、轴突、突触等。我们信息传递的时候通过上一个神经元的突触传给下一个神经元的树突,神经元之间的相互传递信号,最终到达我们的大脑中枢。然后大脑中枢做出判断。
我们科学家通过模拟这种传递方式,发明了单层的感知机——单层神经网络。主要包含输入层、隐藏层和输出层。输入层将数据导入模型,隐藏层包含一些计算函数,计算后由输出层进行输出。当面临很复杂很复杂的数据时,我们也可以将隐藏层增加更多的乘数来增加我们的模型的复杂度。
一般人工神经网络的设计和应用研究中,我们通常考虑三个比较重要的方面:
神经元的作用函数
神经元之间的连接方式
网络如何进行学习
神经网络
下面看一下神经网络的整个发展历程:
主要分为四个阶段,可谓是两起两落。萌芽时期是从1958~1969年;在1958年发明了感知机,在1969年时,美国人工智能先驱明斯基发现感知机在处理XOR上还是有问题的,不能正确的去进行分类。从此之后神经网络发展变得十分缓慢。从1986年到1998年的这一段时间是神经网络发展的另一阶段,第二代神经网络由深度学习大神Hinton在1986年起,发明了适用于多层感知机的BP算法,并采用Sigmoid函数进行非线性映射,有效解决了非线性分类问题。到1995年数据量的不断增加,也导致了缓慢发展。再到2006年Hinton提出了深层网络中使用无监督训练的的解决方案,对权值进行分析,然后有监督训练进行微调。因此,2006年成为看深度学习的元年。
我们了解了整个深度学习的发展历程,接下来看下深度学习,神经网络算法是怎么一步一步进行发展和进化的。
单层感知机
我们构建一个神经网络模型,分别为输入层、隐含层、输出层。这是一个非常普通简单的神经网络模型,俗称为感知机(Perceptron)。
感知机其实就是类似神经网络的一个神经元
w0相当于bias,也就是偏置
w1-wn是权重
step fucntion是sign
XOR问题
上面我们提到了一个明斯基提出的XOR问题,那么XOR问题是什么呢?
如果我们是And问题,00、01、10,我们可以用And进行分割;然后是或的问题,00属于0、10、01是1,11是1,这部分可以分类;最好,异或问题,00,11都是0,10,01属于一类,如果我们用单层感知机,他不能将00,11分为一类。这就是明斯基提出的XOR问题。
单层感知机是解决线性问题的,在XOR问题上就无法解决了。
前馈神经网络
单层神经网络无法解决这个问题,那么我们多增加几个隐藏层。所以说我们要加入一层后再加上一层隐藏层看看是否可以解决这样一个问题。如下面的神经网络,可以称为多层感知机,也是一种前馈神经网络。
关于前馈神经网络,它的神经元都是分层排列的,可以看出输入节点是没有计算功能的。只是为了输入我们的一个特征向量,当输入完特征向量后,具有计算功能的神经元都在隐藏层中,包含一些激活函数。通过计算再传给下一层直到计算完传到输出层为止。
采用这样的单项结构,每一层都包含多个神经元,同一层神经元之间不存在相互联系,层与层之间的信息只沿着一个方向进行。这也就是我们神经网络的一种重要特点和一个结构特色。
由于我们加入了两层隐含层,这样可有效地解决XOR问题。具体如何解决如下图所示。
当输入进入到激活函数后,可得到紫色这条线;同理,进入黄色激活函数后,
可以得到黄色这条线。因此,两条线的划分,可以有效解决XOR问题。
下面我们看看隐藏层的个数对神经网络的影响
其实,隐藏层的个数对神经网络是存在巨大的影响的。对神经网络的性能,可以通过增加层数来看一下它的一个分类效果,当我们按照隐藏层数为0时,如左图分界线为一条直线;当为3层时候,类似于有三条直线的样子;增长到20的时候,就为一条弯曲的曲线了。这样可以更好的将我们的正类和负类进行分散开。
可以得知,当层数增加的越多,模型的分辨能力则越强。
到这里对深度学习和神经网络应该有了初步了解了,下面继续学习如何去训练神经网络,能够得到一个比较优秀的神经网络。
2.训练法则
想要理解和充分的掌握神经网络当中的训练法则,需要学习什么是梯度下降?机器学习当中常用的损失函数到底是什么?
什么是梯度下降?
学过高数都知道,梯度下降的方向为函数增长最快的方向。损失函数就是目标输出和实际输出之间的误差。
我们再从二元的抛物线看,它是如何一步一步的去替我们更新参数的。当梯度为0时是最大的一个方向,然后一步一步的去往下找,每一步都更新w和b,最终找到一个最优的地方。
在深度学习中,除了我们使用到的均方误差函数,我们还引入了交叉熵误差函数,其实就是刻画了两个概率分布之间的距离。
均方误差在深度学习神经网络中出现的梯度饱和现象,比如在使用Sigmoid函数,做梯度下降时,它把导数产生饱和现象会使得梯度下降算法会很慢很慢,参数更新也很慢。这个时候我们就可以用交叉熵误差函数来替代均方误差函数。
梯度下降算法
梯度下降算法一共包含三种,如下:
全局梯度下降算法
随机梯度下降算法
小批量梯度下降算法
全局梯度下降算法(BGD)如下:
总的说来,上述的梯度下降算法实在太慢了,很不常用。收敛的太慢,但是找的比较仔细。为了解决这样的问题又开发出了随机梯度下降算法。
随机梯度下降算法(SGD
):
简单说来是一种在线学习的方法,随机这样来迭代更新梯度和参数。相比全局梯度下降算法来说,速度时提上来了,但是你会发现,依旧还是不能找到我们的一个全局最小值。很容易陷入局部最优。
综合全局和局部梯度下降法的优势,将二者优化则产生了一个小批量梯度下降算法。
小批量梯度下降算法
其核心也是在更新参数时,没有全局或随机更新参数,而是小批量的去更新w和b,其他步骤一致。综合之后,可以找到全局最优,但是速度没有随机梯度下降算法的快。这就是鱼与熊掌不可兼得啊!
因此,在工程项目中尽量使用小批量随机梯度来寻找最优。
反向传播算法
反向传播算法,首先还是计算出我们的output输出层值,也就是先正向传播,先算出预测值,计算出误差。然后,在计算每一层产生了多少个小的误差,导致出来一个总的误差。
比如从输入到输出层,中间是做流水线工作的,计算出每个单元的一个误差,然后在和预测进行比较。这样从后往前找,找到最近的隐藏层误差,然后比较,再更新权值。这里用到的损失函数也是均方误差。
具体每层的误差函数如上图所示。如何做w_c和w_b的更新,公式如下:
使用偏导,然后依次使用链式求导一层一层计算,得到最优参数。
对于神经网络的训练可以总结如上。这样经过正向传播后再反向更新参数,最终实现BP算法。
到此,大家对梯度下降和更新损失函数里面的参数有了一定的了解,下面讲解重要‼️的一点——激活函数。
激活函数
激活函数可以说是人工智能里面极其重要的一个部件。因为我们机器学习无法学习或者是理解复杂的非线性问题。因此,我们引入激活函数使得神经网络模型可以学习和理解这些复杂的非线性问题。简而言之,由于激活函数的存在,使神经网络可以解决极其复杂的数据分布问题。
从上面的公式计算出来的结果才是神经元的输出值。
Sigmoid函数
介绍一种简单的激活函数——Sigmoid。其实它就是指数函数的倒数形式,从公式看,可以保证分母不为0。取值范围是0~1.
一般来说,如果网络在5层以内,产生梯度退化成0的这一种现象,我们将这种现象称之为梯度消失问题。在我们使用激活函数时一定要避免这种问题。
tanh函数
tanh函数也是一种指数形式。取值范围从-1到1. 导数0~1. 同样也会产生梯度消失问题。
Softsign函数
Softsign函数,也是为了保证分母不为0。取值范围(-1,1)。可以从图看出减缓了梯度消失问题,但还是没有解决梯度消失。
以上三个都出现了梯度消失的问题,下面介绍一个Relu函数。
Relu函数
Relu就是一个线性单元,计算量比较小。相当于做了一个特征选择。Relu激活函数的导数时常数,它永远不会趋于0,没有出现饱和的问题。因此,可以很快的更新参数,从而减缓梯度消失的问题。
虽然不能解决梯度消失,但是可以很大程度上去避免这样一个问题。
我们再优化一下,那就是Softplus函数
Softplus函数
使用In()函数使得Relu的折点变得更加圆滑,计算量稍许增大,但是可以减缓梯度消失的问题。而且在回归问题上也是表现比较突出。
Softmax函数
最后还有这个Softmax函数,做的是一个比值百分比,在分类任务中比较常用。
到此关于激活函数的种类、优缺点进行了重点解析。
3.正则化
正则化湿极其中哟啊的减少泛化误差的技术。
参数惩罚
简单说来,参数惩罚就是在目标函数中增加一个惩罚项,alpha就是一个惩罚因子。最后面跟上的一项则是惩罚项。这样可以避免过拟合问题。
因为我们的目标函数是让误差逐渐约等于0,这样就证明预测值和真实值是相等的。由于我们想约束这个目标函数等于0,因此我们要约束新目标函数等于0.
由于惩罚因子特别大,则参数会特别小,这样就会约束我们的参数了。以防止过拟合现象。其中bias是不需要惩罚正则的。
L1正则
简单说就是在惩罚项中的w加上了绝对值,也就是1范数。
L2正则
第二种正则方法则是将惩罚项变成一个函数的平方形式。这样可以让参数左边约等于一个小的直接近于0的值。注意,但不能让我们的参数等于0.
对比L1和L2的区别
主要的区别也是在于:
L1正则属于拉普拉斯分布
L2正则属于高斯分布
L1可以将部分参数归为0,从而导致对一部分信息的删除,起到了特征选择的作用;
另一种正则化方法——【数据集合的扩充】
数据集合的扩充在我们机器学习当中也会经常会被用到,如果样本不是很多,则可以增加我们的样本来防止过拟合想象。但是深度学习需要很多很多的样本,不同领域的数据扩充还是不一样的。
Dropout
Dropout也是神经网络中比较常用的一种方法。通过随机Drop和Out参数,这样不断更新参数,可以避免过拟合的问题。
针对神经网络中的过拟合问题,Dropout相比范数约束和参数惩罚的效果要好很多。可以构造屏蔽参数,使得参数得到一个好的解。Dropout是一种更有效,计算简单的避免过拟合方法。
4.优化器
上面章节介绍了梯度下降算法以及改进的算法,我们将其封装为一个对象,这样就称为了所谓的——优化器。
上图给出了很多的优化器,目前用的最多的还是Adam。
动量优化器
动量优化器是基于反向传播算法,在目标函数最后加入了一个动量项,也就是给函数一个一定的初速度(惯性),使得训练的时候比较快,更快的找到一个最佳参数。这样可以加快收敛,缩减震荡。
关于动量优化器的优缺点:
Adagrad优化器
Adagrad主要是为了不同参数设置不同的学习率。下面给出Adagrad的优缺点:
该算法容易提前停止,还没找到最优点则会停止。
为了解决提前停止的现象,改进版本则为——RMS Prop
RMSProp
RMSprop优化器通过引入一种衰减系数来解决提前停止的现象。
这种优化器对RNN网络是非常友好的。
到此还有比这更好的优化器嘛?当然有了,那就是Adam优化器
Adam优化器
Adam优化器通过引入自适应,结合其他优化器的优点。既保留了梯度、又保留了动量。但是两个变量m_t和v_t有两个弊端:
为了解决在开始迭代的时候,出现m_t和v_t接近0,使用上面的计算方式来更新参数。
优化器性能比较
我们可以看出Adamgrad、Adam delta和RMSprop它能够很好地快速寻找到一个最优解,其他的优化器则会很慢或者会走很多的弯路。
因此,在工程实验的时候我们尽量的使用Adaptive自适应的优化器,可以更好的收敛和更快找到最优解。
5.神经网络的类型
卷机神经网络
卷机神经网络也可以称为一种前馈神经网络。在图像处理比较出色。
CNN网络的核心思想
局部感知:一般认为,人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行
感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。
参数共享:对输入的图片,用一个或者多个卷积核扫描照片,卷积核自带的参数就是权重,在同一个卷积核扫描的图层当中,每个卷积核使用同样的参数进行加权计算。权值共享意味着每一个卷积核在遍历整个图像的时候,卷积核的参数是固定不变的。
那么如何做卷积计算呢?
有一个3*3的卷积核,在卷积核如何做运算呢?
第一步是先匹配原始图片的大小,通过相同位置相乘算出来一个值,然后再累积相加,然后再依次向右移动计算。然后再从上往下计算,这期间涉及到一个步长问题,可以自己设定。
卷积层
关于卷积层的工作流程。
池化层
池化有最大池化和平均池化。可以看出一个特征选择,降维的一个过程。
全连接层
在Softmax的时候也讲解过,相当于在做分类。
循环神经网络
循环神经网络( Recurrent neural networks ,简称 RNN )是一种通过隐藏层节点周期性的连接,来捕捉序列化数据中动态信息的神经网络,可以对序列化的数据进行分类。
和其他前向神经网络不同, RNN 可以保存一种上下文的状态,甚至能够在任意长的上下文窗口中存储、学习、表达相关信息,而且不再局限于传统神经网络在空间上的边界,可以在时间序列上有延拓,直观上讲,就是本时间的隐藏层和下一时刻的隐藏层之间的节点间有边。
RNN 广泛应用在和序列有关的场景,如如一帧帧图像组成的视频,一个个片段组成的音频,和一个个词汇组成的句子。
RNN相比CNN其实就是加入了一个记忆单元,将之前的信息乘以一个权重加上当前的信息,然后再用Sigmoid计算出来。
将记忆单元展开之后,是如上所示的计算流程。
RNN的类型
如下,一对一,一对多,多对一,多对多,多直对多。
时序反向传播( BPTT ):
传统反向传播( BP )在时间序列上的拓展
t 时刻的梯度是前 t -1时刻所有梯度的累积
时间越长,梯度消失越明显
BPTT 的三个步骤:
前向计算每个神经元的输出值
反向计算每个神经元的误差值
计算每个权重的梯度
当遇到梯度消失的问题时,需要更改我们的模型,也就是LSTM。
通过LSTM可以很好的去解决循环神经网络的梯度消失问题。由于LSTM的计算量比较大,从而需要进一步的优化。
改进的GRU也是一种LSTM的变种,也就是将我们之前的两个门:忘记门和输入门。将三个sigmoid函数变成了两个,这样比LSTM还要简单高效。
生成对抗网络(GAN)
生成对抗网络( Generative Adversarial Nets )是一种框架,通过对抗过程,通过训练生成器 G 和判别器 D 。两者进行的博弈,最终使判别器无法区分样本是来自生成器伪造的样本还是真实样本。训练 GAN 框架采用成熟的 BP 算法。
1)生成器 G :输入“噪声” z ( z 服从一个人为选取的先验概率分布,如均匀分布、高斯分布等)。
采用多层感知机的网络结构,用最大似然估计( MLP )的参数来表示可导映射 G ( z ),将输入空间映射到样本空间。
2)判别器 D :输入为真实样本×和伪造样本 G ( z ),并分别带有标签 real 和 fake 。判别器网络可以用
带有参数多层感知机。输出为判别样本是否为真实样本数据的概率 D ( G ( z ))。
生成对抗网络可应用于图像生成、语义分割、文字生成、数据增强、聊天机器人和信息检索,排序等场景。
通过两种CNN或RNN来进行对抗,GAN也就是一种思想一致框架。
通过将输入导入到生成器,生产虚拟的结果,然后和真实的值共同导入到判别器里面,进行判断,得出结果。下面给出生成模型和判别模型:
那么GAN的训练法则又是什么呢?
如果想让模型变得好,得有一个好的判别器,也就是好的裁判,所以需要用模型最大的识别出网络结果,这样来训练模型。
6.常见的问题
数据不平衡问题
问题描述:在分类任务的数据集中,各个类别的样本数目不均衡,出现巨大的差异,预
测的类别里有一个或者多个类别的样本量非常少。
比如:
图像识别实验中,在4251个训练图片中,有超过2000个类别中只有一张图片。还有一些类中有2-5个图片。
导致问题:
口对于不平衡类别,我们不能得到实时的最优结果,因为模型/算法从来没有充分地考察隐含类。ロ它对验证和测试样本的获取造成了一个问题,因为在一些类观测极少的情况下,很难在类中有代表性。
梯度消失问题
梯度消失:当网络层数越多时,进行反向传播求导值越小,导致梯度消失
梯度爆炸:当网络层数越多时,进行反向传播求导值越大,导致梯度爆炸
过拟合问题
问题描述:模型在训练集表现优异,但在测试集上表现较差。
根本原因:特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训
练数据,而没有考虑到泛化能力。
解决方法:(1)数据增强;(2)正则化,降低参数值;(3)限制训练时间;(4)Dropout 。
学习推荐
华为Learning网站
https://e.huawei.com/cn/talent/#home
华为Support案例库
https://support.huawei.com/enterprise/servicecenter?lang=zh
本文参与华为云社区【内容共创】活动第16期。
https://bbs.huaweicloud.com/blogs/352652
任务19:深度学习概览
机器学习 深度学习 神经网络
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。