深度学习中机器学习策略的运用 Projects-1

来源:互联网 发布:宁泽涛 知乎 编辑:程序博客网 时间:2024/06/02 03:44

1、介绍机器学习策略

一开局,由一个例子解释为什么要使用机器学习策略。

 

假设:在一个猫咪识别网络中,目前的正确率为90%,该怎么继续改善呢?

·收集更多的数据

·收集不同姿势的猫咪图片,以增大多样性,扩大数据集

·增加训练网络时的迭代次数

·用Adam来取代梯度下降算法

·使用规模更大的网络结构

·使用dropout/L2正则化处理

·修改网络结构

    ·修改激活函数

    ·改变隐藏层单元数

 

    但是在处理这个问题的时候,通常是不可能挨个去尝试的,因为每一种选择都意味着需要花费许多时间去验证。如果你选择错了方向,那么你将白费时间,往错误的方向前进。

    因此,我们需要一些策略去判断哪些方法是可行的,哪些方法是需要舍弃的

二、正交化

何为正交化呢,以俩个例子来说明:

 

对于电视机来说:

   老式的电视机通常有着许多旋钮,每一个都对应着控制不同的参数,例如图像垂直高度、图像水平宽度、图像转角...等。你可以通过挨个调整,最终实现图像位于电视机正中间的效果。

    但是,加入有一个旋钮,对应的数值为0.1*垂直高度+0.3*水平宽度+0.5*图像转角。这时候,无论怎么调,肯定是不能显示出完美的图像。
对于汽车来说:

   内部有油门、刹车、方向盘等设备,你想怎么开,就挨个去调整每一个设备。但是,假如只有一个旋钮,对应的数值为0.3*行驶偏角-0.8*行驶速度。那谁还能问问的开车呢~

所以说,我们应该通过正交化形式来进行操作。正交化也相当于各种因素之间应该为直角,不应该有相关联的地方。

 

ML来说:

   有四种不同类型的旋钮:

            ·适应训练集的损失函数       

            |                            若效果差:则可旋转按钮{更大规模的网络,使用Adam优化算法,......}

            ·适应开发集的损失函数

            |                            若效果差:则可旋转按钮{正则化,更大的训练集,......}

            ·适应测试集的损失函数

         |                     若效果差:则可旋转按钮{更大的开发集,......}

            ·在现实世界中成功运用

                                         若效果差:则可旋转按钮{改变特征因素,改变损失函数,......}

三、单一实数指标

  

何为单一实量度量,举例说明:

    假设每种算法的地区使用率各不相同,将三项指标进行加权平均便可以得到一个实量,

以此带代替各部分指标。当有几十种算法需要找出最佳项时,直接对比最后一项就ok。

 

四、满足和优化指标

什么是优化指标?举例来说

 

    假设ABC为三种分类网络,分别有俩种属性,准确率和运行时间,对于实际来说,可能会需要结合俩者来对一种算法进行评估,设y= accuracy - 0.5 * Running time。

    优化指标为accuracy,因为准确的分类是主要的任务。

 

五、训练集\开发集\测试集的划分

    在网络学习中,数据集的分割决定着最终的结果。很多团队在初期分割数据集时,由于开发集与测试集分别来自于不同的分区,导致最终测试时,准确度非常低。

    这也类似于我们在初期做准备时瞄准的是一个准心,经过不停的调参,修改,最终实现了高准确度,可在最后,老板却要求我们对着另一个靶心进行实验。目标不同,结果肯定差距很大。因此我们需要一开始就考虑到所有情况。

    在数据筛选时,我们需要将各个分区的数据打乱,并且随机分配给开发集和测试集,这样才会将各类情况考虑到。不论是哪个靶心,只要存在,就可以识别。

六、开发集和测试集的大小

                在以前,由于每一个团队的数据集所包含的内容很少,在训练和测试集的分配上,通常采用的比例是7:3。也有团队采用训练:开发:测试=6:3:1的比例。但随着大数据时代的到来,数据的收集成为了一种很普遍的现象,数据集不再匮乏,因此也渐渐将比例扩大为98%:2%。

 

    测试集是为了检验你所使用的各类算法/网络模型之间的区别。因此只要少部分数据便可,以前的数据量小,测试集的比例就大,到了现在,数据量爆发,测试集的比例也大大降低。

 

 

        

七、什么时候该改变你的开发/测试集和指标

假如现在有俩种猫咪分类器

A:  3%error

B:  5%error

就数据看来,A类分类器优于B类,因为它的识别错误率更低一些,但事实上呢

