你有没有想过谷歌如何在几毫秒内将整个段落从一种语言翻译成另一种语言?自动驾驶汽车怎么实现?


 所有这些创新都是深度学习和人工神经网络的产物。



什么是深度学习?



深度学习是机器学习的一个子集,是人工智能的一个子集。深度学习算法试图通过不断分析具有给定逻辑结构的数据来得出与人类相似的结论。为了实现这一点,深度学习使用称为神经网络的多层算法结构。 人工智能是一个通用术语,指的是使计算机能够模仿人类行为的技术。机器学习代表了一组基于数据训练的算法,使这一切成为可能。深度学习只是一种机器学习,受人脑结构的启发。 

 


深度学习算法试图通过不断分析具有给定逻辑结构的数据来得出与人类相似的结论。为了实现这一点,深度学习使用称为神经网络的多层算法结构。



深度学习计算层和块 深度学习算法_cnn


典型的神经网络

神经网络的设计基于人脑的结构。正如我们使用大脑来识别模式和分类不同类型的信息一样,我们可以教神经网络对数据执行相同的任务。

神经网络的各个层也可以被认为是一种从粗到细的过滤器,它增加了检测和输出正确结果的可能性。人脑的工作方式类似。每当我们收到新信息时,大脑都会尝试将其与已知对象进行比较。深度神经网络也使用相同的概念。

神经网络使我们能够执行许多任务,例如 聚类、分类 或回归。 

使用神经网络,我们可以根据数据中样本之间的相似性对未标记的数据进行分组或排序。或者,在分类的情况下,我们可以在标记的数据集上训练网络,以便将数据集中的样本分类为不同的类别。

一般来说,神经网络可以执行与经典机器学习算法 相同的任务(但经典算法不能执行与神经网络相同的任务)。换句话说,人工神经网络具有独特的能力,使深度学习模型能够解决机器学习模型永远无法解决的任务。

近年来,人工智能的所有最新进展都归功于深度学习。如果没有深度学习,我们就不会有自动驾驶汽车、聊天机器人或像 Alexa 和 Siri 这样的个人助理。谷歌翻译将继续像 10 年前谷歌转向神经网络之前一样原始,Netflix 也不知道该推荐哪些电影。神经网络是所有这些技术的背后。

在人工神经网络和深度学习的推动下,一场新的工业革命正在发生。归根结底,深度学习是我们所拥有的真正机器智能最好、最明显的方法。

 

为什么深度学习受欢迎?

深度学习模型比机器学习模型更强大,但为什么呢? 

 

没有特征提取

深度学习相对于机器学习的第一个优势是所谓的特征提取的冗余。

早在我们开始使用深度学习之前,我们就依赖于传统的机器学习方法,包括决策树、SVM、朴素贝叶斯分类器和逻辑回归。 这些算法也称为平面算法。这里的“平面”是指这些算法通常不能直接应用于原始数据(例如 .csv、图像、文本等)。我们需要一个称为特征提取的预处理步骤。

特征提取的结果是这些经典机器学习算法可以用来执行任务的给定原始数据的表示。例如,我们现在可以将数据分为几个类别或类别。特征提取通常非常复杂,需要对问题领域有详细的了解。该预处理层必须经过多次迭代进行调整、测试和改进以获得最佳结果。

深度学习的人工神经网络不需要特征提取步骤。这些层能够直接和自己学习原始数据的隐式表示。 

它是这样工作的:在人工神经网络的几层上产生越来越抽象和压缩的原始数据表示。然后,我们使用输入数据的这种压缩表示来产生结果。例如,结果可以是将输入数据分类为不同的类别。


深度学习计算层和块 深度学习算法_深度学习计算层和块_02

只有 ML 算法才需要特征提取

换句话说,我们可以说特征提取步骤已经是人工神经网络中发生的过程的一部分。

在训练过程中,这个神经网络优化这一步以获得输入数据的最佳可能抽象表示。这意味着深度学习模型几乎不需要手动操作来执行和优化特征提取过程。

让我们看一个具体的例子。如果要使用机器学习模型来确定特定图像是否显示汽车,我们人类首先需要识别汽车的独特特征(形状、大小、窗户、车轮等),然后提取特征并将其作为输入数据提供给算法。这样,算法将对图像进行分类。也就是说,在机器学习中,程序员必须直接干预模型的动作才能得出结论。

