【MindSpore:跟着小Mi一起机器学习吧!】神经网络表述(二)
小Mi学习,向上积极!上周小Mi简单给大家介绍了神经网络的模型表示,今天小Mi将进一步带领大家对神经网络进行进一步的深入理解,话不多说,一起学起来吧~
5 特征和直观理解 a
从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们之前提到的三层神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)等等。
首先,上个例子!左图中假设有两个和输入特征,它们都是二进制的,所以和只可能是0或1。在该图中,我们只画了两个正样本和两个负样本,其实这是右图复杂机器学习问题简化了的问题。通常实际情况下我们需要研究的是如右图中在右上方和左下方有许多个正样本,还有许多用圆圈表示的负样本,需要做的就是学习一个非线性的判断边界来区分这些正样本和负样本,那么神经网络要如何做到这点呢?比起右边这个复杂的例子,我们可以先研究左边的例子,这样更容易简单明了地说明问题。
表示当这两个值恰好只有一个等于1时,这个式子为真,或者。在这个例子中,如果我们用XNOR的话,结果会好一些,和这两个式子都一样,只不过XNOR是XOR的结果取反而已,也就是当这些正样本同时为真或同时为假时,y的值才为1,如果y=0,那么它们有且仅有一个为真,那么我们能不能构建一个神经网络来拟合这样的训练集呢?为了建立能够拟合XNOR运算的神经网络,我们先从一个比较简单的能够拟合AND运算的网络入手。
具体来说,假设有两个二进制的输入和,只能取1或0,现在目标函数为。AND的意思是逻辑与怎样来得到只含单个神经元的网络,来计算这个AND函数呢?为此,要在这里加一个偏置单元,也称为+1单元。现在,我对神经网络中的权重或者说参数进行赋值,将这些值都写在图上,这就意味着将-30赋值给的系数。对应图中的+1单元,中间的+20对应的系数,下边的+20对应的系数,这就意味着我的假设模型为。在神经网络的图中,标出这些权重或者说参数会方便后续的工作。这个-30其实就是,20表示,第二个20则表示,把这些值都想成是网络边界中链接这些参数的权值,会更容易理解一些。来看看这个小小的神经元是如何进行计算的,首先来回顾一下,S型激活函数g(z)的图像,从0开始,平滑上升,经过0.5,之后逐渐逼近1,举个具体的坐标参照点,假如横轴z的值为4.6,那么S型函数的值就等于0.99,这已经是一个非常接近于1的值,由于函数的对称性,当z为-4.6时,S型函数的值将会等于0.01,非常接近0。
试试和对应的4种输入组合,看看假设模型能得到什么结果,当和均为0时,代入计算,那么假设模型会是,这是在函数途中非常靠左的地方,所以非常接近0。如果,将值代入,可以得出结果为,同样也非常接近0,同样,其他的带入可以得到分别为和,分别非常接近0和非常接近1。如果观察结果,会发现确实是逻辑与的计算结果。计算近似等于,换句话说,当且仅当和都等于1时,输出为1。通过这张真值表,我们就能弄清楚,神经网络所计算的逻辑函数的取值是这样的:
而上图中的神经网络小Mi猜测可以实现或运算函数的功能,那么小Mi是如何得出结论的呢?如果将假设模型写出来,会发现,并把所有的数值都带入求出结果,会发现它的确实现了逻辑或函数的功能。这么一看其实本质上来说OR与AND整体一样,区别只在于的取值不同。希望这些例子能让大家明白神经网络中的单个神经元是如何被用来计算逻辑函数的,比如AND函数,OR函数等等的。下面小Mi会带着大家在这些例子的基础上,讲解一个更为复杂的例子,学习一个拥有多层神经元的神经网络是如何被用来计算更复杂的函数的,比如XOR函数、XNOR函数等等。
6 样本和直观理解 b
在上一节中,我们已经学习了神经网络是如何被用来计算函数以及函数的,其中和都是二进制数,也就是说它们的值只能取0或1,而神经网络如何进行逻辑非运算,即计算函数也是同理。
把网络中的连接方式都写出来,可以发现这个网络中只有一个输入特征,还有一个偏置单元+1,现在用权重也就是+10和-20把这些单元连接起来,那么假设模型就是计算的大小,当时,假设函数的结果为,近似于1;当时,假设函数的结果则为,近似于0。观察我们得到的结果,你可以发现它确实实现了函数的运算。若要实现逻辑非运算,大体思想就是在预期得到结果的变量前面,放一个很大的负权重,比如说,这就是对做逻辑非运算的主要思路。另外还有一个例子可以大家一起思考下,如何计算。有一点小Mi可以肯定是的,应该在和前面放一个较大的负数作为权值,不过还有一个很棒的方法!就是建立只有一个输出单元的神经网络来计算结果,逻辑等于1的条件是当且仅当和都为0时成立,那么现在大家是不是已经明白了应该如何建立一个小规模的神经网络来计算这个逻辑函数呢?
现在我们可以把这三块单独的部分组合到网络当中,第一部分是计算,第二部分是计算,第三部分则是,把这三部分组合在一起来计算。这里需要注意的是,需要一个非线性的决策边界来分开正样本和负样本。
首先取这三个输入单元+1、和来建立第一个隐藏单元,因为是第一个隐藏单元,所以把它称为,把对应的权值也写上,分别是-30,20,20。
接下来建议第二个隐藏单元,称之为,表示第二层的第二个隐藏单元,并将其权值标出,分别是10、-20、-20。
现在列出的这两个网络的真值表:
最后再建立一个输出节点,也就是输出单元,最终会输出,然后把上述计算OR的网络照搬下来,同时需要一个偏置单元+1,权重分别是-10,20,20。
我们已经知道,它计算的是OR函数,从而最终的真值表也可以直接得出,可以看到,当和同时为0或同时为1时,就等于1,与我们实例中的图像数据相符。
总结来说我们用到的这个神经网络有一个输入层,一个隐藏层和一个输出层,最后会得到一个非线性的决策边界,用以计算XNOR函数。更通俗的解释是,我们的输入都放在输入层,然后在中间放一个隐藏层,用来计算一些关于输入的略微复杂的功能,然后再继续增加一层用于计算一个更复杂的非线性函数,这就是为什么神经网络可以计算这种复杂的函数。当网络拥有许多层时,在第二层中有一些关于输入的相对简单的函数,第三层又在此基础上计算更加复杂的方程,再往后一层,计算的函数越来越复杂。
希望大家现在可以对神经网络所学习的这些相当复杂的函数有一个更加直观的理解啦。我们所输入的图像,或者说原始的像素点,通过第一个隐藏层,计算出一系列特征,再通过下一个隐藏层计算出更加复杂的特征,然后再往下更加复杂,最后这些特征被用于逻辑回归分类器的最后一层来准确地预测出神经网络所看到的图像。按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。这就是神经网络的厉害之处!
7 多类分类
当然啦,神经网络还可以解决多类别分类问题,当我们需要区分不止两个分类时,例如常见的手写数字的识别问题,就是一个多类别分类问题,因为有10种需要识别的类别,即数字0~9,这种情况的话我们应该怎么办呢?
这其中具体实现的细节小Mi非常乐意跟大家一起分析一下~
要在神经网络中实现多类别分类,采用的方法本质上就是一对多法的扩充。假设有一个计算机视觉的例子,我们不止需要识别出图中的汽车(可能我们初步只是识别这一种类别),现在我们需要识别四个类别的对象,通过图像来辨别出哪些是行人、汽车、摩托车或者货车。这样的话,我们要做的就是建立一个有四个输出单元的神经网络,输入向量x有三个维度,两个中间层,输出层4个神经元分别用来表示四个分类,也就是说神经网络的输出将是一个四维向量,且a,b,c,d中仅有一个为1,表示当前类。
用第一个输出单元来判断图中是否是一个行人,再用第二个输出单元来判断图片中是否是一辆汽车,用第三个输出单元来判断图中是否是一辆摩托车,最后用第四个输出单元来判断图中是否是一辆货车。而当图像中是一个行人时,理想情况下,这个网络会输出;当图中是一辆汽车时,我们希望输出;同样以为类推,摩托车对应的输出就是......这其实就像一对多法,在之前学习逻辑回归的时后,小Mi也曾经跟大家一起谈论过这个问题,现在可以说我们有4个逻辑回归分类器,它们每一个都将识别图片中的物体是否是四种类别中的一种。
这时候需要注意的是,这种假设下的训练集的表示方式与之前有所不同,在这之前我们曾经用一个整数y作为输出的分类标签,其中y可以取1,2,3,4,现在的话我们不用y表示,而是用如下表示方法:
将会分别是,的值取决于对应的图像。一个训练样本将由一组组成,其中就是四种物体其中一种的图像,而就是上述向量中的一个。我们希望找到一个方法,让神经网络输出一些数值,输出值约等于,并且和在该例子中,它都是四维向量,分别代表四种不同的类别,这就是让神经网络解决多类别分类问题的方法,也是对如何构建假设模型来表示神经网络的补充。
当然啦,为了更加方便大家理解,还有一个网站小Mi真的极力推荐,大家可以戳戳手指点着看一看呀~
今天小Mi给大家讲解了一个稍微复杂一点的神经网络,希望大家能感受到神经网络的魅力之处呀,反正小Mi是真的越来越起劲儿!后面的话小Mi还将带大家学习如何构建我训练集,如何让神经网络自动学习这些参数等等,我们,下期再见呦~(挥手十分钟!)