人工智能,深度学习和机器学习,不论你现在是否能够理解这些概念,你都应该学习。否则三年内,你就会像灭绝的恐龙一样被社会淘汰。
——马克·库班(NBA小牛队老板,亿万富翁)
马克·库班的这番话可能听起来挺吓人的,但道理是没毛病的!我们正经历一场大革命,这场革命就是由大数据和强大电脑计算能力发起的。
让我们花几分钟回想一下20世纪初的景象。那个时候很多人都不懂什么是电,在过去几十年,甚至几百年的时间里,人们一直沿用一种方式去做某件事情,但是突然间,好像身边的一切都变了。
以前需要很多人才能做成的事情,现在只需要一个人应用电力就能做成。而我们现在就正在经历相似的变革过程,今天这场变革的主角就是机器学习和深度学习。
如果你现在还不懂深度学习的巨大力量,那你真的要抓紧时间开始学啦!这篇文章就为大家介绍了深度学习领域常用的一些术语和概念。现在就从神经网络开始讲起。
神经网络基础概念:(1)神经元——正如神经元是大脑的基本单位一样,在神经网络结构中,神经元也是一个小单位。大家不妨想象一下当我们接触到新的信息时,大脑是如何运作的。
首先,我们会在脑中处理这个信息,然后产生输出信息。在神经网络中也是如此,神经元接收到一个输入信息,然后对它进行加工处理,然后产生输出信息,传输到其他神经元中进行进一步信息处理。
(2)权重——当输入信息到达神经元时,它就会乘上一个权重。举例来说,如果一个神经元包含两个输入信息,那么每个输入信息都被赋予它的关联权重。我们随机初始化权重,并在模型训练过程中更新这些权重。
接受训练后的神经网络会赋予它认为重要的输入信息更高的权重值,而那些不重要的输入信息权重值则会相对较小。权重值为零就意味着这个特征是无关紧要的。
我们不妨假设输入信息为a,其关联权重为,通过节点后,输入信息变为
:
(3)偏置—— 除了权重之外,输入还有另一个线性分量,被称为偏置。输入信息乘上权重后再加上偏置,用来改变权重乘输入的范围。加上偏置之后,结果就变为
,这就是输入信息变换的最终线性分量。
(4)激活函数——线性分量应用可以到输入信息,非线性函数也可以应用到输入信息。这种输入信息过程是通过激活函数来实现的。
激活函数将输入信号翻译成输出信号。激活函数产生的输出信息为,其中f(x)就是激活函数。
在下面的图表中,我们可以看到,输入信息数量为n,表示为到,相应的权重为到。将偏置设为。权重乘以输入信息,再加偏置,我们设所得的值为u:
u=∑w*x+b
将u带入激活函数中,最后我们就可以得到从神经元输出的
常用激活函数最常用的激活函数有Sigmoid、ReLU 和softmax。
- Sigmoid——Sigmoid是最常用的激活函数之一。 它的定义为:
Sigmoid函数会生成0到1之间的更平滑的取值范围。我们可能需要观察输出值的变化,同时输入值也会略有变化。而平滑的曲线更方便我们观察,因此它优于阶梯函数(step functions)。
- ReLU(线性修正单位)——不同于sigmoid函数,现在的网络更倾向于使用隐层ReLu激活函数。该函数的定义是:
当X> 0时,函数的输出为X,X <= 0时为0。该函数如下所示:
使用ReLU的好处主要是它对于大于0的所有输入值都有对应的不变导数值。而常数导数值可以加快对网络的训练。
- Softmax——Softmax激活函数常用于输出层的分类问题。 它与sigmoid函数类似,唯一的区别是在Softmax激活函数中,输出被归一化,总和变为1。
如果我们遇到的是二进制输出问题,就可以使用Sigmoid函数,而如果我们遇到的是多类型分类问题,使用softmax函数可以轻松地为每个类型分配值,并且可以很容易地将这个值转化为概率。
这样看可能更容易理解一些——假设你正在尝试识别一个看起来像8实际为6的数。该函数将为每个数字赋值,如下所示。我们可以很容易地看出,最高概率被分配给了6,下一个最高概率则分配给8,依此类推…
(5)神经网络——神经网络是深度学习的主干之一。神经网络的目标是找到未知函数的一个近似值。它由相互联系的神经元组成。
这些神经元具有权重,并且会根据出错情况,在网络训练期间更新偏置值。激活函数将非线性变换置于线性组合,之后生成输出。被激活的神经元组合再产生输出。
对神经网络的定义中,以Liping Yang的最为贴切:
“神经网络由许多相互关联的概念化的人造神经元组成,这些人造神经元之间可以互相传递数据,并且具有根据网络‘经验’调整的相关权重。
神经元具有激活阈值,如果结合相关权重组合并激活传递给他们的数据,神经元的激活阈值就会被解除,激活的神经元的组合就会开始‘学习’。”
6) 输入层/输出层/隐藏层——顾名思义,输入层是接收输入信号的一层,也是该网络的第一层;输出层则是传递输出信号的一层,也是该网络的最后一层。
处理层则是该网络中的“隐含层”。这些“隐含层”将对输入信号进行特殊处理,并将生成的输出信号传递到下一层。输入层和输出层均是可见的,而其中间层则是隐藏起来的。
7) MLP (多层神经网络) –——MLP(多层神经网络) – 单一神经元无法执行高度复杂的任务。因此,需要大量神经元聚集在一起才能生成我们所需要的输出信号。
最简单的网络由一个输入层、一个输出层、一个隐含层组成,每一层上都有多个神经元,并且每一层上的神经元都和下一层上的神经元连接在了一起,这样的网络也被称为全互连网络(fully connected networks)。
8) 正向传播(Forward Propagation) –——正向传播指的是输入信号通过隐藏层传递到输出层的传递过程。
在正向传播中,信号仅沿单一方向向前正向传播,输入层将输入信号提供给隐藏层,隐藏层生成输出信号,这一过程中没有任何反向移动。
9) 成本函数(Cost Function) –——当我们建立一个网络后,网络将尽可能地使输出值无限接近于实际值。我们用成本函数(或损失函数)来衡量该网络完成这一过程的准确性。成本函数(或损失函数)将在该网络出错时,予以警告。
运行网络时,我们的目标是:尽可能地提高我们的预测精度、减少误差,由此最小化成本函数。最优化的输出即当成本函数(或损失函数)为最小值时的输出。
若将成本函数定义为均方误差,则可写成:
m在这里是训练输入值(training inputs),a 是预计值,y是特定事例中的实际值。
学习过程围绕着如何最小化成本。
10) 梯度下降(Gradient Descent) –——梯度下降是一种优化算法,以最小化成本。想象一下,当你下山时,你必须一小步一小步往下走,而不是纵身一跃跳到山脚。
因此,我们要做的是:比如,我们从X点开始下降,我们下降一点点,下降ΔH,到现在的位置,也就是X-ΔH,重复这一过程,直到我们到达“山脚”。“山脚”就是最低成本点。
从数学的角度来说,要找到函数的局部极小值,须采取与函数梯度负相关的“步子”,即:梯度下降法是用负梯度方向为搜索方向的,梯度下降法越接近目标值,步长越小,前进越慢。
11) 学习速率 (Learning Rate) –——学习率指每次迭代中对成本函数的最小化次数。简单来说,我们把下降到成本函数最小值的速率称为学习率。选择学习率时,我们必须非常小心,学习率既不应过大——会错过最优解,也不应过小——使网络收敛将需要很多很多步、甚至永不可能。
12) 反向传播(Back propagation) –——在定义一个神经网络的过程中, 每个节点会被随机地分配权重和偏置。
一次迭代后,我们可以根据产生的结果计算出整个网络的偏差,然后用偏差结合成本函数的梯度,对权重因子进行相应的调整,使得下次迭代的过程中偏差变小。
这样一个结合成本函数的梯度来调整权重因子的过程就叫做反向传播。在反向传播中,信号的传递方向是朝后的,误差连同成本函数的梯度从输出层沿着隐藏层传播,同时伴随着对权重因子的调整。
13) 分批 (Batches) ——当我们训练一个神经网路时,我们不应一次性发送全部输入信号,而应把输入信号随机分成几个大小相同的数据块发送。
与将全部数据一次性送入网络相比,在训练时将数据分批发送,建立的模型会更具有一般性。
14) 周期 (Epochs) ——一个周期表示对所有的数据批次都进行了一次迭代,包括一次正向传播和一次反向传播,所以一个周期就意味着对所有的输入数据分别进行一次正向传播和反向传播。
训练网络周期的次数是可以选择的,往往周期数越高,模型的准确性就越高,但是,耗时往往就越长。同样你还需要考虑如果周期/纪元的次数过高,那么可能会出现过拟合的情况。
15)Dropout方法——Dropout是一个可以阻止网络过拟合的规则化方法。就像它的名字那样,在训练过程中隐藏的某些特定神经元会被忽略掉(drop)。
这意味着网络的训练是在几个不同的结构上完成的。这种dropout的方式就像是一场合奏,多个不同结构网络的输出组合产生最终的输出结果。
来源:Hinton论文《Improving neural networks by preventing co-adaptation of featuredetectors》
地址:https://arxiv.org/pdf/1207.0580.pdf
16) 分批标准化 (Batch Normalization) –——分批标准化就像是人们在河流中用以监测水位的监察站一样。
这是为了保证下一层网络得到的数据拥有合适的分布。在训练神经网络的过程中,每一次梯度下降后权重因子都会得到改变,从而会改变相应的数据结构。
但是下一层网络希望能够得到与之前分布相似的数据,因此在每一次数据传递前都需要对数据进行一次正则化处理。
卷积神经网络17) 过滤器/滤波器 (Filters) ——CNN中的滤波器,具体是指将一个权重矩阵乘以输入图像的一个部分,产生相应的卷积输出。
比方说,对于一个28×28的图片而言,将一个3×3的滤波器与图片中3×3的矩阵依次相乘,从而得到相应的卷积输出。
滤波器的尺寸通常比原始图片要小,与权重相似,在最小化成本的反向传播中,滤波器也会被更新。就像下面这张图片一样,通过一个过滤器,依次乘以图片中每个3×3的分块,从而产生卷积的结果。
18)卷积神经网络CNN (Convolutional neural network)——卷积神经网络通常用来处理图像数据,假设输入数据的形状。
为28×28×3(28pixels×28pixels×RGBValue),那么对于传统的神经网络来说就会有2352(28×28×3)个变量。随着图像尺寸的增加,那么变量的数量就会急剧增加。
通过对图片进行卷积,可以减少变量的数目(已在过滤器的概念中提及)。随着过滤器沿着图像上宽和高的两个方向滑动,就会产生一个相应的2维激活映射,最后再沿纵向将所有的激活映射堆叠在一起,就产生了最后的输出。
可以参照下面这个示意图。
19) 池化 (Pooling) –为进一步减少变量的数目同时防止过拟合,一种常见的做法是在卷积层中引入池化层(pooling layer)。
最常用的池化层的操作是将原始图片中每个4×4分块取最大值形成一个新的矩阵,这叫做最大值池化(max pooling)。
也有人尝试诸如平均池化(average pooling)之类的方式,但在实际情况中最大化池化拥有更好的效果。
20) 补白 (Padding)补白(Padding)通常是指给图像的边缘增加额外的空白,从而使得卷积后输出的图像跟输入图像在尺寸上一致,这也被称作相同补白(Same Padding)。
如应用过滤器,在相同补白的情况下,卷积后的图像大小等于实际图像的大小。
有效补白(Valid Padding)指的是保持图片上每个真实的像素点,不增加空白,因此在经历卷积后数据的尺寸会不断变小。
21) 数据增强 (Data Augmentation) –——数据增强指的是从已有数据中创造出新的数据,通过增加训练量以期望能够提高预测的准确率。
比如,在数字识别中,我们遇到的数字9可能是倾斜或旋转的,因此如果将训练的图片进行适度的旋转,增大训练量,那么模型的准确性就可能会得到提高。
通过“旋转”“照亮”的操作,训练数据的品质得到了提升,这种过程被称作数据增强。
递归神经网络22) 递归神经元 (Recurrent NeuralNetwork)—— 对于递归神经元来说,经由它自己处理过的数据会变成自身下一次的输入,这个过程总共会进行t次。
如下图所示,将递归神经元展开就相当于t个不同的神经元串联起来,这种神经元的长处是能够产生一个更全面的输出结果。
23) 递归神经网络(RNN-Recurrent NeuralNetwork) ——
递归神经网络通常被用于处理序列化的数据,即前一项的输出是用来预测下一项的输入。
递归神经网络通常被用于处理序列化的数据,即前一项的输出是用来预测下一项的输入。递归神经网络中存在环的结构,这些神经元上的环状结构使得它们能够存储之前的数据一段时间,从而使得能够预测输出。
与递归神经元相似,在RNN中隐含层的输出会作为下一次的输入,如此往复经历t次,再将输出的结果传递到下一层网络中。这样,最终输出的结果会更全面,而且之前训练的信息被保持的时间会更久。
隐藏层将反向传递错误以更新权重。这被称为backpropagation through time (BPTT).
24) 梯度消失问题 –——当激活函数的梯度非常小时,会出现梯度消失问题。在反向传播过程中,权重因子会被多次乘以这些小的梯度。
因此会越变越小,随着递归的深入趋于“消失”, 使得神经网络失去了长程可靠性。这在递归神经网络中是一个较普遍的问题,对于递归神经网络而言,长程可靠性尤为重要。
这一问题可通过采用ReLu等没有小梯度的激活函数来有效避免。
25) 梯度爆炸问题 –——梯度爆炸问题与梯度消失问题正好相反,梯度爆炸问题中,激活函数的梯度过大。
在反向传播过程中,部分节点的大梯度使得他们的权重变得非常大,从而削弱了其他节点对于结果的影响,这个问题可以通过截断(即设置一个梯度允许的最大值)的方式来有效避免。
写在最后希望你们喜欢这篇文章。
本文对深度学习的基本概念做出了高度的概括,希望各位在阅读这篇文章后,已对这些概念有了初步的了解。 我已尽可能地用最简单的语言来解释这些术语,如有任何疑问或纠正,请随意发表评论。
本文为专栏文章,来自:融智未来,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/44887.html 。