在深度学习模型的情况下,完全不需要特征提取步骤。该模型将识别汽车的这些独特特征,并在没有人工干预的情况下做出正确的预测。

事实上,避免提取数据特征适用于您将使用神经网络完成的所有其他任务。只需将原始数据提供给神经网络,模型就会完成剩下的工作。 

 

大数据时代

深度学习的第二个巨大优势,也是理解它为何如此受欢迎的关键部分,是它由大量数据提供支持。大数据时代将为深度学习的新创新提供巨大机遇。但不要相信我的话,中国主要搜索引擎百度的首席科学家、Coursera 的联合创始人、谷歌大脑计划的领导者之一吴恩达是这样说的

我认为人工智能类似于建造一艘火箭飞船。你需要一个巨大的引擎和大量的燃料。如果你有一个大引擎和少量燃料,你就无法进入轨道。如果你有一个小引擎和一吨燃料,你甚至无法起飞。要制造火箭,你需要一个巨大的引擎和大量的燃料。

与深度学习的类比是火箭发动机是深度学习模型,燃料是我们可以提供给这些算法的大量数据。


深度学习计算层和块 深度学习算法_人工智能_03


深度学习算法随着数据量的增加而改进。

深度学习模型往往会随着训练数据量的增加而提高其准确性,而传统的机器学习模型(如 SVM 和朴素贝叶斯分类器)在达到饱和点后就会停止改进。

 

 神经网络如何工作?

生物神经网络

人工神经网络的灵感来自我们大脑中的生物神经元。事实上,人工神经网络模拟了生物神经网络的一些基本功能,只不过是以一种非常简化的方式。让我们首先看一下生物神经网络,以得出与人工神经网络的相似之处。 

简而言之,生物神经网络由众多神经元组成。


深度学习计算层和块 深度学习算法_深度学习计算层和块_04

生物神经网络模型

典型的神经元由细胞体、树突和轴突组成。树突是从细胞体中出现的薄结构。轴突是从这个细胞体中出现的细胞延伸。大多数神经元通过树突接收信号并沿轴突发出信号。

在大多数突触中,信号从一个神经元的轴突传递到另一个神经元的树突。由于维持其膜中的电压梯度,所有神经元都是电兴奋的。如果电压在短时间内发生足够大的变化,神经元就会产生称为动作电位的电化学脉冲。这种电位沿着轴突快速传播并激活突触连接。

 

人工神经网络

现在我们对生物神经网络的运作方式有了基本的了解,让我们来看看人工神经网络的架构。

神经网络通常由一组连接的单元或节点组成。我们称这些节点为神经元。这些人工神经元松散地模拟了我们大脑的生物神经元。


深度学习计算层和块 深度学习算法_深度学习_05


人工前馈神经网络

神经元只是数值的图形表示(例如1.25.042.00.25等)。两个人工神经元之间的任何连接都可以被认为是生物大脑中的轴突。神经元之间的连接是通过所谓的权重来实现的,权重也不过是数值。

当人工神经网络学习时,神经元之间的权重会发生变化,连接的强度也会发生变化。那是什么意思?给定训练数据和特定任务(例如数字分类),我们正在寻找允许神经网络执行分类的特定权重。 

对于每个任务和每个数据集,权重集都是不同的。我们无法提前预测这些权重的值,但神经网络必须学习它们。学习的过程就是我们所说的训练。


什么是深度学习?

典型的神经网络架构

典型的神经网络架构由几层组成;我们称第一个为输入层。

输入层接收输入x,(即神经网络从中学习的数据)。在我们之前对手写数字进行分类的示例中,这些输入x将表示这些数字的图像(x基本上是一个完整的向量,其中每个条目都是一个像素)。

输入层的神经元数量与向量中的条目数量相同x。换句话说,每个输入神经元代表向量中的一个元素。


深度学习计算层和块 深度学习算法_深度学习计算层和块_06


前馈神经网络的结构

最后一层称为输出层,输出y代表神经网络结果的向量。该向量中的条目表示输出层中神经元的值。在我们的分类中,最后一层中的每个神经元代表一个不同的类别。

在这种情况下,输出神经元的值给出了特征给出的手写数字x属于可能类别之一(数字之一 0-9)的概率。可以想象,输出神经元的数量必须与类的数量相同。

