深度学习笔记(三)(1)机器学习(ML)策略(1)(ML strategy(1))

深度学习笔记(三)(1)机器学习(ML)策略(1)(ML strategy(1))

这里讲的主要是老师的经验之谈。

1.2 正交化(Orthogonalization)

正交化的概念是指,你可以想出一个维度,这个维度你想做的是控制转向角,还有另一个维度来控制你的速度,那么你就需要一个旋钮尽量只控制转向角,另一个旋钮,在这个开车的例子里其实是油门和刹车控制了你的速度。正交意味着互成 90 度。
early stopping,那么对训练集的拟合就不太好,但它同时也用来改善开发
集的表现,所以这个旋钮没那么正交化。
在这里插入图片描述
相对应的旋钮就是正交化后问题的产物,对应不同的问题有不同的旋钮去解决。

1.3 单一数字评估指标(Single number evaluation metric)

查准率的定义是在你的分类器标记为猫的例子中,有多少真的是猫。
查全率就是,对于所有真猫的图片,你的分类器正确识别出了多少百分比。
事实证明,查准率和查全率之间往往需要折衷,两个指标都要顾及到。
但使用查准率和查全率作为评估指标的时候,有个问题,如果分类器𝐴在查全率上表现更好,分类器𝐵在查准率上表现更好,你就无法判断哪个分类器更好。这时要用F1分数
在这里插入图片描述
这一节主要是说对于不同的几个分类器,对几个不同的应用地点,怎么找一个单实数评估指标去提高做决策的效率。

1.4 满足和优化指标(Satisficing and optimizing metrics)

假如有俩个指标去选择,则可以用下面的方式去评估分类器:
在这里插入图片描述
也可以是选择运行时间必须小于100ms,而准确度就成了优化指标,这样的话就运行时间只要小于100ms,多少不用管,只关心准确度就行了。
一般的,考虑N个指标,可以选择一个为优化指标,其他是满足指标,而这些指标是在训练集或开发集或测试集上得到的。
满足指标,意味着只要它们达到一定阈值,例如运行时间快于 100 毫秒,但只要达到一定的阈值,你不在乎它超过那个门槛之后的表现,但它们必须达到这个门槛。

1.5 训练/开发/测试集划分(Train/dev/test distributions)

开发集和测试集都来自同一分布,可以把从不同地方得到的数据进行洗牌,混在一起。同时设立你的开发集加上一个单实数评估指标,这就是像是定下目标,在这里插入图片描述

1.6 开发集和测试集的大小(Size of dev and test sets)

对于某些应用,你也许不需要对系统性能有置信度很高的评估,也许你只需要训练集和开发集。我认为,不单独分出一个测试集也是可以的,这是注意在开发集测试时最好不要称他为测试集。。
然后对于dev和test的大小前面说过,在小数据时代一般为70/30,或者6/2/2的比例,在大数据时代,一般就98/1/1就行,按照情况去合理选取。
测试集的目的是完成系统开发之后,测试集可以帮你评估投产系统的性能。方针就是,令你的测试集足够大,能够以高置信度评估系统整体性能。所以除非你需要对最终投产系统有一个很精确的指标,一般来说测试集不需要上百万个例子。

1.7 什么时候该改变开发/测试集和指标?(When to change dev/test sets and metrics)

eg:若A比B准确率高,但A错误发给你一个不好的照片(例如你在识别猫的时候,给你ghs- -书中原话),那A就应该改善更多。
在这里插入图片描述
要把上面的这个式子改为下面的,为错误图片加大惩罚
在这里插入图片描述在这里插入图片描述
简单的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。
评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。
你处理机器学习问题时,应该把它切分成独立的步骤。。一步是弄清楚如何定义一个指标来衡量你想做的事情的表现,然后我们可以分开考虑如何改善系统在这个指标上的表现。你们要把机器学习任务看成两个独立的步骤,用目标这个比喻,第一步就是设定目标。所以要定义你要瞄准的目标,这是完全独立的一步,这是你可以调节的一个旋钮。在这里插入图片描述
如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。
例如如果你的测试集用的时网上的高质量图片,但是实际应用的时候却是用户的有点糊的图片,这样的话就应该改变测试开发集了,不能用高质量的去测试。

1.8 为什么是人的表现?(Why human-level performance?)

贝叶斯最优错误率(Bayes optimal error):一般认为是理论上可能达到的最优错误率,就是说没有任何办法设计出一个𝑥到𝑦的函数,让它能够超过一定的准确度。并且一般的问题就是人的表现就是最优错误率,一些团队或
一些研究小组正在研究一个问题,当你开始往人类水平努力时,进展是很快的。但是过了一段时间,当这个算法表现比人类更好时,那么进展和精确度的提升就变得更慢了。
在这里插入图片描述
事实证明,机器学习的进展往往相当快,直到你超越人类的表现之前一直很快,当你超越人类的表现时,有时进展会变慢。原因:1.人类的表现就已经离贝叶斯最优错误率差不多了。2.但第二个原因是,只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用了。

1.9 可避免偏差(Avoidable bias)

贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为可避免偏差,理论上是不可能超过贝叶斯错误率的,除非过拟合。
你的算法在训练集上的表现和人类水平的表现有很大差距的话,说明你的算法对训练集的拟合并不好,这时要去减少偏差。
当你理解人类水平错误率,理解你对贝叶斯错误率的估计,你就可以在不同的场景中专注于不同的策略,使用避免偏差策略还是避免方差策略。

1.10 理解人的表现(Understanding human-level performance)

思考人类水平错误率最有用的方式之一是,把它作为贝叶斯错误率的替代或估计。,在定义人类水平错误率时,要弄清楚你的目标所在,如果要表明你可以超越单个人类,那么就有理由在某些场合部署你的系统,也许这个定义是合适的。
例如,假如要考虑医学错误,一般人错误为3%,医生为1%,专家医生为0.7%,而一个医生团队讨论后得到的结果错误为0.5%,那这里就要用0.5%作为贝叶斯错误率。
这个时候找到贝叶斯错误率后,假如选择为0.5%,这个时候训练错误为4.5%,开发集错误为5%,那么这个时候最大的问题应该是减少偏差;如果训练错误为1%,开发集错误为5%,那么这个时候最大的问题应该是减少房差。
当你接近人类水平时学习进展会越来越难,因为这个时候你会很难分辨出来时要优化方差还是偏差。

1.11 超过人的表现(Surpassing human- level performance)

当训练的错误率低于人的错误率后,此时不好判断是过拟合还是仍有提升空间,对于贝叶斯错误率也是,这个时候就少了很多工具,也不明白真正的贝叶斯错误率在哪里。现在,机器学习的许多问题已经可以大大超越人类水平了,因为有很多的数据。

1.12 改 善 你 的 模 型 的 表 现 ( Improving your model performance)

在这里插入图片描述 ,如果你想提升机器学习系统的性能,首先看一下可避免误差有多大,然后看看你的开发错误率和训练错误率之间的距离,就知道你的方差问题有多大。换句话说,你应该做多少努力让你的算法表现能够从训练集推广到开发集,算法是没有在开发集上训练的。 如果你想用尽一切办法减少可避免偏差: 1)可用大规模模型。 2)使用更好的优化算法:比如说加入 momentum 或者 RMSprop,或者使用更好的算法,比如 Adam。 3)试试寻找更好的新神经网络架构,或者说更好的超参数:改变**函数、层数等。 如果你想用尽一切办法减少方差: 1)收集更多的数据。 2)尝试正则化。 3)试用不同的神经网络架构,超参数搜索。