译者|朱宪忠点评|孙淑娟这篇文章想和大家分享一下我优化深度学习模型输入数据的方法。作为一名数据科学家和数据工程师,我已经在自己的工作中成功地使用了这项技术。您将学习如何通过一些具体的真实开发示例使用上下文信息来丰富模型输入数据。这将帮助您设计更稳健和准确的深度学习模型。深度学习模型非常强大,因为它们非常擅长整合上下文信息。我们可以通过向原始数据的维度添加多个上下文来提高神经网络的性能。我们可以通过一些巧妙的数据工程来实现这一点。当您开发新的预测深度学习算法时,您可以选择最适合您的特定用例的模型架构。根据输入数据和实际预测任务的不同,你可能想到了很多方法:如果你打算对图像进行分类,那么你很可能会选择卷积神经网络;如果你正在预测时间序列或分析文本,那么LSTM网络可能是一个很有前途的选择。通常,有关正确模型架构的决策主要由流入模型的数据类型驱动。找到正确的输入数据结构(即定义模型的输入层)成为模型设计中最关键的步骤之一。我通常花更多的开发时间来设计输入数据的形状,而不是其他任何事情。需要明确的是,我们不必处理给定的原始数据结构,只需找到合适的模型即可。神经网络自身处理特征工程和特征选择(“端到端建模”)的能力并不能使我们免于优化输入数据的结构。我们应该以这样一种方式提供数据,即模型可以充分利用数据并做出最明智的决策(即最准确的预测)。这里的“秘密”因素是上下文信息。也就是说,我们应该用尽可能多的上下文来丰富原始数据。什么是语境?那么,上面的“上下文”具体是什么意思?让我们举个例子。玛丽是一名数据科学家,她正在开始一份新工作,为一家饮料零售公司开发销售预测系统。简而言之,她的任务是:给定一家特定的商店和一种特定的产品(柠檬水、橙汁、啤酒……),她的模型应该能够预测该产品在该特定商店的未来销量。预测将应用于数百家不同商店提供的数千种不同产品。到目前为止,该系统一直运行良好。玛丽的第一天拜访了销售部门,那里已经完成了预测,尽管是由经验丰富的销售会计师彼得斯手动完成的。她的目标是了解领域专家在什么基础上确定特定产品的未来需求。作为一名优秀的数据科学家,Mary预计Peters多年的经验将非常有助于定义哪些数据可能对模型更有价值。为了找出答案,玛丽问了彼得斯两个问题。第一个问题:“你分析什么数据来计算下个月我们将在柏林的商店销售多少瓶特定品牌的柠檬水?你如何解释这些数据?”彼得斯回答说:“随着时间的推移,我们迈出了在柏林销售柠檬水的第一步”。然后他画了下图来说明他的策略:在上图中,我们看到有一条连续的曲线,在7月/8月(柏林夏令时)达到峰值。夏季气温较高,人们更喜欢吃零食,所以产品的销量会增加,这是很直观的。在较小的时间范围内(大约一个月),我们看到销售额在大约10件商品的范围内波动,这可能是由于不可预测的事件(随机噪声)造成的。彼得斯继续说道:“当我看到夏季销售额增加而冬季销售额减少的重复模式时,我认为未来也很有可能发生这种情况,因此我会根据这种可能性来估算销售额。”这说得通。Peters在时间上下文中解释销售数据,其中两个数据点之间的距离由它们的时间差定义。如果数据不按时间顺序排列,就很难解读。例如,如果我们只查看直方图中的销售额分布,时间上下文就会丢失,我们对未来销售额的最佳估计将是某个总值,例如所有值的中位数。当数据以某种方式排序时,就会出现上下文。不用说,您应该以正确的时间顺序为您的销售预测模型提供历史销售数据,以保留数据库中的“免费”上下文。深度学习模型非常强大,因为它们非常擅长整合上下文信息,类似于我们的大脑(在这种情况下,当然是彼得斯的)。你有没有想过:为什么深度学习对图像分类和图像目标检测如此有效?因为在一张普通的图像中已经有很多“自然”的上下文:图像基本上是光强度的数据点,排列在两个背景维度上,即x方向的空间距离和y方向的空间距离。作为动画形式的电影(图像的时间序列),它增加了时间作为第三个上下文维度。由于上下文对预测非常有利,我们可以通过添加更多上下文维度来提高模型性能——尽管这些维度已经包含在原始数据中。我们通过一些巧妙的数据工程方法实现了这一点,如下所述。我们应该以这样一种方式提供数据,即模型可以从中获得最好的意义并做出最明智的决策。我通常花更多的开发时间来设计输入数据的形状,而不是其他任何事情。设计上下文丰富的数据让我们回到Mary和Peters讨论的问题。Mary知道,在大多数情况下,真实数据看起来不如上面的图表,所以她稍微修改了图表,使其看起来像这样:Mary问的第二个问题是:“如果最后一个销售数据点噪音水平高于平时怎么办?这可能是真实情况。也许产品正在开展成功的营销活动。也许配方已经改变并且现在味道更好。在这些情况下,效果会持续很长时间,并且未来的销售量将保持不变在同一高水平。或者它可能只是由于随机事件引起的异常。例如,访问柏林的学校班级恰好走进商店,所有孩子都买了一瓶这个柠檬水品牌。在这种情况下,销售额增长不稳定,只是噪音数据。在这种情况下,您如何判断这是否会成为真正的销售效果?”回答之前可以看到Peters不断挠头:“在这种情况下,我关心的是与柏林类似的商店的销售情况。例如我们在汉堡和慕尼黑的商店。这些商店具有可比性,因为它们也位于德国主要城市.我不会考虑在农村开店,因为我预计会有不同口味和喜好的不同顾客。”他将其他商店的销售曲线与两种可能的情况相加。“如果我看到柏林的销量增加,我认为这是噪音。但如果我看到汉堡和慕尼黑的柠檬水销量也有所增长,我认为这是一种稳定效应。”在困难的情况下,Peters会考虑更多数据以做出更明智的决策。他在不同商店的上下文中添加了一个新的数据维度。如上所述,当数据以某种方式排序时,就会出现上下文。要创建商店上下文,我们首先必须定义一个距离度量,以相应地对来自不同商店的数据进行排序。例如,彼得斯根据商店所在城市的大小来区分商店。通过应用一些SQL和Numpy编程技巧,我们可以为我们的模型提供类似的上下文。首先,我们想知道我们公司门店所在城市的人口规模;然后,我们根据人口差异测量所有商店之间的距离;最后,我们将所有销售数据组合在一个二维矩阵中,其中第一个维度是时间,第二个维度是我们的商店距离指标。图中的销售矩阵很好地概述了最近的柠檬水销售情况,并且可以直观地解释由此产生的模式。查看销售矩阵左下角的数据点:这是柏林的最新销售数据。请注意,亮点可能是一个例外,因为类似的商店(例如汉堡)不会重现销售额的急剧增长。相比之下,同类门店再现了7月的销售高峰。因此,我们总是需要添加一个距离度量来创建上下文。现在,我们将彼得斯所说的话转化为数学术语,可以根据产品所在城市的人口规模进行建模。在添加新的上下文维度时,我们必须非常仔细地考虑正确的距离度量。这取决于我们要预测的实体受到哪些因素的影响。影响因素完全取决于产品,距离指标必须相应调整。例如,如果您查看德国的啤酒销售情况,您会发现消费者很可能会从当地的啤酒厂购买啤酒(您可以在全国找到大约1300家不同的啤酒厂)。科隆人通常喝kursch啤酒,但当您向北驱车半小时进入杜塞尔多夫地区时,人们会避开kursch,转而喝颜色更深、带有麦芽味的alt啤酒。因此,就德国啤酒销售而言,按地理距离对商店距离建模可能是一个合理的选择。然而,其他产品类别(柠檬水、橙汁、运动饮料……)并非如此。因为我们添加了一个额外的上下文维度,所以我们创建了一个上下文丰富的数据集,其中的底层预测模型可以获得随着时间的推移和跨商店的柠檬水销售概况。这允许模型通过查看最近的销售历史记录并左右查看其他地点的类似商店,从而对柏林商店的未来销售做出明智的决策。从这里开始,我们可以更进一步,将产品类型添加为额外的上下文维度。因此,我们使用其他产品的数据来丰富销售矩阵,这些数据按与柠檬水的相似性排序(我们的预测目标)。同样,我们需要找到一个好的相似性度量。可乐比橙汁更像柠檬水吗?我们可以根据哪些数据来定义相似度排名?对于商店,我们有一个连续的衡量标准,即城市人口。现在我们正在处理产品类别。我们真正想要找到的是一种与柠檬水具有相似销售行为的产品。与柠檬水不同,我们可以对所有产品的时间分辨销售数据进行互相关分析。通过这种方式,我们获得了每个产品的Pearson相关系数,它告诉我们销售模式的相似程度。可乐等软饮料的销售模式可能与柠檬水类似,夏季销量增加。其他产品的行为将完全不同。例如,Gühwein是一种在圣诞市场供应的温暖、甜美的葡萄酒,可能在12月有一个强劲的销售高峰,而在今年余下的时间里几乎没有销售。【译者注】时间分辨(time-resolved):物理或统计名称。其他与之相关的常用术语还有时间分辨诊断测量(time-resolveddiagnosis)、时间分辨光谱(time-resolvedspectrum)等。互相关分析将显示Glühwein葡萄酒的皮尔逊系数较低(实际上为负),而可乐的皮尔逊系数较高。尽管向销售矩阵添加了第三个维度,但我们可以通过在相反方向上连接第二个维度来包含产品上下文。这将最重要的销售数据(柏林的柠檬水销量)放在了中心:店铺。这可能已经足以做出可靠和准确的预测,但我们还可以从其他数据源添加额外的有用信息。例如,饮料的购买很可能取决于天气。例如,在炎热的夏季,对柠檬水的需求可能会增加。我们可以提供天气数据(例如气温)作为矩阵的第二层。天气数据将在与销售数据相同的上下文(商店位置和产品)中排序。对于不同的产品,我们会得到相同的空气温度数据。但是对于不同的时间和店铺位置,我们会看到还是有差异的,这或许可以为数据提供有用的信息。这样,我们就有了一个3D矩阵,其中还包含销售和温度数据。请注意,我们没有通过包含温度数据来添加额外的上下文维度。正如我之前指出的那样,当数据以某种方式排序时,就会出现上下文。对于我们建立的数据上下文,我们按照时间、产品相似度和商店相似度对数据进行排序。然而,特征的顺序(在我们的例子中,沿着矩阵的第三维)是无关紧要的。事实上,我们的数据结构类似于RGB彩色图像。在RGB图像中,我们有两个上下文维度(空间维度x和y)和三个颜色层(红色、绿色、蓝色)。为了正确解释图像,颜色通道的顺序是任意的。一旦定义了它,就必须维护它的顺序。但是对于在特定上下文中组织的数据,我们没有距离度量。总之,输入数据的结构是不可预先确定的。因此,是时候充分发挥我们的创造力和直觉来挖掘新的可行性指标了。总结通过向时间分辨的销售数据添加两个额外的上下文和一个额外的特征层,我们获得了具有两个“通道”(销售和温度)的二维“图片”。该数据结构提供了特定商店近期柠檬水销售情况的综合视图,以及类似商店和类似产品的销售和天气信息。到目前为止,我们创建的数据结构非常适合由深度神经网络解释——例如,包含多个卷积层和LSTM单元。但限于篇幅,我不打算讨论如何基于此开始设计合适的神经网络。这可能是我后续文章的主题。我希望你能够拥有自己的想法,虽然你的输入数据的结构可能不是预先确定的,但你可以(应该)使用你所有的创造力和直觉来扩展它。通常,上下文丰富的数据结构不是免费提供的。为了预测公司所有商店中的各种产品,我们需要生成数千个上下文丰富的销售档案(每个商店产品组合一个矩阵)。你必须投入大量额外的工作来设计高效的处理和缓冲,以将数据转换成你需要的形式,用于神经网络的后续快速训练和预测周期。当然,通过这种方式,您可以从深度学习模型中得到您所期望的,该模型可以做出准确的预测,并且即使在嘈杂的数据中也非常稳健,因为它似乎可以“打破常规”并做出非常明智的决定。译者介绍朱宪忠,社区编辑,专家博主,讲师,潍坊某高校计算机教师,自由编程资深人士。原标题:Context-EnrichedData:TheSecretSuperpowerforYourDeepLearningModel,作者:ChristophM?hl