为了获得预测向量y,网络必须执行某些数学运算,它在输入和输出层之间的层中执行。我们称这些为隐藏层。现在让我们讨论层之间的连接是什么样的。

更多内置教程初学者 NLP:完整指南

神经网络中的层连接

请考虑一个仅由两层组成的较小的神经网络。输入层有两个输入神经元,而输出层由三个神经元组成。


深度学习计算层和块 深度学习算法_cnn_07


层连接

如前所述,两个神经元之间的每个连接都由一个数值表示,我们称之为权重。

正如您在图片中看到的,两个神经元之间的每个连接都由不同的权重表示w。这些权重中的每一个w都有索引。索引的第一个值代表连接所源自的层中的神经元数量,第二个值代表连接所指向的层中的神经元数量。

两个神经网络层之间的所有权重都可以用一个称为权重矩阵的矩阵来表示。


深度学习计算层和块 深度学习算法_cnn_08


权重矩阵

权重矩阵的条目数与神经元之间的连接数相同。权重矩阵的维度是由该权重矩阵连接的两层的大小决定的。

行数对应于连接起源层中神经元的数量,列数对应于连接所指向的层中神经元的数量。

在这个特定示例中,权重矩阵的行数对应于输入层的大小,即 2,列数对应于输出层的大小,即 3。

学习神经网络的过程

现在我们更好地了解了神经网络架构,我们可以更好地研究学习过程。让我们一步一步来。你已经知道第一步了。对于给定的输入特征向量x,神经网络计算一个预测向量,我们称之为h


深度学习计算层和块 深度学习算法_深度学习计算层和块_09


前向传播

我们也将此称为向前传播。通过输入向量x和连接两个神经元层的权重矩阵W,我们计算向量x和矩阵之间的点积W

这个点积的结果是另一个向量,我们称之为z


深度学习计算层和块 深度学习算法_cnn_10


前向传播方程

h我们通过对向量应用所谓的激活函数来获得最终的预测向量z。在这种情况下,激活函数由字母 表示sigma。 

 激活函数只是一个非线性函数,它执行从z到的非线性映射h。 

我们在深度学习中使用了三个激活函数:tanhsigmoidReLu

至此,您可能会认识到神经网络中神经元背后的含义:简单地表示一个数值。 让我们仔细看看vector z

如您所见, 的每个元素z都由输入向量 组成x。至此,权重的作用就完美地展开了。层中神经元的值由前一层神经元值的线性组合组成,这些值由一些数值加权。

这些数值是告诉我们这些神经元相互连接的强度的权重。

在训练期间,这些权重会调整;一些神经元变得更连接,而一些神经元变得更少连接。与生物神经网络一样,学习意味着改变权重。因此, 和最终输出向量的值z随着hy重而变化。一些权重使神经网络的预测更接近实际的地面实况向量y_hat;其他权重会增加与地面实况向量的距离。

现在我们知道两个神经网络层之间的数学计算是什么样子的,我们可以将我们的知识扩展到由五层组成的更深层次的架构。


深度学习计算层和块 深度学习算法_深度学习_11


和之前一样,我们计算输入x和第一个权重矩阵之间的点积W1并对结果向量应用一个激活函数来获得第一个隐藏向量h1。我们现在考虑h1即将到来的第三层的输入。我们重复之前的整个过程,直到获得最终输出y


深度学习计算层和块 深度学习算法_cnn_12


前向传播方程

损失函数

在我们得到神经网络的预测后,我们必须将这个预测向量与实际的 ground truth 标签进行比较。我们称地面实况标签向量y_hat

虽然向量y包含神经网络在前向传播期间计算的预测(实际上可能与实际值有很大不同),但向量y_hat包含实际值。

在数学上,我们可以通过定义一个损失函数y来衡量和之间的差异,其值取决于这个差异。y_hat

一般损失函数的一个例子是二次损失:


深度学习计算层和块 深度学习算法_cnn_13


二次损失

这个损失函数的值取决于 和 之间的y_hat差异y。较大的差异意味着较高的损失值,较小的差异意味着较小的损失值。

随着预测和标签之间的差异减小,最小化损失函数直接导致神经网络的预测更准确。

无论手头任务的确切特征如何,最小化损失函数都会自动使神经网络模型做出更好的预测。您只需为任务选择正确的损失函数。 

