许多专业人士认为机器学习是一种先进技术,当其他方法失败时可以采用。
在他们看来,这是一种复杂的工具,专门用于解决传统方法无法解决的复杂问题。
因此,当我与企业交谈时,我经常听到这样的评论:“我们不需要为此使用机器学习”或“我们多年前在机器学习出现之前就解决了这个问题”。
有时,这些评论是正确的,使机器学习成为错误的技术。然而,更常见的情况是,这些评论源于一种错误的信念,即他们的传统方法是直接的替代方案,这种误解导致企业坚持使用和维护过时的解决方案。
事实上,机器学习是一种出色的工具,可用于为简单问题创建强大且易于维护的解决方案。
您通常可以用一行代码替换数千行代码,从而更准确、更可靠地执行任务。我曾与几家公司合作过,当我们用机器学习算法取代他们的手动规则时,他们惊讶地发现他们的解决方案变得多么容易。
让我们一起探讨这个主题,并通过真实的例子学习一些可以应用到工作中的宝贵经验。
简单任务示例
我的公司开发深度学习算法,用于检测视觉数据中的损坏和重要组件。目前,我们主要关注铁路行业,因此,我的许多示例都围绕铁路行业数据的计算机视觉展开。
但是,这些示例直接适用于其他数据集、行业和用例。
对于机器学习工程师来说,只要数据类型保持相似并且您可以联系到具有领域专业知识的人,那么当您切换到另一个用例或行业时,差别并不大。
在轨道图像中检测铁轨头
我想通过一个示例来解释本课,在这个示例中,我使用机器学习代替传统的计算机视觉,在一小时内创建了一个可靠的解决方案。让我们首先看一下这三张在不同日期从测量列车上拍摄的铁路枕木的 2D 图像。
每张图片中的轨枕都是相同的,我们想开发一种指纹算法,为每个轨枕创建一个 ID,以便随着时间的推移对其进行跟踪。然而,为了让这项任务更易于管理,我首先想对齐图像,以确保铁轨每次都位于同一位置。
传统方法
检测和对齐轨道是一项简单的任务,大多数人会尝试使用传统方法来解决。这些方法涉及利用 y 轴上像素值变化或边缘检测的规则。这些规则很容易定义,您可以快速制作出大多数情况下都有效的规则。
当你必须更新规则来处理失败的示例时,问题就开始了。
随着你添加新的巧妙方法来检测轨道,代码的复杂性会增加,你开始花费大量时间来处理边缘情况。
如果您拥有大量质量参差不齐的数据,这些边缘情况会迅速堆积,如果发生这种情况,手动创建规则可能会陷入困境。您制定的规则越多,维护和更改的难度就越大。
使用机器学习的简单解决方案
为了用机器学习解决这个问题,我使用 PyTorch 创建了一个具有 80,000 个参数的微型 CNN。该算法将图像作为输入并返回每列的概率,告诉我它是否是铁轨的中心。
我拍摄了原始图像并提取了两个足够大的区域以知道它们包含铁轨,将每个区域缩小到 128x64 像素,并标记了铁轨的中心。
为了创建一个几乎完美的解决方案,我只需要注释 20 张图片,这花了我 5 分钟。
我还制作了一个包含 50 张图片的验证集,以确保我的算法适用于以前从未见过的数据。认为在训练机器学习算法之前需要大量数据是企业中最常见的误解之一。
由于我的算法很小,我不需要 GPU,可以直接在 Macbook 上训练算法。训练大约需要 10 分钟,我的电脑风扇几乎没有发出任何声音。
整个解决方案花了我一个小时的时间。
它几乎完美无缺,只缺少 2-3 个像素的中心,这对于我的预期用例来说已经足够好了。以下是我的验证数据中的一些示例,其中红线是事实,蓝线是我的算法的输出。
改进解决方案
我本可以在相似的时间内使用传统方法解决这个问题,但我的机器学习解决方案最好的部分是它很容易改进。
为了得到更好的解决方案,我唯一需要做的就是创建更多的训练数据。这太棒了,因为只花了 5 分钟的注释就得到了一个可行的解决方案。如果我添加算法遇到困难的示例,我只需要 10 个数据点就能获得显著的改进。
经验教训
主要的教训是将机器学习视为一种多功能技术,可用于解决简单和复杂的问题。训练和部署算法与任何其他方法一样容易(甚至更容易)。以下是每个人都应该了解的一些关键要点。
机器学习解决简单问题的方法有……
快速发展
一名熟练的机器学习工程师应该能够在不到一天的时间内为一个简单问题创建第一个解决方案。你标记几个数据点,创建一个小型神经网络(或其他算法),然后专注于以一种有助于算法学习正确事物的方式来表达任务。
对极端情况更加稳健
当你训练机器学习算法时,你会不断对数据进行细微调整,例如改变亮度。这称为数据增强,如果我们使用得当,算法可以学会处理几乎任何极端情况。