目录
- 开发机器学习系统的过程
- 开发机器学习案例
- 1.问题描述
- 2.创建监督学习算法
- 3.解决问题
- 4.小结
- 误差分析
- 1.概述
- 2.误差分析解决之前的问题
- 3.小结
- 增加数据
- 1.简述
- 2.增加数据案例一
- 3.增加数据案例二
- 4.添加数据的技巧
- 5.空白创建数据
- 6.小结
- 迁移学习
- 1.简述
- 2.为什么迁移学习有作用
- 3.小结
- 机器学习的整体步骤
- 将模型部署到生产环境
- 公平偏见与道德
- 1.偏见
- 2.不道德消极
- 3.建议
- 小结
- 课后问题
开发机器学习系统的过程
机器学习发展的迭代循环:确定系统架构、选择模型和数据、设定超参数,然后实现和训练模型。初次训练通常效果不理想,因此需要进行诊断(如偏差和方差分析)并进行误差分析。根据诊断结果,调整模型结构、超参数或数据,重复这一循环,直到达到预期性能。
开发机器学习案例
1.问题描述
左边的例子展示了一个典型的垃圾邮件,其中包含像“劳力士手表”这样的内容。垃圾邮件发送者有时会故意拼错单词来迷惑识别器。右边是吴恩达发给他弟弟的正常邮件,关于一起过圣诞节的事情。那么,如何构建一个分类器来识别垃圾邮件和非垃圾邮件呢?
2.创建监督学习算法
输入特征x是电子邮件的特征,输出标签y是1或0,表示它是垃圾邮件或非垃圾邮件。这是一个文本分类的例子,通过分析电子邮件文本并将其归类为垃圾邮件或非垃圾邮件。
构建特征的一种方法是选择字典中最常用的一万个单词,并用这些单词来定义特征x_1到x_10,000。例如,对一封电子邮件,如果某个单词出现,则相应特征为1,否则为0。另一种方法是计算每个单词在电子邮件中出现的次数。
有了这些特征后,可以使用分类算法,如逻辑回归或神经网络,根据这些特征x来预测标签y。
3.解决问题
训练完初始模型后,如果效果不佳,你可能会有多种改进算法的想法。例如,可以尝试收集更多数据,如通过蜜罐项目获取垃圾邮件数据,或者开发更复杂的特征,如基于电子邮件路由信息或处理邮件正文中的拼写错误。
为了选择最有前景的改进方向,可以根据算法的表现来决定。如果算法有高偏差,收集更多数据可能效果不大;如果方差高,增加数据会有帮助。选择正确的方向能显著加速项目进展。
4.小结
在机器学习和开发的迭代循环中,你可能会有许多修改模型或数据的想法。不同的诊断方法可以指导你选择最有希望的架构。在前几个视频中,我们讨论了偏差和方差。在下个视频中,我将介绍误差分析过程,这是另一个关键方法,用于判断哪些架构选择可能有效。我们将以构建垃圾邮件分类器为例,探讨误差分析的应用。
误差分析
1.概述
方差偏差在第一位,误差分析在第二位。
在选择如何改进学习算法性能时,偏差和方差是最重要的概念,而误差分析则是其次。具体来说,假设你有500个交叉验证样本,算法错误分类了其中的100个。误差分析指的是手动检查这100个错误样本,找出常见的错误类型。例如,如果许多错误样本是医药垃圾邮件,你可以统计这些类型的错误数量,并决定是否针对这些错误进行优化。
通过误差分析,你可以发现某些类型的错误更普遍,从而决定优先解决这些问题。例如,如果故意拼写错误的影响较小,那么可能不需要优先解决。这个过程可以帮助你高效地选择改进方向,并避免在影响较小的问题上浪费时间。
最后,误差分析可以为你提供灵感,例如收集更多特定类型的数据或设计新的特征,从而改进算法性能。
2.误差分析解决之前的问题
回到这个列表,偏差方差分析可以告诉你收集更多数据是否有帮助。根据示例算法的误差分析,更复杂的邮件特征可能有些帮助,但不大,而更复杂的特征用于检测垃圾邮件或钓鱼邮件则帮助很大。检测拼写错误的效果相对较小。
3.小结
偏差方差诊断和误差分析对筛选和决定模型改进方向非常有帮助。但误差分析对人类擅长的问题更容易,例如识别垃圾邮件。而对于人类也不擅长的任务,如预测广告点击率,误差分析较难进行。但在适用的情况下,误差分析能显著帮助集中精力于更有前景的改进,节省大量时间。在下个视频中,将深入探讨如何高效地增加数据。
增加数据
1.简述
这里分享一些增加、收集甚至创建更多数据的技巧。每个机器学习应用可能需要不同的方法,因为不同问题有不同的数据需求。
通常,增加所有类型的数据既耗时又昂贵。相反,更有效的方法是根据误差分析的结果,重点增加那些算法表现不佳的数据类型。例如,如果误差分析显示医药垃圾邮件是大问题,则应集中精力获取更多这类数据。
另一种方法是数据增强,特别适用于图像和音频数据。通过对现有数据进行旋转、缩放、对比度调整等变换,生成新的训练样本。这可以显著增加训练集的大小,提高算法的性能。
总结来说,重点增加特定类型的数据或使用数据增强技术,可以更有效地提升算法性能。
2.增加数据案例一
一个更高级的数据增强示例是对字母A应用网格,并进行随机变形。通过扭曲网格,可以生成许多变形后的字母A,从而创建更丰富的字母A样本库。这种扭曲过程将一个图像样本转化为多个训练样本,帮助学习算法更加稳健地学习。
3.增加数据案例二
数据增强同样适用于语音识别。例如,在语音搜索应用中,可以将原始音频剪辑(如“今天的天气怎么样”)与嘈杂的背景音(如人群噪音或汽车噪音)混合,生成包含背景噪音的新音频剪辑。通过这种方式,可以将一个原始音频变成多个训练样本,如带有背景噪音或差的手机连接音频。这种技术对增加训练数据量、提高语音识别系统的准确性非常关键。
4.添加数据的技巧
进行数据增强时,所做的变换或扭曲应与测试集中的噪声或失真类型相似。例如,对字母A进行扭曲,或在音频中加入背景噪音或差的手机连接,这些都应与测试集中的情况相符。这些方法会有助于数据增强。而添加纯粹随机且无意义的噪声则通常没什么帮助,因为这类噪声在测试集中很少见。因此,数据增强应模拟测试集中可能出现的情况,以便算法在这些条件下表现良好。
5.空白创建数据
数据增强通过修改现有的训练样本来创建新的样本,而数据合成则是从零开始生成全新的样本。
例如,在图片光学字符识别(OCR)任务中,可以通过计算机文本编辑器使用不同字体、颜色和对比度生成合成数据。这些合成数据看起来与真实数据非常相似,可以用于训练OCR算法,从而显著提升算法性能。虽然编写生成真实感合成数据的代码需要花费大量时间,但它可以生成大量训练数据,对算法性能有巨大提升。数据合成主要用于计算机视觉任务,较少用于其他领域。
6.小结
本节介绍了多种数据工程技术,用于改进机器学习系统中的数据处理。传统的模型中心方法主要关注改进算法或模型,而保持数据集不变。如今,由于现有算法(如线性回归、神经网络、决策树等)已经非常强大,采用数据中心方法可能更有效,即关注改进和增强数据。
数据中心方法包括:根据误差分析结果收集更多特定数据、使用数据增强生成更多图像或音频、通过数据合成创建新的训练样本。这些方法可以提高算法性能。
此外,对于数据稀缺的应用,可以使用迁移学习,从其他相关任务中获取数据来提升算法性能。迁移学习在某些情况下非常强大,下个视频将详细介绍其工作原理。
迁移学习
1.简述
迁移学习是一种在数据不足的情况下,通过利用其他任务的数据来提高当前任务性能的技术。
例如,假设你想要识别从0到9的手写数字,但没有足够多的这些手写数字的带标签数据,导致通过这个小数据集训练的神经网络性能不够好。这时可以使用迁移学习。比如我们找到一个使用一百万张图片和一千个分类的大数据集预训练好的神经网络,得到其各层参数。然后,我们将这个预训练模型的参数应用到原有的小数据集的神经网络中,将其输出层改为较小的输出层。最后,通过优化算法对新任务进行训练或微调,以提高模型的性能。
小数据集的神经网络有两种训练方式:只训练输出层参数或训练所有参数。迁移学习使得新模型从更好的初始参数开始,能够在小数据集上取得更好的效果。如果你的训练集很小,选项1可能效果更好;如果训练集稍大一些,选项2可能更好。
首先在大数据集上训练,然后在小数据集上微调参数,被称为监督预训练和微调。迁移学习的优势在于它能够利用其他研究者预训练好的神经网络,通过替换输出层并进行微调,快速实现高效的模型。
2.为什么迁移学习有作用
(1)概述
迁移学习有效的原因在于,通过训练神经网络识别多种不同的图像(如猫、狗、汽车和人),神经网络学会了检测通用的图像特征,如边缘、角落和基本形状。这些特征对其他计算机视觉任务(如识别手写数字)也非常有用,因此可以将这些学习到的参数应用到新任务中,提升其识别性能。
(2)注意事项
预训练的限制在于输入类型必须一致。对于计算机视觉任务,预训练和微调都需要在图像数据上进行。对于语音识别系统,需要在音频数据上预训练神经网络,再在自己的音频数据集上微调。不同类型的应用需要在相应类型的数据上预训练,例如文本数据的应用需要在文本数据上预训练并微调。
3.小结
迁移学习有两个步骤:第一步是下载在大数据集上预训练的神经网络,输入类型需与应用一致;第二步是在自己的数据上进一步训练或微调。使用预训练的神经网络可以在小数据集上取得不错的效果。
机器学习的整体步骤
机器学习项目的完整周期包括以下步骤:
- 确定项目范围:决定项目内容和目标。例如,进行语音识别以实现语音搜索。
- 数据收集:获取训练模型所需的数据,如音频和转录标签。
- 训练模型:使用收集的数据训练模型,并进行偏差方差或误差分析以改进模型。
- 循环改进:根据误差分析,回去收集更多数据并继续改进模型,直到模型表现良好。
- 部署模型:在生产环境中部署模型,让用户使用。
- 持续监控和维护:监控模型性能,维护和改进模型以应对性能下降。
通过这些步骤,确保模型在实际应用中表现稳定和高效。
将模型部署到生产环境
当你训练出高性能的机器学习模型(如语音识别),通常会将其部署到一个推理服务器上,通过API进行预测。当用户通过移动应用说话时,应用将音频传递给推理服务器,服务器返回语音转录结果。
实现这一过程可能需要编写相关代码,具体的软件工程量取决于应用需求。记录输入数据和预测结果对系统监控非常有用,可通过监控发现数据变化并重新训练和更新模型。
部署可能需要一些软件工程,对于小规模应用或在少数服务器上运行,需求较少。MLOps(机器学习运营)是一个新兴领域,涉及系统地构建、部署和维护机器学习系统,确保模型可靠、扩展性好、日志记录和监控完善,并能够及时更新模型。如果要为数百万人部署系统,需要高度优化的实现,以控制计算成本。训练高性能模型是关键,但部署时需要考虑和解决额外步骤。
公平偏见与道德
1.偏见
机器学习算法影响着数十亿人,构建这些系统时需要考虑公平和伦理问题。历史上出现了一些带有严重偏见的系统,如歧视女性的招聘工具和对深色皮肤个人不公平的人脸识别系统。这些系统不应该被推出。我们应避免构建和部署存在偏见的问题系统,并确保我们的算法不会强化负面刻板印象。这些措施有助于创建一个更公正和道德的机器学习环境。
2.不道德消极
机器学习算法存在一些负面使用案例,如深度伪造视频、传播有害言论和生成虚假内容等,这些都具有不道德性。我们不应构建对社会有负面影响的系统。伦理问题非常复杂,没有简单的解决方案。我建议大家在工作中遵循一些一般性的指导和建议,以确保工作更少偏见、更公平和更有伦理。
3.建议
以下是一些建议,帮助你在部署可能造成危害的系统之前,使你的工作更公平、减少偏见和更具伦理:
-
组建多元化团队:组建一个多元化团队,特别是强调对弱势群体可能造成的潜在危害,进行头脑风暴。多元化不仅包括性别,还包括种族、文化等多方面。这有助于团队更好地识别潜在问题并在系统上线前解决。
-
文献搜索:查找行业或特定应用领域的标准和指南。例如,在金融行业,已经开始建立有关系统公平性和无偏见性的标准。这些标准可以指导你的工作。
-
系统审计:在部署前,审计系统以识别可能的危害。培训模型后,但在投入生产前,检查系统是否对某些群体(如特定性别或种族)存在偏见,并确保在部署前解决这些问题。
-
制定缓解计划:如果适用,制定一个缓解计划。一个简单的缓解计划是回滚到先前较为公平的系统。即使在部署后,也要持续监控可能的危害,以便在出现问题时能够快速执行缓解计划。例如,所有自动驾驶汽车团队在上路前都制定了应对事故的缓解计划,这样如果发生事故,可以立即执行计划,而不是在事后手忙脚乱地处理。
小结
机器学习中的伦理、公平和偏见问题需要认真对待,因为这些系统会影响很多人。不同项目的伦理影响可能不同,但所有从事机器学习工作的人都应努力发现和解决问题,避免之前的错误。最后,鼓励观看关于处理偏斜数据集的可选视频。
课后问题
问题:哪种方式是进行错误分析的方式?
选项:
- 计算测试误差 (J_{test})
- 收集额外的训练数据以帮助算法做得更好
- 计算训练误差 (J_{train})
- 手动检查模型错误分类的一部分训练示例,以识别共同的特征和趋势
答案:手动检查模型错误分类的一部分训练示例,以识别共同的特征和趋势
答案解释:通过识别相似类型的错误,你可以收集更多类似于这些错误分类示例的数据,从而改进模型在这些类型示例上的表现。
问题:我们有时会取一个现有的训练示例并对其进行修改(例如,通过略微旋转图像)以创建一个具有相同标签的新示例。这个过程叫什么?
选项:
- 数据增强
- 机器学习诊断
- 偏差/方差分析
- 错误分析
答案:数据增强
答案解释:是的,修改现有数据(如图像或音频)称为数据增强。
问题:进行迁移学习的两种可能方法是什么?提示:四个选项中有两个是正确的。
选项:
- 你可以选择训练模型的所有参数,包括输出层以及早期层。
- 你可以选择只训练输出层的参数,并保持模型的其他参数固定。
- 给定数据集,先进行预训练,然后在相同数据集上进一步微调神经网络。
- 下载一个预训练模型,并在不修改或重新训练的情况下使用它进行预测。
答案:
你可以选择训练模型的所有参数,包括输出层以及早期层。
你可以选择只训练输出层的参数,并保持模型的其他参数固定。
答案解释:正确。训练模型的所有层可能有助于你在自己的训练集上训练模型的所有层。这可能需要更多时间,与你仅训练输出层的参数相比。正确。模型的早期层可能可以直接使用,因为它们正在识别与你的任务相关的低级特征。