首页 > > > 3.3 神经网络的训练
在前面几节的学习中,我们已经认识了神经网络到底是一个什么东西。通过将神经元的不同组合和连接得到了一个完整的网络结果,再用这个网络结构去进行计算。那么,这一节我们将讲述如何对神经网络进行训练。
神经网络的训练
要说到神经网络的训练,我们要明确一点,我们到底在训练什么?还记得我们在讲神经元的时候我们讲过一个神经元的构成,如下图:

大家思考一下,上图中哪些是我们已知的,哪些是我们未知的?显然,输出X是我们已知的,激活函数也是已知的(激活函数由我们自己定义的),那么未知就是线性模型y(x) = wx+b。显然,只要求出了线性模型中的参数w和b,然后通过计算,我们就可以得出了该神经元的输出。我们又知道,一个神经网络是由许多个神经元首尾相连接而成的网络结构,所以我们只要求出每个神经元线性模型中的参数w和b,那么就可以通过计算完成了数据在神经元之间的传递,得出最终的结果。这下,大家应该知道我们训练什么了吧?没错,神经网络要训练的就是每个神经元线性模型中的参数w和b。
一个完整的训练过程涉及到很多的基础的数学问题,例如基础数学中的矩阵计算问题、统计学上的回归问题、信息论上的信息熵问题、最优化问题中的梯度下降问题等一系列问题。如果要彻底摸清它底下的原理,需要有足够深厚的数学功底和工程经验才能胜任。这需要扎实的知识功底,更需要时间的积累。所幸的是,这些东西都被数据科学家们封装成了一个一个的组件,让它们变成了黑盒子供我们使用,只要我们掌握了这些东西的原理和作用,能够把它们相互之间有机结合就可以,而剩下的……基本就是调参的问题——对超参数进行尝试和结果对比。这样有一个好处,那就是极大地降低了深度学习的门槛,更广泛地普及深度学习的使用人群。我觉得这是一种趋势,想想我们现在用电子产品,哪个不是涉及基础数学、物理学、电磁学等等尖端的学科的,但这似乎不影响我们使用它们,因为展示在我们面前的仅仅是一个个的按钮和开关,我们只管使用就可以了,至于里面的操作机理,我们大可把它当成一个黑盒子,让大师们去折腾吧。
可以说,基于深度学习的所有的概念都是复杂的、深奥的,需要极高数学素养才能有深刻认识的。那么对于我们这些非数学专业,非硕士博士的人们来说怎么掌握比较好呢?还是把它当成黑盒子就可以了。化繁为简,把复杂的问题归结为相对固定和简单的固定套路,把复杂的模型归结为相对固定和简单的部件组合。上学的时候老师总喜欢说的“把书读薄”就是这样一个概念——让学到知识具有泛化性,让这些知识之间的共通性显得更为显现一些,从而降低认知新事物的难度。
在深度学习领域也是有这样一个套路的吗?答案是肯定的。
在深度神经网络的构建与训练中,有这样一个固定的套路,可以让我们在比较短的时间内就明白它的构建和训练方式。不管我们是自己搭建网络,还是阅读别人的代码,都用这样的方式去做,就会显得思路清晰很多。
我们需要明确的对象就是:
只要在一个深度学习项目中,这些对象都明确了,那么下面的问题就变得非常简单了。
3.3.1 输入
训练神经网络的第一步就是先要确定输入。那么我们输入的是什么呢?在之前的讲解中我们知道,一个机器学习的过程就是完成x到y=f(x)的映射,那么这个x就是我们的输入。
它可以是一张图片,一段文字,一段声音或者是一个股票K线数据,几乎可以是你期望的任何形式。只不过,他们都必须以数字化的形式输入。所谓数字化形式,就是说无论图片,文字还是声音,都必须经过一定的编码规则,经过适当的处理方式,经过适当的处理方式,例如归一化(Normalization)、白化(Whitening)、灰度化,或Embedding等手段进行处理,变成数字化的向量,然后才能输入网络。为什么呢?答案很简单,因为计算机只能识别数字。你在计算机上看到的任何东西,在计算机看来它也只不过一堆数字的组合。
3.3.2 输出
说完输入,我们再看看输出是什么玩意。一个输入X经过网络中各种变换和运算后便会产生一个输出值。比如,你希望设计一个深度神经网络,输入一个用户的个人信息,这个信息可能是如下形式的表示:
[月薪:10000,性别:女,学历:本科,.........]
而你希望得到的是这个用户是否具备贷款资质的概率输出。那么在这个案例中,输出就是一个0到1的概率值,一个表示概率的实数。
在比如,你希望有一个深度神经网络,输入一个新闻标题,然后得到这个标题属于哪个类别的新闻。那么在这个案例中,输出的就是一个概率的向量,向量上的每个值都表示该标题属于该类别的概率。
总之,输出的内容直接跟你的具体需求相关联。你期望输出什么内容,就应该让模型在最后一层输出什么标签。在深度学习中提到的标签并不是指中文里的标签,这是一个术语标签(Labe),其实指的就是

中y的标准值或者说期望值。
3.3.3 网络结构
在之前的介绍中,我们已经介绍过了神经网络具有三个层,分别是输入层,隐藏层和输出层。如下图所示:

