简介
随着机器学习领域和技术本身的发展,项目中涉及的阶段和工作流程也在不断发展。
支持GPU的移动设备的出现为传统机器学习项目的工作流程引入了一个新阶段。新阶段的出现又造就了新的角色和职位。
本文的目标:
详细剖析机器学习项目中的每个阶段。
每个阶段涉及的角色。
每个阶段结束之后交付的最终结果。
下面开始进入正文。
问题定义
问题定义是计算机视觉/机器学习项目的首个阶段,重点工作是充分理解需要通过机器学习解决的问题。
通常这个阶段需要一个描述问题的人,以指定的形式记录有待解决的问题,并详细描述各个场景下的亲身经历。
这个阶段还需要从描述问题的人的角度捕获理想的解决方案。
描述问题的人可以是客户、用户或同事。
这个阶段的交付产物是文档(word或pdf),其中包括(但不限于)以下内容:
问题陈述
理想的解决方案
了解和洞察问题
技术要求
相关角色:IT业务分析师
研究
这个阶段是后续阶段(实现计划和开发工作等)的基础。
这个阶段需要对解决方案的采用形式进行探索,还要研究信息的数据结构、格式和来源。
对问题的理解、提出的解决方案以及可用数据的结合,可以帮助我们选择一个适合的机器学习模型,最终实现理想的解决方案。
在这一阶段,我们需要研究算法和模型实现所需要的硬件和软件,以便在后续阶段节省大量时间。
该阶段的交付物是文档(word或pdf),其中包括对以下内容的研究:
数据结构和来源
解决方案的形式
神经网络/模型架构
算法研究
硬件要求
软件要求
相关职位:机器学习研究员、数据科学家、AI研究员等。
数据聚合/挖掘/爬取
数据是机器学习和计算机视觉应用程序的动力。其中,数据聚合是至关重要的一步,它可以为模型的效率和性能打下基础。
解决方案的输出定义了数据的聚合。
数据理解至关重要,任何来源的数据都可以利用可视化工具或统计方法进行检查和分析。
数据检查通过确认数据的来源来提高数据的完整性和可信度。
数据的分析和探索工作还需要满足以下要求:
收集的数据需要足够多样化,以确保模型的预测能力可以适应各种情况。
收集的数据需要追求公正,以确保模型可以在推理过程中正确地归纳。
收集的数据必须充裕。
收集数据的工具各种各样。数据来源可以是API、XML、CSV或Excel文件等形式。在某些情况下,我们还需要从在线资源中挖掘或抓取数据。在抓取之前,请检查第三方网站的抓取/挖掘政策。
该阶段的交付产物是一个包含原始数据的文件夹,以及包含了注释文件的子文件夹。
相关职位:数据科学家、数据分析师。
数据准备/预处理/增强
数据的预处理步骤主要基于模型输入要求。回顾研究阶段,再想一想模型/神经网络架构所需的输入参数和要求。
预处理步骤将原始数据转换成能够成功训练模型的格式。
数据预处理包括(但不限于)以下步骤:
重新格式化数据,包括调整图像大小、修改颜色通道、减少噪声、图像增强等
数据清理
数据标准化
数据增强是为改善已获得数据的多样化而执行的步骤。图像数据的增强可以采取以下形式:
将图像旋转任意角度
放大或缩小图像
裁剪图像
翻转(水平或垂直)图像
均值减法
该阶段的交付产物是一个文件夹,其中包含标记为“训练”、“测试”和“验证”的子文件夹以及每个子文件夹中的注释文件。
相关职位:数据科学家
模型的实现
通常,我们可以利用各种在线资源提供的现成的模型来简化模型的实现。大多数机器学习和深度学习框架(例如PyTorch或TensorFlow)都提供预训练的模型,这些模型可用于加速模型的实现阶段。
这些经过预训练的模型都已在强大的数据集上进行了训练,而且达到了最新的神经网络架构的性能和结构。
一般,我们很少需要从零开始实现模型。模型实现阶段需要完成以下工作:
删除神经网络中的最后一层,把模型的用途改为特定的任务。例如,删除Resnet神经网络架构的最后一层,即可在编码器-解码器神经网络架构中使用已训练好的模型。
微调预训练模型
该阶段的交付产物是一个随时可以开展训练的模型。
相关职位:数据科学家、机器学习工程师、计算机视觉工程师、NLP工程师、AI工程师。
训练
在训练阶段,我们将使用前面的数据阶段提供的数据来训练模型。模型训练的实现包括将聚合的训练数据传递给模型,创建能够胜任专门任务的模型。
训练模型需要将训练数据分批后传递给模型,然后迭代指定次数的epoch。在训练的早期阶段,模型的性能和准确度可能不怎么令人满意。但随着模型不断执行预测,比较预测值与期望值,并在神经网络内反向传播,逐渐地模型就能够得到改善,更好地完成自己的任务。
在训练开始之前,我们必须设置超参数和网络参数,以控制模型训练阶段的效率。
超参数:在神经网络训练开始之前定义的值。通过初始化控制神经网络获得积极的训练结果。它们会影响机器学习和深度学习的算法,但不会受算法的影响。它们的值不会在训练过程中改变。超参数的例子包括正则化值、学习速率、层数等。
网络参数:这是神经网络中不会被手动初始化的部分。它们是神经网络内部的值,直接由神经网络控制。网络参数的例子之一就是神经网络内部的权重。
在训练期间,记录每次训练过程和每个epoch的指标非常重要。通常我们需要收集的指标如下:
训练准确度
验证准确度
训练损失
验证损失
为了整理和可视化训练指标,我们可以使用Matplotlib和Tensorboard等可视化工具。
我们可以通过可视化训练指标,来确定一些常见的机器学习模型的训练陷阱,例如欠拟合和过度拟合。
欠拟合:当机器学习算法无法学习数据集中的模式时,就会发生这种情况。我们可以利用更加适合该任务的算法或模型来解决这个问题。还可以通过识别数据中的更多特征并将其呈现给算法来修复欠拟合的问题。
过度拟合:这个问题指的是,算法在预测新的模式时,过度考虑训练过程中观测到的模式。这会导致机器学习算法无法准确地归纳没有见过的数据。如果训练数据不能准确地表示测试数据的分布,就有可能发生过度拟合。我们可以通过减少训练数据中的特征数量,以及通过各种技术降低网络的复杂性来解决过度拟合的问题。
该阶段的交付产物是开发好的模型和训练指标。
相关职位:数据科学家、机器学习工程师、计算机视觉工程师、NLP工程师、AI工程师
评估
到这个阶段的时候,你已经有了训练有素的模型,接下来需要对模型的性能进行评估。
我们需要使用“测试数据”来评估模型。在训练期间,不可以将测试数据展示给模型。测试数据代表了实际情况下应有的数据示例。
我们可以利用如下评估策略:
混淆矩阵(错误矩阵):提供真实的分类与分类器的结果匹配或不匹配次数的直观图示。混淆矩阵通常表示成表格的形式,行代表真实的观测结果,而列代表分类器的推断结果。
准确率与召回率:这两个是性能指标,用于评估分类算法、视觉搜索系统等。以评估视觉搜索系统(根据查询图像查找相似图像)为例,准确率可以反映出返回的相关结果的数量,而召回率代表数据集中返回的相关结果的数量。
该阶段的交付产物是包含评估结果以及评估策略输出的文档。
相关职位:数据科学家、机器学习工程师、计算机视觉工程师、NLP工程师、AI工程师。
参数调整和推断
参数调整是通过修改超参数值而优化模型的过程。参数调整的目的是提高模型的性能,这关系到评估结果的改善。
在调整完超参数并选择好新值后,需要再次训练和评估。
这个参数调整的过程需要持续到生成合适的模型为止。
推断是模型的真实测试。涉及的工作包括从合适的环境中获取的真实数据。到这个阶段的时候,我们应该对模型的性能充满信心。
该阶段的交付产物是改进后的模型。
相关职位:数据科学家、机器学习工程师、计算机视觉工程师、NLP工程师、AI工程师。
面向移动设备的模型转换
在建立好完善的模型后,我们需要将它放到移动设备上。
当我们为开发的模型需要在边缘设备(例如手机或物联网设备)中使用时,就需要进行模型转换。
模型转换需要将在GPU/CPU环境中训练好的机器学习模型转换成优化高效的版本。经过简化的模型能够存储在设备上,而且还能够有效准确地进行推断。
我们可以利用以下工具将模型转换到移动设备上:
Core ML: 这是苹果发布的框架,用于创建iOS专用的模型。CoreML提供了常见的机器学习任务(例如识别和检测)的模型。它是iOS版的TensorFlow Lite。
PyTorch Mobile:PyTorch是一款流行的机器学习框架,并广泛用于与机器学习相关的研究。PyTorch移动版可与TensorFlow Lite媲美,因为它可以将PyTorch训练的模型转换为可在iOS和Android设备上使用的移动版本。但是,PyTorch Mobile仍处于起步阶段,目前处于试验发布状态。
TensorFlow Lite:利用现有的TensorFlow模型,将其转换为.tflite文件形式的优化高效版本。简化后的模型非常小,可以存储在设备上,并且能够准确地进行推断。
该阶段的交付产物是针对设备使用进行过优化的机器学习模型。
相关职位:数据科学家、机器学习工程师、计算机视觉工程师、NLP工程师、AI工程师。
模型部署
部署最终训练好的模型是最后一个阶段。将我们的模型集成到更广泛的应用程序或工具生态系统中,或者只是围绕我们的模型构建交互式Web界面,是模型部署的重要步骤。
在生产环境中,这个阶段还需要通过监视评估模型的性能。这是为了确保模型表现良好,而且非常适合目标。
模型的再训练和更新也是模型部署阶段的一项工作。模型更新可确保我们模型能够满足任务的可信度和可靠性。
该阶段的交付成果包括:
模型性能监控系统
Web UI界面,用于访问模型的功能
支持模型重新部署的持续集成管道
352 thoughts on “机器学习项目必经十大磨难,看看自己渡过几劫了?”