A类虽然提供的猫咪图片更多,但是偶尔却会误判色情图片为猫咪

B类提供的猫咪图片较少,但是却从不会提供色情图片。

你的公司对这俩款,最终选择了B类分类器。因此,现实中,单一指标不一定会成为所有环境状态下的公共判断标准。

为了消除色情图片,我们通常会做如下处理

 、

在训练集和开发集中,提前将色情图片打好标记,并且在计算损失函数的时候,当图片为色情图片时,其惩罚权值加大十倍。


这样,我们才能更好的让分类器远离色情图片~走向健康生活。

八、为什么是人的表现?

这是一副机器学习算法准确度随着学习时间准确度提升的关系图,由图我们可以看出,在还没有到达人类识别准确度的上限时,学习的效率时很高的,一路突飞猛进。但是一旦过了这个点,曲线就逐渐平缓,虽然也在提升,但却越来越慢。在这个基础上,整体有一个上界叫贝叶斯最优误差,表示这没有哪一种关系式,能够超越这个阈值。

曲线平缓的原因之一或许是人类目前的误差率已经很接近贝叶斯最优误差值,尤其是语音识别,图像识别这一块自然处理。所以机器超越人类以后的提升空间其实并没有多大了,提升速率当然会减慢。

其二,并且当机器误差率低于人类时,我们总有许多关键的策略对它进行优化,如给一堆数据打标签,喂养学习网络。或者通过人类识别信息的方法来对特征值进行选择。这些方法在超越了人类水平后便很难继续使用。

比如说一段很嘈杂的音频,一幅很模糊的图片,无论是人类或者机器都无法识别,所以必然会有一个最优误差值。

九、可避免偏差

同样是猫咪分类器,从图中我们可以看出,对于A(高清大图)与B(大码小图)数据集来说,人类的误差率几乎可以看做贝叶斯最优误差。训练集都为8%,开发集都为10%

对A,贝叶斯为1%,则不论是训练集还是开发集,都与贝叶斯有着较大的差距,因此,我们可以进一步的去调整它。

对B,贝叶斯为7.5%,则训练集的误差已经近乎相等,而开发集则还有2%的进步空间,我们可以通过正则化/增大数据集来减少误差。


相比较而言,训练集与贝叶斯的差,我们称为可避免偏差,而开发集与训练集的差,我们则称为可避免方差。这俩指标都是决定我们值得进一步优化的基准。

十、理解人的表现

何为人类的表现呢,人类的误差应该用什么来作为指标呢?

假设当前有一个医学映像诊断的任务。

由图可知一般人经过训练以后可达到的误差率为3%,而一般的外科医生则为1%,经验丰富的老医生则为0.7%,一个有着许多丰富经验的老医生团队通过开会研讨出来的结

果误差率可达0.5%。由之前提到的,贝叶斯最优误差率可以用人类的误差率来近似表示。那我们应该怎么选取呢?

正如你所想的,从贝叶斯的定义来看,必然是不高于0.5%的,因此,也只能选取最低的数值。

但在实际生活中,比如,当你训练出来了一个误差率低于一般外科医生的网络的时候,通常已经具有了一定的部署价值,而不一定只有近似到了贝叶斯,才可以。

从这里也可以看出为什么当误差高于人类水平以后,曲线平缓:


在贝叶斯率逐渐降低的时候,可避免偏差与可避免方差逐渐降低,难以分辨,无法通过更有效的方法进行改善。

总的来说:

当可避免偏差大于可避免方差时,应该注重于降低偏差技巧。

当可避免偏差小于可避免方差时,应该注重于降低方差技巧。

十一、超过人类的表现

对于分类任务来说::


假如已经到了这个地步,我们可以看出来,对A,可避免偏差为0.1,可避免方差为0.2则应该注重与正则化或提高数据量

对B,可避免偏差已经超过了人类组团开黑的水平,但是可避免方差则为0.1,我们就懵逼了,不知道该怎么进一步优化了

因为不知道贝叶斯究竟为0.2还是0.1还是多少。

这也是为什么曲线会变平缓的原因。

在这样一些方面,机器的误差率已经远远小于了人类的误差率:

网络广告:估计用户点击广告的可能性

提出产品建议:向你推荐一些商品

物流预测:从A到B开车预计需要多久

贷款:预测某人会不会还款

十二、改善你的模型表现

俩个基本的条件:

1、你的可避免偏差已经很小很小了

2、你的可避免方差也非常非常小

由上图便可以得到一些我们平时可以利用到的改善网络结构或者模型表现的最佳方法。

原创粉丝点击