吴恩达机器学习第九章---神经网络学习

非线性假设

                                  

         我们在前面已经讨论过线性回归,逻辑回归,感觉大部分问题都可以使用它们来处理,那我们为什么还要提出神经网络那?

         实际上当特征值过多时,再使用线性回归或者逻辑回归会导致二次项的系数以n^2的速度增长,这样就会导致我们的假设函数中的项过多,多大。如上图一个典型的分类问题,我们可以看到为解决这个问题我们使用典型的逻辑回归,尽管只有两个特征,但我们为了使得我们提出的假设函数能够很好的拟合该数据集,还是人为地添加了许多特征值。这样对于使用者来说并不友好,同时由于特征数量过多,很容易出现过拟合问题。同时我们的运算量也会增大。一般来说具有n个特征,那么二次项的个数大约是n^2/2。对于三次来讲就更大了。说以对于此类问题,线性方法不是一个较为合适的方法。

                                              

                  当我们使用人眼来看对应的图像一眼就可以得出这是一辆汽车这一概念,然而对于计算机来说并不是这样的,计算机想要识别图中的对应部分,实际上它看到的是一些数值,这些数值表示对应图像的亮度,每一个数据都是一个特征,因此对于图像识别来说这个特征的数量尤其大。

                                         

           与前面提过的机器学习的过程大致相似,我们先给定一部分带有标签的数据集,比如一部分图片是车,另一部分图片不是车,最后给定生成的模型一张图片,让它来判断这张图片是不是车。

                                              

           那么这个过程是如何实现的那?首先我们在车子的图像上找到两个点,它们的一个作为x轴一个作为y轴。我们的学习器通过我们给定的数据集来学习,对应这两点,出现了一个如上图中所示的分布图。我们刚刚探讨过逻辑分类,很明显会将它作为一个逻辑回归的算法来做,但实际上这是不现实的。首先,假设我们的图片是50*50(这已经非常小了),即使这样它的像素点也是2500,这就意味着它的特征维度为2500,我们刚才提到对于二次项来说它的对应的特征的个数应该是n^2/2,那么灰度图对应的特征个数大约为300万个,这还是我们使用灰度图,假如我们使用RGB图片,每个点还有红黄蓝,那么大约为3000万个特征,继续使用逻辑回归,不现实。因此我们要使用一种更好的解决方法---神经网络。

神经元与大脑

         神经网络出现的日期并不晚,大致出现在二十世纪八九十年代,但由于计算量过大,当时并没有引起大规模地使用。近些年,硬件发展得以跟上,现如今神经网络对于某些应用来说是最好的解决方法。生物学家做过许多实验,发现你几乎可以把任何传感器连入大脑,然后大脑就会使用它。我们不仅思考假如我们掌握了这样的算法,那么真正的AI是否可以出现那?

模型展示Ⅰ

                                          

         神经网络模拟的是大脑中的神经元,那么我们先来观测一下神经元是如何运转的。

         如上图所示,神经元有细胞体,同时也有许多树突,接受其它神经元传递的信息。这样我们就可以认为神经元是一个计算单位,通过树突来接受其他神经元传递给它的信息,通过细胞核来运算,最后通过轴突来输出计算的结果,输出给其他的神经元。

                                                              

       如上图所示,我们看到的就是一个最简单的神经元,它有四个输入(x0由于本身为1,我们是否要将其表示出来需要看在计算中加上它是否更加方便,我们称其为偏执单元)。它的x1,x2,x3表示输入的值,对应的输出。而对于对应的激活函数而言,就是如上图最下面所示。。还有一点需要我们注意的是,对于参数θ而言,我们可以称其为参数,也可以称其为权重。

                                                                

              如上图所示,我们可以构建多层的神经网络,同时每一层都可以添加或者不添加偏执单元。我们习惯称第一层为输入层,因为我们在此层进行特征输入,我们称最后一层为输出层,我们在此层输出。而中间的层被我们称为隐藏层,因为我们无法从训练数据集中得到它的结果。(神经网络可以有不止一个隐藏层)。

                                                                           

        首先我们来解释激活项,激活项即接受数值并计算然后输出一个值。我们由上图可得知θ就是控制从输入层到输出层的映射的参数矩阵。其中θ1是一个3*4的矩阵,控制输入层到隐藏层的参数,而θ2则控制隐藏层到输出层的矩阵。每个θ矩阵对应的维度都不相同,具体的和每一层对应的参数维度有关。