但这只是最基本的结构,在这里输入层和输出层是不变的,每个网络都会有输入层和输出层。这里重点关注一下隐藏层,上图中间部分就是隐藏层,我们可以观察到它有两层结构,而且每一层的神经元数量是不一样的。这里的层数和神经元个数是由你来决定的,可以根据你的数学基础知识、工程经验所进行的模型假设所设计出来的网络层(Layer)。这个后面我们会提到,常用的有全连接层(Full Connection Layer)、卷积层(Convolutional Layer)、池化层(Pooling Layer)、循环神经层(Recurrent Neural Layer)等。
只要网络的结构是确定的,那么映射的计算功能也是确定的。上文提到,神经网络要训练的就是每个神经元线性模型中的参数w和b。只要这些参数能够确定下来,这个网络就可以正常开始工作,就像一个函数工作一样简单。如果想要让网络正常工作,那么就需要训练。
3.3.4 损失函数
上面已经介绍了输入、输出以及网络结构,如果这些东西都定义好之后就只剩下一个损失函数了。
做机器学习的同学可能经常听到“损失函数”这个词,那么到底损失函数是什么意思呢?
假设有训练样本(x,y),模型为 h,参数为 Θ。

(ΘT表示Θ的转置)
总的来说,任何能够衡量模型预测出来的值H1与真实值y之间的差异的函数都可以叫做损失函数。听到这里,有同学就会问,我们要这个函数来干嘛呢?这是一个非常好的问题。黑格尔说过一句话“存在即合理”,任何存在的事物必然有它存在的意义。
当我们确定了模型h,后面做的所有事情就是训练模型的参数 Θ。那么什么时候模型的训练才能结束呢?这时候就要运用到代价函数了。由于代价函数是用来衡量模型好坏的,我们的目标当然是得到最好的模型(也就是最符合训练样本的模型)。那么什么时候模型的效果是最好的呢?当然是代价函数最少的时候效果最好!因此训练参数的过程就是不断改变 Θ,从而得到更小的 J(Θ)的过程。
损失函数,说到底就是一种约束条件的描述。你希望这个网络在训练进化的过程中,进化成满足什么条件的东西,你就要用什么表达式来约束它。这个函数可以由你自己来定义,常用的损失函数有均方误差和交叉熵。至于具体使用什么损失函数,还得根据项目需求来定义,在不同的模型和不同的输出要求下,需要约束的条件自然也不一样,所以使用的损失函数也会有所不同。不过,常用的函数也就哪几种,根据项目来回变换这似乎也不太难。
3.3.5 优化方法
上面的内容,我们已经知道了神经网络的输入、输出、网络结构和损失函数了。那么,我们要如何训练模型参数使得损失函数最小呢?简单来说,就是我们该如何找到正确的参数值呢?这时候,有同学可能会说,我们可以一个一个是试呀。想想好像也没什么毛病,反正是计算机去试又不是我去试对吧。但是呢,像神经网络这么参数随随便便就上百万的模型,如果漫无目的去试,怕是试到猴年马月也试不出正确的结果来。所以,我们希望计算机是有目的有方向地去尝试不同的参数值。故此,前人想了很多的方法来指导计算机有方向地改变参数值,使得损失函数是往小的方向前进,这些方法被称为“优化方法”。在深度学习中,常用的优化方法有梯度下降法(Gradient Descent)、牛顿法、拟牛顿法等等。
下面,我们简单说说梯度下降法,这是我们最常用到的方法。先来看看下面的例子,假设我们要优化的函数是y=x2,初始条件为x0=2,y0= 4。图示如下

图中红色的点就是我们的初始点,很显然,我们想要找的最终最优点是绿色的点(0,0) 。
我们先对目标函数求微积分:

这就是所谓的梯度,当x=2的时候,可以求得该点的梯度为4,简单来说就是当前这一点的“倾斜程度”是4。下面给出几个例子:

从表格中很容易发现,梯度的绝对值越大,数据点所在的地方就越陡。数字为正数时,越大,表示越向右上方陡峭,反之亦然。好了,懂了什么是梯度,下面我们就来聊聊梯度下降是什么。现在我们先假设我们自己就是一个球,呆在图中的红点处,我们的目标是到绿点处,该怎么走呢?很简单,顺着坡向下走就行了。现在球在(2,4)点处,这一点的倾斜程度是4,向右上方陡峭,接下来要做的就是向山下走。
那么每一次走多远呢?我们先按当前倾斜程度的1%向下走。也就是new_x = x - 0.01 * 4,new_x=2 - 0.01 * 4=1.96,new_y = 3.8416<4,这时小球成功的往下滚了一点。值得注意的是,这里的1%就是我们通常所说的步长,这个值是由我们自定义的,步长设置得过小就会导致我们下降得很慢,需要花更多的时间。但是步长设置得过长,又有可能跳过了最小值,从而找不到最优解。所以这个需要将这个值设置在一个合理的范围。
就这样一直滚下去,最终就会滚到绿色的点。如下图,红色的曲线表示了小球的滚动路线。

本节讲述了如何对神经网络进行训练,其实只要注意好输入、输出、网络结构和损失函数这四个小点即可。任何深度学习项目都离不开这四要素,这把4个小点确定下来,剩下的只是“调包调参”的工作而已。接下来的一章,我们将讲解一下为什么神经网络这么神通广大。如你对本节有疑问,欢迎在讨论区与我讨论。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3162852/ ,如需转载,请注明出处,否则将追究法律责任。