上手深度学习以前,咱们先聊聊“数学”

摘要:深度神经网络是创建在微积分和一些统计学的基础之上的。

深度神经网络(Deep neural network,DNN)本质上是由具备多个链接的感知器造成的,其中一个感知器是单个神经元。咱们能够将人工神经网络(Artificial neural network,ANN)看做一个包含一组沿着加权路径馈送的输入系统。而后对这些输入进行处理,并产生一个输出来执行某些任务。随着时间的推移,人工神经网络将会“学习”,并发展出不一样的路径。各类路径能够具备不一样的权重,而且被认为更重要(或产生更理想结果)的路径在模型内被分配的权重比那些产生较少理想结果的路径更高。网络

在深度神经网络中,若是全部的输入都密集地链接到全部的输出,那么这些层就称为 密集层(Dense layers)。此外,深度神经网络能够包含多个 隐藏层(Hidden layer)。隐藏层基本上是神经网络输入和输出之间的点,激活函数在这里对输入的信息进行转换。它之因此被称为隐藏层,是由于它不能直接从系统的输入和输出中观察到。神经网络的深度越深,网络能从数据中识别的信息就越多。并发

然而,尽管从数据中学习尽量多的信息是咱们的目标,但深度学习模型可能会受到过拟合的影响。当模型从训练数据中学习了太多的信息,包括随机噪声时,就会出现这种状况。函数

模型可以肯定数据中很是复杂的模式,但这会对新数据的性能产生负面影响。训练数据中接收到的噪声并不适用于新的或未见过的数据,而且模型没法对所发现的模式进行泛化。非线性在深度学习模型中也是很是重要的。虽然模型会由于拥有多个隐藏层而学到不少信息,但将线性形式应用于非线性问题会致使性能低下。工具

如今,问题来了,“这些层是如何学习的?”那么,让咱们将人工神经网络应用到一个真实的场景中去解决问题,以了解如何训练模型来完成目标。在目前全球新冠肺炎疫情之下,不少学校都过渡到了虚拟学习,这使得一些学生担忧他们经过课程的机会。任何人工智能系统都应该可以解决“我可否经过这门课程”这种问题。性能

为简单起见,让咱们设想此模型只有 3 个输入:学生听课次数、花在做业上的时间,以及在整个授课过程当中网络掉线的次数。这个模型的输出将是一个二元分类;学生要么经过课程,要么没经过课程。如今是学期末,学生 A 听了 21 堂课,花了 90 个小时完成做业,而且在这个学期中,网络掉线 7 次。这些输入被输入到模型中,输出预测学生有 5% 的机会经过课程。一个星期后,期末成绩公布,学生 A 经过了这门课程。那么,这个模型的预测出了什么问题呢?学习

从技术上来讲,并无出问题。该模型原本能够按照目前开发的模型工做。但问题是,模型并不知道发生了什么。咱们原本只是在路径上对一些权重进行了初始化,但模型目前并不知道什么是对的,什么是错的;所以,权重是不正确的。这就是学习的意义所在。咱们的想法是,模型须要了解何时是错误的,咱们经过计算某种形式的 "损失 "来实现这一点。计算的损失取决于当前的问题,但它一般涉及最小化预测输出和实际输出之间的差别。优化

在上面的场景中,只有一个学生和一个偏差点须要最小化。然而,一般状况却并不是如此。如今,考虑到有多个学生和多个差别最小化。所以,总损失一般计算为全部预测值与实际观测值之差的平均值。人工智能

回想一下,我在前面提到的被计算的损失取决于当前的问题。所以,因为咱们当前的问题是二元分类,适当的损失计算将是 交叉熵损失。这个函数背后的想法是,它将学生是否会经过课程的预测分布与实际分布进行比较,并试图将这些分布之间的差别最小化。orm

假设咱们再也不想预测学生是否能经过这门课程,而是如今想预测他们这门课的成绩。交叉熵损失将再也不是一个合适的方法,相反,均方偏差损失 将更合适。相反,均方偏差损失会更合适。这种方法适用于回归问题,其想法是它将尝试最小化实际值和预测值之间的平方差。blog

如今,咱们了解了一些损失函数,就能够进入损失优化和模型训练了。拥有良好的深度神经网络的一个关键因素是拥有合适的权重。损失优化应该是土找到一组权重 $W$,它将使计算的损失最小化。若是只有一个权重份量,则能够在二维图上绘制权重和损失,而后选择使损失最小的权重。然而,大多数深度神经网络具备多个权重份量,将一个 $n$ 维图进行可视化是很是困难的。

取而代之的是,计算损失函数相对于全部权重的导数来肯定最大上升方向。既然模型如今已经理解上行和下行的方向,它就会向下行进,直到在局部最小值处到达收敛点。一旦这个降低点完成,就会返回一组最优权重,这就是深度神经网络应该使用的权重(假设模型开发得很好)。

计算这个导数的过程被称为 反向传播(Back propagation),它本质上是微积分的链式法则。考虑到上面显示的神经网络,第一组权重的微小变化是如何影响最终损失的?这就是导数或梯度试图解释的内容。可是,第一组权值被输入到一个隐藏层,而后隐藏层有另外一组权值致使预测的输出和损失。所以,也应该考虑权重变化对隐藏层的影响。这是网络中仅有的两个部分。可是,若是有更多的权重须要考虑,这个过程能够经过将链式规则从输出应用到输入来继续这一过程。

训练深度神经网络时要考虑的另外一个重要因素是学习率。当模型在寻找一个最优的权值集时,它须要经过一些因子来更新它的权重。虽然这看起来微不足道,可是决定模型应该移动的因子是至关困难的。若是因子过小,那么模型可能会运行一段指数级的时间,或者陷入某个不是全局最小值的地方。若是因子太大,那么模型可能会彻底偏离目标点,进而发散。

虽然固定的学习率多是理想的,但 自适应学习率(Adaptive learning rate)会减小出现前文所提到的问题的机会。也就是说,因子将根据当前梯度、当前权重的大小或可能影响模型下一步查找最佳权重的位置的某些其余因素而发生变化。

能够看出,深度神经网络是创建在微积分和一些统计学的基础之上的。评估这些过程背后的数学很是有用,由于它能够帮助人们了解模型内部真正发生的事情,这能够致使开发更好的总体模型。可是,即便这些概念不容易理解,大多数程序都附带了自动微分等工具,因此不用担忧。

 

点击关注,第一时间了解华为云新鲜技术~