您所在的位置: 新闻频道 > 嘉兴新闻 > 图说嘉兴 > 正文
敖汉白癜风医院
嘉兴在线新闻网     2017-10-17 15:33:41     手机看新闻    我要投稿     飞信报料有奖
敖汉白癜风医院,上海白癜风的病因,天津白癜风会遗传吗,宝坻白癜风医院,北宁白癜风医院,北京治疗白癜风费多少钱,广东白癜风传染么


之前介绍了卷积提取边缘特征的基本原理,但这还远远不足以从图片中识别出奶罩,因为并不是所有奶罩都像柏木由纪的那么简单朴实,而是存在很多种不同的款式,这不是单从边缘就能识别出来的。

要提取如此复杂的特征,需要很多不同的卷积核。巧妇难为无米之炊,没有足量的训练样本,再好的卷积也出不来。训练样本当然是越多越好,有道是“熟识奶罩三百款,不会解扣也会穿”。人工神经网络虽然不具备真正的人格,但有一点却是相通的,那就是“贪”。

但不管是训练样本的累积,还是计算能力的上限,资源总是有限的。所以我们始终只能从有限多个样本中,提取一小撮特征,这是一个以有涯求无涯的过程。

训练样本不足就会产生一个问题,叫作“少见多怪”。比如我们看上面几张图里的奶罩,大多是有肩带的,那么自然地,神经网络会把“肩带”当作一个特征。

如果一个物体没有类似肩带的结构,被认作奶罩的概率便会下降。


引入过多不必要的特征,导致模型泛化能力(Generalization)下降,这一问题叫作“过拟合”(Overfitting)。比如下图,坐标上有10个点,蓝色拟合曲线逐一穿过,看起来像一个完美的拟合,似乎我们已经看透了这一分布规律的本质。

但是如果有第11个点,它真的会继续落在蓝线上吗?而且一旦没有,那么拟合曲线就面临严重的威胁,需要很大的调整才能满足“穿过所有点”。如果有第12个点呢?

这种过拟合的预测对于新数据的作用有限,实际上一个比较稳妥的拟合是线性关系,我们有很大把握预测,第11个乃至以后的数据,都会落在蓝色直线附近。

过拟合就好比背过了历年的考试题(包括所有数字),但是一见到新题目(数字变了)就不会做了。以前有个傻子卖咸鸭蛋的小品,里面傻子说“五毛钱俩,一块钱不卖”,这就是钻进了“五毛钱俩”的牛角尖而产生的笑话。过拟合的神经网络,就像一个认死理的人,实则是愚痴的。

所幸,人工智能还没有发展出情态,否则恐怕就“贪、嗔、痴”三毒俱全了。我想,如果真的有那一天,机器人也会发展出宗教吧(遁入智瞳)。

反过来的情况叫“欠拟合”(Underfitting),就是没有学习到真正的规律,听风就是雨。比如下图这个把眼罩当成奶罩的惨案,买家确实没有把“肩带”当作特征,“形状”也确实有点类似,但是她把最基本的“大小”因素忽略了。

在实际应用当中,“过拟合”是更加常见的问题。

脱掉

如何遏制过拟合?方法有很多,比如 L1、L2 正则化(Regularization)是在代价函数(Cost Function)上动手脚。

本文要介绍的方法,叫作Dropout。其原意是辍学,中文资料里基本也都保留了原词,“脱掉”是我自己想的翻译。你问我怎么想的,我也不知道,只是管不住我这手。

Dropout不修改代价函数,而是直接调整神经网络的结构,是一种更加彻底的革命。

人工神经元都是与特征相关的,而有的特征(比如肩带)会造成过拟合。那么只要脱掉肩带所对应的的神经元,不就可以避免了吗?

理是这么个理,但是我们并不知道,具体哪些神经元对应哪些特征。如果我们都知道的话,也就不用训练了,直接求解就行了。

考虑下面这个简单的神经网络,其隐藏层(中间那层)有6个神经元。神经元与特征并非一一对应的,可能3个神经元共同表征1个特征,比如从上数第2、3、5个。假设我们抛掉了这三个神经元,用其余的网络进行计算,就可以在一定程度上降低过拟合。

实际上这里的[2, 3, 5]只是猜测,我们要做的是,把所有能脱掉的3神经元组合,全都脱一遍,对剩余部分分别进行计算,最后再求平均。诚然,每一个经过Dropout的不完整神经网络,还是有可能过拟合,但是各自的过拟合情况是不同的,通过求平均就可以抵消。

本质上,Dropout消解了神经网络对某一部分神经元的依赖性。6个神经元dropout其中3个,此时dropout率即是 0.5。

实践

实践是检验罩杯的唯一标准,但是对于广大新手而言,直接处理彩色图片的难度还是偏高,而且本站的计算能力暂时还很有限。所以这里改用手写数字识别项目作为案例,搭建简单的卷积神经网络,并且对比Dropout的效果。

该项目是Kaggle的入门级比赛,且用到了著名的MNIST手写数字数据集。MNIST可谓是深度学习界的Hello World。

首先导入依赖库和数据集,并进行预处理,以便神经网络模型使用。

此为静态代码展示,在线编辑->运行Python代码,搭建神经网络,请访问:链接。

然后构建、训练模型。这里采用一个最简单的卷积神经网络结构:

  • 卷积层(8个5x5卷积核,ReLU激活函数)

  • 池化层(2x2最大池化)

  • 全连接层(16个神经元,ReLU激活函数)

  • 输出层(10个神经元,SoftMax激活函数)

为节省计算开销和减少等待时间,训练的迭代次数已设为1,所以得到的各项结果参数当然偏低,这并非所用的方法有问题。

  • 无Dropout,验证精度为: 0.6090

Dropout

作为对比,我们搭建另外一个架构类似、但包含Dropout层的神经网络。Dropout的位置是最大池化层之后、全连接层之前。

此处代码留空,请访问链接, 完成在线练习。

如果正确地添加了Dropout,则得到的验证精度(val_acc)应为0.7390。而其他的指数,如训练精度(acc)却大致相等。可见,Dropout的作用是消解过拟合,提高模型泛化能力。

PS. 如果要给本文配一个BGM,我希望是杜德伟的《脱掉》。


来源:嘉兴在线—嘉兴日报    作者:摄影 记者 冯玉坤    编辑:李源    责任编辑:胡金波
 
 
临邑白癜风医院