模型展示Ⅱ

                                                                       

                 我们在前面讨论了,激活项,那么神经网络是如何一层一层的逐步实现计算的那?

                 首先,我们可以将我们输入的特征看作是一个向量,包含有[x0,x1,x2,x3],其中x0作为偏执单元其值为1(正如上图中右上方所示).然后我们使其与z(2)相乘,z(2)是一个包含第一个隐藏层所有参数的矩阵。我们将其中的每一项看作是第二层中对应的一个激活函数的所有的参数。这样二者相乘我们就可以得到第二层所有的激活函数的结果,即a(2)1,a(2)2,a(2)3,这三者构成一个新的矩阵作为输出层的特征值输入,你也可以为其手动加上a(2)0(作为偏执项)。最后与z(3)相乘结果作为最终输出的结果。

                 我们称这样的计算过程为向前传播,具体过程为,输入层向前传播给隐藏层,隐藏层的激活函数计算后,继续向前传播给输出层,经过输出层的激活项计算后,最后得出结果。

                                                             

                假如我们不考虑输入层,我们不难发现其实这个生成的模型更像是一个逻辑回归对应的模型,只是我们不直接使用数据集中给定的特征x1,x2,x3,而是使用经过隐藏层激活函数计算后得到的a(2)1,a(2)2,a(2)3作为输出层的特征,这样的话,实际上我们就可以对许多较多项的数值进行计算,最后得出结果,而非使用传统的线性回归的方法计算量大而且较为困难。

                                                      

         我们称不同神经元之间的连接方法为神经网络的架构,不同的神经网络其架构也不相同。在上面的图中,我们仍旧称第一层为输入层,最后一层为输出层,中间的两层为隐藏层。

例子与直觉理解Ⅰ

                                                     

           我们由上图可以得知神经元构建一个简单的逻辑与(当两个特征值均为1时为1)是如何成立的。

          首先我们在输入层原本给定的特征值上面增加一个偏执相,其值为1。我们通过通过给定参数生成一个假设函数,我们给定的参数为-30,20,20.为什么要给定这三个值?,因为我们要确保当两个特征均为1时,两个特征的参数相加是一个正数,并且远远大于4.6(因为我们在signal函数中现在这个例子中规定,当x的值取为4.6时y的值为0.99我们约等于1).这样即可得到结果为1.而当只有一个为正,或而这均为0时,我们得到的值远远小于-4.6,这样得到的值为0。然后我们分别将对应的x1和x2的取值代入到该假设函数中。即可得到如上图中右下所示的真值表,即可表明我们实现了一个逻辑与单元。(在深度学习入门该书中同样有对该单元实现的描述,如若进一步了解,可翻看第二章,感知机)。

                                                            

同样的,在这个基础上,我们可以很轻易的实现逻辑或(有一个特征值为1是结果即为1)。我们在上面的例子中讨论了一下对应的参数,决定了这个假设函数最终的取值结果,在本例中则同样要依据参数来实现逻辑或。我们将x0对应的参数设置为-10,这样只有当两个特征值均为0时,我们得到的结果才为负数,并且为-10,远远小于-4.6,所以答案为0,只要当任意一个特征为1那么得到的结果都大于4.6,这样最终都会为1。

例子与直觉理解Ⅱ

                                         

       我们在前面已经讨论过了,逻辑与,逻辑或,我们现在要开始讨论逻辑非。这三者构成了基本的算术逻辑单元。有了前面的两个例子我们在讨论逻辑非时就显得格外的简单。我们先给只有一个特征值的输入加上一个偏执项,然后开始设置对应的参数。对应于偏执项的参数为10,对应于特征值的参数为-20,这样我们总是得到一个与输入的特征值相反的项。如上图中右下角所示。

                                                

        由前面所有的所得到的小的神经元我们将其放置在一起,构成一个神经网络。如上图所示,我们选择将 AND 以及(NOT x1) AND (NOT x2)作为隐藏层,分别对应于上图中的红线和蓝线,他们对应的参数也分别列出。最后的输出层我们选择 OR作为其运算模型。我们由隐藏层得到a(2)1,a(2)2,然后再将其作为两个新的特征给输出层,得到最终的结果。这样一步一步我们最终实现了一个3层神经网络。最后我们就得到了一个非线性的决策界限。

      其实前面所列出的无论是与门,或门还是非门,实际上都是对线性的一种描述。而我们要进行分类的实际上并不是线性,或者说一条线是无法将上图中,右上角给分成两部分的。实际我们可以将其看作是一个异或门,即只有当输入的两个特征恰好相反时为1,否则为0。很遗憾,我们能看出实际上感知机是没有办法实现异或门的。但感知的绝妙之处在于它可以叠加层,就好像我们在上面表示出来的一样。那么其实我们就可以得到这样的一个结论单层感知机是无法分离非线性空间的。

                                                          

              在上面的例子完成后,大家也大致了解了为什么神经网络可以计算许许多多的复杂的计算过程,神经网络讲一个复杂的计算分为多个模块进行,每一个隐藏层都计算一部分这样越往后面计算的公式就越复杂,最后可以完成许多线性回归无法完成的复杂的模型的计算。

多元分类 

                                                         

           我们在上述的例子中最后得到的是一个二分类问题,即简单的判断是或者不是。但实际生活中并不是这样的,实际生活中我们往往需要判别多分类问题,例如上图所示,输入三个特征进行类别判断它可能是4中类别中的任意一种,我们对其的做法是增加其输出,对于二分类,输出层只有一个输出项,即简单的判断是或者不是,但对于多分类问题,有多少类别,就有多少个项。每一项的输出为0或者1,当判定该类别是时输出1,不是时输出0.如上图最下面所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值