[Day 13] 资料增强 — 我全都要.jpg

Collaboration and augmentation are the foundational principles of innovation. — Vaclav Smil

前言

[Day 09] 建立机器学习模型 — Andrew Ng 大神说要这样做 文章中,提到了资料本位模型开发的概念,它的中心思想就是藉由优化资料的品质来提升模型的表现。
而在昨天的文章中我们学会了如何利用错误分析找出模型的缺点在哪,今天我们就来谈谈如何以资料本位的方式来对症下药改善模型吧。

增强非结构化资料 (图片、声音、影像) 

资料增强 (Data Augmentation) 是改善资料的一个好方法,而在挑选要对哪部份资料做增强或进一步收集时,有一个很重要的心智图像 — 弹力带效应:
rubber band
*图片修改自 MLEP — A useful picture of data augmentation

以语音辨识为例,音档中会存在各种不同的噪音,而噪音间会有一些相对关系 (机械音 vs. 人声),因此在下图 X 轴代表的输入空间中,相似的机械音会聚集在一侧,而人声则聚集在另一侧。
各种噪音情境下的模型表现则散布在 Y 轴上,并以曲线连接起来代表模型在所有情况的表现,而这条曲线可以想像成弹力带,Model 曲线与 HLP 曲线之间的差距便是可以改善的空间。
假设模型在有人声的情况表现比较差,若我们对咖啡厅噪音做资料增强,大幅提昇了在此情况下的模型表现,这时候模型的整体表现其实会像弹力带的一个点被拉起来一样,附近甚至更远的弹力带都会跟着被拉起来。
也就是说,各种情境的模型表现都会提昇,而相似情境的表现则会跟着大幅提昇。
这个概念特别适用於非结构化资料,因此在计画资料增强时,可以先从进步空间最大的资料进行改善,再经由错误分析找出下一个进步空间最大的位置,如此逐点反覆进步其实是最有效率的作法。

虽然资料增强可以有效率地增加资料量 (特别是对於非结构化资料来说),但在执行时有很多选项,为了创造出模型真的能够学习的资料,必须遵守以下准则:

创造 (i)在模型表现很差,但 (ii)在人类表现水平或其他 baseline 表现很好的拟真资料

也就是说,经由资料增强产生的资料必须对模型有挑战性,但不能完全无法辨认。
而资料增强最糟的作法就是不断 Trial & error,浪费一堆时间重新训练,所以要以上述准则作为健全性测试,检视以下三点:

  • 产生的资料够拟真吗?
  • X→Y 映射清楚吗? (人类或其他 baseline 可以辨识吗?)
  • 模型目前在此类资料表现很差吗?

以图像资料增强为例,除了翻转、调整对比以外,只要符合准则,就算 PhotoShop 也是没问题的。

资料增强会伤害模型表现吗?

虽然资料增强是最常被用来提升模型表现的手段之一,但一般来说,初始训练、验证、测试集的分布应该会差不多。
这时候细心的孩子可能会想到,经过资料增强,某一类的资料量被提昇了,导致训练集的分布改变,这样会伤害模型表现吗?
其实对非结构化资料来说,如果模型够大 (Bias 较低) 且 X→Y 映射够清楚,那就没关系。
但如果模型比较小,大幅增加某类资料会使它花费过多资源在学习那类资料上,导致在其他类资料的表现下降。
而映射不清楚的问题反而较少发生,以台湾车牌 OCR 为例:
plate
民国 80 年代初期的车牌是有包含英文字母 I 的,因为目前比较少见了,所以资料量理应当较少,模型表现在辨认上可能也较差,但如果因此增强了 I 的资料,可能会让最右边这种更新式车牌的 1 被判断成 I,但实际上猜 1 是比较合理的。

增强结构化资料

结构化资料任务的资料集大小相对固定 (像是铁达尼号上面就这些人),要创造或收集全新的资料很困难,因此可以改为对现有训练集进行特徵工程来增加特徵 (features)。
结构化资料在错误分析时较难以 HLP 作为 baseline,可以改为参考使用者回馈或与竞争者比较以找出该增加哪
些特徵。
以餐厅推荐系统为例,经过错误分析,发现素食者常被推荐肉肉餐厅,但很难凭空创造使用者或餐厅的资料,所以只能增加有帮助的特徵:

  • 此人是否为素食者? (依照过往的订餐纪录)
  • 此餐厅是否有素食选项? (依照菜单)

增加的特徵不必是 0、1,也可以是另一个模型根据现有资料的预测结果。

深度学习还需要做特徵工程吗?

deep learning
*图片来源:Week 1 – Lecture: History, motivation, and evolution of Deep Learning

上图是大神 Yann LeCun 对机器学习与深度学习之差别的解释,这也让很多人 (包括我自己) 都误会只要使用深度学习模型就不需要再做特徵工程,虽然不用再手动设计特徵是深度学习的一个优势,但如果资料集很小,经由错误分析来设计特徵还是很有帮助的,特别是对结构化资料来说,因此不可以排斥特徵工程!
(非结构化资料不做倒是比较没关系)

好啦,以上就是今天的内容,Modeling 的内容也接近尾声了,明天见!
/images/emoticon/emoticon01.gif

参考资料


<<:  Swift纯Code之旅 Day18. 「选取TableViewCell」

>>:  Day 24 - 云端服务评估业务篇

D13 - 彭彭的课程# Python 函式基础:定义并呼叫函式(2)

今天有新闻说北部某医院疫苗注射没有稀释到 各位夥伴我之前也是在北部某联医注射AZ结果院方给我少打剂量...

Rails幼幼班--Active Record?

Codeing in the weekend ...TT 资料库 关联式资料库 SQL ORM 维...

【Day27】[演算法]-堆积排序法 Heap Sort

堆积排序法(Heap Sort)原理是利用「堆积」的资料结构为基础来完成排序。 堆积的介绍可以参考此...

【资料视觉化】COVID新冠疫苗施打一览 Seaborn

今晚来点轻松的。资料视觉化,复习一下DataFrame、seaborn 引用资料来源:country...

[30天 Vue学好学满 DAY30] 总结 & 完赛感言

最後一篇文,挤出了一些觉得在开发上容易踩的雷以及要注意的事情 要使用、渲染的变数除了传递进入元件的,...