deeplearning.ai第三部分

Week 1

1. 什么是ML策略?

  • 收集更多数据。
  • 收集更多样数据。
  • 迭代更多次。
  • 用不同的梯度下降算法。
  • 用更大的网络

……

2. 正交化

image-20200808170956757
image-20200808170956757

一个老式电视机上有很多按钮,每个按钮有明确的功能。每个按钮只有一种功能,这样控制就很明确了。汽车控制也是如此,尽量一个按钮一个功能。

在训练集上先训练好,然后测试集上测试,这时调整各个按钮,使其在测试集上表现得合适。

很少用早停法,这个旋钮同时影响两件事,所以不太好。

正交化是指控制,尽量一个参数只影响一方面效果。

3. 单一数字评估指标

image-20200808191741259
image-20200808191741259

单一数字评估指标很好,能清晰反应操作是否合适。

查准率和召回率。查准率是所有判定为真猫的项中,95%为真猫。召回率是实际为猫的图片中,有多少被识别出来。

两个不合适,我们要将两者结合,F1分数。

还要考虑运行时间,运行时间达到一定程度,或许就不用管了。

4. 训练/开发/测试数据集

如何设立开发集和测试集?尽量让开发集和测试集在同一个分布。

开发集、测试集的大小

以前几万数据,所以开发集、测试集30%、20%等等。现在数据量百万等,很大,可能只要1%开发、测试。

什么时候改变数据集和指标
image-20200808210924428
image-20200808210924428

评价指标不是全部,还要考虑其它因素。比如不推送不良图片。给不良推送一个更大的权重,这样修正评价指标。

先定义指标,然后不断去提高这个指标。

image-20200808210940127
image-20200808210940127

并且要考虑到你的数据和用户数据很可能不是同一个分布。这时你开发、测试集的好算法在用户数据不合适,要考虑更换指标或者数据集。

5. 为什么是人的表现?

机器是为了取代人做某项工作的,所以要与人比较。

在追赶人的表现的时候很快,但是后面就慢了,但是总不能完美。这叫做贝叶斯最优误差。就是从x到y映射的最优函数。

image-20200808211556144
image-20200808211556144

人的表现接近最优偏差,所以后面慢;并且超越人之前有很多工具,超越之后就不能了。比如标注数据,人可以对错误表现分析。

从这个角度来说,图的进步空间不大?

6. 可避免误差?

image-20200808212438250
image-20200808212438250

跟人的准确率比较。跟人差别大,很大进步空间。跟人差别小,减小方差。

可避免误差就是和人、和贝叶斯误差的差距。

理解人的表现

如何界定人的表现?人类误差水平是用来替代和估计贝叶斯误差的,所以是人类最好的标新啊。最优误差在最好之上。

假定人类表现是0.5%,训练无处是5%,然后开发误差是6%。那么应该改进模型,减少训练误差。

假定分别0.5%,1%,5%,改进方差的收益更大。

可以用人类水平误差估计贝叶斯误差,贝叶斯误差和训练误差差距是可避免误差,训练误差和开发误差是方差。

7. 超过人的表现

假设人的训练误差超过了人的最好表现,这时人想改进就很难了。(GAN?)

网络广告,推荐系统,物流预测,快递车预测,预测会不会还贷款,今天的机器学习远远超过了人类。机器看到的数据量多,更敏锐识别统计信息。

人类在自然感知任务表现得更好。但语言、视觉的一些任务人类已经被超越了。放射图等等及其超过了人。

即便自然感知,计算机也可以有超过人的水平了。

8. 改善模型表现

image-20200808221001162
image-20200808221001162
  • 基本假设:算法对训练集拟合很好;方差也不是很大。
  • 看看训练误差和贝叶斯误差之间距离;再看看开发误差和训练误差之间的差距。
  • 可避免误差,训练大模型,训练更长、更好地优化算法,换一个结构。
  • 方差:更多数据,正则化等。

Week 2

1. 误差分析qelvljzujqfbtsdj

猫分类器,在狗图片上表现得更好。

找到100个错误的例子,人工逐一查看,如果100个错误标记里有5个狗。说明即便解决了购得问题,也只能提高5%。天花板。

假设100个里面有50个,那解决狗的问题很重要。这里人为参与挺重要的,可以帮助我们更好地做决定。

在做误差分析时,可以并行实现很多个想法。比如狗识别、大猫识别、模糊图片。可以列一个表格。每个错误的,标注一下错哪里了。统计百分比。

2. 清楚标注错误的数据

image-20200809153733896
image-20200809153733896

深度学习算法对于训练集的随机错误很鲁棒,如果误差足够随机,那么不管也没事。修正也行,不管也行,只要总训练集很大。