幸运的是,只有两个损失函数是您应该知道的,可以解决您在实践中遇到的几乎所有问题:交叉熵损失和均方误差 (MSE) 损失。

交叉熵损失


深度学习计算层和块 深度学习算法_深度学习计算层和块_14


交叉熵损失函数

均方误差损失


深度学习计算层和块 深度学习算法_机器学习_15


均方误差损失函数

由于损失取决于权重,因此我们必须找到一组权重,使其损失函数的值尽可能小。最小化损失函数的方法是通过一种称为梯度下降的方法在数学上实现的。

更多关于损失函数认为您在深度学习中不需要损失函数?再想想。

梯度下降

梯度下降期间,我们使用损失函数的梯度(换句话说,导数)来改进神经网络的权重。

为了理解梯度下降过程的基本概念,让我们考虑一个仅由一个输入和一个输出神经元组成的神经网络的基本示例,这些神经元通过权重值连接w


深度学习计算层和块 深度学习算法_深度学习计算层和块_16


简单的神经网络

该神经网络接收输入x并输出预测y。假设这个神经网络的初始权重值为 ,5输入x2。因此,该网络的预测y值为10,而标签y_hat的值为6


深度学习计算层和块 深度学习算法_cnn_17


参数和预测

这意味着预测是不准确的,我们必须使用梯度下降法找到一个新的权重值,使神经网络做出正确的预测。第一步,我们必须为任务选择一个损失函数。 

让我们使用我上面定义的二次损失并绘制这个函数,它基本上只是一个二次函数:


深度学习计算层和块 深度学习算法_cnn_18


二次损失函数

y 轴是损失值,它取决于标签和预测之间的差异,因此也取决于网络参数——在这种情况下,是一个权重w。x 轴表示该权重的值。 

如您所见,有一定的权重w,损失函数达到全局最小值。该值是使神经网络做出正确预测的最佳权重参数(即6)。在这种情况下,最佳权重的值为3


深度学习计算层和块 深度学习算法_cnn_19


初始重量值

另一方面,我们的初始权重是5,这导致了相当高的损失。现在的目标是重复更新权重参数,直到我们达到该特定权重的最佳值。这时候我们就需要用到损失函数的梯度了。 

幸运的是,在这种情况下,损失函数是一个单一变量的函数,即权重w


深度学习计算层和块 深度学习算法_深度学习_20


损失函数

下一步,我们计算损失函数关于这个参数的导数:


深度学习计算层和块 深度学习算法_cnn_21


损失函数的梯度

最后,我们得到8,它给出了 x 轴上对应点的斜率或损失函数的正切值,即我们的初始权重所在的点。

该切线指向损失函数的最高增长率和 x 轴上的相应权重参数。

这意味着我们刚刚使用了损失函数的梯度来找出哪些权重参数会导致更高的损失值。我们真正想知道的恰恰相反。如果我们将梯度乘以,我们就可以得到我们想要的,这样就可以得到梯度-1的相反方向。 

这就是我们如何获得损失函数最大下降率的方向以及导致这种下降的 x 轴上的相应参数:


深度学习计算层和块 深度学习算法_机器学习_22


最后,我们执行一个梯度下降步骤来尝试改进我们的权重。根据负梯度,我们使用这个负梯度在损失函数值减小的权重方向上更新您的当前权重:


深度学习计算层和块 深度学习算法_机器学习_23


梯度下降步骤


深度学习计算层和块 深度学习算法_深度学习计算层和块_24


梯度下降步骤

这个等式中的因子epsilon是一个称为学习率的超参数。学习率决定了您想要更新参数的速度或速度。 

请记住,学习率是我们必须乘以负梯度的因素,并且学习率通常非常小。在我们的例子中,学习率为0.1

正如你所看到的,我们w在梯度下降之后的权重现在4.2比梯度下降之前更接近最优权重。


深度学习计算层和块 深度学习算法_深度学习_25


梯度下降后的新权重

新权重值的损失函数值也更小,这意味着神经网络现在能够做出更好的预测。您可以在脑海中进行计算,并看到新的预测实际上比以前更接近标签。

每次更新权重时,我们都会将负梯度向下移动到最佳权重。

在每个梯度下降步骤或权重更新之后,网络的当前权重越来越接近最优权重,直到我们最终达到它们。届时,神经网络将能够做出我们想要做出的预测。