TowardsDataScience 博客中文翻译 2020(五百七十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用深度神经网络知道已知的未知

原文:https://towardsdatascience.com/knowing-known-unknowns-with-deep-neural-networks-caac1c4c1f5d?source=collection_archive---------37-----------------------

深度神经网络中随机和认知不确定性的定义和量化

深度神经网络 (DNNs)是易于实现的通用机器学习模型,可以在许多领域实现最先进的性能(例如,计算机视觉自然语言处理语音识别推荐系统)。然而,DNNs 并不完美。你可以阅读 文章博文书籍中的任意 讨论有监督深度学习的各种问题。在本文中,我们将关注一个(相对)狭窄但重要的问题:标准 DNN 无法可靠地显示何时预测不确定。对于一个拉姆斯费尔德式的来说:DNNs 没有能力知道“已知的未知”

作为 DNNs 中这种故障模式的一个简单例子,考虑为二进制分类任务训练 DNN。您可能会合理地假设 DNN 的 softmax(或 sigmoid)输出可用于测量 DNN 在其预测中的确定性或不确定性;您可能会认为,看到接近 0 或 1 的 softmax 输出表示确定性,接近 0.5 的输出表示不确定性。实际上,soft max 输出很少接近 0.5 ,并且通常接近 0 或 1,不管 DNN 是否做出正确的预测。不幸的是,这个事实使得天真的不确定性估计变得不可靠(例如,softmax 输出上的)。

公平地说,不确定性估计并不是 DNN 的所有应用都需要的。如果一家社交媒体公司使用 DNN 来检测图像中的人脸,以便其用户可以更容易地标记他们的朋友,而 DNN 失败了,那么这种方法的失败几乎无关紧要。用户可能会稍感不便,但在社交媒体或广告等低风险环境中,不确定性评估对于从 DNN 中创造价值并不重要。

然而,在高风险环境中,如自动驾驶汽车、医疗保健或军事应用,衡量 DNN 预测的不确定性可能至关重要。不确定性度量可以降低部署模型的风险,因为它们可以提醒用户这样一个事实,即某个场景本身很难进行预测,或者该场景以前没有被模型看到过。

在自动驾驶汽车中,由于信噪比较低,DNN 在夜间的预测更不确定(至少在光学相机的测量中),这似乎是合理的。在医疗保健领域,如果向诊断皮肤癌的 DNN 显示一幅特别模糊的图像,尤其是如果模型在训练集中没有看到如此模糊的例子,那么它应该更加不确定。在分割卫星图像的模型中,如果对手改变了他们伪装某些军事设施的方式,DNN 应该更加不确定。如果这些情况中固有的不确定性被传达给用户,该信息可以用于以更安全的方式改变系统的行为。

在本文中,我们探讨了如何估计两种类型的统计不确定性以及在 DNN 的预测。我们首先讨论这两种类型的不确定性的定义,然后我们强调一种流行的和易于实现的技术来估计这些类型的不确定性。最后,我们展示并实现了一些利用这些不确定性估计的分类和回归的例子。

对于那些对代码示例最感兴趣的人来说,这里有两个 Jupyter 笔记本,一个有玩具回归示例,另一个有玩具分类示例。在下面的“示例和应用”一节中也有基于 PyTorch 的代码片段。

我们所说的“不确定性”是什么意思?

剑桥词典将不确定性定义为:“某事未知的情况。”有些事情可能不为人知有几个原因,从统计学的角度来看,我们将讨论两种类型的不确定性,称为偶然(有时也称为偶然)和认知不确定性。

偶然不确定性与不确定性的客观或物理概念有关,它是数据生成过程中固有的一种不确定性。由于偶然的不确定性与数据的内在质量有关,我们假设它不能通过收集更多的数据来减少;即它是不可约的

一个简单的例子可以很好地解释随机不确定性:假设我们有一个硬币,它有正面或反面的正概率。那么,即使硬币有偏差,我们也无法确定地预测下一次投掷会是什么,不管我们做了多少次观察。(例如,如果硬币有偏向,正面朝上的概率为 0.9,我们可能合理地猜测正面将在下一次投掷中出现,但我们不能确定它会发生。)

认知不确定性与主观或个人的不确定性概念有关——这是一种由于对真实数据生成过程的了解或无知而产生的不确定性。由于这种类型的不确定性与知识有关,我们假设它可以减少*(例如,当更多的数据被收集并用于训练时*);也就是说,它是可约的。

认知的不确定性可以用回归的例子来解释。假设我们正在拟合一个线性回归模型,我们有-1 和 1 之间的自变量 x ,以及所有 x 的对应因变量 y 。假设我们选择了线性模型,因为我们相信当 x 在-1 和 1 之间时,模型是线性的。然而,我们不知道当一个测试样本 **x *** 远远超出这个范围时会发生什么;说是在 x * = 100。因此,在这种情况下,模型规格存在不确定性(例如,真实函数可能是二次的),并且存在不确定性是因为模型没有看到测试样本范围内的数据。这些不确定性可以捆绑成关于真实数据生成分布的知识的不确定性,这是认知的不确定性。

关于概率和不确定性的术语偶然性认知性,似乎是由伊恩·哈金在他的书《概率的出现】中引入现代词典的,该书讨论了 1600 年至 1750 年的概率历史。对于外行读者来说,这些术语并不清楚,但它们的定义与概率和统计基础中最深层的问题有关:概率意味着什么?如果你熟悉术语频率主义者贝叶斯,那么你会看到随机(客观)和认知(主观)不确定性之间各自的关系。我不打算在这篇博文中解决这个哲学问题,但我知道,运气和认知不确定性的定义是微妙的,什么属于哪一类是有争议的。为了更全面(但仍然适用)地回顾这些术语,请看文章:“偶然性还是认知性?有关系吗?

为什么区分偶然的和认知的不确定性很重要?假设我们正在开发一辆自动驾驶汽车,我们拿出一辆在普通道路上训练过的原型车,让它驶过蒙扎赛道,这条赛道有着极其倾斜的弯道。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1 :蒙扎赛道上的倾斜转弯

由于汽车之前没有见过这种情况,我们会认为自动驾驶汽车中的图像分割 DNN 是不确定的,因为它从未见过接近地面左侧的天空。在这种情况下,不确定性将被归类为认知性的,因为 DNN 人不了解这样的道路。

相反,假设我们乘坐同一辆自动驾驶汽车,在下雨天开车出去兜风;假设 DNN 已经在多种雨天条件下接受过训练。在这种情况下,仅仅由于较低的能见度,对道路上的物体有更多的不确定性。在这种情况下,不确定性将被归类为偶然的,因为数据中固有的随机性更大。

这两种情况应该区别对待。在赛道上,不确定性可能会告诉开发人员,他们需要收集特定类型的训练数据,以使模型更加鲁棒,或者不确定性可能会告诉汽车可以尝试安全地机动到一个位置,在那里它可以将控制权移交给司机。在雨天的情况下,这种不确定性可能会提醒系统简单地减速或启用某些安全功能。

估计 DNNs 中的不确定性

近年来出现了聚宝盆提出方法来估计 DNNS 中的不确定性。一般来说,不确定性估计是在贝叶斯统计的背景下制定的。在用于分类的标准 DNN 中,我们隐式地训练了一个判别模型,在该模型中,我们获得了神经网络权重的最大似然估计(取决于选择用于训练网络的损失函数)。这种对网络权重的点估计不利于理解模型知道什么和不知道什么。相反,如果我们找到权重的分布,而不是点估计,我们可以对网络权重进行采样,并以此计算相应的输出。

直观地说,这种网络权重的采样就像创建一个网络集合来完成任务:我们对一组“专家”进行采样来进行预测。如果专家意见不一致,认知的不确定性就会很高。如果专家认为做出准确的预测太困难,那么就有很高的偶然性不确定性。

在这篇文章中,我们将看看一个流行的和易于实施的方法来估计不确定性的 DNNs 由亚林加尔和邹斌 Ghahramani 。他们表明辍学可以用来学习 DNN 体重的近似分布(如前所述)。然后,在预测过程中,dropout 用于从拟合的近似分布中对权重进行采样,类似于创建专家集合。

认知不确定性是通过从样本权重中提取预测的样本方差来估计的。将样本方差与认知不确定性联系起来的直觉是,当模型预测几乎相同的输出时,样本方差将会很低,而当模型做出不一致的预测时,样本方差将会很高;这分别类似于当一组专家一致地做出预测时和当他们没有做出预测时。

同时,通过修改 DNN 以获得第二个输出,以及使用修改的损失函数来估计随机不确定性。随机不确定性将对应于输出的估计方差 。这个预测的方差与数据的内在数量有关,这就是为什么它与偶然的不确定性有关;这类似于一群专家判断形势太难做出预测。

总的来说,最终的网络结构如图 2 所示。有一个输入 x 被馈送到 DNN,在每一层之后都有丢失(每一层之后的丢失是最初指定的,但是在实践中,每一层之后的丢失常常使训练变得太困难)。该 DNN 的输出是估计的目标 ŷ 和估计的方差或比例参数 σ̂

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:DNN 架构的例子,能够估计随机和认知的不确定性

这个 DNN 用一个损失函数来训练,比如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

或者

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果网络被训练用于回归任务。上面显示的第一个损失函数是具有不确定性的 MSE 变量,而第二个是 L1 变量。这些分别通过假设似然的高斯和拉普拉斯分布得出,其中每个分量都是独立的,方差(或标度参数)由网络估计和拟合。

如上所述,这些损失函数有数学推导,但我们可以直观地理解为什么这个方差参数捕捉一种类型的不确定性:方差参数提供了方差和 MSE 或 L1 损失项之间的权衡。如果 DNN 可以容易地估计目标的真实值(即,使接近真实值 y ),那么 DNN 应该在此基础上估计一个低方差项,以使损失最小化。然而,如果 DNN 不能估计目标的真实值(例如,信噪比低),那么网络可以通过估计高方差来最小化损失。这将减少 MSE 或 L1 损失项,因为该项将除以方差;然而,网络不应该总是这样做,因为对数方差项不利于高方差估计。

如果网络正在接受分类(或分段)任务的训练,损失将类似于这个两部分损失函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种损失函数的直觉是:当 DNN 可以容易地估计组件的正确类别时,该类别的值将会很高,并且 DNN 应该估计低的方差,以便最小化添加的噪声(以便所有样本将集中在正确的类别周围)。然而,如果 DNN 不能容易地估计组件的类别,则 ŷ 值应该较低,并且添加噪声可能会增加对正确类别的猜测,这可能会总体上最小化损失函数。(参见第。Alex Kendall 的论文的第 41 章,以获得关于这个损失函数的更多讨论。)**

最后,在测试中,网络被采样 T 次以创建 T 估计目标和 T 估计方差输出。这些 T 输出然后以各种方式组合,以产生最终的估计目标和不确定性估计,如图 3 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3 : DNN 输出到最终估计目标和不确定性估计

数学上,认知和偶然的不确定性是(对于 MSE 回归变量):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于分类案例,认知不确定性有多种解释:样本方差互信息。每一种都被证明是有用的,选择哪种类型取决于应用。

示例和应用

为了使理论更加具体,我们将在 PyTorch 的回归和分类任务中通过两个玩具示例来评估 DNNs 的不确定性。下面的代码摘自 Jupyter 笔记本中提供的完整实现(在接下来的两个小节的开头会提到)。最后,我们将讨论在医学图像的真实世界数据示例中计算不确定性。

回归示例

回归笔记本中,我们将一个非常简单的神经网络——由两个完全连接的层组成,在隐藏层上有漏失——拟合到具有不确定性损失的 MSE 变量的一维输入和输出数据(在下面实现)。

注意,我们不是直接拟合方差项,而是拟合方差项的对数以获得数值稳定性。

在回归场景中,我们也可以使用不确定性损失的 L1 变量,该变量在笔记本中并在下面实现。

有时使用 L1 损失而不是 MSE 损失会为回归任务带来更好的性能,尽管这取决于应用。

在这个场景中,随机的和认知的不确定性估计值是按照下面的实现来计算的(更多的上下文请看笔记本)。

在图 4 中,我们将拟合函数和不确定性结果可视化。在最右边的图中,我们展示了阈值认知不确定性,它展示了不确定性估计检测非分布数据的能力(至少在这个玩具场景中)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4 :回归实例的各种不确定性。橙色的原始训练数据。左边的两个图用蓝色显示了神经网络拟合的函数,第一个图和第二个图中分别具有偶然性和认知不确定性。最右边的图显示了临界的认知不确定性。完整实现见 Jupyter 笔记本

分类示例

分类笔记本中,我们再次拟合了一个由两个完全连接的层组成的神经网络,在隐藏层上有脱落。在这种情况下,我们尝试进行二元分类。因此,损失函数实现如下。

在这种情况下,我们可以计算许多不确定性估计值。在下面的实现中,我们计算认知、熵和偶然的不确定性。熵可以被合理地认为是属于一个偶然的和认知的不确定性,但下面它被分离出来,所以偶然的和认知的不确定性计算如前所述。

在图 5 中,我们可视化了训练数据上产生的认知和偶然的不确定性,以及熵。正如我们可以看到的,训练数据类重叠接近零,不确定性度量在那里达到峰值。在这个玩具的例子中,所有三个不确定性的测量都是高度相关的。在笔记本中为感兴趣的读者提供了关于原因的讨论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5 :二元分类示例的各种不确定性度量。参见 Jupyter 笔记本了解完整实现。

医学图像示例

在最后一个例子中,我将展示作为会议论文发表的真实世界例子中不确定性的一些结果和应用(此处预印)。探索的任务是一个图像到图像的翻译任务,类似于著名的 pix2pix 的例子,但是使用的是医学图像。在这种情况下,我们希望使大脑的计算机断层扫描(CT)图像看起来像大脑的相应磁共振(MR)图像。这是一个回归损失,我们使用不确定性损失的 MSE 变量来训练一个 U-Net ,它被修改为在每一层之后具有空间丢失(关于为什么空间丢失的讨论,请参见此处的),并且输出两幅图像而不是一幅图像;一个输出是估计的 MR 图像,另一个是像素方差。

图 6 示出了输入和输出的例子。最左边的 CT 图像在枕叶的左半球有一个异常(图像中大脑的左下方;它在右边相应的 MR 图像中更容易被可视化)。DNN 只在健康图像上训练,因此 DNN 应该不知道这种异常数据,并且它应该通过在该区域中具有高样本方差(即,高认知不确定性)来反映这一点-根据前面讨论的认知不确定性理论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6 :从左到右——CT 图像输入网络,MR 图像为训练目标(此处显示是因为在左半球枕叶可见异常),像素认知不确定性、像素认知随机不确定性以及认知与随机的像素比显示在标题“Scibilic”下,该标题清楚地突出了异常区域。

当这个图像被输入到网络中时,我们计算了认知和偶然的不确定性。这种异常在认知不确定性中得到了明确的强调,但还有许多其他区域也被预测具有高度的认知不确定性。如果我们采用认知和偶然不确定性的像素比例,我们会得到最右边显示的图像,标记为“Scibilic”(在预印本中有更多讨论)。该图像很容易被阈值化以预测异常(图像的分布外区域)。

这种异常检测方法绝非万无一失。实际上,这是相当易变的,但是它展示了一种将这种类型的不确定性估计应用于真实世界数据的方法。

外卖食品

机器学习中的不确定性估计有可能降低在高风险场景中部署模型的风险。随机和认知的不确定性估计可以向用户或开发人员显示有关 DNN 性能的不同信息,并可用于修改系统以提高安全性。我们讨论并实现了一种不确定性估计的方法。这种方法并不完美,基于辍学的不确定性提供了一种获得某种(通常是合理的)不确定性度量的方法。该度量是否足够可信以用于部署是另一回事。实践者在实现这种方法时应该问自己的问题是,得到的具有不确定性估计的模型是否比没有不确定性估计的模型更有用——例如,更安全。

了解火花和卡夫卡:一亿个事件用例

原文:https://towardsdatascience.com/knowing-pyspark-and-kafka-a-100-million-events-use-case-5910159d08d7?source=collection_archive---------14-----------------------

电子商务市场中典型的一天,每分钟处理 10,000 个事件,并选择正确的工具来处理这些事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Flaunter.comUnsplash 上拍照

本文将帮助您重新创建一个场景,其中有大量数据流入,您不仅要存储这些数据,还要执行一些实时分析!

这只是系统设计的一个例子,在这里你必须开发一个高度可用和可伸缩的数据管道。虽然对于像电子商务这样的用例,可能有许多其他因素需要考虑,但为了本文的目的,我们将把它分成 3 个主要部分:

  1. 摄取
  2. 处理
  3. 输出

简而言之,这是几乎所有系统设计的鸟瞰图,也是可能出错的地方。

摄入层

在开始使用我们的工具之前,让我们后退一步,看看我们在这里试图解决什么样的用例或问题。要了解我们的输入或摄取层,首先要了解我们的输出层。一般来说,你可以通过两种方式展示你的发现:

  1. **批处理:**如果您的分析只是一次性的,或者可能只是每日报告更新,或者只是团队中的随机演示,您可以选择批量接收数据。这可能意味着从您的数据库中取出一个小的数据转储,并用它进行一些分析。
  2. 实时处理:也称为流数据是一种在新数据分析至关重要时可以采用的方法。最常见于 B2C 场景,在这种场景中,您可以即时执行操作。

批处理的好处是,它消除了构建实时管道的开销,并且您永远不会处理完整的数据集。不过,这并不适用于 B2C 环境,尤其是电子商务,在电子商务中,你必须推荐新产品、跟踪用户行程或设计实时仪表板。

既然我们知道我们的输出层将是实时的,我们将相应地选择我们的摄取工具。当然,有成千上万的工具可供你从中获取数据,但根据受欢迎程度、社区实力和各种用例的实现情况,我们将挑选 【卡夫卡】 Spark Streaming

这里再次强调,了解您的业务需求以决定执行相同工作的几个工具是很重要的。在像 e-comm 这样的场景中,我们已经知道我们想要实时输出,但是我们在这里谈论的数字是什么?

1-2 秒相当实时!是的,但对一个电子商务网站来说不是这样,在那里你的用户不会等待超过一秒来执行下一次点击。这让我们想到了延迟的概念。这是我们用来选择摄取工具的指标。这两个工具有很多不同之处,但是卡夫卡提供了毫秒级的延迟!

处理层

在我们的用例中,我们将分别检查 Spark 和 Kafka 的处理机制。我们将看到 spark 如何使底层硬件实际上不应该保存的数据处理成为可能。另一方面,我们将看到使用 Kafka 消费数据是多么容易,以及它如何在数百万的规模上实现这一点。

我将使用下面来自 Kaggle 的数据集,它有超过 1 亿行

https://www . ka ggle . com/mkechinov/ecommerce-behavior-data-from-multi-category-store

除非您拥有一台非常高端的机器,否则不可能将整个数据集加载到您本地机器的内存中,甚至不可能将它拆分成批处理,当然除非您对每个传入的批处理执行处理,但这就是为什么我们使用类似于 Spark 的东西。

基础设施

设置 spark 有其复杂性,因此,为了加快速度,我们将在 数据块 **,**上启动 Spark 集群,让您可以在数据驻留的 AWS S3 的数据支持下快速启动集群。

Spark 遵循典型的主从架构,概括来说,这意味着主服务器负责所有的作业调度工作以及其他一些事情,另一方面,从服务器负责执行实际操作或将数据保存在内存中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spark 架构,1 个主节点+ 2 个工作/从节点

当我们在数据上实现 Spark 时,我们将对其进行更详细的介绍。目前,我已经在 databricks 上构建了一个 1 工作节点+ 1 个主节点集群,总共有 2 个内核和 8 GB 内存,尽管完整的配置应该是 4 个内核和 16 GB 内存。

它是 2 和 8,因为我们所有的 spark 操作都只发生在 worker 节点上,而我们只有 1 个 worker 节点。内核的数量(即 2 个)将在这里发挥关键作用,因为所有并行化工作都将在这里进行。

读取 8 GB 内存上的 14 GB 数据

在比内存本身更大的内存中存储数据是不切实际的,因此,spark 所做的是,只有当你想对数据进行一些操作时,它才会将数据加载到内存中。例如,以下代码行将并行读取我们的数据集,即利用 2 个内核读取我们的数据。

ecomm_df = sparkSession.read.csv("/mnt/%s/ecomm.csv" % MOUNT_NAME, header=True

我们的 14 GB 文件将被分成大约 112 个小块,由于我们有 2 个内核,因此将被分成 2 个块,每次 128 MB

虽然,spark 不会在你提交这个命令的时候开始读取文件,因为有一个完全不同的概念懒惰求值,这使得它不会以传统的 pythonic 方式读取它!但是我们仍然可以通过快速转换成 RDD 来检查这个文件的分区/块的数量

ecomm_df.rdd.getNumPartitions()
OUTPUT: **110 #Number of partitions**

这与我们的计算非常接近。看看这个知道我是如何从 14 GB 的文件大小计算出 112 个分区的。

现在,不要太专业,让我们快速浏览一下我们的数据

**# A SAMPLE RECORD OF OUR DATA**Row(event_time='2019-11-01 00:00:00 UTC', event_type='view', product_id='1003461', category_id='2053013555631882655', category_code='electronics.smartphone', brand='xiaomi', price='489.07', user_id='520088904', user_session='4d3b30da-a5e4-49df-b1a8-ba5943f1dd33')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

过滤掉只购买了 Xiamoi 智能手机的人,然后执行左连接。查看如何将每个命令分解为 110 个任务,并且 2 个任务总是并行运行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按品牌分析有多少百分比的用户只是查看和添加到购物车,以及购买特定商品

现在您已经了解了 spark 的功能,它是一种非常可扩展的方法,可以在有限的资源集上训练/分析几乎任何规模的数据

模拟实时数据摄取

我们之前已经讨论了很多关于 Kafka 的要点,所以不需要太深入,让我们看看我们在真实场景中摄取这种数据的 Kafka 管道是什么样子的!

当我们谈论任何给定时间的 1 亿个事件这样的数字时,可伸缩性成为优先考虑的问题,对分区和消费者群体的理解也是如此。在这种摄入水平下,这两种成分可以成就或破坏我们的系统。看看这个架构,对 Kafka 系统有个大概的了解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个模型的真实世界复制品将是你的邮箱。

  1. **邮递员:**这个人是制作人,他的工作只是收集数据,然后把它放进你的邮箱
  2. **邮箱/信箱:**这是你的经纪人,如果没人来收,信件会一直堆积。
  3. **你的地址:**这是你的题目,邮递员怎么知道要把这些数据发到哪里?
  4. **你:**你是消费者,收集这些数据并进一步处理是你的责任

这是 Kafka 数据流机制的一个非常简单的解释,足以进一步理解本文,而分区和消费者组的概念也将帮助您理解代码片段

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题是保存您的数据的内容,可以划分为 n 个分区供并行使用

在这种规模下,您希望并行化数据消费。为此,可以将传入的数据分成不同的分区,当这种情况发生时,我们可以建立消费者组,这意味着多个消费者希望从同一个源读取数据。

参考上面的体系结构,两个使用者从同一个源读取数据,因此,同时读取更多的数据,但读取的数据不同。如果消费者 1 已经读取了行 1 和行 2,消费者 2 将永远看不到这些数据,因为这种隔离已经在分区级别发生了!

这是我在使用分区和消费者组大规模接收这种数据时做的一个小实现

**# 4 Partitions Made
# Topic Name : ecomm_test**./kafka_2.11-2.3.1/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic ecomm_test**# Send data to ecomm_test topic**
producer.send(topic='ecomm_test', value=line)**# Start 2 consumers and assign it to the group "ecommGroup"** consumer = KafkaConsumer('ecomm_test', group_id='ecommGroup')
consumer = KafkaConsumer('ecomm_test', group_id='ecommGroup')**# Output of how consumer 1 reads data, only reading from 2 partitions i.e. 0 & 1**ConsumerRecord(topic=u'ecomm_test', partition=1, value='2019-11-01 00:00:01 UTC,view,17302664,2053013553853497655,,creed,28.31,561587266,755422e7-9040-477b-9bd2-6a6e8fd97387\n')ConsumerRecord(topic=u'ecomm_test', partition=0, value='2019-11-01 00:00:01 UTC,view,3601530,2053013563810775923,appliances.kitchen.washer,lg,712.87,518085591,3bfb58cd-7892-48cc-8020-2f17e6de6e7f\n')**# Output of how consumer 2 reads data, only reading from 2 partitions i.e. 2 & 3**ConsumerRecord(topic=u'ecomm_test', partition=3, value='2019-11-01 00:00:05 UTC,view,4600658,2053013563944993659,appliances.kitchen.dishwasher,samsung,411.83,526595547,aab33a9a-29c3-4d50-84c1-8a2bc9256104\n')ConsumerRecord(topic=u'ecomm_test', partition=2, value='2019-11-01 00:00:01 UTC,view,1306421,2053013558920217191,computers.notebook,hp,514.56,514028527,df8184cc-3694-4549-8c8c-6b5171877376\n')

一吻制作架构:输出

我们只需要确保我们与以下概念保持一致:

  1. **吻:保持简单愚蠢:**尽可能保持架构简单
  2. **微服务:**分离组件以避免一连串的故障
  3. **CAP 定理:**一致性,可用性,划分容差。选择两个对你来说最重要的

最后,我们将介绍可以在生产系统中实施的最终体系结构,尽管还涉及许多其他组件,如可用性区域、存储系统、故障切换计划,但这只是生产中最终处理层的概述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

包含数据流的完整架构图

正如你所看到的,图表是不言自明的,没有一个正确的架构/系统设计适合所有的用例,你只需要在给定的资源下构建可以工作的东西。

欢迎联系或在此发布您的问题/反馈

干杯!

了解这 5 个 HCI 原则会让你的数据可视化看起来很神奇

原文:https://towardsdatascience.com/knowing-these-5-hcis-principles-will-make-your-data-visualization-look-amazing-efbf22f05ab8?source=collection_archive---------13-----------------------

入门,设计心理学。

人机交互(HCI)研究中使用的原则

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自视觉肉桂。

一年前,我有机会在大学里阅读人机交互(HCI)。在那里,我开始了解这个领域中的各种人类心理原则。从数据可视化的角度探索多个这样的原则让我非常兴奋。数据可视化是计算机系统上的数据和人类大脑之间的高带宽连接,通过理解不同的心理学原理如何影响人类行为,由视觉通信来促进;我们可以设计我们的产品(即,图形,用户界面/UX,等等)。)从我们的用户那里引出具体的反应和行动。我们可以通过更具同理心和以用户为中心来产生重大影响。

在这里,我将分享五种不同的人机交互原则如何帮助我们创建有影响力的可视化。

  • 米勒定律 -别说了
  • 雅各布定律——用户喜欢知名的东西
  • 冯·雷斯托夫效应——还记得那个独特的
  • F 模式 -设计用于扫描,而非读取
  • 希克斯定律 -更多信息;要花更长时间才能抓到一个

米勒定律

如果你想理解某事,你首先要想象你所听到或读到的是真的,并从那里开始。—乔治·米勒

乔治·米勒提出的米勒定律告诉我们,我们只能在工作记忆中保留大约七项内容。除此之外的任何事情都很难回忆起来。多于七个元素会使用户产生困惑和注意力分散,用户不再记得他/她现在正在寻找的信息。

创建一个包含超过七个不同的客观元素的仪表板是不好的。相反,如果我们有十个图表要合并到一个仪表板中,我们可以将它们分块并制作两个仪表板。简单来说,我们可以说米勒定律试图说明我们应该减少信息过载(认知负荷)和可视化的复杂性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。J 的数据存在于 Kaggle 的 Mostipak。

你觉得哪一个容易读和记,A 还是 B?

我确定葡萄牙 763,199 比葡萄牙 763199 更容易记住,所以在 B 中,我们用了米勒定律。实现米勒定律的一个直接方法是分块,因为分块形式似乎更容易扫描,完成起来也不那么令人生畏。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由作者设计。来自未画的插图。

雅各布定律

为用户习惯的模式设计。——雅各布·尼尔森

世界上最有影响力的设计师之一雅各布·尼尔森(Jakob Nielsen)提出了雅各布定律。它指出用户喜欢熟悉的体验。他们倾向于喜欢与他们已经探索过的相似的可视化/图表。他们已经知道这些图表代表什么/如何,因为他们不需要太多的努力就能理解。所以我们可以说熟悉是安全的,用户喜欢知名的东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。

请记住这张图表和它想要表达的意思。

这是否意味着我们应该复制一个流行的可视化?不完全是。相反,我们应该通过进行深度分析,并关注专家如何为类似的需求进行设计,来研究我们为之设计的社区中如此伟大的设计。

我们的目标是在我们设计的行业中找出著名的风格。以已知的方式倾斜将帮助我们建立正确的用户期望,创造熟悉的体验。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。

我希望你还记得我向你要的图表。现在,你发现图表和它的目标有什么不同吗?

我敢打赌,你有。是的,因为我们已经看到了学生人数的条形图,我们的大脑已经捕捉到了它,每当我们看到标题学生人数时,我们立即用它倾斜条形图,但在这里我把条形图放在学生表现上,这样就给用户创造了很少的时间来考虑用新信息进行调整。利用这个规律,我们可以追求用户在享受可视化的同时不要多想。

冯·雷斯托夫效应

如果你想让人们记住某件事,那就让它突出来。——海德薇·冯·雷斯托夫

八七年前,德国精神病学家海德薇格·冯·雷斯托夫进行了一项记忆实验。她给了人们一份相似但不同的物品清单。清单上的一个项目是一种不同于其他事物的独特颜色。当海德薇格要求她的研究参与者记住这个清单时,她发现颜色独特的物品的回忆率明显高于其他物品。因此,Von Restorff 效应或隔离效应或特定编码表明,当我们看到一组相似的物体时,我们通常会记住与其他物体最不同的那个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。欧盟统计局的数据。

在这里,我们强调了相关的(基本方面)国家,荷兰,只有这样才能吸引用户的注意力。当我们试图帮助用户记忆时,这个原则非常重要。大多数情况下,尺寸、颜色和形状都是用来应用这一原则的。

f 型

在注意力经济中,任何试图与观众建立联系的人都必须将用户的时间视为终极资源。——雅各布·尼尔森

Jakob Nielsen ( 想起了这个名字!?),全球最具影响力的设计师之一,发现了 F-Pattern,这是设计界被引用最多、最有用的眼球追踪资源。F 模式代表观察者通常关注的地点/可视化,跟随字母 F(“F”表示快)。这份报告表明:

  • F 上的两个横条是最重要的信息。
  • 竖线表示读者倾向于阅读页面的左侧,并且只阅读前几个单词。
  • 人们不在网上阅读。他们扫描。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NNGroup 展示了眼球追踪研究如何揭示用户(在从左向右阅读的文化中)通常以看起来像字母 f 的模式扫描大量内容。用户看得最多的区域是红色的;黄色区域表示视图较少,其次是蓝色区域。

我们的可视化应该为扫描而设计,而不是阅读,所以最好的内容应该锚定在左上角优先。这个位置肯定会引起注意,因为使用它会使阅读体验更有吸引力。然而,我们也应该以这样一种方式思考,如果有人在浏览我们的 viz 时发现它有吸引力,他们会阅读,这样我们也可以将信息放在 F 之外的地方。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在可视化中创建 F 模式。图片由作者提供。数据由宏观趋势提供。

这里我们看到在 A 上,居中的内容在设计中产生了一点空隙;因此,它消耗了用户的探索时间;然而,在 B 上,我们将文本放在左边,这样用户就可以立即开始吸收内容(我们中的一些人可能不同意这一点,但我这样做只是为了便于理解。)这样就有了 f 的模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由作者设计。来自展开图的插图。事实来源于 NNgroup

确保坚持 F 模式将确保我们的可视化给我们的观众留下有意义的印象。如果你想更多地了解这种模式,这里有一些值得一查的:古腾堡图、分层饼模式、斑点模式和承诺模式等。,

希克定律

减少刺激次数,获得更快的决策过程。—威廉·埃德蒙·希克

由英国和美国心理学家威廉·埃德蒙·希克和雷·海曼团队提出的希克定律或希克-海曼定律或信息增益率告诉我们,一个人做出决定所需的时间是他或她可能做出的选择的结果:增加选项的数量将对数地增加决策时间。

通俗地说:可供选择的东西越多,我们选择的时间就越长。你觉得这类似于 K.I.S.S(保持简洁)的设计方法吗?

是的,K.I.S.S .呼应了乡巴佬定律。K.I.S.S .(保持简单愚蠢或保持简短简单)源自希克定律,导致其设计和开发简单。希克斯定律的目标是试图简化决策过程,而不是消除这一过程。我们可以说,这完全是关于我们如何安排我们的信息体系结构。

所以在可视化中,提供大量的信息会产生更多的选择(信息),用户会花更长的时间来选择一个。(请记住,我们不会以隔离的方式使用希克斯定律。我们总是把它和其他 HCI 的原则结合起来。)

我们视觉中的信息过载直接影响了希克定律的原理,因为我们“可能”从试图决定下一步要抓什么开始。不过,很快我们就要,呃…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者提供。

在 A 上,我们有许多选项可供选择,我们的用户将花一些时间来决定选择哪一个。关于 B,我们有三个选择,所以没有那么多需要决策时间。因此,在 B 中,我们使用了希克定律。缩短长长的列表,减少可能的选项数量,是实现希克定律的一种简单方法。在长列表不可避免的情况下,我们应该限制用户一次可以查看的选项数量,以使浏览更加舒适和快速。

因此,如果你做到了这一步,我们可以看到,以一种有效的方式正确使用上述原则将使我们的可视化达到一个新的水平。利用这些原则,我们将以尽可能好的方式呈现数据,以满足受众的需求。下一次当你开始设计的时候,想想在哪里以及如何应用这些原则。

最后引用梅顿·戈拉瑟的话:

对一件设计有三种反应——是,不是,哇!哇是一个目标。

如果你对这篇文章有任何疑问,或者想在你的下一个数据可视化项目中合作,请在 LinkedIn 上 ping 我。

本文由 vizartpandey.com自愿投稿至博客。

推荐读物

知道了这些,你就可以覆盖 Python 中 99%的文件操作

原文:https://towardsdatascience.com/knowing-these-you-can-cover-99-of-file-operations-in-python-84725d82c2df?source=collection_archive---------9-----------------------

提高您处理文件的效率

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Maksym Kaharlytskyi 在 Unsplash 上拍摄的照片

处理文件是我们每天最常见的任务之一。Python 有几个内置模块,用于执行文件操作,比如读取文件、移动文件、获取文件属性等。本文总结了许多您需要了解的函数,以涵盖 Python 中最常见的文件操作和良好实践。

这是您将在本文中看到的模块/函数的图表。要了解每个操作的更多信息,请继续阅读。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者:高

打开和关闭文件

当你想读或写一个文件时,首先要做的是打开文件。Python 有一个内置函数open,它打开文件并返回一个 file 对象。文件对象的类型取决于打开文件的模式。它可以是文本文件对象、原始二进制文件和缓冲二进制文件。每个文件对象都有像read()write()这样的方法。

这个代码块有问题,能认出来吗?我们以后再讨论。

file = open("test_file.txt","w+")
file.read()
file.write("a new line")

Python 文档列出了所有可能的文件模式。下表列出了最常见的模式。一个重要的规则是,任何 **w** 相关的模式都会先截断文件(如果存在的话),然后创建一个新文件。如果你不想覆盖文件,小心使用这种模式,如果可能的话,使用a追加模式。

前面代码块中的问题是我们只打开了文件,而没有关闭它。处理文件时,务必关闭文件。拥有一个打开的文件对象会导致不可预知的行为,比如资源泄漏。有两种方法可以确保文件被正确关闭。

  1. 使用

第一种方式是显式使用close()。一个好的做法是将它放在finally中,这样我们可以确保文件在任何情况下都会被关闭。它使代码更加清晰,但另一方面,开发人员应该负起责任,不要忘记关闭它。

try:
    file = open("test_file.txt","w+")
    file.write("a new line")
exception Exception as e:
    logging.exception(e)
finally:
    file.close()

2。使用上下文管理器 **with open(...) as f**

第二种方法是使用上下文管理器。如果你不熟悉上下文管理器,那么看看 Dan Bader 的上下文管理器和 Python 中的“with”语句。with open() as f语句实现了__enter____exit__方法来打开和关闭文件。此外,它在上下文管理器中封装了 try/finally 语句,这意味着我们永远不会忘记关闭文件。

with open("test_file","w+") as file:
    file.write("a new line")

这个上下文管理器解决方案总是比close()好吗?看你用在什么地方了。以下示例实现了将 50,000 条记录写入文件的 3 种不同方式。正如您从输出中看到的,use_context_manager_2()函数与其他函数相比性能极低。这是因为with语句是在一个单独的函数中,它基本上为每条记录打开和关闭文件。如此昂贵的 I/O 操作会极大地影响性能。

比较with语句和 close()方法

读取和写入文件

打开文件后,您必须想读取或写入该文件。file 对象提供了 3 个方法来读取一个文件,分别是read()readline()readlines()

默认情况下,read(size=-1)返回文件的全部内容。如果文件大于内存,可选参数size可以帮助您限制返回字符(文本模式)或字节(二进制模式)的大小。

readline(size=-1)返回一整行,末尾包含字符\n。如果size大于 0,将返回该行的最大size字符数。

readlines(hint=-1)返回列表中文件的所有行。可选参数hint表示如果返回的字符数超过hint,将不再返回更多的行。

在这 3 种方法中,read()readlines()的内存效率较低,因为默认情况下,它们以字符串或列表的形式返回完整的文件。一种更节省内存的方法是使用readline(),让它停止读取,直到返回一个空字符串。空字符串""意味着指针到达了文件的末尾。

以节省内存的方式读取文件

就写作而言,有两种方法write()writelines()。顾名思义,write()是写字符串,writelines()是写字符串列表。开发人员负责在末尾加上 **\n**

将行写入文件

如果您将文本写入特殊的文件类型,如 JSON 或 csv,那么您应该在 file 对象之上使用 Python 内置模块jsoncsv

在文件内移动指针

当我们打开一个文件时,我们得到一个指向某个位置的文件处理程序。在rw模式下,处理程序指向文件的开头。在a模式下,处理程序指向文件的结尾。

***tell()******seek()***

当我们从文件中读取时,指针移动到下一次读取将开始的地方,除非我们告诉指针四处移动。您可以使用两种方法完成此操作:tell()seek()

tell()从文件开始以字节/字符数的形式返回指针的当前位置。seek(offset,whence=0)将处理器移动到距离whenceoffset个字符的位置。whence可以是:

  • 0:从文件的开头开始
  • 1:从当前位置
  • 2:从文件末尾开始

在文本模式下,whence只能为 0,offset应≥0。

讲述()和寻找()

了解文件状态

操作系统上的文件系统可以告诉你许多关于文件的实用信息。例如,文件的大小、创建和修改时间。要在 Python 中获得这些信息,可以使用ospathlib模块。其实ospathlib.之间有很多共同点pathlib是一个比os更面向对象的模块。

os

获得完整状态的一种方法是使用os.stat("test.txt")。它返回一个结果对象,带有许多统计信息,如st_size(文件的大小,以字节为单位)st_atime(最近一次访问的时间戳)st_mtime(最近一次修改的时间戳)等。

*print(os.stat("text.txt"))>>> os.stat_result(st_mode=33188, st_ino=8618932538, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=16, st_atime=1597527409, st_mtime=1597527409, st_ctime=1597527409)*

您也可以使用os.path单独获取统计数据。

*os.path.getatime()
os.path.getctime()
os.path.getmtime()
os.path.getsize()*

Pathlib

获得完整状态的另一种方法是使用pathlib.Path("text.txt").stat()。它返回与os.stat()相同的对象。

*print(pathlib.Path("text.txt").stat())>>> os.stat_result(st_mode=33188, st_ino=8618932538, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=16, st_atime=1597528703, st_mtime=1597528703, st_ctime=1597528703)*

我们将在以下章节中比较ospathlib的更多方面。

复制、移动和删除文件

Python 有许多处理文件移动的内置模块。在你相信 Google 返回的第一个答案之前,你要意识到模块的不同选择会导致不同的表现。有些模块会阻塞线程,直到文件移动完成,而其他模块可能会异步执行。

shutil是最著名的移动、复制和删除文件和文件夹的模块。它提供了 4 种方法来复制一个文件。copy()copy2()copyfile()

**copy()** v.s. **copy2()** : copy2()copy()很像。不同的是,copy2()还会复制文件的元数据,比如最近的访问时间、最近的修改时间。但是根据的 Python 文档,由于操作系统的限制,即使copy2()也无法复制所有的元数据。

副本()与副本 2()

**copy()** v.s. **copyfile()** : copy()设置新文件的权限与原文件相同,但copyfile()不复制其权限模式。其次,copy()的目的地可以是一个目录。如果存在同名文件,它将被覆盖,否则,将创建一个新文件。但是,copyfile()的目的地必须是目标文件名。

copy() v.s. copyfile()

os

os模块有一个功能system(),允许你在子外壳中执行命令。您需要将命令作为参数传递给system()。这与在操作系统上执行的命令具有相同的效果。对于移动和删除文件,您也可以使用os模块中的专用功能。

操作系统移动 _ 复制

异步复制/移动文件

到目前为止,解决方案总是同步的,这意味着如果文件很大并且需要更多时间移动,程序可能会被阻塞。如果想让程序异步,可以使用threadingmultiprocessing或者subprocess模块,让文件操作在单独的线程或者单独的进程中运行。

异步方式的文件操作

搜索文件

复制和移动文件后,您可能希望搜索与特定模式匹配的文件名。Python 提供了许多内置函数供您选择。

全球

[glob](https://docs.python.org/3.8/library/glob.html#module-glob)模块根据 Unix shell 使用的规则找到所有匹配指定模式的路径名。它支持通配符,如?[].*

glob.glob("*.csv")在当前目录中搜索所有扩展名为csv的文件。glob模块也可以搜索子目录中的文件。

搜索文件名—全局

os

os模块功能强大,基本上可以做一切与文件有关的操作。我们可以简单地使用os.listdir()列出目录中的所有文件,并使用file.endswith()file.startswith()来检测模式。如果你想遍历目录,那么使用os.walk()

搜索文件名—操作系统

pathlib

pathlib具有与glob模块相似的功能。也可以递归搜索文件名。与之前基于os的解决方案相比,pathlib拥有更少的代码,提供了更面向对象的解决方案。

搜索文件名—路径库

摆弄文件路径

使用文件路径是我们做的另一项常见任务。它可以得到一个文件的相对路径和绝对路径。它也可以是连接多个路径和寻找父目录等。

相对和绝对路径

ospathlib都提供了获取文件或目录的相对路径和绝对路径的函数。

文件的相对和绝对路径

加入路径

这就是我们如何独立于环境连接ospathlib中的路径。pathlib使用斜杠创建子路径。

连接文件路径

获取父目录

dirname()是在os中获取父目录的功能,而在pathlib中,你只需使用Path().parent就可以获取父文件夹。

获取父文件夹

os 对 s. pathlib

最后,我想简单说一下ospathlib。正如 Python 文档所说,pathlibos更面向对象。它将每个文件路径表示为适当的对象,而不是字符串。这给开发者带来了很多好处,比如更容易连接多个路径,在不同的操作系统上更加一致,方法可以直接从对象中访问。

我希望这篇文章能提高你处理文件的效率。

参考:

** [## 用 Python 读写文件(指南)-真正的 Python

在本教程中,您将学习如何在 Python 中读写文件。您将涵盖从文件是什么…

realpython.com](https://realpython.com/read-write-files-python/#buffered-binary-file-types) [## 为什么应该使用 pathlib

几年前当我发现 Python 的新 pathlib 模块时,我最初认为它是一个稍微更…

treyhunner.com](https://treyhunner.com/2018/12/why-you-should-be-using-pathlib/#:~:text=The%20os%20module%20is%20a,nested%20string%2Diful%20function%20calls.)**

知道什么和为什么?—解释图像分类器预测

原文:https://towardsdatascience.com/knowing-what-and-why-explaining-image-classifier-predictions-680a15043bad?source=collection_archive---------11-----------------------

数据科学工具包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试库提供的解释的比较

介绍

事实上,每年机器学习(ML)都在成为我们生活中越来越重要的一部分。ML 帮助我们完成简单的日常任务,比如找到回家的最佳路线,用手机准确扫描文件或将文本翻译成不同的语言。然而,它也被用作许多高度负责的系统中的一个关键要素,在这些系统中,人的生命和福祉受到威胁。

  • 人工智能(AI)被用于司法系统,以评估被定罪的人再次违法的可能性有多大。
  • 一些公司正在研发能够帮助甚至完全免除医生在医学图像上定位肿瘤的系统

随着我们实施类似于上面提到的那些系统,越来越清楚的是我们不仅要提供预测,还要提供解释什么影响了我们的决策。在这篇文章中,我将比较和测试最常用的库,用于解释图像分类Eli5、LIME 和 SHAP 领域的模型预测。我们将调查他们利用的算法,以及比较所提供的解释的效率和质量。

注意:因为我不想让你厌烦滚动巨大的代码片段,所以我只在文章中放了一小部分。然而,如果你想创建类似的可视化,或者学习如何解释你的分类器的预测,我鼓励你访问我的 GitHub

权衡取舍

在我们开始之前,让我们先回答一个最基本但同时也是最重要的问题。为什么我们甚至需要解释?难道我们不能解释模型的预测来了解是什么影响了它们吗?不幸的是,在很多情况下,答案是否定的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模型的潜在准确性和可解释性之间的权衡

我们可以说在模型的复杂性和它的可解释性之间有一个权衡。由于一些问题——尤其是在计算机视觉领域——非常复杂,我们必须使用强大而复杂的模型来解决它们。这些类型的模型通常被称为黑盒,因为我们不知道或不理解它们内部发生了什么。因此,我们经常为了模型的准确性而牺牲可解释性。

图像分类

正如我在第一段提到的,在这个项目中,我们将处理图像分类模型。这是最古老和最受认可的计算机视觉(CV)任务之一,它涉及到给照片分配一个带有对象类别名称的标签。尽管看起来很简单,但这是一项多年来给研究人员带来巨大问题的任务。突破性的想法是 AlexNet —卷积神经网络(CNN),在 2012 年的 ImageNet 比赛中首次使用。AlexNet 以大约低 10 个百分点的误差击败了其他参与者。这个解决方案彻底改变了计算机视觉。从那时起,CNN 就成了这个研究分支中所有任务的默认答案。不幸的是,CNN 是黑盒的一个例子——尽管我们知道黑盒内部发生的变化,但即使对于该领域的专家来说,对它们的全面解释也是一个问题。

**注:**如果你想更深入地探索 CNN,我强烈建议你阅读我的另一篇文章——深入了解卷积神经网络背后的数学

ELI5

我们将研究的第一个库是Eli 5——这是一个简单但可靠的工具,旨在可视化、检查和调试 ML 模型。该库允许解释用 Keras 编写的图像分类器的预测。为此,Eli5 利用了梯度加权类激活映射(Grad-CAM)算法。值得注意的是,这不是一个通用的方法,它仅适用于 CNN 解决方案。

Grad-CAM

Grad-CAMCAM 的下一个迭代,这是将 CNN 的预测可视化的最初想法之一。它使用激活图的值以及反向传播来理解预测的来源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ResNet34 激活在六个不同网络深度的可视化。随着层深度的增加,激活分辨率降低。

过滤图(或激活图)是将一个卷积核应用于层输入的结果。根据过滤器中的值,它们对不同的模式做出反应。重要的是,位于 CNN 不同深度的卷积层对它们所观察的物体的不同细节水平做出反应。浅层次对简单的形状有反应——不同角度的线条,相同亮度的表面。另一方面,深层的 CNN 会随着特定的复杂模式的出现而发光。此外,在大多数情况下,深层 CNN 层中的激活图的分辨率比图形开始处的低。

Grad-CAM 解释是通过执行前向激活图的线性加权组合,然后执行 ReLU 来获得的。相对于特征图激活,通过对给定类别(在 Softmax 之前)获得的分数梯度进行平均来计算线性方程的系数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例子

允许使用 Eli5 解释任何基于 Keras 的 CNN 预测的代码片段— 完整示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Eli5 为 ResNet34 型号获得的解释

摘要

  • [+]Eli 5 背后的思想很简单,计算量也很小,因此,该算法既容易理解,又能很快执行
  • [―] 该方法仅用于解释 CNN 预测
  • [―] 目前库**只支持基于 Keras 的模型。**
  • [―] 该方法的精度有限——取决于激活图分辨率

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显示 CNN 激活的分辨率如何影响解释的精确度的可视化

石灰

我为什么要相信你?:解释任何分类器的预测是一篇文章,是旨在解释 ML 模型的整个研究分支的基础。本文中包含的思想成为了最流行的解释库——本地可解释模型不可知解释(LIME)的基础。这种算法与 Grad-CAM 完全不同,它试图通过扰动输入数据来理解模型,并理解这些变化如何影响预测。

代理模型

这一次,我们的目标是用简单、可理解的线性模型取代复杂的黑盒模型。当然,新模型只是原模型的近似,但经过选择,它忠实地代表了当地的情况。这个方向的第一步是将图像分成超像素——颜色和亮度相似的相邻像素组。这种方法是有意义的,因为照片的分类可能是由许多像素决定的,所以单个像素的扰动对预测的影响很小。然后,我们创建一个人工照片集合,通过用灰色替换原始照片的随机超像素来创建。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

石灰算法

我们还定义了一个函数,它将允许我们确定原始图像和样本之间的相似程度,其中 D 是图像之间的余弦距离,而**【σ是图像的宽度。为了计算这个度量,我们将数码照片展平,并将其视为一个矢量。然后,我们计算代表被比较的两幅图像的向量之间的角度的余弦。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在你需要做的就是找到原始模型对输入图像 f(x) 的预测,以及线性模型对扰动图像g(z’)的预测,并求解由 L 定义的加权回归。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

稳健性

我们当然期望从梦的解释库中得到的一个关键特征是健壮性。我们想要两张几乎相同的图像来给出非常接近的解释。然而,事实证明石灰在这方面高度不稳定*。***

为了验证这一点,我进行了一个实验——我解释了图像分类器对两幅几乎相同的图像的预测。第二张图片是通过在原始图片中添加少量高斯噪声创建的——如此之小,以至于从模型中获得的概率几乎不会改变,图像对于肉眼来说是无法区分的。然而,解释上的差异却是显著的。

例子

允许使用 LIME 解释任何图像分类器预测的代码片段— 完整示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 ResNet34 型号的石灰获得的解释

摘要

  • [+]模型不可知方法 —完全独立于 ML 模型的类或架构。
  • [+] 库有现成的实现,可以让你解释任何图像分类器的预测。
  • [―]耗时的计算,取决于所选的超参数,对于单个图像可能会持续几分钟。
  • [―]稳定性问题——即使是图像的微小变化,也会导致截然不同的解释

SHAP

Hapley 加法解释(SHAP)和 LIME 非常相似——两者都是解释个体预测的加法和模型不可知的方法。然而,SHAP 的目的是通过计算每个特征对预测的贡献来解释给定输入的模型预测。为了实现这个目标,SHAP 使用了沙普利值,它最初来自博弈论。

沙普利值

首先,为了更好地理解所分析的算法,我们来解释一下什么是 Shapley 值。这是 Shapley (1953)描述的一种方法,根据游戏玩家对总收益的贡献来分配奖励。这个想法已经被转移到 SHAP,作为评估哪个特征对模型的最终预测贡献最大的一种方式。它被描述为一个特征值在所有可能的联合中的平均边际贡献。联盟向量z’为每个特征分配值 0 或 1,定义它是否出现在联盟中。使用函数 h 将这些向量映射到特征空间——对于图像,该函数填充灰色超像素,对应的向量值为 0。

KernelSHAP 这是一个想法的组合,从 LIME 开始就知道了,但是使用了 Shapley 值。类似地,与石灰一样,我们使用超像素来限制特征的数量,将相似颜色和亮度的像素组合起来。我们还使用加权回归来建立线性模型,其中每个超像素代表我们模型的单个特征。

关键区别在于回归模型权重的选择。对于 LIME,它是原始图像和扰动图像之间的余弦度量,而对于 KernelSHAP,使用以下公式来确定权重,其中 M 是最大联合,| z’|是所考虑的联合中的特征数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例子

允许使用 SHAP 解释任何图像分类器预测的代码片段— 完整示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 ResNet34 型号的 SHAP 获得的解释

摘要

  • [+]源于博弈论的坚实数学基础,使其具有很强的可解释性。
  • [+]模型不可知方法
  • [―]极其缓慢,因为它需要计算许多沙普利值
  • [―] KernelSHAP 是一个通用算法,如果我们想用它来解释 CV 模型的预测,我们需要定义我们的函数 h 将联盟映射到图像特征。

基准

我们将使用执行模型解释所必需的墙时间,作为我们库性能的度量。为了避免与预测解释无关的因素的影响,我们将依赖于 100 个单独案例的平均时间。获得的值如下所示。测试是在没有 GPU 的计算机上进行的,该计算机配备了英特尔酷睿 i7–7700 HQ CPU 处理器(2.80GHz)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试图书馆的平均讲解时间

结论

如果你设法来到这里,祝贺你。非常感谢你花时间阅读这篇文章。如果你喜欢这篇文章,考虑把它分享给你的朋友,或者两个或五个朋友。我希望这篇文章是有帮助的,现在你知道如何解释你的图像分类器的预测。

本文是“数据科学工具包”系列的另一部分,如果您还没有机会,请阅读其他文章。此外,如果你喜欢我目前的工作,请在 TwitterMedium 上关注我,并在 GitHubKaggle 上查看我正在进行的其他项目。保持好奇!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知道何时停止

原文:https://towardsdatascience.com/knowing-when-to-stop-b73ceeec7d9f?source=collection_archive---------63-----------------------

你应该在什么时候停止追逐百分点,给你的模型贴上“完成”的标签?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

约翰·马特丘克在 Unsplash 上拍摄的照片

在预测分析中,知道何时停止可能是一件棘手的事情。

不像生活中的许多活动,没有明确的终点线,之后你可以说“滴答,我完成了”。多做一点工作就能改进你的模型的可能性总是存在的。有如此多的变量需要调整,很容易最终沉迷于 0.1 个百分点,在抬起头来想“时间都去哪里了”之前,在细节上倾注了巨大的努力。

通过特征工程、模型选择和超参数调整迭代您的模型是任何数据科学家的关键技能。但是知道何时停止是很少解决的事情,并且可以极大地改变模型开发的成本和数据科学项目的 ROI。

我不是在这里谈论过度与欠适应。过度拟合是指模型与训练数据过于接近,可以通过将训练集错误与验证集错误进行比较来检测。在 Medium 和其他地方有许多 伟大的 教程更详细地解释了这一切。

我指的是你在整个建模过程中花费的时间,以及你如何量化回报和证明成本的合理性。

战略

一些可以帮助你决定何时结束的策略可能是:

  • 设定最后期限— 帕金森定律指出“工作扩大是为了填满完成它的时间”。拥有一个开放式的时间框架会让你拖延时间,把时间花在那些最终不会给最终结果带来多少价值的事情上。给自己设定一个截止日期是一个保持低成本和可预测的好方法,它迫使你有效地进行优先排序。当然,不利的一面是,如果您过于激进地设定截止日期,您可能会交付一个质量很差的模型。
  • 可接受的错误率— 你可以事先决定一个可接受的错误率,一旦达到就停止。例如,自动驾驶汽车可能会以 99.99%的准确率识别骑自行车的人。这种方法的困难在于,在你开始实验之前,很难设定你的模型有多精确的期望值。鉴于不可减少的误差水平,你想要的准确率可能是不可能的。另一方面,您可能会过早地停止,而仍然有空间来轻松地改进您的模型。
  • 价值梯度法— 通过在您的模型中绘制真实世界的错误成本与增强模型所需的努力,您可以了解每次增量改进的投资回报。这允许您继续开发您的模型,只有当额外调整的预测值低于您的时间值时才停止。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由尼古拉斯·霍伊泽Unsplash 上拍摄

收益递减法则

当你投入时间调整你的模型时,你可能会发现你的进展在开始时很快,但很快就停滞了。你可能会先取得最明显的进步,但随着时间的推移,你会越来越努力地工作以获得更小的收益。在数据本身中,可减少误差和不可减少误差之间的平衡为模型所能达到的精确度设置了上限。

在学习练习或纸牌游戏比赛中,你可以随心所欲地重复,追求那些越来越小的进步。

然而,对于一个商业项目来说,调整这个模型的成本随着您投入的时间的增加而线性攀升。这意味着,到了某个时候,再多掏 0.1%就不值得投资了。

这因项目而异。如果您正在处理超市数据,考虑到每天的大量购买,额外的百分之一个百分点的准确性可能值很多钱。这为继续努力改进您的模型带来了丰厚的投资回报。但是对于规模更小的项目,你可能需要更早地划清界限。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Jp ValeryUnsplash 上拍摄

模型误差的真实成本

在调优模型时,您可能要关注的值本质上是统计的。MSE、%精度、R 和 AIC 是由它们的数学公式定义的,与你试图解决的现实世界的问题无关。

不要只考虑准确性和误差的统计测量,这些应该被转换成可以与你正在进行的时间投资相权衡的东西,即金钱。

假设我们经营一个冰淇淋亭,我们试图使用天气、星期几、一年中的时间等变量来预测我们每天会卖出多少冰淇淋。

我们创建的模型没有一个是完美的,在任何一天,它通常都不是完美的;

  • 高估——意思是我们买的配料比卖出的冰淇淋数量需要的多。
  • 低估——意味着我们缺货,失去了潜在的业务。

这两种类型的错误都会给企业带来货币成本。如果我们中午就缺货,我们就失去了半天销售的利润。如果我们估计过高,我们可能会把钱花在最终被扔掉的原料上。

我们可以在我们的模型之上引入业务规则来帮助减少一些损失。损失 1 个冰淇淋销售额的成本可能高于扔掉 1 个冰淇淋过期牛奶的成本(假设我们有希望获利)。因此,我们会倾向于过量储存,例如,比模型预测的多储存 20%的原料。这将大大降低库存中断的频率和成本,代价是不得不扔掉几瓶过期的牛奶。

优化这 20%的规则,属于规定性分析的范畴。使用训练集,我们可以调整这一规则,直到模型中误差的平均估计真实成本达到最低。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安东尼·达·克鲁斯Unsplash 上拍摄的照片

价值梯度法

既然我们已经估算了模型准确性的真实成本,我们就知道我们在模型上投资的时间值多少了。随着每一次迭代,我们从先前版本的成本中减去真实世界的成本,以计算出我们额外努力所增加的价值。从那里,我们可以推断出一个投资回报窗口。

例如,您的验证集可能包含 1,000 行,并且您的最新模型比前一次迭代节省了 40 美元。如果您预计每年收集 100,000 个数据点,那么您可以将附加值乘以 100 来获得年增长率。因此,你为生产该模型的最新版本而投入的工作每年可获得 4000 美元的回报。

将此与我们的时间成本相比较,我们可以获得预期的投资回报。例如,如果上述改进需要一个每天收入 400 美元的人工作一天,那么它很快就收回了成本。

然而,随着收益递减规律侵蚀我们的改进速度,我们的利润将开始下降。当它接近零时,是时候接受我们所拥有的,并进入我们项目的下一个阶段。

当然,这是一门不精确的科学。它假设对我们模型的改进将以平稳和可预测的方式发生,并且未来的收益将小于以前的改进。无论何时你收工,都有可能会有重大突破。

但是,从商业角度关注你在一个模型上投资的时间总是一个好主意,通过降低成本和腾出时间花在最重要的事情上,你可以做更有价值的工作。

即将推出:一个 Python 模块,它获取预测、实际值和成本函数,并输出任何模型的预期 ROI 允许您将上述决策集成到您的模型调整过程中。

知识蒸馏——穿越时间的调查

原文:https://towardsdatascience.com/knowledge-distillation-a-survey-through-time-187de05a278a?source=collection_archive---------34-----------------------

通过这个博客,你将回顾知识蒸馏(KD)和六篇后续论文。

历史

2012 年,AlexNet 在 ImageNet 数据上的表现超过了现有的所有模型。神经网络即将被广泛采用。到 2015 年,许多先进技术被打破。趋势是在你能找到的任何用例上使用神经网络。VGG 网的成功进一步肯定了使用更深层次的模型或模型集合来获得性能提升。

(模特合奏只是一个花哨的名词。这意味着对多个模型的输出进行平均。例如,如果有三个模型,其中两个模型预测“A”,而一个模型预测“B”,那么将最后的预测作为“A”(两票对一票)

但是这些更深层次的模型和这些模型的集合在推理过程中运行的成本太高。(3 个模型的集合使用 3 倍于单个模型的计算量)。

意念

Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean 提出了一种在这些预先训练的集合的指导下训练浅层模型的策略。他们称之为知识提取,因为你从一个预先训练好的模型中提取知识到一个新的模型中。因为这看起来像是一个老师在指导一个学生,所以这也被称为师生学习。https://arxiv.org/abs/1503.02531

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片来自https://nerv anasystems . github . io/distiller/knowledge _ distillation . html))

在知识蒸馏,他们使用预训练模型的输出概率作为新浅层模型的标签。通过这个博客,你可以了解这项技术的改进。

Fitnets

2015 年出现了 FitNets:薄而深的网的提示(发表于 ICLR 2015 年)

FitNets 在 KD 损失之外又增加了一项。它们从两个网络的中点获取制图表达,并在这些点的要素制图表达之间添加均方损失。

经过训练的网络正在提供新网络正在模仿的经过学习的中间表征。这些表征帮助学生有效地学习,被称为暗示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FitNet 能够压缩模型,同时保持几乎相同的性能

回过头来看,这种使用单点给出提示的选择是次优的。许多后续论文试图改进这些提示。

更加关注注意力

更加关注注意力:通过注意力转移提高卷积神经网络的性能在 2017 年 ICLR 上发表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自报纸

他们与 FitNets 有相似的动机,但是他们使用注意力地图作为提示,而不是从网络中的一个点来表示。(MSE 超过学生和教师的注意力地图)。他们还使用网络中的多个点来给出提示,而不是 FitNets 中的一点提示

来自知识蒸馏的礼物

同年,在 CVPR 2017 上发表了《知识蒸馏的礼物:快速优化、网络最小化和迁移学习

这也类似于 FitNets 和注意力转移纸。但是他们用 Gram 矩阵给出了提示,而不是表示和注意力地图。

他们在论文中对此进行了类比:

“在人的情况下,老师解释问题的解决过程,学生学习解决过程的流程。当输入特定问题时,学生 DNN 不必学习中间输出,但是当遇到特定类型的问题时,可以学习解决方法。通过这种方式,我们相信演示问题的解决过程比教授中间结果提供了更好的概括。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自报纸

为了测量这个“解决方案流程”,他们在两层的特征图之间使用了一个 gram 矩阵。因此,代替 FitNets 中作为提示的中间特征表示,这使用特征表示之间的 Gram 矩阵作为提示。

解释复杂网络

随后在 2018 年,发表在 NeurIPS 2018 上,解释复杂网络:通过因子转移的网络压缩

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自报纸

他们在模型中增加了另一个模块,他们称之为释义器。它基本上是一个自动编码器,不会减少尺寸。从最后一层,他们分叉出另一层训练重建损失。

该学生还有另一个名为 translator 的模块。它将学生最后一层的输出嵌入到教师解释的维度中。他们利用老师潜在的转述表述作为暗示。

TL;学生应该能够从教师网络构建一个输入的自动编码表示。

一次全面检修的特色蒸馏

2019 年,全面检修的特色蒸馏在 ICCV 2019 发布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自报纸

他们声称我们接受暗示的位置不是最佳的。输出通过 ReLU 细化,在转换过程中会丢失一些信息。他们提出了 marginReLU 激活(移位 ReLU)。“在我们的利润率 ReLU 中,正面(有利)信息未经任何转换就被使用,而负面(不利)信息被抑制。因此,所提出的方法可以在不丢失有益信息的情况下进行蒸馏”

他们使用了部分 L2 距离函数,该函数被设计为跳过关于负区域的信息的提取。(如果来自该位置的学生和教师的特征向量都是负的,则没有损失)

对比表征蒸馏在 ICLR 2020 出版。在这里,学生也从老师的中间陈述中学习,但是他们使用对比损失来代替 MSE 损失。

总之,这些不同的模型采用了不同的方法来

  1. 增加蒸馏过程中传递的信息量。
    (特征表征,Gram 矩阵,注意力图,转述表征,预 ReLU 特征)
  2. 通过调整损失函数
    (对比,部分 L2 距离)来提高蒸馏过程的效率

看待这些想法的另一个有趣的方式是,新想法是旧想法的矢量和。

  1. KD 的 Gram 矩阵=神经类型转移+ KD
  2. 注意力地图=你所需要的就是注意力+ KD
  3. KD =自动编码器+ KD 的解释表示
  4. 对比表征提炼= InfoNCE + KD

其他向量和是什么?

  1. KD 的 GAN(也就是用特征表示之间的 GAN 损失来改变对比损失),
  2. 弱监督 KD ( 对吵闹学生的自我训练提高了 ImageNet 分类

这篇博客的灵感来自于 https://twitter.com/nishantiam/status/1295076936469762048 在知识蒸馏的推特风暴

[知识蒸馏] FitNets:薄深网的提示

原文:https://towardsdatascience.com/knowledge-distillation-fitnets-hints-for-thin-deep-nets-c64840aa2baa?source=collection_archive---------56-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 emmaws4s 来自 Pixabay

注意——YouTube 上还有一段视频解释了这篇论文

解决的问题

本文首先提出了一个案例,即宽而深的模型通常需要大量的乘法运算,这会导致很高的内存和计算需求。正因为如此,即使该网络在准确性方面是一个最高性能的模型,它在现实世界中的应用也是有限的。

为了解决这种问题,我们需要执行模型压缩(也称为知识蒸馏),将知识从一个繁琐的模型转移到一个参数较少的简单模型。

这篇论文背后的主要驱动力是,到目前为止,知识提炼方案已经考虑了与教师网络规模相同或更小的学生网络。

他们提请注意这样一个事实,即迄今为止,学生网络的深度还没有被考虑。

比教师网络层数多但每层神经元数量少的学生网络称为薄深度网络。

现有技术及其局限性

现有技术可以从两个不同的角度来看。

第一个视角是知识提炼的技术。自从这篇论文问世几个月后的 在神经网络中提炼知识的 论文它是唯一的现有技术。

[## 【论文摘要】提取神经网络中的知识

知识蒸馏研究领域起步论文的关键见解

towardsdatascience.com](/paper-summary-distilling-the-knowledge-in-a-neural-network-dc8efd9813cc)

作者在这里提出了一个例子,当更平滑的 softmax 技术起作用时;迄今为止,还没有人注意到学生网络的深度。

他们认为

深度是表征学习的一个基本方面,它导致更抽象和不变的表征,因此我们应该考虑深而薄的学生网络

然而,他们也意识到更深层次网络(尤其是更细的更深层次网络)的训练可能非常具有挑战性。这个挑战是关于优化问题(例如,消失梯度),因此第二个现有技术观点来自于过去在解决深层网络的优化问题上所做的工作。

也就是说,这篇论文以及推而广之,所有被引用的论文都是 Resnet 时代之前的!

Resnet 架构在解决消失梯度等问题上发挥了重要作用,并为创建更深层次的模型铺平了道路。因此,对我们来说,试图理解这里过去引用的作品并不重要。

接下来,我们将讨论本文如何试图规避训练更深但更薄的学生网络的挑战

关键见解

因此,第一个也是最主要的景象就是我们已经讨论过的,也就是说,建立一个更薄但更深入的学生网络是一个好主意。

本文的重点转移到解决他们在一个更薄更深的学生网络中可能面临的优化问题。

由于初始层的学习是有帮助的,他们决定通过使学生网络的一部分模仿教师网络的一部分来帮助学生网络。例如,如果我们在学生模型中有一层学习预测教师模型中一层的输出,那么我们可能会缓解与培训相关的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:从报纸上剪下

学生应该学会预测教师输出的那一层被称为“提示

来自学习的学生网络的层被称为“引导的层。

你现在可以考虑有一个目标函数,它接受提示和引导层的输出,并最小化损失。

然而,这导致了一个有趣的问题,即在教师模型中选择哪些层作为提示层,同样地,在学生模型中哪一层应该作为引导层。

作者指出,如果导向层更靠近输出层,则可能会过度正则化。为什么这种特殊的安排导致过度正规化是没有解释的!

然后他们提到,他们最终选择了学生的中间层作为引导层,暗示层也是如此,即教师的中间层

这个决定很可能是他们实验的结果。

它是如何工作的?

如上所述,您可以选择教师模型的中间层作为提示层,选择学生模型的中间层作为引导层,这样可以最大限度地减少预测中的损失。

这基本上是一个 2 阶段的培训过程。在第一阶段,使用预先训练的教师模型来训练网络直到引导层。

也就是说,这创造了一个有趣的情况。由于学生模型应该更薄,引导层的神经元数量将少于提示层。因此,我们无法真正比较这两层的输出

为了解决这个问题,他们在引导层前面放了一个回归量,使维度与提示层的维度相同。下图显示了这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源—作者

作者随后在多个数据集(CIFAR 10、CIFAR 100 和 SVHN)上进行了实验,获得了显著的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源—摘自论文

以上结果基于 CIFAR 10 数据集。教师模型有 5 层,900 万个参数。他们用不同的层数训练了 4 个不同的学生网络(称为 FitNet)。从表中可以看出,FitNet 1 只有 250K 参数,精度下降了 1%多一点。

FitNet 2、3 和 4 比教师网络具有更好的准确性,从而证明深度和提示训练都有效。

以下是这篇论文的一些见解/观察-

  • 基于提示的机制确实简化了训练过程
  • 由于阶段式设置,学生可以更好地进行初始化
  • 暗示训练似乎也有助于正规化。结果表明了这一点

各种链接和详细信息

论文有开源实现吗?

Github 上有多种实现。这里我提供了这篇论文的第一作者 https://github.com/adri-romsor/FitNets 的实现链接

这篇论文是在一次会议上发表的吗?

是的。这篇论文被 2015 年 ICLR 会议接受,被引用了 1000 多次

论文链接—【https://arxiv.org/abs/1412.6550

有解释论文的视频吗?

是的。我为这篇论文制作了 YouTube 视频。

我的观点、问题和要点

  • 一篇写得非常好的论文强调(并证明)了深度在学生网络中的重要性。
  • 提示和引导层的选择可以进行更详细的研究。
  • 我认为 Resnet 应该关注优化问题(消失梯度等),但该技术对学生网络的初始化仍然有用。这至少有助于加快收敛速度!

希望你喜欢这个摘要,我可能误解/曲解了论文的某些部分,因此,如果有的话,错误是我的,而不是原论文作者的。

知识图在零售业中的应用

原文:https://towardsdatascience.com/knowledge-graphs-applied-in-the-retail-industry-ecac4e7baf8?source=collection_archive---------12-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TL;博士 : 知识图表在科技领域变得越来越流行。我们探索如何在零售行业中使用它们来丰富数据、扩大搜索结果并为零售公司增加价值。

编辑以一年一度的黑客周结束了 2019 年,这是一个以最小风险测试新想法的绝佳机会,同时促进了团队和专业之间的合作。我的团队致力于一个我去年一直热衷于探索的研究领域:知识图表。如何在零售业中利用和优化它们?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个谷歌知识面板的例子

知识的兴起

在科技行业,知识图表正在爆炸。它们被语音助手、在线零售推荐者和搜索引擎所使用,脸书、谷歌和网飞等科技巨头是它们最大的拥护者。你最有可能每天看到它们以一个盒子或者“知识面板”的形式出现,当你用谷歌搜索的时候。谷歌使用从维基百科等网站收集的数据,这些网站使用一个 JSON-LD 模式来声明页面的结构化数据,以及它自己对用户行为的理解来扩展你的搜索结果。以搜索大卫·鲍依(左)为例。谷歌从维基百科返回出生地、出生日期和配偶等汇总信息,以及流行歌曲和电影以及用户定义的“人们也搜索”。这产生了一个更具信息性的信息面板,其中数据是以实体为中心的,也就是“事物而不是字符串

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为图形的大卫·鲍依

如果我们以图表的形式查看大卫·鲍依的电影数据,它看起来会像上面这样:大卫·鲍依(用红色表示的人节点)通过 ACTED_IN 关系连接到各种电影(蓝色的电影节点)。我们可以使用与这些节点相关的数据(例如电影中的其他演员)或与人物节点相关的数据(例如黄色的出生年份)来进一步扩展这一点。

这个简单的图形能够以一种直观的方式存储数据,允许一种传统 RDBMS 难以实现的查询(比如跟踪链接)。我们可以看到这样的关系,其中来自一个节点的每条路径都有一个相关联的含义,如“参与”。这形成了一个本体,其中我们将特定领域的知识表示为实体、概念和数据之间的属性、连接和关系。

零售产品图

大量的数据适合本体,零售也不例外。让我们来看看如何将来自 EDITED 的产品作为产品图来查看。为方便起见,我们只包含了产品数据和字段的子集。有很多软件包可以用来构建图形,我们使用流行的 Neo4j 平台

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Neo4j 将产品编辑成图形

这里我们有一个用惟一标识符命名的产品节点(橙色)。从这个产品节点,我们有几个指向其他节点的关系,包括:HAS_ATTR(绿色),颜色(蓝色),护理(粉红色),品牌(红色)和类别(米色)。HAS_ATTR 指的是一个属性,例如,该产品包含一个紧固件,以及使用简单的 TF-IDF 单词提取(使用权重来隔离重要属性的单词)在产品的名称、描述和护理上发现的护理。品牌是在抓取的时候直接取的。而其他关系,类别和颜色,是使用基于文本和图像的机器学习找到的。

以这种格式存储零售数据创建了一个可解析的数据结构,突出了与一个产品以及其他产品的关系。例如,其他具有“ruffle”特性的产品也会指向“ruffle”节点,如下所示。这种结构还允许在我们爬行时从管道中不断获取数据,因为图能够适应。通过将数据存储为图形,我们还可以应用使用图论制定的算法,例如利用最近邻居的最短路径(这可能有助于产品匹配)和链接预测,我们可以预测节点之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提取与我们的产品具有“皱褶”特征的其他产品

陷入语义学

到目前为止,我们已经谈论了很多关于用图表表示数据的内容,但是我们一直在讨论知识图表吗?关于这个话题有一些不同的观点,但我更喜欢将知识图定义为添加了特定领域知识的本体(例如,参见 Ehrlinger et al 2016 )。虽然我们的产品数据使用机器学习来提取我们用作图中节点的产品属性,但对我来说,知识图使用外部数据或对零售的理解来构建本体。

例如,EDITED 使用博柏利作为我们产品图中的品牌节点。如果它存在于一个知识图中,它将在节点中存储信息,如公司成立的时间和地点,以及与品牌相关的某些属性,如遗产、印刷品、奢侈品、Riccardo Tisci(首席创意官)等。这需要零售专家的协调和深入研究。为了使这个知识图与我们的产品图明显分开,节点用黄色标出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用博柏利相关词汇的零售知识图的示例子集。节点类型包括年份、公司、国家、人员和关联词语。

查询扩展—增强搜索引擎

现在我们有了一个零售知识图(其中黄色节点是零售行业中具有语义连接的实体)和一个经过编辑的产品图(颜色和品牌等产品数据的多色节点),我们可以利用这两个图进行一些高级查询扩展。

我们使用知识图中的语义信息来获取与文化背景相关的单词。以上述与博柏利相关的单词为例,特别是通过“BRAND_FROM”连接到“Britain”的节点。我们可以使用知识图的这个集群返回英国品牌,如博柏利和保罗·史密斯。

在下面的产品图中,我们有一个博柏利产品和一个保罗·史密斯产品,它们通过在知识图中的连接而相互关联。它们在产品图中还通过一些共享节点(例如,服装、衬衫、印花等)相互关联。因此,如果我们要搜索“英国设计师衬衫式连衣裙”,我们的知识图表将返回基于英国品牌的结果,简单的搜索(如 fuzzy)可以确保我们专注于衬衫式连衣裙。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过品牌的原产国来关联产品

语义搜索在零售业中很常见,特别是像“时髦的连衣裙”或“跳舞的连衣裙”这样的搜索,会比搜索像“黑色不对称亮片迷你连衣裙”这样的特定产品名称更常见。我们还可以使用基于产品属性和语义实体的知识图将单词关联在一起,与其说是本体,不如说是关键字关联,以构建简单的基于规则的分类,从而实现快速扩展。同样,行业专家在这个过程中根据他们对零售的了解来选择这些词是至关重要的。下面是我们知识图表的一个子集——与“party”相关的精选单词列表。我们可以利用这一点扩大客户的搜索范围。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

零售知识图的子集,带有与 party 相关的单词

通过搜索“时髦服装”,我们从知识图中返回两个“路径长度”(即箭头)内与“时髦”相关的所有精选单词。我们还可以将其扩展到路径长度> 2,以进一步挖掘知识图连接,例如,返回具有这些属性的品牌。这将返回一个“party”聚类来查询我们的产品图,返回所有以 party 相关的词作为属性的产品(即通过 HAS_ATTR 关系),从而扩展我们的原始查询。我们可以使用我们的知识图的任何部分重复这个过程,例如,“皮夹克”使用一个织物本体(如皮革和麂皮),“可持续”使用一个可持续本体(链接品牌、材料、关联词等)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用零售知识图通过查询扩展来查询我们的产品图

这种将知识图连接到产品图的方法还允许我们进一步探索我们的零售数据。通过观察与某些词的联系增加,我们可以开始看到趋势集群的形成,以及品牌之间共享节点数量增加的品牌集群。

最后的想法

事实证明,知识图谱是未来科技的一大贡献者,也将很快成为零售业的下一场大革命。在几天的时间里,我们只涉及了他们零售潜力的一小部分。然而,它们可以为零售公司增加重要的价值,这些公司正在寻求改善搜索扩展、个性化在线推荐、预测趋势、产品匹配等等。我们期待在 EDITED 探索所有这些可能性。

知识图表一览

原文:https://towardsdatascience.com/knowledge-graphs-at-a-glance-c9119130a9f0?source=collection_archive---------18-----------------------

KGs 洞察

利用语义图视角,将人类知识融入智能系统

知识图(KGs)已经成为将人类知识整合到智能系统中的核心抽象。这种知识被编码在基于图的结构中,该结构的节点表示真实世界的实体,而边定义这些实体之间的多种关系。KGs 正受到工业界和学术界的关注,因为它们提供了一种灵活的方式来捕获、组织和查询大量的多关系数据。

这篇文章的目标是介绍 KG 特有的双重视角:

  1. 基于图形的视角,它允许我们在 kg 上执行图形算法和归纳推理技术;
  2. 基于语义的视角,它为数据的语义解释提供了一个正式的框架,这对于执行演绎推理是必不可少的。

然后,这篇文章将重点关注与语义视角相关的技术和语言,这些技术和语言支持演绎学习。支持归纳技术的图形视角将在致力于图形表示学习的系列文章中讨论:https://towardsdatascience.com/tagged/grl-series

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哲学领域中 KG 的例子

KGs 的正式定义

F 通常,一公斤可以定义为G*= {E,* R T},其中 G 为 a

每个三元组形式化为 ( u e v)t*,其中ue在语义体系中,三元组被形式化为一个事实,其中( e *,v)对应于 ( 其中 so 是两个实体,分别是事实的主体客体,而 r 是连接so 的关系

为了阐明这一方面,请考虑下面的例子陈述:“苏格拉底影响了柏拉图。”从图的角度来看,三元组包括“苏格拉底”和“柏拉图”作为图的两个节点,而“受影响”是这两个节点之间的一条边。从语义上看,简单的说法包括“苏格拉底”和“柏拉图”两个实体,而“受影响”是这两个实体之间的关系。实体和关系也可以定义为语句的术语*。*

KG 数据模型

资源描述框架(RDF)是语义网(SW)的核心技术,用于实现知识的双重表示。SW 的目的是实现机器可读和可理解的网络级数据基础设施。为了实现这一仅部分实现的愿景,采用了统一资源标识符(URIs)和超文本传输协议(HTTP)等 Web 技术。

RDF 反映了一个简单的基于图的数据模型,利用了 Web 技术,并提供了一个正式的意义概念(语义),为有根据的演绎建立了基础。RDF 图可以用不同的格式序列化,包括 N-Triples、N3、Turtle、JSON 和 XML。例子“苏格拉底影响了柏拉图”可以翻译成 RDF,并按 N-Triples 连载如下:

*<[http://dbpedia.org/resource/Socrates](http://dbpedia.org/resource/Socrates)>
<[http://dbpedia.org/ontology/influenced](http://dbpedia.org/ontology/influenced)>
<[http://dbpedia.org/resource/Plato](http://dbpedia.org/resource/Plato)> .*

其他类型的序列化,比如 Turtle,支持使用所谓的前缀对 RDF 事实进行更紧凑的声明。该示例可以重写如下:

*[@prefix](http://twitter.com/prefix) dbo: <[http://dbpedia.org/ontology/](http://dbpedia.org/ontology/)> .
[@prefix](http://twitter.com/prefix) dbr: <[http://dbpedia.org/resource/](http://dbpedia.org/resource/)> .
dbr:Socrates dbo:influenced dbr:Plato .*

从软件的角度来看,术语 dbr:Socratesdbo:infecteddbr:Plato 也被称为资源*,两个不同资源之间的关系——在本例中为dbo:infected——也被称为谓词或*这个例子直接来自一个名为 DBpedia 的现有开放 KG,它的目标是以 RDF 三元组集合的形式提供包含在维基百科信息框中的信息。这个集合也可以表示为 RDF 图。**

运行实例表明,URIs 可以作为实体 so 以及关系 r 的唯一标识。RDF 允许我们表示实体之间的关系,也可以表示与单个实体相关的特定信息。在 RDF 语句中

*dbr:Socrates dbo:birthDate -469-0-0^^xsd:date .*

该对象不是一个实体,而是一个文字值,具有使用 XML 模式数据类型(XSD)定义的特定数据类型。从图的角度来看,一个文字值被认为是 KG 的一个叶节点。从 RDF 表示开始,增加了量化的语句来表示实体和关系的语义。

语义模式和本体

DF 模式(RDFS)和 OWL(网络本体语言)是两种不同的语言模型,能够以 RDF 图的形式构建量化的语句。RDFS 是定义 RDF 图语义模式的最重要的标准之一。OWL 是在实际案例中使用的最流行的本体语言,合并和扩展了 RDFs。RDFS 和 OWL 指定了大量的词汇表来表示使用 RDF 节点和边的特殊条件,引入了一致性和特定的数据类型来支持逻辑推理。此外,它们表明术语是如何相互关联的,并强加了一个结构来定义语义解释的约束。

DFS 提供了为聚集具有相似特征的实体定义类的机制。为了定义阶级,RDFS 提供了两个不同的术语:

  • rdf:type 属性定义了一个主题节点的“类型”;此属性的对象必须是类。在 RDF 中, rdf:type 也可以替换为a*;*
  • rdfs:Class 用于聚合相似的实体。

在运行的示例中,可以定义以下语句来扩展与 Socrates 相关的信息:

*ex:Human rdf:type rdfs:Class .
dbr:Socrates rdf:type ex:Human .*

RDFS 还允许用rdfs:subclass of属性定义类层次结构。因此,事实的收集可以扩展如下:

*ex:Human rdf:type rdfs:Class .
dbr:Socrates rdf:type ex:Human .
ex:Mortal rdf:type rdfs:Class .
ex:Human rdfs:subClassOf ex:Mortal .*

RDFS 还定义了特定的术语来扩展属性的语义。这些术语包括:

  • rdf:Property→它是将 rdf:type 中的任何一个术语用作谓词;
  • rdfs:domainrdfs:range→它们定义属性的域和范围。域和范围被分类为rdfs:Class*;*
  • rdfs:sub property of→它指定了属性的层次结构。

因此,与dbo:affected属性相关的信息可以表示如下:

*dbo:influenced rdf:type rdf:Property ;
    rdfs:range ex:Human ;
    rdfs:domain ex:Human .*

WL 是一种描述本体的语言模型。OWL 文档,被称为本体,包含了 RDFS 定义的术语,并添加了进一步的结构来解决其局限性。例如,OWL 明确了不同实体之间的相同或不同的关系。它支持更具表达性的类定义,包括并集、补集、不合集,指定基数限制。此外,它还包括更具表达性的属性定义,支持区分对象和数据类型属性。OWL 还允许我们定义传递的、函数的、对称的和反向的属性,表示值的限制。描述类和属性之间关系的陈述也被称为公理*。这些陈述在参考领域被归类为,并且是实现演绎推理的基础。*

运行示例可以用 OWL 扩展如下:

*[@prefix](http://twitter.com/prefix) rdf: <[http://www.w3.org/1999/02/22-rdf-syntax-ns#](http://www.w3.org/1999/02/22-rdf-syntax-ns#)> .
[@prefix](http://twitter.com/prefix) rdfs: <[http://www.w3.org/2000/01/rdf-schema#](http://www.w3.org/2000/01/rdf-schema#)> .
[@prefix](http://twitter.com/prefix) owl: <[http://www.w3.org/2002/07/owl#](http://www.w3.org/2002/07/owl#)> .
[@prefix](http://twitter.com/prefix) ex: <[http://example.com/](http://example.com/)> .
[@prefix](http://twitter.com/prefix) dbr: <[http://dbpedia.org/resource/](http://dbpedia.org/resource/)> .
[@prefix](http://twitter.com/prefix) dbo: <[http://dbpedia.org/ontology/](http://dbpedia.org/ontology/)> .
[@prefic](http://twitter.com/prefic) wkd: <[https://www.wikidata.org/wiki/](https://www.wikidata.org/wiki/)> .# RDF
dbr:Socrates dbo:influenced dbr:Plato ;
    dbo:birthDate -469-0-0^^xsd:date .# RDFS
dbr:Socrates rdf:type ex:Human . 
ex:Human rdf:type rdfs:Class ;
    rdfs:subClassOf ex:Mortal .dbo:influenced rdf:type rdf:Property ;
    rdfs:range ex:Human ;
    rdfs:domain ex:Human .# OWL 
dbr:Socrates owl:sameAs wkd:Q913 .
dbo:influenced rdf:type owl:ObjectProperty .
dbo:birthDate rdf:type owl:DatatypeProperty .
rdfs:subClassOf rdf:type owl:TransitiveProperty .*

这个例子建立了量化的陈述,例如“所有人都会死”从而也让我们通过演绎推理推断出一个新的事实:“苏格拉底是凡人”来源于 ex:人类ex:凡人 的子类。在同一个例子中,OWL 语句允许我们声明dbo:infecteddbo:birth date是两种不同类型的属性,分别是对象属性和数据属性。此外,使用 OWL 可以定义这样一个公理,根据这个公理,rdfs:subclass of是一个传递属性。

查询千克

一种被称为 SPARQL (SPARQL 协议和 RDF 查询语言)的实用语言已经在软件环境中开发出来,用于在 kg 上执行查询。这种结构化查询语言的核心是基于图形模式的,它遵循相同的 RDF 图形模型。此外,SPARQL 引入了变量作为有效术语。所以图模式分为常量,用 dbr:Socrates 等资源表示,用 等变量表示?哲学家 ,用问号标识。在查询过程中,根据 RDF 图评估图模式。这个过程在图模式的变量和 RDF 图中的资源之间生成一个映射。然后,这些变量被满足查询中包含的图形模式的 RDF 资源替换。下面是 SPARQL 查询的一个例子:

*[@prefix](http://twitter.com/prefix) dbr: <[http://dbpedia.org/resource/](http://dbpedia.org/resource/)> .
[@prefix](http://twitter.com/prefix) dbo: <[http://dbpedia.org/ontology/](http://dbpedia.org/ontology/)> .SELECT ?philosopher
WHERE {
    dbr:Socrates dbo:influenced ?philosopher .*

考虑到我们运行的例子, ?哲学家 变量替换为资源 dbr:柏拉图

下一步是什么

在下一篇文章中,我描述了从结构化的数据源构建知识库的概念性方法,将这些数据源的本地模式映射到由领域本体定义的全局模式。

* [## 从结构化来源构建知识图

关于集成异构数据所采用的映射方法的说明

towardsdatascience.com](/building-knowledge-graphs-from-structured-sources-346c56c9d40e)

如果你喜欢我的文章,你可以支持我使用这个链接https://medium.com/@giuseppefutia/membership成为中等会员。*

可解释人工智能的知识图

原文:https://towardsdatascience.com/knowledge-graphs-for-explainable-ai-dcd73c5c016?source=collection_archive---------21-----------------------

KGs 洞察

将语义技术和符号系统整合到深度学习模型中,以实现更易于理解的人工智能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个可解释的人工智能系统的示意图,该系统将语义技术集成到深度学习模型中。人工智能系统的传统管道用蓝色表示。深度学习组件与知识图(kg)和本体的知识匹配过程用橙色描绘。由查询和推理机制实现的跨学科和交互式解释用红色表示。

D eep 学习模型有助于在人工智能(AI)系统的预测和分类任务中取得前所未有的成果。然而,在取得这一显著进步的同时,它们并没有提供人类可以理解的关于具体结果是如何实现的见解。在人工智能对人类生活的影响相关的背景下(例如,招聘工具、医疗诊断等。),可解释性不仅是一个可取的属性,而且是——或者,在某些情况下,很快将是——一个法律要求。

大多数实现可解释人工智能(XAI) 的可用方法都专注于只有能够操纵深度学习算法中数学函数的专家才能使用的技术解决方案。一种互补的方法由符号人工智能代表,其中符号是人类和深度学习之间通用语言的元素。在这种背景下,知识图(KGs) 及其底层语义技术是符号人工智能的现代实现——虽然与深度学习模型相比,KGs 不太灵活,对噪声也不太鲁棒,但 KGs 天生就被开发为可解释的。

当前 XAI 的局限与 KGs 的机遇

XAI 是数学家、计算机科学家和软件工程师设计、开发和测试技术的研究领域,旨在使人工智能系统更加透明,更容易被利益相关者理解。在该领域开发的大多数方法需要非常具体的技术专业知识来操纵算法,这些算法在深度学习的基础上实现数学功能。此外,理解这种数学支架不足以洞察内部工作模型。事实上,为了更容易理解,基于深度学习的系统应该能够发出和操纵符号,使用户能够解释如何实现特定的结果。

在符号系统的背景下,KGs 及其底层语义技术是解决可理解性问题的一个有希望的解决方案。事实上,这些语义实体和关系的大型网络为几个推理机制提供了有用的主干,从一致性检查因果推理。这些推理过程由本体实现,它提供了与特定知识领域相关的语义实体和关系的正式表示。

KGs 在建设美好 XAI 中的作用

基于语义技术的符号系统的实现适合于改进对非内部人员的解释。深度学习模型的输入特征、隐含层和计算单元、预测输出可以映射成 KGs 的实体或本体的概念和关系( 知识匹配 )。传统上,这些本体工件是来自不同学科的专家采用的概念化和实践的结果,例如生物学、金融和法律。因此,即使他们没有人工智能技术方面的技能,他们也非常容易被具有特定领域专业知识的人理解( 跨学科解释 )。此外,在语义技术的上下文中,知识和本体是为查询而生的,因此它们能够为用户请求提供答案( 交互式解释 )并提供符号级别来解释深度学习模型的行为和结果。

从这些点出发,XAI 的未来工作有具体的轨迹,包括利用符号技术来设计新颖的深层神经架构,以本地编码解释;多模态解释模型的开发,该模型能够从不同的角度提供洞察力,结合视觉和文本人工制品;定义一个通用解释框架,用于深度学习模型比较,基于知识和本体,以实现适当的验证策略。

参考

关于这个主题的更多信息可以在我们的期刊文章中找到,标题为“关于将知识图整合到深度学习模型中以获得更容易理解的人工智能——未来研究的三个挑战”。

如果你喜欢我的文章,你可以支持我使用这个链接成为中等会员。

社会公益知识图表讲习班:帮助联合国实现可持续发展目标

原文:https://towardsdatascience.com/knowledge-graphs-for-social-good-workshop-helping-the-united-nations-achieve-sustainable-a18fa338731?source=collection_archive---------24-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2015 年制定的联合国可持续发展目标(SDGs)是 17 个全球共同目标的集合,旨在到 2030 年改善全球人民的健康和福祉。17 个目标有 169 个具体目标。每个目标有 1 至 3 个指标,用于衡量实现目标的进展情况。联合国与来自 70 个国家的代表进行了一系列“全球对话”,以决定 SDG。

埃森哲实验室与联合国合作,正在组织社会公益知识图表研讨会,以帮助联合国利用知识图表创建和探索技术,深入了解可持续发展目标。我们正在以合作构思练习的形式汇集参与者的专业知识,为联合国提出建议,并确定未来可能的研究方向。

当前为实现可持续发展目标所做的努力

联合国内部有许多与可持续发展目标相关的令人兴奋的工作。为此,联合国成立的组织全球脉动实验室(Global Pulse Lab)目前正在研究实时分析大数据的手段和方法。这意味着联合国可以利用人工智能和人工智能来发现数据中的模式,推断数据内容,并迅速获得洞察力,毫不延迟地采取行动。示例项目包括(但不限于):

通勤统计—针对 SDG 11,可持续发展城市和社区,该项目使用地理定位和社交媒体标签来了解市民的通勤模式。这一分析得出的见解正被用来填补官方通勤统计数据的空白。

气候异常——针对 SDG 13“气候行动”,该项目使用卫星图像跟踪气候异常,为决策者提供早期气候预警。

Pulse Labs 的其他细节和项目包括 SDG 2——零饥饿、SDG 4——质量行动和 SDG 5——性别平等。

联合国正在开展的工作得到了其他机构的补充,这些机构正在采取措施确定可能与多个可持续发展目标相关的共同主题。比如,2016 EAT Stockholm 食品论坛的主题演讲认为,所有的可持续发展目标都可以直接或间接地与食品联系起来。还说明了如何将可持续发展目标分成更广泛的类别,例如:生物圈、社会和经济。

当今世界比以往任何时候都更加相互关联,实现目标指标所定义的可持续发展目标的进展反映了这种相互关联。如果表示和连接 SDG 的解决方案的开发取得进展,更大的洞察力就在掌握之中。这项工作将为我们提供探索联系和数据背景以及衡量一个 SDG 对另一个 SDG 的影响的能力。

为什么是知识图表?

图表用关系映射数据,而 SDG 则有个人在健康、贫困、社会和经济等方面的数据。因此,当他们测量相同的人群时,从一个 SDG 到另一个 SDG 开始提供数据上下文和数据的语义理解是一个自然的过渡。知识图可以提供带有语义上下文的数据覆盖,同时表示来自非结构化和结构化来源的概念。随着数据量的增长,对领域的语义理解会加深和拓宽。

NLP 的最新进展是从非结构化数据中提取知识,在语义上连接它们,并预测缺失的链接,这有助于构建全面的知识图。将知识图与这些先进的 NLP 技术结合使用,为研究 SDG 提供了一个令人兴奋的机会。此外,这一方法允许研究人员和决策者衡量干预和全球事件在可持续发展目标内部和之间的影响。知识图表将让我们深入了解:

  • 来自一个或多个可用数据集的每个 SDG 的语义表示
  • 在 SDG 内部和之间包含新的或现有关系的广泛表示
  • 通过识别或预测领域空间内或跨领域空间的干预效果,实现可持续发展目标内部和之间的数据连接

知识图将各个数据仓库之间的点连接起来,可以在语义上表示非结构化和结构化数据。它是一种粘合剂,可以将数据、概念、关系和属性结合在一起。

本次研讨会将展示使用知识图对可持续发展目标的影响,也将有助于为各种其他领域设定类似的方向。

更多关于社会公益知识图表研讨会的详细信息

本次研讨会将探讨如何利用知识图表来实现联合国的 17 项可持续发展目标(SDGs),涵盖的主题包括贫困、医疗保健、教育、可持续发展等。在知识图创建、数据填充和应用的新的可扩展技术的背景下。

它将汇聚一群实践者和决策者,讨论可以解决可持续发展目标的正在进行的行业工作和学术研究成果。

此外,它将基于已提交的论文(请参见“征集论文”了解更多详细信息),并建立一个社区和论坛来公开讨论解决方案。

我们将提供杰出演讲者、联合国数据和专家的访问权限。会议将在协作构思练习中达到高潮,旨在促进关于可持续发展目标的现场小组集思广益会议,并讨论有助于联合国利用知识图表解决方案实现这些目标的潜在解决方案。

参考

https://www . the guardian . com/global-development/2015/Jan/19/sustainable-development-goals-United nations

https://www . Stockholm resilie . org/research/research-news/2016-06-14-how-food-connects-all-the-sdgs . html

https://medium . com/age-of-awareness/implementing-the-sdgs-Gaia-education-UNESCO-collabove-in-training-multipliers-821 e63 D5 f 473

https://medium . com/pulse-lab-Jakarta/tracking-the-sdgs-using-big-data-dad 0ad 351 f2e

http://www . human sphere . org/world-politics/2015/05/gates-foundation-says-it-does-support-the-un-development-agenda/

https://medium . com/@ OECD/where-to-start-the-the-sdgs-FD 825 f 256 CCE

https://medium . com/@ OneYoungWorld _/what-the-business-case for-the-sdgs-4a 8402 f 9 ffd 7

https://medium . com/@ UNDP/stopping-the-leak-boosting-sdgs-40c 96026 aa 89

自然语言处理中的知识图@ ACL 2020

原文:https://towardsdatascience.com/knowledge-graphs-in-natural-language-processing-acl-2020-ebb1f0a6e0b1?source=collection_archive---------3-----------------------

2020 年中期的技术水平

这篇文章是为了纪念我们研究 NLP 和 Graph ML 在知识图驱动下的进步的系列文章发表一周年!🎂1️⃣
观众的反馈驱使我继续,所以系好安全带(也许在这一集酿造一些☕️):,我们正在看 KG 相关的 ACL 2020 进程!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ACL 2020 今年实现了完全虚拟化,我无法想象主席们组织如此庞大的在线活动以满足多个时区和 700 多份已接受论文的需求有多困难。感谢所有参与者以及发言者和与会者,鉴于会议的规模,会议进行得很顺利👏

那么与 ACL 2019 相比,KG & NLP 领域有什么变化吗?是啊!
我将今年的贡献总结为:

知识图展示了在非结构化数据中揭示高阶相关性的更好能力

今天我们的议程是:

  1. 结构化数据问答
  2. KG 嵌入:双曲线和超关系
  3. 数据转文本 NLG:准备好你的变压器
  4. 对话式人工智能:改进面向目标的机器人
  5. 信息提取:OpenIE 和链接预测
  6. 结论

结构化数据上的问题回答

在这种情况下,问题是针对结构化数据源发送的,比如基于 SPARQL 的 kg 或 SQL 数据库(其他查询语言并不那么突出)。
今年,我们可以观察到越来越多的人加入了复杂(也称为多跳)问题。

例如, Saxena 等人 在他们的 EmbedKGQA 中解决了复杂 KGQA 耦合 KG 嵌入与问题嵌入向量的问题。 1️⃣首先,一个底层的 KG 嵌入了某种算法(作者选择 ComplEx ),这样每个实体和关系都与一个特定的向量相关联。在某些情况下,作者冻结它们,或者根据 KG 大小保持微调。2️⃣输入的问题通过 RoBERTA(来自最后一层的[CLS]令牌)编码,并通过 4 个 FC 层(如果你问为什么是 4,我没有答案,看起来像一个幻数🧙‍♂️)传递,这些层应该将问题投影到复空间。3️⃣关键部分发生在评分中,作者采用 KG 嵌入框架并构建了一个三元组 (头实体、问题、候选实体)。评分功能与 ComplEx 中的相同。这里,头部是问题中的主要实体,问题本身被认为是一个关系(虽然看起来有点牵强),候选实体要么是 KG 中的所有实体(如果很小),要么是头部周围的 2 跳子图(当需要修剪时)。是的,它确实类似于用于训练 KGE 算法的典型的 1-N 评分机制。✂️通过计算问题嵌入h_q和每个关系嵌入h_r之间的点积(h_q, h_r)并对其进行阈值处理,可以进一步修剪候选空间。

🧪在 MetaQA 和 WebQuestionsSP 上进行的实验中,作者探索了一个不完整 KG 随机删除 50%边的附加场景,因此系统必须学会推断这种丢失的链接。在完整的场景中, EmbedKGQA 的表现与 PullNet 不相上下(在 3 跳问题上略胜一筹),当不使用额外的文本来增加 KG 时,绝对命中@1 分数比基线高 10–40%。👏
尽管如此,检查 EmbedKGQA 如何处理需要聚合或有几个基础实体的问题还是很有趣的🤔。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

EmbedKGQA。来源: Saxena 等人

另一方面, 兰等人 提出使用迭代的基于 RL 的查询生成方法(KG-free😉 ).基于主题实体(通过一些实体链接器获得,作者借助 Google KG API 链接到 Freebase),有一组 3 个操作,即扩展连接聚集,它们被应用于构建查询模式的种子实体。自然,这些操作允许具有最小/最大聚合的复杂多跳模式。🔦在每一步,作者使用波束搜索来保留 K 个最佳模式,并通过导出一个 7d 特征向量,然后是一个带有 softmax 的前馈网络来对它们进行排序。🤨你会问:“等等,伯特在哪里?现在每个人都在用伯特!”。好了,不要惊慌,开始吧:参与查询图的实体和关系的表面形式被线性化,与输入问题连接,并馈入 BERT,以获得最后一层的[CLS]表示(这是 7d 特性之一)。

🌡作者在 ComplexWebQuestions、WebQuestionsSP 和 ComplexQuestions(看起来有点像是为 Freebase 量身定制的,不是吗?),并发现比基线有明显的改进。进一步的消融显示了 3 个选择的操作者的重要性。这里有一个悬念:这是一篇简短的论文!👀我推荐这篇论文作为一篇短文的范例,它传达了主要思想,展示了实验,并证明了消融方法的有效性👍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 兰等人

📑结构化问答还包括对 SQL 表的语义解析,许多新的复杂数据集推动了 SQLandia 的研究。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 王等人

在其他人当中,我将概述 王等人 和他们的 RAT-SQL(关系感知转换器,不🐀)中,它们定义了列和表之间的显式边缘,以对数据库模式进行编码。作者还定义了一个初始模式和值链接来获得候选列和表。此外,列、表和问题标记通过修改后的自我关注层共同传递。➡️最后,树形结构的解码器构建一个 SQL 查询。
RAT-SQL 在 Spider 中表现出了巨大的改进,在使用 BERT 进行令牌的初始嵌入时获得了更大的收益📈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 埃尔戈哈里等人

通常,在与语义解析系统交互时,您会希望即时解决一些小问题🔴解析器出错了。 Elgohary 等人 正是针对这个问题,提出了 SPLASH ,一个用自然语言反馈纠正 SQL 语法分析的数据集。纠正场景不同于对话式 text2SQL 任务,因此,即使是最近的 SOTA 模型,如 EditSQL,与人工注释者相比,在纠正任务中也存在很大差距,即 25%对 81%。那是相当大的差距👀。
曾等人 开发了 Photon 这是一个成熟的文本到 SQL 的系统,也能够执行一些查询修正😉

KG 嵌入:双曲线和超关系

双曲空间是 ML 最近的热门话题之一。克制🤯简单来说,在双曲空间中🔮(由于它的属性)您可以更有效地表示层次结构和树状结构,同时使用更少的维度!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 横山雅美等人

出于这种动机, 横山雅美等人 提出了 AttH ,一种双曲 KG 嵌入算法,使用旋转、反射和平移来模拟 KG 中的逻辑和层次模式。 Att 来自应用于旋转和反射向量的双曲线注意。🎩绕过不稳定的黎曼优化的诀窍是使用切空间,可以将 d 维庞加莱球的每个点映射到切空间。在这个明显不平凡的设置中,每个关系不仅与一个向量相关,还与描述特定于关系的反射和旋转的参数相关。尽管如此,在现实世界的 KGs R << V中,开销并不是很大。

⚖️在实验中, AttH 在 WN18RR 和 yago 3–10 上表现特别好,表现出一些层次结构,在 FB15k-237 上的余量较小。更重要的是,仅仅 32 维 AttH 在真实和复杂的平面中显示出与 32-d 模型相比的巨大余量。此外,在 WN18RR 和 FB15k-237 上,32-d 分数仅比 SOTA 500-d 嵌入模型小 0.02-0.03 个 MRR 点。消融研究证明了具有可学习曲率的重要性,而其最接近的匹配 MurP 将曲率固定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:罗索等人。发布于 WebConf 2020。

图表示学习中的另一个增长趋势是超越由三元组组成的简单 kg,学习更复杂的、超关系kg(如 Rosso 等人 的工作中所创造的)的表示,此时每个三元组可能有一组键-值属性对,这些属性对给出了关于三元组在各种上下文中的有效性的细粒度细节。事实上,Wikidata 在其 Wikidata 语句模型中采用了超关系模型,其中属性被称为限定符。重要的是而不是将模型与 n 元事实(生成冗余谓词)和超图混合在一起。也就是说,如果你只在三个层次上使用维基数据,你会丢失一半的内容😃

关等人 不想失去大半个维基数据,提出了 NeuInfer ,一种学习超关系 kg 嵌入的方法(他们之前的工作 NaLP ,更适合 n 元事实)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 关等人

NeuInfer 的想法是计算一个超相关事实的有效性兼容性得分(参见图示)。首先,(h,r,t)嵌入被输入到一个完全连接的网络(FCN)中,以估计这个三元组的可能性(有效性)。其次,对于每个键值对,构建一个五元组(h,r,t,k,v),并通过另一组 fcn 传递。有了 m 个对, m 个向量被最小池化,结果表示兼容性得分,即那些限定词与主三元组相处得有多好。最后,作者使用两个分数的加权和得到最终分数。

作者在标准基准 JF17K(提取自 Freebase)和 WikiPeople(来自 Wikidata)上评估了 NeuInfer ,并报告了 JF17K 与 NaLP 相比在预测头部、尾部和属性值时的显著改进。📈我鼓励作者将他们的数字与 HINGE(来自 Rosso 等人 )进行比较,因为这两种方法在概念上是相似的。

💡现在我们需要谈谈。我们需要谈谈甚至在 ACL 2019 这样的顶级会议上发表的 KG 嵌入算法的再现性此外,他们表明,他们的性能指标得分(如命中@K 和 MRR)取决于有效三元组在采样否定中的位置(这实际上不应该发生)。另一方面,现有的强基线表现完全一样,不管任何位置。要点是使用评估协议,将有效的三元组放在否定中的随机位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 孙、瓦希思特、桑亚尔等人

[开始一场无耻的自我推销😊]嗯,我们的团队对这个问题也有话要说:在我们的新论文 “将光明带入黑暗:统一框架下知识图嵌入模型的大规模评估” 中,我们进行了 65K+实验,并花费了 21K+ GPU 小时评估了 19 个模型,从 2011 年首次发表的 RESCAL 到 2019 年末的 RotatE 和 TuckER,5 个损失函数,各种带/不带负采样的训练策略,以及更多的超参数我们还为你们和我们亲爱的社区发布了所有模型的最佳超参数🤗。此外,我们正在发布 PyKEEN 1.0 ,这是一个 PyTorch 库,用于训练和基准测试 KG 嵌入模型![自我推销结束]

🔥我鼓励你通读其他几部作品: 萨昌 通过离散化研究 KG 实体嵌入的压缩问题,例如,“巴拉克·奥巴马”而不是 200d float32 向量将被编码为“2–1–3–3”,而“米歇尔·奥巴马”将被编码为“2–1–3–2”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用(液压)压缩节省 CD 空间的示例

也就是你只需要一个 K 值的 D 长向量(这里 D=4,K=3)。对于离散化,发现回火的 softmax 效果更好。作为从 KD 代码到 N 维浮点向量的反函数,作者建议使用简单的双 LSTM。实验结果令人吃惊👀—FB15k-237 和 WN18RR 的压缩率达到100–1000 x,推理时(当 KD 代码必须被解码回来时)性能下降和计算开销可以忽略不计(最大 2% MRR)。🤔我建议我们都坐下来,重新思考我们的 KGE 管道(特别是在生产场景中)。例如,通过 PyTorch-BigGraph 获得的 7800 万维基数据实体的 200d 嵌入需要👉110 GB👈空间。想象一下,轻轻的 100 倍压缩会是什么样子😏。

还有一系列工作改进了流行的 KGE 模型:

  • 唐等人旋转从 2D 旋转推广到高维空间,其中正交关系变换对于 1-N 和 N-N 关系更有效。
  • 徐等 通过将密集向量分块为 K 个部分,将双线性模型推广为多线性。然后表明,如果 K=1,该方法等于 DistMult ,如果 K=2,该方法简化为,作者对 K=4 和 K=8 进行了实验。谢等人通过用计算机视觉领域著名的 Inception 网络中的滤波器替换标准的 conv 滤波器来扩展 ConvE。
  • Nguyen 等人 应用自关注式编码器和 CNN 解码器进行三重分类和搜索个性化任务。

数据到文本 NLG:准备好你的变压器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

WebNLG 2017 的 RDF 转文本任务示例。来源: 赵等人

随着 KGs(以及一般的结构化数据)在 NLP 中被广泛采用,在 2020 年,我们可以观察到自然语言生成(NLG)方法的激增,这些方法采用一组 RDF 三元组/一个 AMR 图/一组表格单元,并产生连贯的人类可读文本,如描述或问题。

顺便说一下,目前的 RDF-to-text 方法仅在 WebNLG 2017 数据上进行评估,但有一个新的挑战, WebNLG 2020 !🎉如果你喜欢 NLG,一定要参加😉

一条推文详尽总结了今年的 NLG 趋势:

自然语言处理中的 SOTA 算法综述

老练的策划者和执行者?一些结构排列?不😅。只要旋转你最喜欢的预先训练的 LM。

🤔事实上,插入一个预先训练好的 LM 并给它一些例子确实有效。陈等人在配有 2 解码器的实验台上演示了这一现象。也就是说,表格单元首先通过可学习的 LSTM 编码器来获得复制机制的隐藏状态。另一方面,文本以冻结的重量进入 GPT-2。顶部的✍️The 复制机制有助于保留表格单元格中的稀有标记。WikiBio 上的实验表明,少至 200 个训练样本就足以生成比复杂的强基线好得多的文本。猜猜 GPT 3 号需要多少😏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 陈等人

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 陈等人

继续使用表格,陈等人 构建一个新的数据集, LogicNLG ,这需要在标准文本生成的基础上使用额外的逻辑。例如(参见插图),需要一些比较和计数操作来包含像“多一枚金牌”或“最多金牌”这样的部分,使文本更加自然和生动🌼。数据集的基线模型使用预训练的 GPT-2 和 BERT,但看起来 LMs 仍有一些改进的空间。

在图形到文本的领域中, 宋等人 应用了稍微修改的变换器编码器,该编码器显式地处理关系表面形式。输入只是一个线性化的图(可以用 DFS 来构建)。但是解码器保持不变。🎩该方法的关键部分是添加(连同标准 LM 损失)两个自动编码损失,这两个损失被设计成更好地捕捉动词化图形的结构。第一个损失重建三重关系,而另一个损失重建线性化输入图的节点和边标签。在 AMR 和 RDF 图(WebNLG)上进行的🧪实验表明,仅仅将这两个损失相加就可以产生大约 2 个 BLEU 点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

辅助损失试图重建视图 1 和视图 2。来源: 宋等人

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不要隐藏你的痛苦,退休吧!

🗒在这一点上,我应该做一个小小的评论每个人都应该停止使用 BLEU 来评估 NLG 质量(ACL 20 篇论文的最佳提名之一,我相信他们)。WebNLG 2020 的组织者非常赞同这一观点,因为他们除了经典(或者我们应该说过时了?)度量。此外,在 ACL’20 上,提出了一种新的度量标准, BLEURT ,并证明它与人类的判断更相关。让我们投资于这些新的评估指标,让 ol’ BLEU 休息一下吧🏖

🌳尽管如此,没有(或者至少没有那么多)变形金刚,世界上还是有生动的生活!、【赵】等人、 DualEnc 提出了一种编码-规划-解码模型,应用于图形到文本的任务。1️⃣首先,输入图被预处理以将关系转换成显式节点。因此,有几个诱导标记边缘s->p, p->s, p->o, o->p。然后,通过 R-GCN 对图进行编码,以获得实体和关系嵌入。2️⃣相同的图通过另一个 R-GCN 编码,具有显示关系是否已经被使用的附加特征。计划按以下方式构建:当存在未访问的关系时,softmax 选择最可能的关系,然后将该关系附加到计划中。一旦序列准备好了,它就扩展了与主体和客体的那些关系。最后,产生的序列通过 LSTM 编码。图形编码和平面编码都被送入解码器以生成输出。
📏实验表明:1)DualEnc在规划构建中的不可见测试集上表现出很好的泛化能力,2)文本生成质量优于直接应用的 transformers,3)规划阶段的大加速,即 2019 年 SOTA 需要 250 秒来解决一个 7-triple 实例,而 DualEnc 在 10 秒内解决所有 4928 个实例🚀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 赵等人

最后,让我们从数据到文本再到总结。在抽象概括领域 黄等人****在他们的 ASGARD 方法中采用从文档构建的 kg 来增强生成过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具体来说,编码器由两部分组成。1️⃣·罗伯塔用于对输入段落进行编码。最终的层嵌入被馈入 BiLSTM 以获得隐藏状态。2️⃣ OpenIE 用于从输入文档中提取三元组并归纳出一个图。关系的令牌被转换成类似于 DualEnc 的显式节点,初始节点状态取自步骤 1 的 BiLSTM。然后,使用图注意网(GAT)通过一个读出函数来更新节点状态,从而得到一个图上下文向量。3️⃣:生成过程受步骤 1 和 2 中获得的两个向量的制约。

🧙‍♂️Some 魔法在训练中发生: ASGARD 求助于强化学习,其中奖励函数取决于胭脂和完形填空分数。完形填空部分包括从人类书写的摘要中提取开放图形,并基于它们生成完形填空式问题,以便系统更好地学习摘要文档的含义。📦所以你在里面有一个质量保证模型!作者为 CNN 和 NYT 数据集生成了 1M+的完形填空题。📏实验报告比以前的基线有所改进!然而,一致的赢家是一个预先训练好的 BART,它在目标数据集上进行了微调😅好吧,看起来“TPUs go brrr”策略在这里也行得通。

对话式人工智能:改进面向目标的机器人

在 ConvAI 领域,我有点偏向于面向目标的系统,因为 KGs 和结构化数据自然地扩展了它们的功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: 坎帕尼亚等人

🔥首先, Campagna 等人 提出了一种合成面向目标的对话的方法,作为对话状态跟踪(DST)任务的附加训练数据。作者创建了一个抽象模型(人们也可以将其命名为本体**,它定义了基本状态、动作和转换。为什么这很酷:1️⃣该模型可以应用于各种领域,如餐厅预订或火车连接搜索与任何插槽和价值;2️⃣合成数据允许在监督数据非常有限的领域进行零发射传输。3️⃣事实上,实验表明,仅使用合成的语料库进行训练(并在真实的 MultiWoz 2.1 测试上进行评估)达到了原始完整训练集的大约 2/3 的准确度💪
我相信这种方法可以作为一种通用的数据扩充实践,用于开发特定领域的对话系统,或者用于有限的带注释的训练数据。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当新的基于朋友的数据集到达时

针对对话中的关系抽取, 于等人 开发了dialoge,一个新的数据集,由来自朋友的约 2k 个对话中的 36 个关系组成。虽然这些关系没有用维基百科或 URIs 数据库进行注释,但即使对伯特来说,数据集仍然是一个相当大的挑战。此外,作者提出了一个新的度量标准,它显示了一个系统需要多少回合来提取某个关系。

OpenDialKG 是 ACL 2019 年最佳论文奖提名者之一,因为他在新的数据集中促进了对话系统中基于图形的推理。 周等人 在他们新的适合中国人的 KdConv 数据集上很好地采用了 OpenDialKG 的主要思想👏

还有一系列研究如何将外部知识融入端到端对话系统的作品。如果你的背景知识表示为文本三元组或表格单元格(甚至是纯文本),那么 林等人 建议使用 Transformer 作为知识编码器,而 秦等人 则依靠记忆网络式编码器。如果你有像 ConceptNet 这样的常识 KG, 张等人 从话语中提取概念构建局部图,然后采用编码器对对话的“中心概念”进行编码,这将影响解码器。如果你对更近期的康威产品感兴趣,一定要查看康威工厂的 NLP 会议记录,该工厂与 ACL 位于同一地点(实际上)!

信息抽取:OpenIE 和链接预测

如果您的工作恰好是从原始文本文档构建 kg,那么您可能已经知道 OpenIE 是一个事实上的标准。正如我们在前面章节中看到的,像 OpenIE4 或 OpenIE 5 这样的基于规则的框架仍然在被积极地使用。也就是说,提高 OpenIE 提取的质量可以缓解 KG 构建中的许多问题。小注意:打开 IE 后获得的 kg 也叫打开 kg

**Kolluru 等人 提出生成式 OpenIE 方法, IMoJIE(基于迭代记忆的联合信息提取)。受 CopyAttention 范式的启发,作者提出了一种迭代生成 seq2seq IE 算法:在每次迭代中,原始序列与先前提取的序列连接,并通过 BERT 获得最终嵌入。然后,具有复制和注意机制的 LSTM 解码器负责生成新的提取(例如,包含三元组的记号)。🤖为了进一步改进训练集,作者将 OpenIE 3、OpenIE 4 和其他系统的输出汇总并排序为“银标签”以供生成。

虽然架构看起来非常简单,但是确实带来了显著的改进📈与现有基线相比。消融研究报告称,BERT 对整体质量至关重要,因此我假设可以通过插入更大的变压器或使用特定领域的预训练 LM 来进一步提高质量,例如,如果您的文本来自法律或生物医学领域。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Kolluru 等人

虽然在类似 RDF 的 kg 上的链接预测(LP)已经有了良好的记录和几个里程碑,但我们不能说开放 kg 上的 LP 也是如此。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:

但是现在我们可以了!🤩 Broscheit 等人 定义了开放链接预测的任务,给出了开放 kg 的挑战:

  • 给定一个(‘主题文本’,‘关系文本’,?)查询,系统必须预测真实的、新的、不能被平凡解释的事实。
  • 然而,没有实体或关系 URIs 可用,将许多表面形式绑定到一个表示。
  • 尽管如此,同一实体或关系的各种表面形式可能构成测试集泄漏,因此必须仔细构建和清理测试集。

作者提出了如何构建和清理数据集的方法、评估协议和基准本身。 OLPBench 是具有 KG 嵌入的 LP 的最大数据集之一:它包含 3000 万个三元组,100 万个不同的开放关系,以及 80 万个唯一实体的 250 万个提及👀。在实验中,作者使用了 ComplEx,其中多标记提及通过 LSTM 进行聚合。公开 LP 任务结果是非常困难😯:即使强大的 768d 复合体也仅产生 3.6 个 MRR,1 时 2 次命中,10 时 6.6 次命中。
显然,这是一个非常具有挑战性的数据集:非常有趣的是,看到这些方法不仅可以扩展到如此大的图形,还可以将性能提高到类似 FB15k-237 的数字(仅供参考,目前大约是 35 个 MRR 点和 55 次点击@10)。

顺便说一句,如果你对从文本中构建知识更感兴趣,我鼓励你查看最近的 AKBC 2020 会议的记录,这次会议吸引了一大批演讲者和出版物👏

结论

今年在 ACL’20 上,我们看到了更少的 KG 增强语言模型(但我们确实看到了设计用于表格的 TaPasTABERT ),可能 NER 也少了一些。另一方面,图形到文本的 NLG 正在崛起!亲爱的读者,你还是坚持到了最后,你应该得到一些掌声:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请在评论中让我知道你喜欢什么,哪些地方需要改进。感谢阅读,敬请关注更多出版物😌

基于回答集编程的知识表示和推理

原文:https://towardsdatascience.com/knowledge-representation-and-reasoning-with-answer-set-programming-376e3113a421?source=collection_archive---------26-----------------------

…或者为什么企鹅不应该飞。

阅读声明式编程和命令式编程的区别,并从代码示例(答案集编程、Python 和 C)中学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

企鹅“罗杰”——有点无聊,因为他不会飞。(图片由 Unsplash 上的 66 北拍摄)

介绍

在工业和科学领域,计算问题的数量似乎是无限的。对来自大量可用数据的新见解有着巨大的需求。为了获得这些知识,专门的人使用各种编程语言来设计和实现算法。

然而,当前现实世界中的许多问题都是复杂的(组合)搜索问题,我们试图用这些问题来自动化和优化流程,并支持人们的决策。这不涉及算法的编码,而是给定知识的编码*。换句话说,给定关于所有要考虑的规则和约束的知识,什么才算解决方案。声明性编程表达其逻辑,而不是编写描述计算控制流的语句。我们想要实现什么,而不是关于我们如何实现它的陈述。*

这被称为声明式编程。

为什么是声明式编程?

使用一种有前途的声明性编程范例,即回答集编程(ASP,有时也称为回答集 Prolog),比流行的命令式编程方法提供了意想不到的优势,例如:

  • 简短解决方案(以代码行数衡量)
  • 透明度(包括可读性)
  • 可靠性

还有很多。一旦你把问题分解成最小的部分,写下所有必要的知识,你不仅解决了计算的挑战。一个很大的优势是,你已经将知识数字化,可以用它来解决进一步的问题,或者以其他方式利用它。

E 经验和知识可持续地获得并防止损失(例如,通过员工退休或解雇)。

此外,它加强了“业务人员”和程序员之间的合作。人工智能的整合得到支持,各个层面的接受度都会提高。这是一个基本的过程,只有在公司所有部门的合作下才能实现。

什么是 ASP,它是如何工作的?

答案集程序由以事实、规则(head(X) :- body(X).)或约束形式表达的给定知识组成。该程序由求解器加载,并返回一个“稳定模型”。这个所谓的答案集由所有可以使用给定的规则和约束导出的事实组成。生成有限数量的稳定模型作为解,最终选择其中的一个。
注意: 接地及解决问题不在本文讨论范围内。

让我们从逻辑学的角度考虑一个关于鸟类和企鹅的著名例子。众所周知,鸟会飞。这可以编码为 answert 集合规则:

canFly(X) :- bird(X).

规则读作*“如果* *X* 是鸟,那么 *X* 可以飞”。现在我们来补充更多的知识!例如,事实告诉无条件的真理,就像海鸥’马尔文’是一只鸟,但企鹅’罗杰’也是一只。

canFly(X) :- bird(X).
bird(malvin).
bird(roger).== MODEL OUTPUT ==
Anwer: 1
bird(malvin) bird(roger) canFly(malvin) canFly(roger)
SATISFIABLE

因此,答案集告诉我们已知的事实,马尔文和罗杰是鸟类,但也得出结论,他们能够飞行。我们当中的生物学爱好者知道,企鹅不会飞,因此模型是错误的!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

海鸥‘马尔文’——稍微炫耀一下,因为他会飞。(照片由菲尔·博塔在 Unsplash 上拍摄)

为了得到可接受的结果,我们需要以事实和完整性约束的形式向程序添加更多的知识。在这里,模型需要知道罗杰不仅是一只鸟,也是一只企鹅,而且没有一只企鹅会飞。

canFly(X) :- bird(X).
bird(malvin).
bird(roger).
seagull(malvin).
penguin(roger).
:- canFly(X), penguin(X).== MODEL OUTPUT ==
UNSATISFIABLE

这并没有带来预期的结果,并显示了彻底和非常仔细地思考问题以及解决方案是多么重要。这个模型告诉我们,就像程序员所说的,一只鸟可以飞,但是对于企鹅家族的鸟却没有任何建议。为了避免这一点,我们可以补充说,只有不是企鹅的鸟才能飞。

canFly(X) :- bird(X), not penguin(X).
bird(malvin).
bird(roger).
seagull(malvin).
penguin(roger).
:- canFly(X), penguin(X).== MODEL OUTPUT ==
Answer: 1
bird(malvin) bird(roger) seagull(malvin) penguin(roger) canFly(malvin)
SATISFIABLE

在第[1]行中添加这个 knwoledge,稳定模型由预期结果组成。

命令式编程与声明式编程

…解决数独游戏

让我们看另一个例子来突出上面提到的 ASP 的优点。数独是一个众所周知的益智游戏,流行解释搜索问题。给定一个包含 1 到 9 之间的数字或空格的初始 9x9 网格,所有空格都必须用数字填充。如果您找到所有的值,使得每一行、每一列和每一个 3×3 的子方块都包含数字 1-9,并且每个数字只出现一次,那么您就赢得了 Sudoko。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

典型的数独游戏(摘自 Potassco.org)。

Python(命令式)

下面的代码片段将展示如何用 Python 解决数独问题。

用 Python 解数独。

c(命令式)

用 C 解决数独游戏看起来和 Python 很像。方法上没有明显的区别。

用 c 语言解数独。

Python 和 C 都显示了描述计算的控制流的书面语句,因此,'如何求解’,以及如何为即将到来的步骤改变状态。

ASP(声明性)

最后但同样重要的是,让我们看看 ASP 代码片段——初始化后,我们能够用不到 10 行代码解决的数独游戏!

% Initialize the game (given numbers)
sudoku(1, 1, 5).
sudoku(1, 2, 3).
sudoku(1, 5, 7).
sudoku(2, 1, 6).
sudoku(2, 4, 1).
sudoku(2, 5, 9).
sudoku(2, 6, 5).
sudoku(3, 2, 9).
sudoku(3, 3, 8).
sudoku(3, 8, 6).
sudoku(4, 1, 8).
sudoku(4, 5, 6).
sudoku(4, 9, 3).
sudoku(5, 1, 4).
sudoku(5, 4, 8).
sudoku(5, 6, 3).
sudoku(5, 9, 1).
sudoku(6, 1, 7).
sudoku(6, 5, 2).
sudoku(6, 9, 6).
sudoku(7, 2, 6).
sudoku(7, 7, 2).
sudoku(7, 8, 8).
sudoku(8, 4, 4).
sudoku(8, 5, 1).
sudoku(8, 6, 9).
sudoku(8, 9, 5).
sudoku(9, 5, 8).
sudoku(9, 8, 7).
sudoku(9, 9, 9). % define the grid
n(1..9).
x(1..9).
y(1..9).% each field contains exactly one number from 1 to 9
{sudoku(X,Y,N): n(N)} = 1 :- x(X) ,y(Y).% helper
subgrid(X,Y,A,B) :- x(X), x(A), y(Y), y(B),(X-1)/3 == (A-1)/3, (Y-1)/3 == (B-1)/3.% constraints
:- sudoku(X,Y,N), sudoku(A,Y,N), X!=A.
:- sudoku(X,Y,N), sudoku(X,B,N), Y!=B.
:- sudoku(X,Y,V), sudoku(A,B,V), subgrid(X,Y,A,B), X != A, Y != B.#show sudoku/3.== MODEL OUTPUT ==
Answer: 1
('sudoku', (2, 1, 6)), ('sudoku', (1, 2, 3)), ('sudoku', (9, 4, 2)), ('sudoku', (7, 2, 6)), ('sudoku', (7, 3, 1)), ('sudoku', (1, 9, 2)), ('sudoku', (5, 1, 4)), ('sudoku', (7, 4, 5)), ('sudoku', (4, 3, 9)), ('sudoku', (9, 1, 3)), ('sudoku', (4, 5, 6)), ('sudoku', (5, 6, 3)), ('sudoku', (2, 4, 1)), ('sudoku', (8, 1, 2)), ('sudoku', (8, 8, 3)), ('sudoku', (7, 9, 4)), ('sudoku', (8, 7, 6)), ('sudoku', (5, 4, 8)), ('sudoku', (7, 6, 7)), ('sudoku', (8, 6, 9)), ('sudoku', (6, 5, 2)), ('sudoku', (9, 7, 1)), ('sudoku', (3, 4, 3)), ('sudoku', (4, 7, 4)), ('sudoku', (3, 3, 8)), ('sudoku', (4, 8, 2)), ('sudoku', (1, 7, 9)), ('sudoku', (9, 9, 9)), ('sudoku', (9, 8, 7)), ('sudoku', (5, 9, 1)), ('sudoku', (4, 4, 7)), ('sudoku', (6, 9, 6)), ('sudoku', (7, 7, 2)), ('sudoku', (2, 7, 3)), ('sudoku', (5, 5, 5)), ('sudoku', (1, 5, 7)), ('sudoku', (1, 1, 5)), ('sudoku', (6, 3, 3)), ('sudoku', (2, 6, 5)), ('sudoku', (2, 9, 8)), ('sudoku', (8, 3, 7)), ('sudoku', (3, 6, 2)), ('sudoku', (3, 8, 6)), ('sudoku', (2, 8, 4)), ('sudoku', (1, 3, 4)), ('sudoku', (8, 2, 8)), ('sudoku', (3, 7, 5)), ('sudoku', (9, 5, 8)), ('sudoku', (4, 9, 3)), ('sudoku', (6, 4, 9)), ('sudoku', (7, 5, 3)), ('sudoku', (2, 5, 9)), ('sudoku', (8, 5, 1)), ('sudoku', (5, 3, 6)), ('sudoku', (4, 6, 1)), ('sudoku', (3, 9, 7)), ('sudoku', (1, 4, 6)), ('sudoku', (9, 2, 4)), ('sudoku', (5, 8, 9)), ('sudoku', (1, 8, 1)), ('sudoku', (6, 6, 4)), ('sudoku', (5, 7, 7)), ('sudoku', (7, 1, 9)), ('sudoku', (3, 5, 4)), ('sudoku', (6, 8, 5)), ('sudoku', (5, 2, 2)), ('sudoku', (2, 3, 2)), ('sudoku', (8, 9, 5)), ('sudoku', (9, 6, 6)), ('sudoku', (9, 3, 5)), ('sudoku', (6, 2, 1)), ('sudoku', (3, 1, 1)), ('sudoku', (4, 2, 5)), ('sudoku', (6, 1, 7)), ('sudoku', (4, 1, 8)), ('sudoku', (8, 4, 4)), ('sudoku', (2, 2, 7)), ('sudoku', (3, 2, 9)), ('sudoku', (1, 6, 8)), ('sudoku', (6, 7, 8)), ('sudoku', (7, 8, 8))}
SATISFIABLE

注意 :例如,使用一个 ASP 的 Python 包装器,结果看起来就像上面的代码示例一样方便。

与 Python 和 C 语言相比,这完全是关于“是什么”而不是“怎么做”——这是两种方法之间的根本区别。

在最开始,我们定义数独板是 9x9 的单元(或区域),我们使用数字 1 到 9 作为填充值。遵循每个字段只能填写 1 到 9 之间的一个数字的基本规则,我们定义了一个小助手。它说明哪些字段引用同一个子网格。最后,我们只需要约束来告诉求解器什么是可能的,什么是不可能的。第一行检查选择的数字在列中是否唯一,而第二个约束检查行的规则。第三个约束完善了游戏规则,根据该规则,一个数字在子网格中也必须是唯一的。

就这样。我承认语法需要时间来适应。但是一旦你熟悉了它,你就能创造出非常易读的程序,为我们解决高度复杂的问题。

摘要

在知识表示和推理领域,ASP 是一个非常有前途的知识保存和声明性问题解决工具。

简短的解决方案 —除了最初绘制数独游戏的努力之外,ASP 还提供了迄今为止最短的解决方案(以代码行数衡量)。
—无需创建用户不清楚的规则,也无需创建与程序状态相关的规则。只有游戏的基本条件和三个规则必须被编码,才能得到正确的结果。
这在给出的例子中可能并不重要,但在许多工业应用中却是一个主要问题。

仅举几个现实世界的例子,美国国家航空航天局的航天飞机决策支持、瑞士的火车调度(世界上最密集的火车网络之一)或地中海沿岸最大的转运站的团队建设都是其潜力的证明。

结果

人工智能在工业界的接受度还是很低的。此外,许多公司被现有的海量数据淹没了。

将运营主题专家的知识与人工智能的优势结合在一起。

ASP 为数字化和保护现有知识提供了独特的机会。由于良好的可读性和对流程以及要解决的问题的必要理解,IT 和业务走得更近,从而获得更好和更可持续的成功。

你喜欢这个故事吗?

我很欣赏这篇文章的点赞和转发——很快会有更多关于这个话题的内容!您还可以在此处找到执行摘要

自我监督学习中的知识转移

原文:https://towardsdatascience.com/knowledge-transfer-in-self-supervised-learning-680208f2092f?source=collection_archive---------40-----------------------

自我监督学习是一个有趣的研究领域,其目标是在没有任何人工注释的情况下从无标签数据中学习丰富的表示。

这可以通过创造性地公式化一个问题来实现,比如你使用数据本身的一部分作为标签,并试图预测它。这样的公式被称为借口任务。

例如,您可以设置一个托词任务,在给定灰度版本的情况下预测图像的彩色版本。同样,您可以移除图像的一部分,并训练一个模型从周围环境中预测该部分。还有很多这样的借口任务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

通过在借口任务上的预训练,希望模型将学习有用的表示。然后,我们可以对模型进行微调,以完成下游任务,如图像分类、对象检测和语义分割,只需一小组已标记的训练数据。

评估表示的挑战

所以借口任务可以帮助我们学习表征。但是,这提出了一个问题:

如何确定一个有学问的表征有多好?

目前,衡量表示的标准方法是在一组标准任务和基准数据集上进行评估。

  • 线性分类:使用冻结特征的图像网络分类
  • 低数据状态:仅使用 1%到 10%数据的 ImageNet 分类
  • 迁移学习:PASCAL VOC 上的对象分类、对象检测和语义分割

我们可以看到,上述评估方法要求我们对借口任务和目标任务使用相同的模型架构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这带来了一些有趣的挑战:

  1. 对于借口任务,我们的目标是在大规模的未标记数据集上学习,因此更深的模型(例如 ResNet)将帮助我们学习更好的表示。
  2. 但是,对于下游任务,我们更喜欢实际应用的浅层模型(例如 AlexNet)。因此,我们目前在设计借口任务时必须考虑这一限制。
  3. 如果一些方法使用更简单的架构,而另一些方法使用更深入的架构,那么就很难公平地比较哪种前文本任务更好。
  4. 我们无法将从托词任务中学到的表征与手工制作的特征(如 HOG)进行比较。
  5. 我们可能希望在借口任务中利用几个数据域,如声音、文本和视频,但目标任务可能会限制我们的设计选择。
  6. 在托词任务上训练模型可能学到对一般视觉识别没有用的额外知识。目前,最终的特定于任务的层被忽略,并且仅取特定卷积层的权重或特征。

知识转移

Noroozi 等人在 2018 年的论文“通过知识转移促进自我监督学习”中提出了一个简单的想法来解决这些问题。

直觉

作者观察到,在一个好的表示空间中,语义相似的数据点应该靠得很近。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在常规的监督分类中,图像语义相似的信息通过由人标注的标签来编码。在这种标签上训练的模型将具有对语义相似的图像进行分组的表示空间。

因此,对于自我监督学习中的文本前任务,目标是隐含地学习使相同类别图像相似而不同类别图像不相似的度量。因此,如果我们能够以某种方式将语义相关的图像编码到相同的标签,我们可以提供对所学习的表示的鲁棒估计。

总体框架

作者提出了一个新的框架,将知识从深度自我监督模型转移到一个独立的浅层下游模型。您可以为借口任务和下游任务使用不同的模型架构。

关键创意:

对来自托词任务的特征进行聚类,并分配聚类中心作为未标记图像的伪标记。然后,在伪标签上重新训练具有目标任务架构的小网络,以预测伪标签并学习新颖的表示。

端到端流程描述如下:

1.借口任务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

在这里,我们选择一些深度网络架构,并在一些数据集上根据我们选择的一些借口任务来训练它。在模型被训练之后,我们可以从一些中间层提取特征。

2.k 均值聚类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

对于数据集中所有未标记的图像,我们从借口任务模型计算特征向量。然后,我们运行 K-means 聚类来分组语义相似的图像。其想法是,聚类中心将与 ImageNet 中的类别保持一致。

在论文中,作者在一个 Titan X GPU 上运行 K-means 4 小时,将 130 万张图像聚类成 2000 个类别。

3.伪标记

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

聚类中心被视为伪标签。我们可以使用与上述步骤相同的数据集,也可以使用不同的数据集本身。然后,我们计算这些图像的特征向量,并为每个图像找到最近的聚类中心。该聚类中心被用作伪标签。

4.伪标签训练

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

我们采用将用于下游任务的模型架构,并训练它将未标记的图像分类到伪标记中。因此,目标架构将学习新的表示,使得它将在预训练的特征空间中最初接近的图像映射到接近点。

知识转移的优势

我们看到了如何通过对特征进行聚类,然后使用伪标签,我们可以将来自任何借口任务表示的知识带入像 AlexNet 这样的公共参考模型。

因此,我们现在可以轻松地比较不同的托辞任务,即使它们使用不同的体系结构和不同的数据域进行培训。这也允许我们通过使用深度模型和挑战借口任务来改进自我监督的方法。

这个框架的效果如何?

为了定量评估这一想法,作者进行了如下实验:

a.增加借口任务的复杂性(Jigsaw++)

为了评估他们的方法,作者进行了一项名为“拼图”的古老的类似拼图的借口任务,其中我们需要预测用于随机洗牌 3*3 正方形图像网格的排列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

他们通过在一些随机位置用另一张随机图像的瓷砖随机替换 0 到 2 个瓷砖来扩展这项任务。这增加了难度,因为现在我们需要仅使用剩余的补丁来解决问题。新的托辞任务被称为“Jigsaw++”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

在论文中,他们使用了 701 个最小汉明距离为 3 的排列。它们在每个图像块上独立地应用平均值和标准偏差归一化。他们还使图像在 70%的时间内灰度化,以防止网络用低级统计数据作弊。

b.使用更深层次的网络来解决借口任务

作者使用 VGG-16 解决借口任务和学习表征。随着 VGG-16 的容量增加,它可以更好地处理“拼图++”任务的复杂性增加,从而提取更好的表示。

c.将知识传回 AlexNet

来自 VGG-16 的代表被聚类,聚类中心被转换成伪标签。然后,训练 AlexNet 对伪标签进行分类。

d.在评估数据集上微调 AlexNet

对于下游任务,用来自伪标签分类的权重初始化 AlexNet 模型的卷积层,并且随机初始化完全连接的层。然后,预训练的 AlexNet 在各种基准数据集上进行微调。

e.结果

使用像 VGG-16 这样的更深层次的网络会导致更好的表示和伪标签,也会在基准测试任务中产生更好的结果。它在 2018 年的几个基准测试中获得了最先进的结果,并进一步缩小了监督和自我监督方法之间的差距。

1.PASCAL VOC 的迁移学习

作者在 PASCAL VOC 2007 数据集上测试了他们的方法,并在 PASCAL VOC 2012 数据集上测试了他们的方法。

洞察力

  • 用 VGG16 训练 Jigsaw++并使用 AlexNet 预测聚类给出了最好的性能。
  • 切换到具有挑战性的托词任务“Jigsaw++”比“Jigsaw”提高了性能。
  • 在 Jigsaw++和下游任务中使用相同架构 AlexNet 时,知识转移不会产生显著影响。

2.ImageNet 上的线性分类

在这种情况下,线性分类器在不同的卷积层上根据从 AlexNet 提取的特征进行训练。对于 ImageNet,使用 VGG-16 并使用聚类将知识转移到 AlexNet 会带来 2%的大幅提升。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

3.ImageNet 上的非线性分类

对于非线性分类器,使用 VGG-16 并使用聚类将知识转移到 AlexNet 会在 ImageNet 上给出最佳性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

论文中的其他见解

1.集群数量如何影响性能?

网络不会受到集群数量的显著影响。作者测试了 AlexNet 在对象检测任务中对来自不同数量集群的伪标签进行的训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

2.这和知识蒸馏有什么不同?

知识转移与知识升华有着本质的不同。这里,目标是只保留来自表示的图像的聚类关联,并将其转移到目标模型。不像蒸馏,我们不对老师的确切输出做任何回归。

3.你能在聚类和预测伪标签中使用不同的数据集吗?

是的,这种方法很灵活,你可以在一个数据集上进行预训练,在另一个数据集上进行聚类,并为第三个数据集获取伪标签。

作者做了一个实验,他们在 ImageNet 的表示上训练聚类,然后在“位置”数据集上计算聚类中心,以获得伪标签。对象分类的性能仅略有下降(-1.5%)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来自诺鲁齐等人

结论

因此,知识转移是一种简单而有效的方式来将表示从深层模型映射到浅层模型。

参考

原载于 2020 年 10 月 4 日 https://amitness.com**

已知操作员学习—第 1 部分

原文:https://towardsdatascience.com/known-operator-learning-part-1-32fc2ea49a9?source=collection_archive---------53-----------------------

FAU 讲座笔记关于深度学习

不要重新发明轮子

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

欢迎回到深度学习,所以今天,我想和你们谈谈关于我们如何重用先前的知识并将其整合到深度网络中的想法。这实际上是我们在一个由欧洲研究委员会资助的大型研究项目中一直在做的事情,我想这些想法也会让你感兴趣。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

什么是已知算子学习?来源;推特。图像在下 CC 乘 4.0

所以,我决定把他们包括在讲座中。这就把我们带到了已知算子学习的话题。已知算子学习是一种非常不同的方法,因为我们试图重用我们已经拥有的关于问题的知识。因此,我们必须学习更少的参数。这与我们从传统深度学习中了解的情况形成了鲜明对比。如果你说这么传统的深度学习,那么我们往往试图从数据中学习一切。现在,我们想从数据中了解一切的原因当然是因为我们对网络实际上应该是什么样子知之甚少。因此,我们试图从数据中学习一切,以消除偏见。特别是对于感知任务来说,我们对人类如何解决问题知之甚少。对我们来说,人脑在很大程度上是一个黑盒,我们试图找到一个匹配的黑盒来解决问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

强化学习允许类似放射科医生的标志检测。图片由 Florin Ghesu 提供。

我从 Florin Ghesu 那里拿来了这个例子,你记得,我已经在简介中展示过了。这里,我们有这种强化学习类型的方法,然后我们通过强化学习来激励我们对身体器官的搜索。我们查看图像中的小块,然后决定下一步移动到哪里,以接近特定的地标。因此,我们可以在这里介绍我们如何解读图像,或者放射科医师如何解读图像,以及他将如何走向某个标志。当然,我们有这种多尺度的方法。当然,我们这样做的主要原因是,因为我们不知道大脑实际上是如何工作的,也不知道放射科医生实际上在想什么。但是我们至少可以模仿他的工作方式来处理这个问题。嗯,但是一般来说并不是所有的问题都是这样。深度学习如此受欢迎,以至于它被应用于许多许多不同的问题,而不是感知任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在图像重建中,我们有很多关于这个问题的先验知识。来自深度学习讲座CC BY 4.0 下的图片。

例如,人们一直用它来模拟 CT 重建。因此,这里的问题是,你有一组投影数据显示在左边,你想重建切片数据显示在右手边。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CT 还能让书不打开就可读。使用 gifify 创建的图像。来源: YouTube

这个问题已经研究得很透彻了。自 1917 年以来,我们已经知道这个问题的解决方案,但是,当然,还有伪像和图像质量等问题,动力学使这个问题变得困难。因此,我们希望找到改进的重建方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

U-net 也会解决图像重建吗?来自深度学习讲座CC BY 4.0 下的图片。

例如,有一个问题叫做有限角度问题。如果我们只旋转比如说 120 度,而不是完全旋转,你会得到像左边这样的切片图像。它们充满了伪像,你几乎看不到图像上显示的内容。我们在右边有匹配的切片图像。如果你看右边的图片,你可以看到这是一个贯穿躯干的切口。它展示了肺,展示了心脏,展示了脊柱,以及前面的肋骨。我们在左边的图像中几乎看不到肋骨和脊柱,但是我们有方法可以完成图像到图像的转换。我们已经看到,我们甚至可以用它来修补图像中缺失的信息。那么为什么不直接用它来完成重建呢?这实际上已经做到了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

初步结果令人印象深刻。 CC 下的图片来自深度学习讲座的 4.0 。

我可以给你看一个结果。所以,这确实有效。这是为一个看不见的人做的。所以,这是用另外 10 个人的切片训练的,在第 11 个人的切片上进行评估。所以,这个人从来没有被见过,你可以看到它很好地重建了肋骨,躯干,胸壁在输入图像中几乎看不到。我们在这里也可以看到一个非常好看的外观。所以,这很酷。但是说实话:这是医学图像。人们在这上面做诊断。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们尝试在数据中隐藏一个模拟病变(红色箭头)。左图显示全扫描,右图显示网络输入。 CC 下的图片来自深度学习讲座的 4.0 。

所以,让我们来测试一下,隐藏一个损伤。所以,我们把它放在胸壁这里,这有点意思,因为这正是我们图像质量最差的地方。我还在右下角展示了一个放大的视图,所以你可以看到病变就在那里,它的对比度比周围的组织要高得多。现在,如果我给你看这个,你可以看到我们将在右边显示给 U-net 的输入。所以,你可以看到病变在放大的视图中几乎看不见。你可以看到它,但是它有很多人造物品。现在,问题是它会被保留还是会从图像中删除?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

病变被正确重建(红色箭头),但也在心脏中引入了一个奇怪的孔(蓝色箭头)。来自深度学习讲座CC BY 4.0 下的图片。

嗯,就在那里!你可以看到病变在这里。这很酷,但是你也可以看到蓝色的箭头。以前没有一个洞。所以不知何故,这也有点令人不安。因此,正如你在[4]中看到的,我们实际上研究了更多的细节和鲁棒性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

噪音使整个系统失去平衡,并使胸壁移动约 1 厘米。 CC 下的图片来自深度学习讲座的 4.0 。

我们对这类网络进行了对抗性攻击。最令人惊讶的对抗性攻击实际上是如果你提供泊松噪声,这种噪声实际上会出现在投影数据中。然后,你得到这个。如果我现在前后移动一点,你可以看到胸壁移动了大约 1 厘米。这仍然是一个吸引人的图像,但病变完全消失了,我们所做的唯一的事情是我们在输入数据中添加了一点噪声。当然,它之所以中断这么多,是因为我们从未用噪声进行过训练,网络也从未见过这些噪声模式。这就是它坏掉的原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

噪音增强有帮助。 CC 下的图片来自深度学习讲座的 4.0 。

因此,如果我们将泊松噪声添加到输入数据中,您也可以看到我们得到了更好的结果。胸壁在它应该在的地方,但是我们的损伤不像以前那么清楚了。老实说,如果你在这上面做医学诊断,那会非常困难,因为你根本不知道文物在哪里,因为文物看起来不再是人造的了。所以你不能很好的认出他们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

局部最小值可以在适当的重建算法中产生。来自深度学习讲座CC BY 4.0 下的图片。

顺便说一下,你记得我们在优化过程中必须处理局部极小值。在一次训练中,我们得到了一个可以产生像这样的图像的网络。所以,我们现在调整到病人的背景。你可以看到这种网络开始在病人旁边的空气中画出像肝脏和肾脏这样的器官形状。所以,你可能要考虑一下,在图像重建上进行完全黑盒学习是否是一个好主意。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

这就是为什么我们下次会谈到一些想法,将先前的知识整合到我们的深层网络中。所以,我希望你喜欢这个视频,我希望能在下一个视频中见到你。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

谢谢

非常感谢 Fu、Florin Ghesu、Yixing Huang Christopher Syben、Marc Aubreville 和 Tobias Würfl 对制作这些幻灯片的支持。

参考

[1] Florin Ghesu 等人,《不完整 3D-CT 数据中的鲁棒多尺度解剖标志检测》。医学图像计算和计算机辅助干预 MICCAI 2017 (MICCAI),加拿大魁北克省,2017 年第 194–202 页— MICCAI 青年研究员奖
[2] Florin Ghesu 等人,用于 CT 扫描中实时 3D-Landmark 检测的多尺度深度强化学习。IEEE 模式分析与机器智能汇刊。印刷前的 ePub。2018
[3] Bastian Bier 等,用于骨盆创伤手术的 X 射线变换不变解剖标志检测。MICCAI 2018 — MICCAI 青年研究员奖
[4]黄宜兴等.深度学习在有限角度层析成像中鲁棒性的一些研究。MICCAI 2018。
[5] Andreas Maier 等《精确学习:神经网络中已知算子的使用》。ICPR 2018。
[6]托比亚斯·维尔福尔、弗罗林·盖苏、文森特·克里斯特莱因、安德烈亚斯·迈尔。深度学习计算机断层扫描。MICCAI 2016。
[7] Hammernik,Kerstin 等,“一种用于有限角度计算机断层成像重建的深度学习架构。”2017 年医学杂志。施普林格观景台,柏林,海德堡,2017。92–97.
[8] Aubreville,Marc 等,“助听器应用的深度去噪”2018 第 16 届声信号增强国际研讨会(IWAENC)。IEEE,2018。
【9】克里斯托弗·赛本、伯恩哈德·史汀普、乔纳森·洛门、托比亚斯·维尔福、阿恩德·德夫勒、安德烈亚斯·迈尔。使用精确学习导出神经网络结构:平行到扇形波束转换。GCPR 2018。
【10】傅、等.《弗兰基网》2018 年医学杂志。施普林格观景台,柏林,海德堡,2018。341–346.
[11]傅、、伦纳特·胡斯沃格特和斯特凡·普洛纳·詹姆斯·g·迈尔。"经验教训:深度网络的模块化允许跨模态重用."arXiv 预印本 arXiv:1911.02080 (2019)。

已知操作员学习—第 2 部分

原文:https://towardsdatascience.com/known-operator-learning-part-2-8c725b5764ec?source=collection_archive---------64-----------------------

FAU 讲座笔记关于深度学习

学习的界限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

欢迎回到深度学习!所以,今天我想继续和大家聊聊已知的运营商。特别是,我想向你们展示如何将这些已知的运算嵌入到网络中,以及由此产生了什么样的理论含义。因此,关键词将是“让我们不要重新发明轮子。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们已经在这节课的开始讨论了普适近似。 CC 下的图片来自深度学习讲座的 4.0 。

我们一直追溯到我们的通用近似定理。通用逼近定理告诉我们,我们可以找到一个隐藏层表示,它用逼近 U( x )来逼近任何连续函数 u( x ),并且它应该是非常接近的。它被计算为 sigmoid 函数的叠加线性组合。我们知道有一个界限ε下标 u,ε下标 u 告诉我们原始函数和近似函数之间的最大差值,这正好是网络中的一个隐藏层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

能否将普适近似与已知运算结合起来?来自深度学习讲座的 4.0CC 下的图片。

这很好,但是我们对一个隐藏层的神经网络并不感兴趣,对吗?我们会对我们创造的精确学习方法感兴趣。因此,这里的想法是,我们希望将近似器与已知操作混合,并将它们嵌入到网络中。具体来说,我这里的配置对于理论分析来说有点大。所以,我们来看一个稍微简单一点的问题。在这里,我们只是说,好吧,我们有一个两层网络,其中我们有一个从 x 使用 u ( x )的转换。这是一个矢量到矢量的变换。这就是为什么它是黑体的原因。然后,我们有一些变换 g( x )。它接受 u ( x )的输出,并产生一个标量值。这实质上就是 f 的定义( x )。所以在这里,我们知道 f( x )由两个不同的函数组成。所以,这已经是我们研究已知算符学习所需要的第一个假设。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们看看这个更简单的例子。 CC 下的图片来自深度学习讲座的 4.0 。

我们现在想近似复合函数。如果我看 f,我们可以看到,有三种方法可以近似它。我们能近似的只有 U ( x )。那么,这会给我们 F 下标 u,我们只能近似 G( x )。这将导致 F 下标 g,或者我们可以近似两者。那就是 G( U ( x ))使用我们的两种近似。现在,对于任何一个近似,我都会引入一个误差。误差可以描述为 e 下标 U,如果我逼近 U ( x )和 e 下标 G,如果我逼近 G( x ),和 e 下标 f,如果我逼近两者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

非线性使我们无法将误差从各自的层中分离出来。来自深度学习讲座的 4.0CC 下的图片。

所以,让我们看看数学,看看我们可以用这些定义做什么。当然,我们可以从 f( x )开始。我们用 f 的定义( x )。然后,定义给我们 g( u ( x ))。我们可以开始逼近 G( x )。现在,如果你在逼近它,我们会引入一些误差,例如,这个误差必须被加回去。这将在下一行显示。我们可以看到,我们也可以使用 G( x )的定义,它是 sigmoid 函数的线性组合。这里,我们使用原始函数 u 下标 j,因为它是一个矢量函数。当然,我们有不同的权重 g 下标 j,偏差 g 下标 0,以及通过逼近 g( x )引入的误差。因此,我们现在也可以按组件来近似 u ( x )。然后,我们引入一个近似,这个近似当然也引入了一个误差。这很好,但我们在这里有点卡住了,因为对 u ( x )的近似误差在 sigmoid 函数内部。其他错误都在外面。那么,我们能做些什么呢?好吧,至少我们可以看看误差范围。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不过,我们可以研究误差范围。 CC 下的图片来自深度学习讲座的 4.0 。

那么,让我们来看看我们的界限。这里的关键思想是,我们使用 sigmoid 函数的性质,它有一个 Lipschitz 界限。这个函数有一个最大斜率,用 l 下标 s 表示,意思是,如果我在位置 x,向 e 方向移动,那么我总能找到一个上界,用 e 的大小乘以函数中的最大斜率,再加上原始函数值。所以,这是一个线性外推,你可以在这个动画中看到。我们实际上有两个白色的圆锥体,它们总是在函数的上方或下方。显然,我们也可以用 Lipschitz 性质构造一个下界。好吧,现在我们能做些什么呢?我们现在可以继续使用它来达到我们的目的,但是我们会遇到下一个问题。我们的 Lipschitz 界限不适用于线性组合。所以,你看到我们实际上感兴趣的是,用这个乘以某个权重,g 下标 j,一旦我取了一个负的 g 下标 j,那么这就意味着我们的不等式翻转了。所以,这并不酷,但我们可以找到一个替代的公式,就像下面这个。因此,当我们乘以 Lipschitz 常数时,我们只需使用绝对值,以便始终保持在函数之上。在这里浏览证明有点乏味。这就是为什么我给你们带来了这两张图片。因此,我们重新表述了这一点,我们把右边的所有项减去,然后把它们移到左边,这意味着所有这些项的组合必须小于零。如果你对正的和负的 g 下标 j 这样做,你可以在两个图中看到,独立于 e 和 x 的选择,I 总是小于零。如果你对这个[5]的正式证明感兴趣,你也可以查阅原始参考文献。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新的界限允许我们将错误提取到同一层。来自深度学习讲座CC BY 4.0 下的图片。

现在,让我们利用这个不等式。我们现在可以看到,我们终于可以把 e 下标 uj 从括号中取出来,从 sigmoid 函数中取出来。我们通过使用这种近似得到一个上界。然后,我们可以看到,如果我们正确排列项,前几项只是 F( x )的定义。所以,这是用 G( x )和 U ( x )的近似值。这可以简化为只写下 F( x )。再加上 G( x )的分量之和乘以 Lipschitz 乘以误差的绝对值再加上 G 引入的误差。现在,我们基本上可以减去 F( x ),如果这样做,我们可以看到 f( x ) — F( x )只不过是进行近似时引入的误差。这就是 e 下标 f,我们有 e 下标 f 的误差上界,它是由右边的和组成的。我们仍然可以用ε下标 g 代替 e 下标 g,ε下标 g 是 e 下标 g 的上界,它仍然是 e 下标 f 的上界,现在,这些都是上界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个新的误差界限提供了层相关的因素。 CC 下的图片来自深度学习讲座的 4.0 。

同样的想法也可以用来得到一个下界。你会看到,然后我们有这个负和。这永远是一个下限。现在,如果我们有了上限和下限, 然后我们可以看到 e 下标 f 的幅度由分量 G 下标 j 乘以 Lipschitz 常数乘以误差加上ε下标 G 之和决定。这很有趣,因为在这里我们看到这本质上是用 G( x )的结构放大的 U ( x )的误差加上 G 引入的误差。因此, 如果我们知道 u ( x )误差 u 抵消,如果我们知道 g( x )误差 g 抵消,当然,如果我们知道两者,就没有误差,因为我们没有什么要学的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们新的误差界符合经典理论。 CC 下的图片来自深度学习讲座的 4.0 。

所以,我们可以看到这个界有这些非常好的性质。如果我们现在将这与经典模式识别联系起来,那么我们可以将 u ( x )解释为特征提取器,将 g( x )解释为分类器。因此,你可以看到,如果我们在 u ( x )中出错,它们可能会被 g( x )放大。这也给了我们一些提示,为什么在经典的模式识别中,人们非常关注特征提取。任何你没有正确提取的特征,都是缺失的。这也是我们深度学习方法的一大优势。我们还可以针对分类优化特征提取。注意,当推导所有这些时,我们需要 Lipschitz 连续性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

也可以找到 deep networks 的版本。来自深度学习讲座的 4.0CC 下的图片。

好吧。现在,你可能会说“这只是两层!”。我们还将此扩展到深层网络。所以,你可以这样做。一旦你有了两层星座,你可以通过递归找到一个证明,也有一个深度网络的界限。然后,你基本上得到了各层的总和,找到了这个上限。它仍然认为是由相应层引入的误差以附加的方式对总误差界限做出了贡献。同样,如果我知道了一层,那部分误差就消失了,总的上界也减小了。我们设法在《自然机器智能》上发表了这篇文章。因此,对于其他研究人员来说,这似乎也是一个有趣的结果。好吧。现在,我们讨论了为什么将已知操作包含到深度网络中是有意义的理论。所以,我们想要重用这些先验知识,这不仅仅是常识,我们实际上可以正式表明,我们正在减少误差范围。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座的 4.0CC 下的图片。

所以在下节课中,我们想看几个例子。然后,您还会看到有多少不同的应用程序实际上使用了它。非常感谢大家的收听,下期视频再见。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

谢谢

非常感谢 Fu、Florin Ghesu、Yixing Huang Christopher Syben、Marc Aubreville 和 Tobias Würfl 对制作这些幻灯片的支持。

参考

[1] Florin Ghesu 等人,《不完整 3D-CT 数据中的鲁棒多尺度解剖标志检测》。医学图像计算和计算机辅助干预 MICCAI 2017 (MICCAI),加拿大魁北克省,2017 年第 194–202 页— MICCAI 青年研究员奖
[2] Florin Ghesu 等人,用于 CT 扫描中实时 3D-Landmark 检测的多尺度深度强化学习。IEEE 模式分析与机器智能汇刊。印刷前的 ePub。2018
[3] Bastian Bier 等,用于骨盆创伤手术的 X 射线变换不变解剖标志检测。MICCAI 2018 — MICCAI 青年研究员奖
[4]黄宜兴等.深度学习在有限角度层析成像中鲁棒性的一些研究。MICCAI 2018。
[5] Andreas Maier 等《精确学习:神经网络中已知算子的使用》。ICPR 2018。
[6]托比亚斯·维尔福尔、弗罗林·盖苏、文森特·克里斯特莱因、安德烈亚斯·迈尔。深度学习计算机断层扫描。MICCAI 2016。
[7] Hammernik,Kerstin 等,“一种用于有限角度计算机断层成像重建的深度学习架构。”2017 年医学杂志。施普林格观景台,柏林,海德堡,2017。92–97.
[8] Aubreville,Marc 等,“助听器应用的深度去噪”2018 第 16 届声信号增强国际研讨会(IWAENC)。IEEE,2018。
【9】克里斯托弗·赛本、伯恩哈德·史汀普、乔纳森·洛门、托比亚斯·维尔福、阿恩德·德夫勒、安德烈亚斯·迈尔。使用精确学习导出神经网络结构:平行到扇形波束转换。GCPR 2018。
【10】傅、等.《弗兰基网》2018 年医学杂志。施普林格观景台,柏林,海德堡,2018。341–346.
[11]傅、、伦纳特·胡斯沃格特和斯特凡·普洛纳·詹姆斯·g·迈尔。"经验教训:深度网络的模块化允许跨模态重用."arXiv 预印本 arXiv:1911.02080 (2019)。

已知操作员学习—第 3 部分

原文:https://towardsdatascience.com/known-operator-learning-part-3-984f136e88a6?source=collection_archive---------64-----------------------

FAU 讲座笔记关于深度学习

CT 重建再探

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还能重建四维血流吗?使用 gifify 创建的图像。来源: YouTube

欢迎回到深度学习!所以今天,我们想看看已知算子学习的应用,我今天想展示的一个特别的应用是 CT 重建。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CT 重建就是用非常大的稀疏矩阵进行矩阵乘法。 CC 下的图片来自深度学习讲座的 4.0 。

这里,你可以看到 CT 重建问题的正式解决方案。这就是所谓的滤波反投影或 Radon 逆投影。这正是我之前提到的,在 1917 年已经解决的方程。但你可能知道,CT 扫描仪是在 1971 年才实现的。所以实际上,发现这个非常好的解决方案的 Radon 从未见过它付诸实践。那么,他是如何解决 CT 重建问题的呢?CT 重建是一个投影过程。它本质上是一个可以求解的线性方程组。这个解本质上是用卷积和求和来描述的。因此,它是沿检测器方向 s 的卷积,然后是旋转角度θ的反投影。在整个过程中,我们抑制负面价值。因此,我们还会在系统中引入非线性。这些都可以用矩阵符号来表示。因此,我们知道投影操作可以简单地描述为一个矩阵一个,它描述了光线如何与体积相交。有了这个矩阵,你可以简单地将体积乘以 A,这就给出了你在扫描仪中观察到的投影 p。现在,得到重建是你得到投影 p,你需要 A 的某种逆或伪逆来计算它。我们可以看到,有一个解与我们在上面的连续方程中看到的非常相似。所以,我们这里有一个本质上的伪逆,那就是 A 转置次数AA 转置反转次数 p 。现在,你可能会说,你在 a 中看到的反转实际上是滤波器。所以,对于这个特殊的问题,我们知道 A 的逆转置会形成卷积。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么不把它映射到神经网络上呢? CC 下的图片来自深度学习讲座的 4.0 。

这很好,因为我们知道如何在深度网络中实现卷积,对吗?矩阵乘法!这就是我们所做的。我们可以将一切映射到神经网络中。我们从左手边开始。我们放入正弦图,也就是所有的投影。我们有一个卷积层来计算过滤后的投影。然后,我们有一个反投影,这是一个完全连接的层,本质上是这个大矩阵 A 。最后,我们有非负约束。所以本质上,我们可以定义一个神经网络,它可以进行精确的滤波反投影。现在,这实际上并不那么超级有趣,因为没什么可学的。我们知道所有这些重量,顺便说一下,矩阵 A 真的很大。对于三维问题,它可以接近高达 65,000 万亿字节的浮点精度内存。所以,你不想实例化这个矩阵。你不想做那件事的原因是它太稀疏了。所以,在 A 中,只有很小一部分元素是真正的连接。这对于 CT 重建来说非常好,因为这样你通常不会实例化 A ,而是简单地使用光线跟踪器计算 AA 转置。这通常在图形板上完成。现在,我们为什么要谈论这些?我们已经看到了 CT 重建不充分的情况,我们基本上可以进行可训练的 CT 重建。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

许多关于 CT 的教科书忽略了滤波器离散化和正确填充的主题。来自深度学习讲座的 4.0CC 下的图片。

如果你看一本 CT 书,你已经遇到了第一个问题。如果你按常规实现它,你只是想重建一个圆柱体,仅仅显示这个圆形区域内 1 的值,那么你会想要一个像这样的图像,其中圆柱体内的一切都是 1,圆柱体外的一切都是 0。所以,我们沿着原始切片图像中的蓝线显示这个线图。现在,如果你实现滤波反投影,就像你在教科书上找到的,你会得到一个像这样的重建。典型的错误是你把傅立叶变换的长度选得太短,另一个错误是你没有恰当地考虑离散化。现在,您可以使用它并修复离散化中的问题。所以你现在能做的就是用学习技巧训练正确的过滤器。因此,在经典 CT 课程中,你要做的是运行从连续积分到离散形式的所有数学运算,以计算出正确的滤波器系数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们能使用学习技术找到正确的离散化吗?来自深度学习讲座CC BY 4.0 下的图片。

相反,我们在这里表明,通过知道它采取卷积的形式,我们可以简单地将我们的逆表示为 p 乘以傅里叶变换,这也是一个矩阵乘法 F 。然后, K 是保存频谱权重的对角矩阵,之后是傅里叶逆变换,这里表示为 F 埃尔米特变换。最后,你反向投影。我们可以简单地把它写成一组矩阵,顺便说一下,这也定义了网络架构。现在,我们实际上可以优化正确的滤波器权重。我们要做的是解决相关的优化问题。这只是让右手边等于左手边,我们选择一个 L2 损失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

反向传播可以自动计算这个梯度。来自深度学习讲座的 4.0CC 下的图片。

你们已经在这门课的很多场合见过了。现在,如果我们这样做,我们也可以手动计算。如果你使用矩阵食谱,然后,你得到以下关于层 K 的梯度。这将是 F 乘以 A 乘以然后在括号中 A 转置 F 埃尔米特我们的对角滤波器矩阵 K 乘以傅立叶变换乘以 p 减去 x 然后乘以 F 乘以 p 转置。所以如果你看看这个,你可以看到这实际上是重建。这是我们网络的前进通道。这是引入的误差。所以,这是我们的灵敏度,如果我们应用我们的损失,我们在网络的末端得到。我们计算灵敏度,然后反向传播到我们实际需要它的层。这是层 K 。然后,我们乘以这个特定层中的激活。如果你还记得我们关于前馈网络的讲座,这就是各自的层梯度。我们仍然可以重复使用很早以前在这节课中学到的数学知识。所以实际上,我们不必经历计算这个梯度的痛苦。我们的深度学习框架将为我们做到这一点。因此,使用反向传播算法可以节省大量时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习的滤波器与正确离散的权重相同。 CC 下的图片来自深度学习讲座的 4.0 。

如果你这么做了会发生什么?当然,在得知神器不见了之后。所以,你可以拿走这件艺术品。这是一个学术上的例子。我们还有一些。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更复杂的 CT 几何形状也可以映射到神经网络。 CC 下的图片来自深度学习讲座的 4.0 。

你可以看到,你也可以用类似的矩阵方程来近似扇束重建。我们现在有了一个额外的矩阵。因此, W 是乘以输入图像中每个像素的逐点权重。 C 现在直接就是我们的卷积矩阵。因此,我们可以用这个方程简单地描述一个扇形束重建公式,当然,我们可以由此产生一个结果网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习 CT 有助于有限的角度伪影。来自深度学习讲座的 4.0CC 下的图片。

现在让我们看看如果我们回到这个有限角度层析成像问题会发生什么。所以,如果你有一个完整的扫描,它看起来像这样。让我们进行一次只有 180 度旋转的扫描。这里,扫描的最小设置实际上是 200 度。所以,我们少了 20 度的旋转。没有我在已知算子学习的介绍中展示的有限角度问题那么强,但这里仍然出现了显著的伪像。现在,让我们将传统的滤波反投影算法作为预训练,并调整权重和卷积。如果你这样做,你会得到这个重建。因此,您可以看到图像质量得到了显著提高。很多藏物都不见了。右手边仍有一些伪像,但图像质量明显更好。现在,你可能会说“好吧,你又在使用黑盒了!”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习到的权重可以映射回它们的原始解释,并与其他解决方案进行比较。来自深度学习讲座的 4.0CC 下的图片。

但这实际上并不正确,因为我们的权重可以被映射回原来的解释。我们还有一个滤波反投影算法。这意味着我们可以从我们的网络中读出训练过的权重,并将它们与最先进的进行比较。如果你看这里,我们用所谓的 Parker 权重进行初始化,这是短扫描的解决方案。这里的想法是,相对的射线被分配一个权重,使得测量完全相同的线积分的射线基本上总和为 1。这显示在左手边。在右手边,你找到了我们的神经网络在 2016 年找到的解决方案。所以这是数据最优解。你可以看到它对我们的 Parker weights 产生了重大影响。现在,2017 年 Schä fer 等人发表了一篇如何修复这些有限角度伪影的启发式文章。他们建议增加穿过我们没有观测到的区域的射线的重量。他们只是增加重量,以固定确定性的质量损失。他们的发现看起来更好,但只是一个启发。我们可以看到,我们的神经网络找到了一个非常相似的解决方案,我们可以证明这是数据最优的。所以,你可以在最左边和最右边看到明显的不同。如果你看这里,如果你看这里,你可以看到这些重量,一直到这里和这里。这实际上是探测器的终点。所以,这里和这里是探测器的边界,也是这里和这里。这意味着这里和这里的这些区域没有任何变化。其原因是我们在训练数据中从来没有一个对象可以填满整个检测器。因此,我们也不能在这里反向传播梯度。这就是为什么我们基本上仍然在这些位置进行初始初始化。那很酷。这才是真正的诠释网络。这是真正了解培训过程中发生的事情,对吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,迭代压缩感知解决方案可以使用深度学习技术来解决。 CC 下的图片来自深度学习讲座的 4.0 。

那么,我们能做得更多吗?是的,甚至还有其他东西,比如所谓的变分网络。这是 Kobler,Pock 和 Hammernik 的工作,他们基本上表明任何类型的能量最小化都可以映射成一种展开的前馈问题。因此,本质上能量最小化可以通过梯度下降来解决。所以,你最终会得到一个你想要最小化的最优化问题。如果你想有效地做到这一点,你可以把它表述为一个递归神经网络。我们是如何处理递归神经网络的?我们打开它们。因此,如果固定迭代次数,任何类型的能量最小化都可以映射到一个前馈神经网络中。这样,你就可以像这里的迭代重建公式或这里的迭代去噪公式一样,进行能量最小化,并计算其梯度。如果你这样做,你将基本上与先前的图像配置减去负梯度方向结束。你这样做,一步一步地重复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代和解析解也可以根据神经网络结合起来。 CC 下的图片来自深度学习讲座的 4.0 。

这里,我们有一个特殊的解决方案,因为我们将它与我们的神经网络重建相结合。我们只是想学习一个图像增强步骤。所以我们所做的是,我们进行神经网络重建,然后连接到前面的层。有 T 条纹或降噪步骤是可训练的。他们使用压缩传感理论。所以,如果你想在这里看到更多的细节,我推荐你参加的一个图像重建课程。如果你仔细观察,你会发现这是一个在稀疏域中压缩图像的想法。这里,我们表明,我们实际上可以学习在稀疏域中表达图像内容的变换,这意味着我们也可以获得这种新的稀疏变换,并在传统的信号处理意义上解释它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

额外的迭代处理在图像质量方面产生了进一步的好处。来自深度学习讲座的 4.0CC 下的图片。

我们来看一些结果。在这里,你可以看到,如果我们采取全扫描参考,我们得到一个真正的无伪影图像。我们的神经网络输出有了我之前展示的这个重建网络的改进,但是它仍然有这些条纹伪影,你可以在右上角看到。在左下方,您可以看到去噪算法的输出,它是三维的。因此,它可以去噪,但仍有条纹问题。你可以看到,在右下角的变分网络中,条纹被抑制了很多。因此,我们实际上学习了一种基于压缩感知思想的变换,以消除这些条纹。一个非常好的神经网络,在数学上精确地模拟了压缩感知重建方法。这太令人兴奋了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际上,所有的能量最小化方法都可以映射到神经网络。它们总是产生 ResNet 类型的架构。那么,ResNets 在学习优化未知的能量函数吗? CC 下的图片来自深度学习讲座的 4.0 。

顺便说一下,如果你想到这种能量最小化的想法,那么你也会发现下面的解释:能量最小化和这种展开总是导致一个 ResNet,因为你采取以前的配置减去负梯度方向,这意味着它是以前的层输出加上新层的配置。所以,这实质上意味着 ResNets 也可以用这种方式来表达。它们总是任何能量最小化问题的结果。也可能是最大化。在任何情况下,我们甚至不必知道它是最大化还是最小化,但一般来说,如果你有一个函数优化,那么你总是可以通过一个 ResNet 找到这个优化过程的解。因此,你可以说 ResNets 也适合于为一个完全未知的误差函数寻找优化策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座CC BY 4.0 下的图片。

很有趣,不是吗?关于已知算子学习的这些想法,我还想告诉你一些事情。此外,我们希望看到更多我们可以应用它的应用,也许还希望看到一些关于深度学习和机器学习领域在未来几个月和几年内将如何发展的想法。非常感谢大家的收听,我们在下一段也是最后一段视频中再见。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

谢谢

非常感谢 Fu、Florin Ghesu、Yixing Huang Christopher Syben、Marc Aubreville 和 Tobias Würfl 对制作这些幻灯片的支持。

参考

[1] Florin Ghesu 等人,《不完整 3D-CT 数据中的鲁棒多尺度解剖标志检测》。医学图像计算和计算机辅助干预 MICCAI 2017 (MICCAI),加拿大魁北克省,2017 年第 194–202 页— MICCAI 青年研究员奖
[2] Florin Ghesu 等人,用于 CT 扫描中实时 3D-Landmark 检测的多尺度深度强化学习。IEEE 模式分析与机器智能汇刊。印刷前的 ePub。2018
[3] Bastian Bier 等,用于骨盆创伤手术的 X 射线变换不变解剖标志检测。MICCAI 2018 — MICCAI 青年研究员奖
[4]黄宜兴等.深度学习在有限角度层析成像中鲁棒性的一些研究。MICCAI 2018。
[5] Andreas Maier 等《精确学习:神经网络中已知算子的使用》。ICPR 2018。
[6]托比亚斯·维尔福尔、弗罗林·盖苏、文森特·克里斯特莱因、安德烈亚斯·迈尔。深度学习计算机断层扫描。MICCAI 2016。
[7] Hammernik,Kerstin 等,“一种用于有限角度计算机断层成像重建的深度学习架构。”2017 年医学杂志。施普林格观景台,柏林,海德堡,2017。92–97.
[8] Aubreville,Marc 等,“助听器应用的深度去噪”2018 第 16 届声信号增强国际研讨会(IWAENC)。IEEE,2018。
【9】克里斯托弗·赛本、伯恩哈德·史汀普、乔纳森·洛门、托比亚斯·维尔福、阿恩德·德夫勒、安德烈亚斯·迈尔。使用精确学习导出神经网络结构:平行到扇形波束转换。GCPR 2018。
【10】傅、等.《弗兰基网》2018 年医学杂志。施普林格观景台,柏林,海德堡,2018。341–346.
[11]傅、、伦纳特·胡斯沃格特和斯特凡·普洛纳·詹姆斯·g·迈尔。"经验教训:深度网络的模块化允许跨模态重用."arXiv 预印本 arXiv:1911.02080 (2019)。

已知操作员学习—第 4 部分

原文:https://towardsdatascience.com/known-operator-learning-part-4-823e7a96cf5b?source=collection_archive---------66-----------------------

FAU 讲座笔记关于深度学习

深层设计模式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

往期讲座 / 观看本视频 / 顶级

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现代听力仪器信号处理管道的简化版本。 CC 下的图片来自深度学习讲座的 4.0 。

欢迎回到深度学习!这就是了。这是最后一堂课。所以今天,我想向你们展示这种已知算子范式的几个更多的应用,以及我认为未来的研究实际上可以去的一些想法。让我们看看我为你准备了什么。我想展示的一件事是简化的现代助听器管道。这是与一家生产助听器的公司的合作,他们通常有一个信号处理管道,其中有两个麦克风。他们收集一些语音信号。然后,通过分析滤波器组运行。这本质上是一个短期傅里叶变换。然后通过定向麦克风来聚焦你面前的事物。然后,您使用降噪来为佩戴助听器的人获得更好的清晰度。随后是自动增益控制,使用增益控制,您可以将频率分析合成为语音信号,然后在助听器内的扬声器上播放。所以,还有一个循环连接,因为你想抑制反馈循环。这种管道,你可以在各种制造商的现代助听器中找到。这里,您可以看到一些例子,所有这些处理的关键问题是降噪。这是困难的部分。所有其他的事情,我们都知道如何用传统的信号处理来解决。但是减少噪音是一个巨大的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个流水线可以用已知的操作符来表示。这样,我们可以嵌入一个 DNN 来减少噪音。 CC 下的图片来自深度学习讲座的 4.0 。

那么,我们能做什么呢?我们可以将整个助听器管道映射到一个深层网络上。所有这些步骤都可以用微分运算来表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际去噪 DNN 的设置。来自深度学习讲座CC BY 4.0 下的图片。

如果我们这样做,我们建立以下大纲。实际上,我们这里的网络并不深,因为我们只有三个隐藏层,但是有 2024 个隐藏节点和 ReLUs。然后,这被用于预测维纳滤波器增益的系数,以便抑制具有特定噪声的信道。这就是设计。我们有来自归一化光谱的 7714 个节点的输入。然后,这是通过三个隐藏层运行。它们与 ReLUs 完全连接,最后,我们有一些 48 通道输出,由产生维纳增益的 sigmoid 产生。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练数据库概要。 CC 下的图片来自深度学习讲座的 4.0 。

我们在一些数据集上进行了评估,这里我们有 259 个干净的语音信号。然后我们基本上有 48 个非平稳噪声信号,我们混合它们。所以,你可以说我们在这里训练的是一种循环自动编码器。实际上,这是一个去噪自动编码器,因为我们将干净的语音信号加上噪声作为输入,在输出端,我们希望产生干净的语音信号。这是一个例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

助听器输出的一个例子。音频示例也可以在这里听。来自深度学习讲座的 4.0CC 下的图片。

让我们尝试一个非平稳的噪声模式,这是一个电子钻。另外,请注意,网络之前从未听说过电子演习。这通常会损坏您的助听器,让我们来听听输出。因此,您可以听到非平稳噪声也得到很好的抑制。哇哦。这很酷,当然还有更多应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

已知的算子也可以用于 X 射线材料分解。使用 gifify 创建的图像。来源: YouTube

让我们再考虑一个想法。我们能衍生出网络吗?这里,假设您有一个场景,您以不喜欢的格式收集数据,但您知道数据和投影之间的正式等式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

衍生深度神经网络架构的示例。 CC 下的图片来自深度学习讲座的 4.0 。

我在这里展示的例子是锥束采集。这简直就是典型的 x 射线几何。所以,你拿一个 X 射线,这是典型的锥束几何图形。现在,对于锥束几何,我们可以完全使用这个线性算子来描述它,正如我们在前面的视频中已经看到的。所以,我们可以表达物体 x 我们的几何图形 A 下标 CB 和我们的投影 p 下标 CB 之间的关系。现在,锥束采集不是很好,因为你有放大倍数。所以如果你有一个靠近光源的东西,它会比靠近探测器的物体放大更多。所以,这对于诊断来说不是很好。在 othopedics 中,他们更喜欢平行投影,因为如果你有东西,它会被正交投影,不会被放大。这对诊断非常有用。你会有公制投影,你可以简单地测量投影,它会有和体内一样的大小。因此,这对于诊断来说非常好,但通常我们无法用现有的系统来测量。因此,为了创建这个,你必须创建一个物体的完整重建,从各个角度进行完整的 ct 扫描,然后重建物体并再次投影。通常在整形外科,人们不喜欢切片卷,因为它们太复杂了,难以阅读。但是投影图像看起来更好。我们能做什么?我们知道这里连接两个方程的因子是 x 。所以我们可以简单地求解这个方程,得到关于 x 的解。曾经,我们有 x 和这里的矩阵逆 A 下标 CB 乘以 p 下标 CB。然后,我们只需将其乘以我们的生产映像。但是我们对重建不感兴趣。我们对这张投影图感兴趣。那么,让我们把它代入我们的方程,然后我们可以看到,通过应用这一系列矩阵,我们可以把锥束投影转换成平行束投影。不需要真正的重建。只需要一种中间重建。当然,在这里你不仅仅获得一个单一的投影。你可能想获得一些这样的投影。让我们说三个或四个投影,而不是像 CT 扫描那样的几千个。现在,如果你看这组方程,我们知道所有的运算。所以,这很酷。但是我们这里有这个逆,注意,这又是一种重构问题,一个大矩阵的逆,在很大程度上是稀疏的。所以,我们对这个人的评估还是有问题。这是非常昂贵的,但我们在深度学习的世界里,我们可以假设一些事情。所以,让我们假设这个逆只是一个卷积。所以,我们可以用傅立叶变换,对角矩阵 K 和傅立叶逆变换来代替它。突然,我只估计一个对角矩阵的参数,这使得问题变得简单了一些。我们可以在这个域中解决它,我们可以再次使用我们的技巧,我们已经在这里定义了一个已知的运营商网络拓扑。我们可以简单地用我们的神经网络方法来使用它。我们使用反向传播算法来优化这个家伙。我们只是用其他层作为固定层。顺便说一下,这也可以在非线性公式中实现。记住,一旦我们能够计算出次梯度,我们就可以把它插入我们的网络。所以你也可以做一些非常复杂的事情,比如中值滤波。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代的训练过程。 CC 下的图片来自深度学习讲座的 4.0 。

我们来看一个例子。在这种情况下,我们对 MR 投影进行重新归类。我们将在 k 空间中进行采集,这些通常只是平行投影。现在,我们感兴趣的是生成 X 射线和 X 射线的叠加,我们需要来波束几何。所以,我们取几个投影,然后重新组合它们,使之与入射光束的几何形状完全匹配。这里很酷的一点是,我们可以将 MR 和 X 射线的对比结合在一幅图像中。这并不简单。如果您只使用 Ram-Lak 过滤器进行初始化,您将得到以下结果。所以在这个图中,你可以看到绿色的预测和基础事实之间的差异,基础事实或标签显示为蓝色,我们的预测显示为橙色。我们在这里只训练几何图元。所以,我们用圆柱体和一些高斯噪声的叠加来训练,等等。在训练数据集中从来没有任何东西看起来甚至有点像人类,但我们把它应用到拟人化的幻影上。这是为了向您展示该方法的通用性。我们在这里估计很少的系数。这使我们能够非常非常好地概括在训练数据集中从未见过的东西。那么,让我们看看迭代过程中会发生什么。你可以看到过滤器变形,我们正在接近,当然,正确的标签图像在这里。你可以看到的另一件事是,右边的这张图片明显变好了。如果我再进行几次迭代,你可以看到我们真的可以得到清晰锐利的图像。显然,我们也可以不只是查看单个过滤器,而是查看不同平行投影的各个过滤器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代中的多过滤器版本。来自深度学习讲座CC BY 4.0 下的图片。

我们现在还可以训练视图相关的过滤器。这就是你在这里看到的。现在,我们为获得的每个不同视图设置了一个过滤器。我们仍然可以显示预测图像和标签图像之间的差异,并再次直接应用于我们的拟人化模型。你也可以看到,在这种情况下,我们得到了很好的收敛。我们训练过滤器,这些过滤器可以联合起来,以产生非常好的影像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

诸如 Frangi 滤波器之类的经典方法也适用于已知的算子学习。 CC 下的图片来自深度学习讲座的 4.0 。

很好,还有其他的东西,我们可以用来作为一种先验知识。在这项工作中,我们基本上采用了一种启发式方法,即 Frangi 提出的所谓的血管性过滤器。你可以看到它所做的处理本质上是卷积。有一个特征值计算。但是如果你看看特征值计算,你可以看到这个中心方程。它也可以表示为一个层,这样我们可以将 Frangi 过滤器的整个计算映射到一个专门的层中。然后,这可以在多尺度方法中训练,并给你一个可训练版本的 Frangi 滤波器。现在,如果你这样做,你可以产生血管分割,它们基本上是受 Frangi 滤波器的启发,但因为它们是可训练的,所以它们产生更好的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过适当的损耗,我们可以使网络块服务于特定的属性。来自深度学习讲座CC BY 4.0 下的图片。

这有点有趣,但你很快就会意识到弗兰基滤波器失败的一个原因是预处理不充分。因此,我们也可以将它与一种预处理网络结合起来。这里的想法是,假设你采用一个 U 型网络或导向过滤网络。同样,引导滤波器或联合双边滤波器可以映射到神经网络层。你可以在这里包括他们,你设计一个特殊的损失。这种特殊的损失不仅仅是优化分段输出,而是将它与某种自动编码器损失结合在一起。因此,在这一层中,您希望预处理后的图像仍然与输入图像相似,但其属性使得使用 8 尺度 Frankie 滤波器的血管分割效果更好。所以,我们可以把它放入我们的网络并训练它。结果,我们得到了血管检测,并且这种血管检测与 U 网相当。现在,U-Net 本质上是一个黑盒方法,但在这里我们可以说“好的,我们有一种预处理网。”顺便说一下,使用导向过滤器,它真的很好。所以,不一定是 U 网。这是一种神经网络调试方法。你可以证明我们现在可以一个模块接一个模块地替换我们的 U-net。在上一个版本中,我们根本没有 U 网,但我们有一个导向滤波器网络和 Frangi 滤波器。这与 U-net 的性能基本相同。所以,这样我们就能模块化我们的网络。为什么要创建模块?原因是模块是可重用的。这里,您可以看到眼科数据的眼部成像数据输出。这是典型的眼底图像。所以这是眼睛背景的 RGB 图像。它显示了血管都穿透视网膜的盲点。视网膜中央凹是视网膜上分辨率最高的地方。现在,通常如果你想分析这些图像,你只需要绿色通道,因为它是对比度最高的通道。我们的预处理网络的结果可以在这里显示。因此,我们获得了显著的噪音降低,但同时,我们也获得了对船只的重视。所以,这在某种程度上改善了血管的显示方式,也保存了精细的血管。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习的预处理滤波器可以与其他模态一起使用,而不需要微调。 CC 下的图片来自深度学习讲座的 4.0 。

好吧,这很好,但它只对眼底数据有效,对吧?不,我们的模块化表明,如果我们采用这种建模方式,我们能够将滤波器转换为完全不同的模态。这就是现在的光学相干断层血管造影术(OCTA),一种提取眼睛背景的无对比度血管图像的专业模式。您现在可以证明,我们的预处理过滤器可以应用于这些数据,而不需要任何额外的微调、学习或诸如此类的东西。你把这个过滤器应用到人脸图像上,当然,这些图像显示了相似的解剖结构。但是你根本不需要任何关于 OCTA 数据的培训。这是左边的 OCTA 输入图像。中间是我们滤波器的输出,右边是两者的 50%混合。这里是放大的区域,大家可以清楚地看到,看起来像噪声的东西实际上在滤波器的输出中变成了血管。这些是定性的结果。顺便说一下,到目前为止,我们终于也有了定量结果,我们实际上很高兴我们的预处理网络真的能够在正确的位置生产容器。所以,这是一个非常有趣的结果,这向我们展示了我们可以将网络模块化,使它们可以重复使用,而不必训练它们。因此,我们现在可能可以生成无需额外调整和微调即可重组到新网络中的数据块。这真的很酷。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

经典的模式识别管道演变成了深度学习。我们能从经典理论中得到启发,并以这种方式创建可重用的模块吗? CC 下的图片来自深度学习讲座的 4.0 。

好吧,这基本上把我们带回了经典的模式识别管道。你记得,我们在最开始的中看到了那个。我们有传感器、预处理、特征和分类。神经网络的经典角色只是分类,在这条路径上有所有这些特征工程。我们说,进行深度学习会好得多,因为这样我们就可以端到端地做所有事情,并且我们可以在途中优化所有事情。现在,如果我们看这个图表,我们也可以思考我们是否真的需要类似神经网络设计模式的东西。一种设计模式当然是端到端学习,但您可能也想包括这些自动编码器预处理损失,以便最大限度地利用您的信号。一方面,你要确保你有一个可解释的模块,它仍然在图像域中。另一方面,你想要有好的功能,我们在这堂课上学到的另一件事是多任务学习。因此,多任务学习将相同的潜在空间与不同的问题关联起来,得到不同的分类结果。这样,通过实现多任务丢失,我们可以确保获得非常通用的特性,以及适用于各种不同任务的特性。因此,本质上我们可以看到,通过适当构造我们的损失函数,我们实际上回到了经典的模式识别管道。这与传统意义上的模式识别管道不同,因为一切都是端到端的和可区分的。因此,你可能会说我们现在要做的是 CNN、ResNets、全局池、差异化渲染,甚至是嵌入到这些网络中的已知操作。然后,我们基本上得到了可以重组的模块,我们可能最终得到可微分的算法。这就是我们要走的路:可区分的、可调整的算法,只需要一点点数据就可以微调。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

已知操作员学习的总结。来自深度学习讲座CC BY 4.0 下的图片。

我想向你们展示这个概念,因为我认为已知算子学习非常酷。这也意味着你不必扔掉所有你已经学过的经典理论:傅立叶变换和所有处理信号的巧妙方法。他们仍然是非常有用的,他们可以嵌入到你的网络中,而不仅仅是使用正则化和损失。我们已经看到,当我们谈到这个偏差-方差权衡时,这基本上是一种你可以同时减少方差和偏差的方法:你结合了关于这个问题的先验知识。所以,这很酷。然后,你可以创建算法,学习权重,减少参数的数量。现在,我们有了一个很好的理论,它也向我们展示了我们在这里所做的事情是合理的,并且几乎所有最先进的方法都可以被整合。很少有运算找不到次梯度近似。如果你找不到次梯度近似,可能还有其他方法,这样你仍然可以使用它。这使得方法非常有效,可解释,并且您还可以使用模块。所以,那很酷,不是吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多棒的一个学期啊! CC 下的图片来自深度学习讲座的 4.0 。

这是我们最后一个视频。所以,我也要感谢你这个令人兴奋的学期。这是我第一次完全以视频的形式来教授这门课。到目前为止,据我所知,反馈普遍非常积极。因此,非常感谢您在途中提供反馈。这也是非常重要的,你可以看到我们在各种场合对讲座进行了改进,包括硬件和内容等等。为此非常感谢你。我从中获得了很多乐趣,我想我将来还会继续做很多事情。所以,我认为这些视频讲座是一种非常酷的方式,特别是,如果你在教一个大班的话。在非电晕的情况下,这门课会有 300 名观众,我认为,如果我们使用像这些录音这样的东西,我们也可以获得一种非常个性化的交流方式。我也可以利用我不在演讲厅的时间安排一些事情,比如问答环节。所以,这很酷。另一件很酷的事情是我们甚至可以做课堂笔记。你们中的许多人一直在抱怨,这门课没有课堂笔记,我说“看,我们让这门课跟上时代。我们包括最新和最酷的话题。制作课堂笔记非常困难。”但实际上,深度学习帮助我们制作课堂笔记,因为有视频记录。我们可以在音轨上使用语音识别,并生成课堂笔记。所以你可以看到我已经开始这样做了,如果你回到旧的录音,你可以看到我已经把链接放到了完整的文字记录中。它们以博客文章的形式发布,你也可以访问它们。顺便说一下,像视频一样,博客帖子和你在这里看到的一切都是使用 4.0 版的知识共享许可的,这意味着你可以自由地重用其中的任何部分,并重新分发和共享它。所以总的来说,我认为这个机器学习领域,特别是深度学习方法,我们现在正在快速发展。我们仍在前进。因此,我认为这些事情和发展不会很快停止,这个领域仍然非常令人兴奋。我也很兴奋,我可以在像这样的讲座中向你们展示最新的东西。因此,我认为仍有令人兴奋的新突破即将到来,这意味着我们将在未来调整讲座,制作新的讲座视频,以便能够融入最新和最伟大的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当然,在研究中你永远不会独行。当今的研究是全球性的! CC 下的图片来自深度学习讲座的 4.0 。

顺便说一下,我在这堂课上给你们展示的东西当然不仅仅是我们小组的。我们吸收了世界各地其他小组的许多不同成果,当然也包括我们在埃尔兰根取得的成果,我们并不孤单,但我们正在一个庞大的国际合作伙伴网络中工作。我认为这是科学需要进行的方式,现在和将来都是如此。我有一些额外的参考。好吧。这学期就这样了。非常感谢您收听所有这些视频。我希望你和他们玩得很开心。嗯,让我想想,我很确定下学期我还会教一个班。所以,如果你喜欢这门课,将来你可能会想加入我们的其他班级。非常感谢,再见!

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

谢谢

非常感谢 Fu、Florin Ghesu、Yixing Huang Christopher Syben、Marc Aubreville 和 Tobias Würfl 对制作这些幻灯片的支持。

参考

[1] Florin Ghesu 等人,《不完整 3D-CT 数据中的鲁棒多尺度解剖标志检测》。医学图像计算和计算机辅助干预 MICCAI 2017 (MICCAI),加拿大魁北克省,2017 年第 194–202 页— MICCAI 青年研究员奖
[2] Florin Ghesu 等人,用于 CT 扫描中实时 3D-Landmark 检测的多尺度深度强化学习。IEEE 模式分析与机器智能汇刊。印刷前的 ePub。2018
[3] Bastian Bier 等,用于骨盆创伤手术的 X 射线变换不变解剖标志检测。MICCAI 2018 — MICCAI 青年研究员奖
[4]黄宜兴等.深度学习在有限角度层析成像中鲁棒性的一些研究。MICCAI 2018。
[5] Andreas Maier 等《精确学习:神经网络中已知算子的使用》。ICPR 2018。
[6]托比亚斯·维尔福尔、弗罗林·盖苏、文森特·克里斯特莱因、安德烈亚斯·迈尔。深度学习计算机断层扫描。MICCAI 2016。
[7] Hammernik,Kerstin 等,“一种用于有限角度计算机断层成像重建的深度学习架构。”2017 年医学杂志。施普林格观景台,柏林,海德堡,2017。92–97.
[8] Aubreville,Marc 等,“助听器应用的深度去噪”2018 第 16 届声信号增强国际研讨会(IWAENC)。IEEE,2018。
【9】克里斯托弗·赛本、伯恩哈德·史汀普、乔纳森·洛门、托比亚斯·维尔福、阿恩德·德夫勒、安德烈亚斯·迈尔。使用精确学习导出神经网络结构:平行到扇形波束转换。GCPR 2018。
【10】傅、等.《弗兰基网》2018 年医学杂志。施普林格观景台,柏林,海德堡,2018。341–346.
[11]傅、、伦纳特·胡斯沃格特和斯特凡·普洛纳·詹姆斯·g·迈尔。"经验教训:深度网络的模块化允许跨模态重用."arXiv 预印本 arXiv:1911.02080 (2019)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值