对系统性的错误就不行了,如果做标记的人一直把白狗标记为猫,那就不行了。

误差分析时候可以在加一列统计。

人为要更多参与误差分析。

image-20200809153744761
image-20200809153744761

3. 快速搭建一个新的系统,并迅速迭代。

科研是增量学习,项目是全局学习。

如果想新设计一个机器学习系统,那么可以先建立,后迭代。

集中精力是很重要的一件事情,不要想一下子就把所有方向,所有事情都做好。

4. 在不同的划分上进行训练并测试

image-20200814120112163
image-20200814120112163

语音激活汽车后视镜项目数据集的划分。对于训练集,可以把你所有的数据放进去,开发集和测试集是从实际的语音激活后视镜得到的。或者将后视镜的数据分训练集一半。

5. 不匹配数据集划分的偏差和方差

也许算法在训练数据集上表现得很好,但是因为数据的不同,测试数据集上效果表现得更不好。

这里有两个变量,数据集和新数据。

我们有必要打乱数据集,分出一个训练-开发集,全部来自于训练集数据。在训练集上优化,然后发现无处1%,在训练开发集上误差9%,在开发集误差10% 。这是方差问题。

如果训练-开发集表现1.5%,那这是数据不匹配问题。

如果都很差,并且差的差不多,那可能是偏差问题。

所以我们需要看训练集、训练开发集、开发集。

数据集意外表现得好

如果开发集和测试集表现得更好,那可能是数据集的问题,那个数据集更好。

更通用的方式

列一个表格,一边是数据集,一边是有没有训练过。数据集表明数据不匹配的差距,另一个方向表明方差的差距。

image-20200814130807022
image-20200814130807022

6. 数据不匹配问题

数据不匹配问题,那怎么处理呢?亲自进行误差分析,比较数据的区别。

可以合成数据加上噪音,得到更多的数据。人工合成数据有一定问题,比如一个噪音放10000次,可能就过拟合了。

image-20200814131855341
image-20200814131855341

有人想在游戏里把汽车都标注出来用来训练,这样是不行的。因为这只是所有汽车的一个子集,很可能过拟合。

7. 迁移学习

一个训练好的神经网络,把习得的知识用来识别X射线图。把最后的层处理更换掉,其它的不变。

预训练,微调。之所以有用,是因为数据集中邪恶到了结构信息,图像形状的信息,其中一定的知识可能会有用。学到点、线、对象的一部分什么的。

迁移学习问题适用于一些任务数据量比较大,另一些任务数据量比较小。

迁移学习什么时候有用?
image-20200814133915687
image-20200814133915687

当两者输入相同时,且A任务比B任务数据多很多时,那迁移学习会有意义。

8. 多任务学习

如果你做简单的自动驾驶,要识别路上遇到的东西,比如车、行人、交通灯什么的。

这个和softmax有区别,最后的输出不是多选1,而是每个选项二分类。这其实是四个任务,我们可以训练多个神经网络,但是训练一个神经网络做四个任务。

什么时候有意义
  • 多个任务可以共用低层次特征,如自动驾驶。
  • 每个任务的数据量很接近。
  • 每个任务都可以训练一个单独的神经网络。

多任务学习的使用场景没迁移学习多,比较少见。计算机视觉算一个。

image-20200814143152652
image-20200814143152652

9. 什么是端到端的深度学习

语音识别为例,传统的方法需要很多个阶段。AI做得就是直接从数据直接到最后识别结果。

人脸识别门禁系统,比较好的方法是先检测出人脸,然后放大图像的那个部分,裁剪图像使人脸居中。然后投喂到网络,再进行识别,比较数据库中的其它数据。

机器翻译,传统上机器翻译也是很复杂的,有很多步骤。深度学习也很好用,直接端到端了。

观察手部X光照片,判断孩子年龄。用来看孩子发育是否正常。这里我们不需要深度学习也可以,直接拍照,然后判断长度。因为我们数据不多。

是否使用端到端深度学习

如果你有x->y的数据,不管过程中的原理,不加入人类的偏见,直接训练,端到端。比如语言中音位的分解,这可能只是人为想的。

但这样是有缺点的,可能会需要大量的标注好的数据。排除了人类之前经验的帮助。

image-20200814150420682
image-20200814150420682
关键问题

是否有充足的数据,能够把你想表达的映射表达清楚。

怎么自动驾驶

首先识别出来,还要做出走哪条路线的决定,方向盘角度、加速和制动指令。前面识别是深度学习,后面则是运动规划。

如果想要深度学习作为单独的组件,要仔细选择要学习的x到y的映射类型。这取决于哪些任务你可以学习到数据。