[论文摘要 FERET 数据集上 PCA、ICA 和 LDA 的独立比较研究
GIF from this website
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
Paper from this website
摘要
本文作者希望比较三种最流行的基于外观的人脸识别投影方法(PCA、ICA 和 LDA)。他们使用了 FERET 数据集,没有发现任何特定的投影——公制组合是所有标准 FERET 测试中最好的。(因此,研究人员需要为特定的任务选择特定的方法。)
简介
涉及人脸识别问题的研究越来越受欢迎,人们普遍认为,计算机视觉研究的进展将为神经科学家和心理学家提供关于人类大脑如何工作的有用见解,反之亦然。有两种方法来实现这个任务,基于外观的方法使用应用于全脸的整体纹理特征,或者基于特征的方法使用几何面部特征(例如嘴)及其关系。
基于外观的子空间分析是最古老和最有前途的人脸识别方法。(然而,挑战在于找到一个好的子空间来比较图像。).本文比较了主成分分析、独立分量分析和线性判别分析三种投影方法。为了公平的比较,在 FERET 数据集上所有方法都使用了相同的预处理图像。
算法
Training Phase of Face recognition system
Testing/Matching Phase of Face recognition system
PCA、ICA 和 LDA 是子空间分析方法,它们将原始(高维)数据投影到较低的维上(同时尽可能多地保留信息),然后进行比较。(这里,作者从 3000 的向量维度开始,并投影到 270 的子空间维度上——对于 LDA 224。).上面可以看到人脸识别系统示例的架构,在训练阶段,从归一化和居中的训练图像中学习投影矩阵 W,并将已知人脸的图库图像投影到较低的维度上(同时减去由训练图像获得的平均图像)。在存储投影向量之后,在匹配阶段,即将匹配的图像被归一化和居中(使用训练平均图像),然后被投影到较低的维度上,并与已知人脸进行比较。使用各种距离测量,分配最接近的身份。
上图显示了当原始人脸图像被投影到一个低维子空间时,由不同方法产生的结果图像。在对给定图像执行 ICA 之前,先执行 PCA 以降低维数(LDA 也是如此),作者使用 INFOMAX 算法来实现 ICA。(ICA1 —统计独立基础图像,ICA2 —阶乘代码表示。).我们可以观察到 PCA、ICA2 和 LDA 捕获全局特征,而 ICA1 捕获局部特征。
最后,使用了四种不同的距离测量方法,L1、L2、余弦角(COS)和马氏距离(MAH)。(V 是协方差矩阵)。
方法论
为了与其他论文公平比较,其他人使用 FERET 数据集。对于预处理,他们对所有图像进行空间变换,使眼睛位于图像中心,裁剪掉背景,将图像大小调整为 50*60,并执行直方图均衡化。使用 675 幅图像(225 个类别的 3 幅图像)来获得投影矩阵 W,并且除了 LDA 之外,原始图像被缩减到 270 维子空间。(224 为 LDA。).
结果
Rank Table
CMS curve
如上所述,作者报告了两种不同类型的可视化,一个表格显示了等级 1 的算法性能(前一个匹配中的识别率),一个 CMS 显示了等级 1 和更高等级的累积结果。有趣的是注意到表(等级 1)结果和 CMS 曲线(更高等级)之间的差异。对于 fb(不同表达任务),ICA2 + COS 在等级 1 产生最好的结果,LDA + COS 在等级 6 之后表现更好。并且在较高等级时,ICA2 + COS 的表现比任何其他方法都差。作者们也无法直接得出结论,哪种方法最适合这项任务。在不同的光照条件下,ICA1 的表现最差。最后,对于 dup1 和 dup2,时间变化任务,ICA2 + COS 是最好的方法。对于度量,L1 与 PCA 配对时是最好的,COS 与 ICA2 配对时是最好的,但是对于 ICA1 和 LDA,无法得出哪个测量是最佳的结论。(我不打算总结假设检验的细节。)作者将获得的结果与其他出版物进行了比较,他们能够发现大量相同的结论以及矛盾之处。
结论
总之,本文的作者比较了不同的最流行的基于外观的人脸识别投影方法。(PCA、ICA 和 LDA),使用四种不同的距离度量。(L1、L2、余弦和马哈拉诺比斯)。他们得出了几个结论…
(1)不能断言哪一个是不同表达任务的最佳组合,因为差异似乎没有统计学意义
(2)PCA L1 在所有等级上都优于 ICA1 和 LDA,并且从等级 27 开始优于 ICA2
(3) COS 似乎是 ICA2 的最佳指标选择
(4) ICA2 + COS 组合是时间变化的最佳选择
(5) L2 产生的结果低于 L1 或 COS
(6)总体而言,L1 和 COS 是最佳指标
最后的话
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- (2018).Face-rec.org。检索于 2018 年 9 月 2 日,来自http://face-rec.org/algorithms/comparisons/delac_03.pdf
[论文摘要]通过互信息估计和最大化学习深度表示
Photo by Lucrezia Carnelos on Unsplash
我想彻底了解的论文之一。
请注意,这个姿势是我自己学习用的。
Paper from this website
摘要
作者的网络的目标是最大化编码器的输入和输出之间的互信息。(无监督特征学习)。对于某些下游任务来说,对表示的有用性有很大影响的一个因素是关于目标输入的位置的知识。此外,作者使用一种对立的自动编码器方法来将编码表示与一些先验分布相匹配。
简介
在连续和高维空间中计算互信息是非常困难的任务,然而由于最近的进展,现在可以在连续域中高效地计算互信息。因为这个问题已经(部分)解决了,所以本文的作者需要一个函数(神经网络)来最大化给定输入和编码输出之间的互信息。作者还指出,对于特定任务(如分类),最大化表示(编码特征)和局部区域之间的平均 MI 可能更有用。同时最大化编码特征和全局输入之间的互信息有利于重构原始输入。
当谈到编码特征时,内容和独立性都很重要,作者以类似于 AAE 的方式训练他们的函数,以匹配他们想要强加给编码特征的统计属性。(由于这种方法与 infomax 优化原则密切相关,因此他们将其命名为 DeepInfo Max)。
相关工作
有许多方法旨在学习良好的表示,如独立成分分析、自组织映射、自监督方法和深度聚类。生成模型也用于学习有用的表示,并且在任务是重构原始输入的情况下,负重构误差可以与编码器中的 MI 相关,如下所示。
x 是给定数据,Y 是编码特征,R 是重构误差,H 是编码器输出的边际熵。这意味着重建目标对它们的中间表示中编码的信息量提供了一些保证。
互信息估计
互信息方法有着悠久的传统,通常许多互信息方法旨在最大化给定变量之间的互信息。(有些方法可以是非线性的)。互信息神经估计(MINE)学习连续变量的 MI 的神经估计,并且它是强一致的。这篇论文的作者受我的影响,但是他们发现没有必要使用精确的基于 KL 的配方以及具有发生器部分。基于 Jensen-Shannon 散度的简单分类器工作得和 KL 一样好,并且更稳定。此外,作者的方法可以利用输入的局部结构。
深度信息最大值
训练编码器的一般方法如下所示。给定 X 和 Y 连续且(几乎处处)可微的参数函数的域和范围,作者将 E 定义为神经网络,X 定义为训练数据,P 定义为经验概率分布(数据分布), U 定义为通过神经网络推送样本诱导的边际分布。作者编码器是根据两个标准训练的。
- 最大化数据 x 及其编码特征(局部或全局)之间的交互信息
- 让编码的特征匹配一些先验分布(AAE 风格)。
a)互信息估计和最大化
互信息神经估计(MINE)通过训练分类器来区分来自联合 J 和随机变量 X 和 Y 的边缘乘积 M 的样本来估计 MI,并且它使用基于 KL 散度的 Donsker-Varadhan 表示的 MI 的下限。
t 是鉴别器网络,其参数由 w 建模并与编码器配对,它既估计又最大化互信息。
我的网络和作者的网络之间的区别在于,首先,作者的编码器和互信息估计器共享层,因为它们优化相同的目标,其次,作者的目标是最大化 MI(不关心它的精确值),因此使用不同的估计器函数以具有有利的折衷。(注意,也可以使用噪声对比估计。)
基于 DV、JSD 和 nce 的公式之间存在一些差异,例如 P/Phat 的期望值是出现在对数项内部还是外部。每种测量都有自己的优点和缺点,一般来说,nce 需要更多的负样本,但表现良好,而 JSD 损失相对稳健,但表现不如 NCE。
b)局部互信息最大化
根据您希望承担的任务,从原始数据中最大化本地区域之间的互信息可能是一个更好的主意。(这也可以应用于语言数据,而不是最大化特征和整个文档之间的 MI,我们可以最大化特征和句子之间的 MI。).例如,最大化给定特征和局部面片之间的平均 MI 可能是个好主意。
当编码器不支持无限输出配置并且特征向量具有有限容量时,编码器必须选择将传递何种信息。但是如果编码器只传递特定于输入的本地部分的信息,这将不会增加不包含该信息的任何其他补片的 MI。因此,编码器将传递通常在输入端共享的信息。
局部方法首先对输入数据进行编码,这反映了有用的结构,然后将该编码总结为全局特征,然后最大化估计的 MI 可以用如下公式表示。
c)将表征匹配到一个先验分布
当我们将数据编码成某种特征向量时,信息量只是我们优化的标准之一,轴的另一个度量是统计约束。这可以通过 AAE 方法实现,目标函数如下所示。
AAE 之间的一个区别是,我们没有上述目标函数的生成器。
当我们从上面组合所有的测量轴时,我们得到最终的目标函数,如上所示。
实验
作者在 CIFAR10/100、Tiny ImageNet、STL-10 和 CelebA 四个不同的图像数据集上对算法进行了测试。并以一些方法与作者的方法进行了比较,分别以 VAE、AAE、甘比和噪声为目标。
a)我们如何评估代表的质量?
尽管测量一个表示是好还是不好是棘手的,但是存在一些测量,例如,线性可分性通常被用作表示和类别标签之间的解纠缠和互信息(MI)或者迁移学习分类任务的代理。
使用类标签并不理想,因为当标签未知时,我们可能对表示感兴趣。(类别标签)。因此,我们可以使用 MINE 来直接测量输入和特征之间的关系。或者,我们可以使用一个鉴别器来测量表示的独立性。鉴别器被训练来估计 KL 散度,并且 KL 散度越高,因子越相关。
以上是作者使用的指标的总结。
b)跨模型的表征学习比较
作者有两个模型 DIM(G)用于全局唯一目标,DIM(L)用于局部目标,对于先验,他们选择了均匀分布。
上表显示了不同数据集的分类精度,很明显 DIM(L)优于所有其他方法。(总之,局部模糊目标适合于提取类别信息。).
上表显示了 CIFAR10 数据集的线性可分性、重构(MS-SSIM)、互信息和独立性(NDM)的结果。需要注意的一点是,MS-SSIM 与 MINE 提供的 MI 估计值有很好的相关性,表明编码特征与像素信息有关。一般来说,基于像 VAE 和 AAE 的方法的重建对于 MS-SSIM 具有较高的分数,并且结合局部和全局的 DIM 目标对于 DIM 具有最好的结果。
c)添加坐标信息和遮挡
最后,作者在计算全局特征时随机遮挡输入的一部分,但是使用全部输入来计算局部特征。通过这样做,我们鼓励模型对整个图像共享的信息进行编码。这有助于提高分类的准确性。
结论
本文的作者介绍了 Deep InfoMax,这是一种最大化互信息的学习表示方法。作者的模型可以学习在原始数据的全局或局部结构之间具有最大互信息的特征。
遗言
测量相互信息似乎是非常棘手的任务。
参考
- Hjelm,r .,费多罗夫,a .,Lavoie-Marchildon,s .,Grewal,k .,Bachman,p .,Trischler,a .,& Bengio,Y. (2018)。通过互信息估计和最大化学习深度表示。Arxiv.org。检索于 2018 年 10 月 30 日,来自https://arxiv.org/abs/1808.06670
【论文摘要】学习自然声音的高阶结构
Photo by Aaina Sharma on Unsplash
当我发现这篇论文时,我想知道如何在自然声音数据中学习高阶结构。
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
Paper from this website
摘要
仅关注二阶统计量的无监督学习算法忽略了相位结构(高阶统计量),其中保留了我们称为特征的所有有用信息。为了提取自然声音的高阶结构,作者对声音数据的独立分量分析进行了讨论和实验。
贫困的二阶统计
自然信号具有跨越空间和时间的特征统计依赖性,因此人们认为我们的感觉系统必须通过使用某种过滤器来揭示这些依赖性。人们已经研究了多种基于相关性的方法来寻找这些滤波器(早在 1996 年),但是这些方法中的许多方法对二阶统计敏感。但是诸如图像中的边缘的信息特征是涉及不仅仅两个,而是几十甚至几百个像素或时间点之间的关系的特征。
如果我们检查通过这些基于相关性的方法学习的滤波器,我们可以观察到产生的滤波器是全局的,并且对局部特征不敏感。总之,基于相关的方法对我们不认为有用的信号特征(如幅度)很敏感,而忽略了我们认为最有意义的部分(如相位)。为了克服这个悖论,我们需要一种对高阶统计量敏感的方法。(但是这些高阶有无穷多个。).但是这篇论文的作者描述了一种考虑所有高阶的方法。
去相关、独立分量分析和独立基函数
在描述该算法之前,作者定义了什么是去相关操作,即利用矩阵 W 变换平均向量/矩阵,使得结果矩阵具有对角矩阵作为其协方差矩阵。产生所需结果的三种方法是主成分分析、白化操作和独立成分分析(包括独立基函数)。对于完整的(ICA ),我们可以使用如下所示的学习规则来学习矩阵 w(假设我们使用 sigmoid 函数。)
E is entropy
如果我们采取随机梯度下降操作,我们可以得到如下所示的权重更新规则。
最后,如果我们想使用自然梯度,我们可以使用下面的权重更新规则。
攻丝实验
使用指甲敲击牙齿产生的声音(上面显示的声谱图),作者进行了实验来寻找过滤器。他们首先计算协方差矩阵,然后计算 PCA 和白化操作。最后使用白化数据,他们使用自然梯度学习规则进行独立分量分析。
正如预期的那样,使用 PCA 的学习滤波器没有反映任何相位信息,我们认为这是信息性的。相反,它显示了记录信号的更全面的表示。另一方面,通过 ICA 和独立基函数学习的滤波器反映了在时间和频率上都是局部化的信息。
讨论
当作者使用自然图像数据完成类似实验时,他们再次发现通过使用 ICA 学习的滤波器具有局部、定向和多尺度属性,这些属性是自然场景的统计。其他研究人员关注独立分量分析的稀疏性。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站。
同时,在我的推特这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t。
参考
- (2018).Pdfs.semanticscholar.org。检索于 2018 年 9 月 1 日,来自https://pdfs . semantic scholar . org/b524/1dd 7d 74602186 DD 65 Fe 05435 fc 65 EAE 797 e 4 . pdf
Photo by Kelly Sikkema on Unsplash
单眼反应式微型飞行器控制的学习转移策略
GIF from this website
请注意,这篇文章是让未来的我回顾和回顾这篇论文上的材料,而不是从头再看一遍。
摘要
人类学习最吸引人的一个方面是迁移学习。(将以前任务中的某些/相关知识应用到新任务中的能力。).然而,在机器人学中解决这个问题仍然是一个挑战。在本文中,作者将数据集聚合( DAGGER )算法用于自主无人机飞行问题。他们提出的解决目标领域问题的方法是巧妙地利用从不同但相关的领域收集的训练数据。
简介
微型飞行器(MAV)目前非常流行,然而,为它们设计一个自主的系统仍然是一个极端的挑战。这项任务如此具有挑战性的原因之一可能是因为训练数据的收集。为了成功地训练防碰撞系统,我们需要收集连续的和不连续的数据。(这意味着我们需要记录一些涉及危险碰撞的数据。)这不仅是灾难性的,而且代价高昂。替代方法包括在模拟环境中训练机器人。然而,虚拟环境并不能百分之百地代表真实世界的动态。(分布可能不同。在本文中,作者研究了自主 MAV 飞行环境中知识转移的有效性。在那里,他们在源领域中训练系统,并将所学的知识应用到新的领域中。
技术方法
在这一节中,作者描述了如何设置实验的技术细节。一种可能教授控制者如何驾驶无人驾驶飞机的方法是给他们一组人类飞行员演示。通过足够的迭代,控制器将学习一个最优策略(π),至少可以像控制人一样控制无人机。然而,这种方法的一个问题是它不能很好地推广。(即域名迁移很困难)。因此,作者将该问题公式化为给定来自源域 D 和目标域 D’的数据,学习策略 pi (π),其中它减少了跨域差异。两个或更多事实之间缺乏兼容性或相似性。)。还训练了一个能控制无人机的 CNN。
为了克服目标数据没有分配标签的事实,作者使用附加损失函数来最小化域差异。下面可以看到完整的成本函数。
左侧是具有交叉熵损失的传统损失函数,右侧是附加损失函数,其中他们使用最大平均差异(MK-MMD)的多个核变量作为度量的平均值来测量每个域之间的差异。
实验和结果
在这一节中,作者描述了如何判断实验和算法。总之,在源域中收集了 1 km 的有人驾驶飞行的训练数据。和测试在目标域(相同的 1 km)中进行,通过使用随机策略来控制无人机或使用完整的训练数据来设置下限和上限。
如上所述,本文作者测试了三种不同类型的域名迁移。1)不同系统(不同无人驾驶飞机)之间转移;2)不同天气(夏季/冬季)之间的转移;以及 3)不同环境(不同森林)之间的转移。对于案例 1 和 2,他们能够获得系统性能显著提升。(作者假设这主要是由于更好的传感器和冬天没有障碍。)然而,在第三种情况下,它们只能获得轻微的性能提升。最后,作者指出要提高运动策略在物理系统上的可移植性。需要注意的是……
(1)由动力学差异引起的域转移,
(2)目标域中的预期失败案例。
(3)不仅是领域,还有任务诱发的差异。
结论
总之,作者能够成功地证明将领域知识从源转移到目标的有效性。他们的系统学习人类如何在源领域控制无人机,并将学到的知识应用到新的目标领域。
最后的话
模仿学习是令人着迷的东西,也是很好的问题形成方式。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- Daftry,s .,Bagnell,j .,& Hebert,M. (2016 年)。单目反应式微型飞行器控制的学习转移策略。Arxiv.org。检索于 2018 年 6 月 25 日,来自https://arxiv.org/abs/1608.00627
- (2018).Cs.cmu.edu。检索于 2018 年 6 月 25 日,来自https://www . cs . CMU . edu/~ s Ross 1/publications/Ross-aistats 11-no reget . pdf
- 差异,意思——谷歌搜索。(2018).Google.ca 于 2018 年 6 月 25 日检索,来自https://www.google.ca/search?q=discrepancy%2C+meaning&rlz = 1c 1 chbf _ enca 771 ca 771&OQ = disci&aqs = chrome . 0.69 I 59j 69 I 65j 69 I 57j 0 l 3.2225j 0j 7&sourceid = chrome&ie = UTF-8
推荐系统的矩阵分解技术
Photo by Andrew Neel on Unsplash
Paper from this website
摘要
这些天来,我们不断被各种来源推荐,比如读什么博客,听什么音乐等等……这些推荐系统变得比以往更加个性化。本文作者利用矩阵分解技术建立了一个复杂的推荐系统,其性能优于最近邻技术。(在电影推荐系统的设置中)。
推荐系统策略
内容过滤 →为每个用户或产品创建一个档案,以描述其性质(成功案例:音乐基因组项目)
协作过滤 →分析用户之间的关系和产品之间的相互依赖关系,以识别新的用户-项目关联(成功案例:Tapestry)
协同过滤通常比内容过滤更准确,但是它存在冷启动问题。(如果新用户存在,且与其他用户之间没有任何相互依赖关系,我们无法推荐任何内容)。通常有两种方法来实现协同过滤。
邻近方法 →计算项目之间的关系,或者用户之间的关系(用户群)
潜在因素 →创建一个潜在特征,将一个用户与另一个用户进行比较(特征库)
矩阵分解方法
当用户对他们看过的某部电影进行反馈时(比如他们可以从一到五打分),这些反馈可以用矩阵的形式来表示。其中每行代表每个用户,而每列代表不同的电影。显然,矩阵将是稀疏的,因为不是每个人都会看每部电影,(当谈到电影时,我们都有不同的品味)。
矩阵分解的一个优点是它可以包含隐含的反馈信息,这些信息不是直接给出的,而是可以通过分析用户行为得到的。使用这个强度,我们可以估计用户是否会喜欢一部(他/她)从未看过的电影。如果估计的收视率很高,我们可以向用户推荐这部电影。
Image from this website
上图很好地总结了矩阵分解背后的核心思想。设矩阵 A 的维数为(m,n ),这个矩阵可以看作两个矩阵之间的点积,每个矩阵的维数分别为(m,k)和(k,n)。
顺便说一下,上述概念与奇异值分解(SVD)密切相关。SVD 的一个缺点是,当原始矩阵稀疏(不完整)时,左右奇异向量是未定义的。
矩阵分解的概念可以用数学方法写成如下形式。
然后我们可以创建一个关于 q 和 p 的目标函数(我们希望最小化),这是(m,k)和(k,n)矩阵。
右边的项是正则项,这是添加的,因为我们不希望我们的分解矩阵 q 和 p 过拟合原始矩阵。因为我们的目标是以一种预测未来未知评级的方式来概括以前的评级,所以我们不应该过度拟合我们的模型。
学习方法
求矩阵 q 和 p 的一个明显的方法是梯度下降法。因为我们已经定义了损失函数,所以对 q 和 p 取偏导数来优化这些值。
通过偏导数,更新规则看起来会像上面这样。但是误差表面不是凸的,我们也可以采用另一种方法,其中我们交替地固定 q 和 p,同时优化另一个。
添加偏置
一些电影有偏见,因为它被广泛认为比其他电影更好(或更差),一些用户有偏见,因为他们超级咸,从不给电影评分超过 2 分。这些被称为偏差或截距,它们独立于任何相互作用,使用我们的两个分解矩阵 q 和 p 来解释这些偏差项是不明智的,因此我们将偏差项包含在原始方程中。
新的目标函数如下所示。
就像我们如何在原始函数中添加额外的偏置项一样,我们可以添加额外的项来解决冷启动问题。以及结合用户和项目的时间动态。(甚至自信分数)
遗言
我认为我们可以使用矩阵分解来构建推荐系统是非常酷的。
参考
- (2018).Datajobs.com。检索于 2018 年 11 月 22 日,来自https://data jobs . com/data-science-repo/Recommender-Systems-[网飞]。pdf
- 音乐基因组计划。(2018).En.wikipedia.org。检索于 2018 年 11 月 22 日,来自https://en.wikipedia.org/wiki/Music_Genome_Project
- 使用 Pyspark 对 Movielens 数据集进行简单的矩阵分解示例。(2018).中等。检索于 2018 年 11 月 22 日,来自https://medium . com/@ connectwithgosh/simple-matrix-factorization-example-on-the-movie lens-dataset-using-py spark-9b 7 E3 f 567536
论文摘要:神经常微分方程
NIPS 2018(加拿大蒙特利尔),或者现在被称为 NeurIPS,已经结束了,我想借此机会剖析一下在这个久负盛名的会议上获得最佳论文奖的论文之一。论文名为神经常微分方程 ( arXiv 链接),其作者隶属于著名的多伦多大学矢量研究所。在这篇文章中,我将尝试解释这篇论文的一些主要观点,并讨论它们对深度学习领域未来的潜在影响。由于这篇论文相当先进,涉及到诸如常微分方程 ( ODE )、递归神经网络 ( RNN )或归一化流 ( NF )等概念,如果您不熟悉这些术语,我建议您仔细阅读,因为我不会详细讨论这些术语。不过,我会尽可能直观地解释这篇论文的观点,这样你可能会明白主要概念,而不会过多地涉及技术细节。如果你感兴趣的话,你可以在原文中仔细阅读这些细节。这篇文章被分成多个部分,每个部分解释论文中的一个或多个章节。
从变换序列到神经微分方程
今天,多种神经网络架构,如 RNNs 或残差网络,包含重复的层块,能够保留顺序信息,并通过学习的功能在每一步中改变它。这种网络通常可以用下面的等式来描述
在此, hₜ 是时间步长 t 的“隐藏”信息,f(hₜ,θₜ) 是当前隐藏信息和参数 θₜ 的学习函数。本文提出的中心问题是,我们是否可以通过逐渐减小步长*【t,t+1】*来改善这些网络的当前最先进结果。我们可以将此想象为逐渐增加 RNN 中的评估数或增加残差网络中的残差层数。如果我们这样做,我们将最终得到上述方程的无穷小(微分)版本:
这样的方程被称为常微分方程 (ODE),因为解是一个函数,即函数 h(t) 。换句话说,通过解方程,我们得到了想要的隐藏状态序列。我们将不得不在每次评估中求解这个方程,从初始状态 h₀.开始这样的问题也叫初值问题。
用伴随方法计算微分方程求解器的梯度
数值求解一个常微分方程通常是通过积分来完成的。多年来已经发明了多种积分方法,包括简单的欧拉方法和龙格-库塔方法的高阶变体。然而,所有这些都是计算密集型的。在训练过程中尤其如此,这需要对积分步骤进行区分,以便能够将网络参数 θₜ 的所有梯度相加,从而导致高存储成本。
在本文中,作者提出了一种计算常微分方程梯度的替代方法,即使用庞特里亚金的所谓伴随方法。这种方法通过求解**第二个时间上向后扩展的 ODE 来工作,**可用于所有 ODE 积分器,并且具有较低的内存占用。让我们考虑最小化 ODE 求解器结果的成本函数,即
(很遗憾,作者在本节中用 z(t) 交换了 h(t) ,但不要让自己被这个迷惑了)。在第二步中,使用 ODE 的解的定义,在第三步中,引入 ODESolve 操作作为求解 ODE 的操作符。如前所述,这个运算符依赖于初始状态 z(t₀) ,函数 f ,起始和结束时间 t₀ 和 t₁ 以及搜索到的参数 θ 。伴随方法现在确定损失函数相对于隐藏状态的梯度:
这个量现在跟在增强的颂歌后面
计算梯度 ∂L/∂z(t₀) (上述方程所需的第一梯度)现在可以通过在时间上向后求解扩充的 ODE 来完成。为了完整起见,下面的等式说明了如何计算相对于神经网络函数参数的梯度:
作者提出的整个梯度计算算法在伪代码中如下进行:
如果你对这个复杂计算的数学细节感兴趣,请参考原始论文,甚至是关于伴随方法的原始论文。这篇论文的作者甚至提供了 Python 代码来轻松计算 ode 求解器的导数。
用于监督学习的 ODE 网络
现在我们来看这篇论文最有趣的部分:应用。作者在论文中提到的第一个应用是在监督学习领域,即 MNIST 书面数字分类。目的是表明 ODESolve 方法可以用少得多的参数获得与残差网络相当的性能。本文中用于评估的网络对输入图像进行两次下采样,然后应用 6 个残差块。总而言之,该网络包含大约。0.6M 参数。ODESolve 网络用一个 ODESolve 模块代替了 6 层。此外,作者测试了一个 RK-网络,除了它直接使用龙格-库塔法反向传播误差之外,它是类似的。如上所述,您可以将传统神经网络中的层数与 ODE-Net 中的评估数联系起来。这两个网络的参数数量是 0.22M。重要的结果是,RK-网络和 ODE-网络以大约 1/3 的参数实现了与剩余网络大致相同的性能。另外 ODE-Net 的内存复杂度是常数(对比下图)。
此外,可以调整 ODE 解决方案的精度,以最大限度地提高计算性能。例如,可以高精度地执行训练,而在评估期间降低精度(关于进一步的细节,请参考论文)。
连续正常化流程
因为我怀疑许多读者不会熟悉规范化流程的概念,所以我将在这里提供一个非常简短的介绍。标准化流是分布的可逆变换。它们使人能够通过一系列非线性转换将简单的概率密度转换为复杂的概率密度,就像在神经网络中一样。因此,他们在分配中使用变量交换公式:
其中 q0(z0) 是初始分布, qK(zK) 是变换后的分布,变换 fk,k=0…上述和中的雅可比行列式由此确保分布函数的积分在整个变换中保持为 1。不幸的是,除了一些简单的变换,计算这个行列式的代价相当高。
归一化流量的一个流行应用是变分自动编码器(VAE),它通常假设潜在变量是高斯分布的。这种假设恶化了 VAE 的输出,因为它不允许网络学习期望的分布。通过归一化流量,高斯参数可以在被“解码”之前被转换成各种各样的分布,从而提高 VAE 的生成能力。这篇博文详细解释了标准化流程。
我们现在正在讨论的论文提出了将标准化流扩展到连续域的方法。有趣的是,这简化了归一化常数的计算。如果我们使随机变量连续并依赖于时间,时间动态由函数 f 描述(f 是 Lipschitz 连续的),那么对数概率的变化遵循简单的微分方程
因此,行列式的计算在这里被简单的迹运算所代替。此外,如果我们使用变换的和,那么我们只需要对轨迹求和:
作者还为各种转换引入了门控:
他们称这样的变换总和为连续归一化流 (CNF)。
为了显示 CNF 的有效性,本文测试了概率密度从高斯分布到两种目标分布的转换,如下图所示。
Transformation stages (5–100%) between Gaussian distribution and target distribution using CNF (upper two rows) and NF (bottom row).
通过使用最大似然估计来最大化目标概率分布下的期望值,然后反转模型以从学习的分布中采样,来训练 CNF 和 NF。
通过常微分方程生成时间序列模型
论文中提到的第三个应用,可能是最重要的一个,是通过 ODEs 进行时间序列建模。作者开始这项工作的动机之一是他们对不规则采样数据的兴趣,如医疗记录或网络流量。这种数据的离散化通常是不明确的,导致在一些时间间隔内丢失数据或仅仅是不准确的潜在变量的问题。有一些方法将时间信息连接到 RNN 的输入,但是这些方法并不能从根本上解决当前的问题。
基于 ODESolve 模块的解决方案是连续时间生成模型,其给定初始状态 zₜ₀和观察时间 t0…tN,计算潜在状态 z_t1…z_tN 和输出 x_t1…x_tN:
函数 f (一个神经网络函数)负责计算从当前时间步长开始的任何时间 t 的潜在状态 z 。该模型是一个变分自动编码器,它使用 RNN 对初始潜在状态 zₜ₀中的过去轨迹(下图中的绿色)进行编码。如同所有的变分自动编码器一样,潜在状态分布由此通过分布的参数(在这个例子中是具有平均值μ和标准偏差σ的高斯分布)被捕获。从这个分布中,抽取一个样本并通过 ODESolve。
该架构在双向二维螺旋的合成数据集上进行测试,该数据集在不规则的时间点采样并被高斯噪声破坏。下图定性显示了潜在神经 ODE 模型的卓越建模性能:
结论
在论文中,提出了一种非常有趣和新颖的思考神经网络的方法。这可能是一篇里程碑式的论文,开启了深度学习的新进化。我的希望是,随着时间的推移,越来越多的研究人员将开始从根本上不同的角度思考神经网络,就像这篇论文一样。
这种方法是否真的适用于各种各样的现有模型,是否能被时间证明是有效的,还有待观察。作者确实提到了他们方法的一些局限性:
- 小批量可能是这种方法的一个问题,因为批量处理多个样本需要一次求解一个微分方程组。这可以大大增加所需评估的数量。然而,作者确实提到,即使在整个实验过程中使用了迷你批处理,评估的数量仍然是可控的。
- 只有当网络具有有限的权重并使用 Lipschitz 非线性(例如 tanh 或 relu,而不是阶跃函数)时,ODE 解的唯一性才能得到保证。
- 前向轨迹的可逆性可能会受到由前向 ODE 解算器中的数值误差、反向 ODE 解算器中的数值误差以及由于映射到相同最终状态的多个初始值而导致的信息丢失所引入的不准确性的影响。
作者也提到他们的方法不是唯一的,残差网络作为近似常微分方程解算器的想法已经很老了。此外,存在试图通过神经网络以及高斯过程来学习不同方程的论文。
本文提出的方法的一个重要优点是,在评估和/或训练过程中,人们可以通过影响数值积分的精度来自由选择快速解和精确解之间的平衡。此外,该方法非常普遍适用(仅要求神经网络的非线性是 Lipschitz 连续的),并且可以应用于时间序列建模、监督学习、密度估计或其他顺序过程。
[论文摘要/ NIPS 2017 ]显著性方法的(不)可靠性
GIF from this website
另一篇伟大的论文解释了如何解释神经网络
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
Paper from this website
摘要
许多研究人员正在寻找方法来解释神经网络内部到底发生了什么,显著性方法就是其中之一。然而,事实证明,当解释对无助于模型预测的因素敏感时,这些方法就不那么可靠了。(如简单的常数加法到输入数据中。)并且作者已经发现,不满足输入方差属性的显著性方法会导致误导属性。
简介
多重显著性方法旨在做同样的事情,解释神经网络内部发生了什么。(或推断对所学函数 f(x)的见解)。但是在实践中,它们是以各种不同的方式实现的,并且彼此不重叠。因为没有基本的真实数据,所以很难评估不同的方法,但是许多研究人员开发了一些属性来设置指导线,这些属性包括实现方差和输入方差。
该模型对于输入的恒定偏移是不变的
首先让我们有一个函数 f1(),它执行分类任务,输入值为 x1。
接下来让我们有输入值 x2,其中我们添加一些常数到 x1。
我们可以像上面这样定义 f1()函数。
然后,可以容易地示出函数 f2()接受 x2 的输入值,如果偏移值被相应地设置,则两个函数计算相同的东西,导致每个输入的导数值也相同。(w)。换句话说,f2()的偏置值抵消了变换。作者将使用 CNN 对输入价公理做一些实验。
显著性方法对均值漂移的(不)敏感性
作者考虑了三种显著性方法,并考虑了每种方法的输入方差。(满足方差内移位特性的方法将导致相同的热图。)
- 梯度 →输入的微小变化如何影响输出
- 信号 →哪些输入模式刺激神经元激活
- 归因 →将许多不同的归因观点及其梯度相加
梯度和信号方法满足输入方差
如上所述,当我们考虑基于梯度的方法以及模式网时,我们可以观察到生成的显著性热图彼此相同。(因为我们在技术上考虑的是同一个功能)。
归因方法的敏感性
对于归因方法,作者考虑了三种方法梯度输入(IG),综合梯度(IG)和深度泰勒分解(DTD)。
从上图中,我们可以看到 GI 对均值漂移很敏感,因此不满足输入方差特性,而其他两个方法参考点非常重要。(结果是 GI 失败的原因是由于输入值 x 的乘法,均值漂移继续存在。)
参考点方法的可靠性取决于参考点的选择
如上所述,根据 IG 和 DTD 的参考点,它会产生不同的显著性映射。对于 IG,当我们将参考点设置为由来自输入数据 x 的最小值组成的图像时,我们得到相同的显著热图,因为输入数据和参考点之间的关系很重要。但是,当我们设置一个恒定的基线参考点(如值为零的图像)时,生成的热图会有所不同。与 DTD 类似,当选择零矢量图像时,产生的热图不同,然而,当通过模式属性选择参考点时,输入方差成立。并且模式属性具有约束,因为它考虑了数据内变化的自然方向。
选择合适参考点的重要性
到目前为止,我们已经看到,选择正确的参考点是非常重要的,因为与处理音频或文本数据相比,视觉数据选择合适的参考点更容易。如果我们不能确定参考点选择的含义,我们就不能对这种方法的可靠性做出任何评价。
如上所述,这再次表明,选择正确的参考点可以帮助更好地理解模型正在做什么。
结论
总之,本文作者提出了另一个称为输入方差的公理,其中显著性方法应反映模型对输入变换的敏感性。并且已经表明一些方法不能满足这一特性。
最后的话
非常酷的研究…
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- (2018).Arxiv.org。检索于 2018 年 8 月 1 日,来自https://arxiv.org/pdf/1711.00867.pdf
- Kindermans,p .,Hooker,s .,Adebayo,j .,Alber,m .,Sch:tt,k . & Dé;hne,s .等人(2017 年)。显著方法的(不)可靠性。Arxiv.org。检索于 2018 年 8 月 1 日,来自https://arxiv.org/abs/1711.00867
更快的深度学习:最优 DNN 原语
这是麻省理工学院机器智能社区(MIC)的“ML 开创性论文”系列中的一篇论文。麻省理工学院 MIC 旨在教育整个社区关于机器学习的知识,并降低进入门槛。如需了解更多信息,请访问 https://mitmic.io 或发送电子邮件至【mic-exec@mit.edu】T2。
深度神经网络(DNNs)在越来越广泛的工业应用中提供了无与伦比的准确性和性能,例如图像识别、自然语言处理和自动驾驶汽车控制等其他复杂问题。尽管与旧的机器学习算法相比,dnn 的结果有了很大的改善,但在计算方面要求非常高,并且需要在大规模数据集上进行训练,需要花费大量时间。因此,为加快 DNNs 的训练时间和推理时间(在给定训练模型的情况下,实际进行预测所需的时间)做出了许多努力,这是有意义的。这使我们能够在更短的时间内对更多的数据进行训练,并在功能不太强大的设备(如手机或嵌入式系统)上进行更快的推理。在他们的论文“使用分区布尔二次规划(PBQP)的最优 DNN 图元选择”中,Andrew Anderson 和 David Gregg 采用了一种混合方法来优化 DNN 计算。他们专注于寻找解决 DNN 图元选择问题的解决方案,这可以描述为决定使用哪些算法和库来运行 DNN 的每一层——该问题将在下面详细解释。他们还将问题简化为一个已知的 NP-hard 图问题, PBQP ,并使用现成的 PBQP-solver 来解决它。
在评估结果时,特别强调了卷积运算,这是一种计算极其密集的运算,几乎在所有图像处理 dnn 中都使用,这种网络称为卷积神经网络(CNNs) 。
DNN 原语及其重要性
DNNs 由层的有向图组成,并且数据流发生在这些层之间的有向边上。每一层都处理数据,并由标准的数学运算符组成,如卷积、激活、汇集或全连接层。一层的输出馈入下一层,这对应于数据流。这些层被实现为一组原语例程,其中每个原语都是这些数学运算的优化实现。一个层有许多可能的算法和实现,这就等于说有许多可供使用的原语例程可供选择,包括开源实现和专有库。例如 Winograd 和 FFT 是可以用来实现卷积的两种算法。重要的是要注意,这些原语在不同的场景中有不同的表现,这取决于层的规范。目标是为每一层选择最佳的原语例程,使得整个网络的总运行时间最小化——这个问题被称为最优 DNN 原语选择。
什么是卷积层?
虽然使用的方法是通用的,并且可以很容易地对任何类型的图层进行实施和测试,但评估重点仅放在卷积图层上。这些通常支配运行时间,也用于许多重要的 CNN 图像处理。卷积层的输入通常是一个 张量 ,通常是二维图像的三维或四维表示。例如,对于典型的彩色 2-D 图像的三维表示,前二维通常编码像素的水平和垂直位置,第三维通常存储像素中红色、绿色和蓝色的量。卷积层通过在图像上滑动一系列小的“过滤器”或“内核”来处理这个张量,以执行数学卷积运算。下图显示了一个轮廓,其中大小为 H×W×C 的图像与大小为 k×k×C 的核进行卷积,以获得大小为 H×W 的输出图像(称为“特征图”),因为有 M 个这样的核,所以输出表示为大小为 H×W×M 的张量。多个核在这里非常重要,因为它们可以使网络“学习”不同的特征和模式。例如,一个内核可能试图检测图像中猫的存在,而另一个内核可能学习检测狗。由此产生的张量——带有来自所有内核的输出——然后可以被馈送到 max-pooling 层 中,该层将检测这 M 个模式中的哪一个最重要,例如猫内核是否找到了比狗内核更好的匹配——这实现了高精度的图像分类。
Figure 1: A convolution layer showing an image of size H×W with C channels undergoing convolution with M kernels of size k×k×C.
卷积层中的图元选择和数据格式协议
存在大量不同的卷积原语。直接循环法、 im2、kn2 、 Winograd 和 FFT (使用快速傅立叶变换算法),都是可以用来实现卷积的算法家族。如前所述,每种算法的性能取决于卷积层的参数和规格。例如,直接循环方法在 步进卷积上表现良好,其中内核跳过一些输入像素以给出较小的输出图像,im2 家族在这种情况下也表现良好。然而,直接循环方法通常较慢,im2 算法非常占用内存。Winograd 速度非常快,但不可预测。FFT 也是一个平衡性能的选择,但是对于小内核来说是不好的;尽管具有较低的渐近复杂度,但它具有较大的开销,因此导致较低的复杂度仅在输入较大时有益。其他参数,如通道数量(即上图中的 C 值)也会影响图元的最佳选择。
因为在典型的 CNN 中,每一层的参数变化很大,所以为每一层选择不同的原语是有意义的,以便最小化整个网络上计算的总运行时间。乍一看,这似乎是一个非常容易解决的问题:在实际运行整个网络之前,我们可以简单地尝试每一层上的每个原语,并在一个列表中记录运行时间(让我们将这个列表称为“成本向量”)。对于这个试运行,我们可以只使用随机输入值,因为运行时间并不真正取决于值本身,而只是它们的总数。这实际上是作者们开始做的。
在对运行时间进行采样后,我们可以通过查看哪种算法在试验中表现最佳来为每一层选择最佳算法——问题解决了!该过程如下所示:
Figure 2: A graph showing a 3-layered CNN. The “cost vectors” shown beside each layer represent the costs of primitives A, B, and C for each layer. For example, on layer conv1, primitive A runs with a cost of 8, primitive B with a cost of 6, and C costs 10 — similarly for the other layers.
这里卷积层表示为节点: conv1 、 conv2 和 conv3 。这三个原语是 A、B 和 c。图中显示了每一层的原语成本向量(由试运行确定),我们可以看到,优化整个网络就是选择最低成本原语。在这种情况下,它对应于为 conv1 选择算法 B,为 conv2 选择算法 C,并再次为 conv3 选择算法 B。网络的总成本是每层成本的总和。
然而,这种天真的解决方案遗漏了一个关键的方面。它没有考虑每个原语操作不同*数据格式的数据的事实。*例如,一些原语接受并产生 16 位浮点格式的输出值,而其他原语使用 32 位浮点。有些图元还需要输入图像尺寸的特定排列,CHW(通道×高度×宽度)和 HWC(高度×宽度×通道)是两种不同的数据格式,特定图元可能只能操作其中一种格式。另一个例子是,如果对信号进行操作,数据可以用频域 表示,或者用 时域 表示(这两者只是表示同一信号的不同方式),不同的原语可能只支持其中一种格式。如上图所示,必须考虑到这一点,可能 conv1 使用的数据格式与 conv2 不同,数据需要从 conv1 格式转换为 conv2 格式,然后才能在它们之间传递— 这种转换需要时间。因此,我们需要在优化中考虑数据格式转换的成本。
PBQP
由此产生的优化问题现在不仅考虑了原语的运行时间,还考虑了连续层中使用的原语之间的数据格式转换时间。作者表明,这等价于一个已知的 NP-hard 问题, 【分块布尔二次规划】 。在 PBQP 中,给我们一个图,每个节点必须被分配一个标签,这个标签来自一组给定的代表成本的标签。因此,每个节点都有一个针对所有标签的“成本向量”,这与上图中的问题类似。为节点选择标签的成本会将相应的成本添加到我们目标的总成本中,这是我们希望最小化的成本。但是除了节点的成本之外,每个边也有成本。边的成本既取决于源节点标签的选择,也取决于目标节点标签的选择。因为它依赖于两个连接节点的标签,所以它可以被认为是一个矩阵(因为它由两个标签索引)。下图对此进行了说明:
Figure 3: A graph showing a 3-layered CNN. The cost vectors are also shown for primitives a, b, and c similar to Figure 1*.* The edge cost matrices are also shown, where the row represents the label of the source node, and the columnrepresents the label of the target node. For example, selecting primitive c for conv1 costs 10, and selecting primitive b for conv2 costs 19. But an additional edge cost of 5 also occurs as given by the edge cost matrix.
在上图中我们可以看到, conv1 的最低成本原语是成本为 6 的原语 b ,而 conv2 的最低成本原语是成本为 14 的原语 c 。但是现在我们还必须考虑边成本,并且使用这种分配给出了额外的边成本 5,这是通过适当地索引到边成本矩阵中给出的。因此,实际上为 conv1 选择原语 c 更好,因为它给出的边成本为零。总成本就是所有节点和边成本的总和,这是我们现在想要最小化的目标。
实施和测试
既然我们有了要解决的正确问题,我们就可以实现并测试它了。为此,我们首先需要运行原语的成本,以及数据格式之间转换的成本。通过针对实际大小的随机输入运行每一层的图元来预先计算运行图元的成本,并且这应该是相当准确的,因为层的运行时间取决于输入大小而不是实际值。
数据格式转换成本也可以通过运行转换和采样时间来预先计算,如果无法直接转换,则使用成本最低的转换路径。这意味着,例如,如果数据格式 A 不能转换为数据格式 B。但是 A 可以转换为数据格式 C,而数据格式 C 又可以转换为 B,则使用转换成本的总和(这被建模为所有对最短路径问题,并且容易解决)。
一旦成本向量和矩阵准备就绪,就可以使用现成的 PBQP 求解器来获得要进行基准测试的 DNN 的最佳图元选择。在三个流行的神经网络上测试了性能: AlexNet 、 VGG Model E 和 GoogleNet 。运行时间与只使用单个原语时的性能进行了比较,也与 Caffe (一个流行的深度学习框架)进行了比较。英特尔的 MKL-DNN 库的基准也包括在内,它是一个针对 DNN 原语优化的 JIT 编译器。实验在不同的硬件架构上进行,英特尔 Haswell 的速度结果如下所示(越高越好):
Figure 4. Speedups on Intel Haswell of different algorithms for running various popular DNNs.
我们可以看到,在英特尔 Haswell 上,PBQP 原语赋值在多线程的情况下优于所有其他方法,甚至是英特尔自己的 MKL-DNN 神经网络编译器。在单线程运行的情况下,MKL-DNN 在 AlexNet 和 GoogleNet 网络中的性能稍好,但 PBQP 方法非常接近,仍然优于其他方法。对 VGG 来说,PBQP 方法也优于 MKL-DNN 法。
ARM Cortex 的性能结果如下所示(越高越好):
Figure 5. Speedups on ARM Cortex of different algorithms for running various popular DNNs
这里我们还可以看到,PBQP 分配优于 ARM Cortex-A57 架构上的所有其他网络实现。
讨论和结论
从实验结果可以清楚地看出,PBQP 公式在选择最佳基元来实现 DNN 方面极其有效。存在其他 DNN 优化框架,其中一些使用类似的技术来实现更快的 DNN 计算。也许最快的例子是 NVIDIA 的 cuDNN,它也使用了对于给定的层来说最快的实现/原语。这与 PBQP 求解器形成对比,因为它不考虑边成本,即数据格式转换的时间。 Tensorflow XLA 是另一个框架,它基本上是 DNNs 的提前编译器。它计算跨层转换和数据格式转换的成本,并尝试合并层以避免这些成本,这在某种程度上类似于 PBQP 方法。结果表明,PBQP 方法改进了 DNN 运行时间,因此它可能非常适合于被 DNN 优化框架采用以进行改进。作者在 2018 年代码生成和优化国际研讨会(CGO)上提交了这篇论文,论文中采用的方法使我们能够更快地训练 DNNs,并在越来越多的廉价移动和嵌入式处理器上执行深度学习和推理。
关于作者
阿里·扎塔什(Ali Zartash)是麻省理工学院(MIT)的一名大四学生,也是麻省理工学院机器智能社区(MIC)的成员,该社区是本科生人工智能俱乐部。今年夏天,他在谷歌实习,从事社交排名/推荐系统的数据管道和图形工作,此前他曾在 SpaceX 实习,从事 GPU 负载分配工作。他把空闲时间花在和朋友踢足球上。欲了解更多关于 MIC 的信息,请访问
[论文摘要] pCAMP:机器学习包在边缘上的性能比较
GIF from this website
我个人喜欢 Tensorflow,但是我想知道它与不同框架相比表现如何,特别是在像 Raspberry Pi 3 这样的物联网设备上。
请注意,这篇文章是让我未来的自己回顾和回顾这篇论文上的材料,而不是从头再看一遍。
摘要
本文的主要重点是比较运行在物联网设备上的不同机器学习包的性能。我们要比较的库包括…
1 。tensor flow→tensor flow 是一个用于高性能数值计算的开源软件库。来自谷歌。
②。**Caffe 2→一种全新的轻量级、模块化、可扩展的深度学习框架。来自 FaceBook
3。MXNet→灵活高效的深度学习库。来自阿帕奇
4。py torch→快速、灵活实验的深度学习框架。来自 FaceBook
5。Tensorflow Lite→一款面向移动和嵌入式设备的 tensor flow 轻量级解决方案。来自谷歌
太久没看了(TL;博士)
- 每个指标都没有明显的赢家,每个包都有自己的优势。
- 加载模型所需的时间很长,因此可能有机会优化加载时间。
- 牺牲空间来提高执行效率可能是优化这些包的好方法。
Tensorflow →适用于基于 CPU 的物联网大网络
Caffe 2 →适用于小网络
MXNet →适用于杰特森 TX 2
PyTorch →内存高效
Tensorflow Lite →???
简介
由于更复杂的机器学习模型、更高的处理能力和大数据,基于机器学习的应用程序呈指数级增长。然而,越来越多的计算是在边缘(雾)而不是云中进行的,但是有少量的研究可以比较不同框架的性能。因此,在本文中,作者将使用 Alex Net(大型网络)和 Squeeze Net(小型网络)来查看 MacBook Pro (MacBook)、英特尔的 Fog node(Fog node)、NVIDIA Jetson TX2 (Jetson TX2)、Raspberry Pi 3 Model b+(Raspberry Pi)和华为 Nexus 6P 的性能。完整的硬件和软件表如下所示。
****
相关工作
其他研究人员早在 2016 年就已经在衡量不同图书馆的表现。然而,他们测量的是云平台而不是物联网设备的性能。
实验方法
在这一部分,作者给出了每个框架的简要总结和历史。以及 Alex 网和 Squeeze 网的简单总结和历史。总之,Alex Net 有 61,100,840 个参数和 240MB 大小,而 Squeeze Net 有 1,248,424 个参数和 4.8MB 大小。
此外,作者指出,对于 Tensorflow Lite,他们无法获得官方的 Alex Net 或 Squeeze Net,因此他们使用了可用的 MobileNet 。最后,作者给出了他们如何测量每个指标的细节,他们是。
1.延迟→运行/加载模型的时间。
2。内存足迹→模型占用多少内存。
3。能量→模型需要多少能量。
结果和讨论
除了 Raspberry Pi 和 Nexus 6P,所有指标都在上图中进行了总结。
**树莓 PI (Sqeeuze Net/Caffe 2) →总时间 218.67s .
**Nexus 6P(Mobile Net/tensor flow Lite)→推理时间(加载时间)0.26s
最后,每个指标的所有结果都可以很好地总结如下。
1.延迟 →对于某些包,加载模型然后运行它需要更长的时间。
2.内存 → MXNet,特别是,似乎牺牲空间来提高效率,其他框架可以遵循类似的优化方法。
3.能量 →潜伏期和能量之间似乎存在正相关关系。这意味着模型运行的时间越长,需要的能量就越多。
结论
总之,没有一个框架能够在每个指标上胜过其他框架。然而,似乎每个框架都有改进的空间,例如减少加载模型的时间。
遗言
很想知道 Tensorflow Lite 在 Iphone 上运行如何😂。我预计 Tensorflow 会占用大量内存/电源和所有东西。但我不知道要花这么多钱。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- (2018).Cs.wayne.edu。检索于 2018 年 6 月 12 日,来自http://www.cs.wayne.edu/~weisong/papers/zhang18-pCAMP.pdf
- 树莓 Pi 3 型—树莓 Pi。(2018).树莓派。检索于 2018 年 6 月 13 日,来自https://www . raspberry . org/products/raspberry-pi-3-model-b/
- 张量流。(2018).张量流。检索于 2018 年 6 月 13 日,来自https://www.tensorflow.org/
- 咖啡 2。(2018).咖啡 2。检索于 2018 年 6 月 13 日,来自https://caffe2.ai/
- MXNet:一个可扩展的深度学习框架。(2018).Mxnet.apache.org。检索于 2018 年 6 月 13 日,来自https://mxnet.apache.org/
- PyTorch。(2018).Pytorch.org。检索于 2018 年 6 月 13 日,来自https://pytorch.org/
- TensorFlow Lite 介绍| TensorFlow。(2018).张量流。检索于 2018 年 6 月 13 日,来自https://www.tensorflow.org/mobile/tflite/
- Howard,a .,Zhu,m .,Chen,b .,Kalenichenko,d .,Wang,w .,& Weyand,t .等人(2017 年)。MobileNets:用于移动视觉应用的高效卷积神经网络。Arxiv.org。检索于 2018 年 6 月 13 日,来自 https://arxiv.org/abs/1704.04861
[论文摘要]在使用深度学习模型分析标准结肠镜检查的未改变视频期间,实时区分腺瘤性和增生性小结肠直肠息肉
GIF from this website
同样,越来越多的这些论文显示了深度学习可以为医疗保健行业提供什么。
Paper from this website
摘要
计算机辅助系统有助于以高精度区分小腺瘤和增生性息肉。在本文中,作者展示了一个使用卷积神经网络对息肉进行分类的示例。
关于这个问题已经知道了什么?/有什么新发现?
总的来说,专家取得了良好的结果,但是社区内镜专家未能保持一些有价值的内镜创新(PIVI)指南的保存和整合。人工智能可能会对这些领域有所帮助。本文的作者展示了一个使用案例,其中使用深度学习可以实现实时分类。
简介
在结肠镜检查期间,内窥镜专家做出不同的决定,例如癌症类型的分类和切除或保留的区域。在手术过程中,图像分析可以帮助内窥镜专家。目前,图像分析在精确确定具有最小癌症风险的微小病变的组织学方面取得了成功。(反过来,这也有经济上的好处。).然而,这些方法通常依赖于操作员,因此在某些情况下,社区医生的准确性低于可接受的性能阈值。
为了克服这些问题,已经研究了不同的成本有效的方法。其中一个成果是 NBI 国际结肠直肠内窥镜(NICE)分类系统。这个系统是为了帮助没有丰富经验的内窥镜专家而开发的。但是这种方法不能解决诸如无柄锯齿状息肉(SSPs)的问题。
自动图像分析更近的发展被开发以改进肿瘤检测。传统的图像分析技术依赖于手工制作的特征,并且它们在某些情况下并不健壮。但是深度学习的发展有可能克服这些问题。本文作者利用深度卷积神经网络对不同类型的多边形进行分类。
方法
使用奥林巴斯结肠镜上捕获的 NBI 视频,本文的作者成功地训练了一个深度卷积神经网络。并且所有使用的数据在用于本研究之前都被去识别。
DCNN 的一个优点是,人类不必为模型的成功表现制作手工特征。并且大致的网络架构可以在上面看到。(他们使用 SGD,mini batch 128,以及执行翻转的数据扩充。)最后,息肉分为两类:常规腺瘤或锯齿状病变。
如上所述,关于框架的一个有趣的事实是可信度的概念。其中它表示模型的置信水平。如果可信度低于 50 %,这些预测将被排除在准确性计算之外。所有使用的视频都是 10-20 秒,中间值为 16 秒。
结果
125 个息肉视频被用作测试集,然而在这些数据中,只有 106 个被用于计算模型的准确性,因为它们具有足够高的可信度。
对于 106 个息肉,准确率为 94%,识别腺瘤的灵敏度为 98%,特异性为 83%,阴性预测值为 97%,阳性预测值为 90%。
讨论
结肠直肠癌是美国癌症死亡的第三大原因,结肠镜检查不仅在该疾病的识别中而且在该疾病的治疗中起着关键作用。虽然不是结肠镜检查的所有方面都可以被软件取代,但是息肉的检测和组织学的预测是软件可以发挥作用的两个方面。这篇论文的作者已经表明,使用人工智能来高精度地执行这些任务是可能的。(甚至足以说,该模型比一些社区内窥镜专家表现得更好。).
遗言
尽管本文作者在测量精度时丢弃了一些测试数据,但本文提供了有希望的结果。写得非常好。
参考
- Byrne MF,e. (2018)。在分析标准结肠镜检查的未改变视频期间,腺瘤性和增生性小结肠直肠息肉的实时鉴别… — PubMed — NCBI。Ncbi.nlm.nih.gov。检索于 2018 年 7 月 9 日,来自https://www.ncbi.nlm.nih.gov/pubmed/29066576
【论文摘要】语义图像分割的最新进展
GIF from this website
我想知道更多关于不同的语义分割方法,这篇文章给出了一个很好的概述。
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
摘要
语义分割已经被研究了很长时间,它给医学图像领域以及其他领域带来了巨大的好处。此外,由于深度学习的最新发展,机器学习方法也能够得到应用。本文阐述了传统方法和深度学习方法。
简介
通常分割可以被认为是像素级分类,而不是把整个图像作为一个类来对待,我们要预测每个像素属于哪个类。(即物体检测或定位。).这一过程有很多应用,例如自动驾驶汽车的道路分割,或者该算法可以分割 MRI 扫描的癌症区域的医疗设置。一般来说,这种方法可以分为传统方法和深度学习方法。(由于深度学习,分割精度大大提高了。).
数据集/评估指标
已经有许多数据集用于语义分割和评估。,比如 PASCAL VOC,或者微软 COCO 数据集。(甚至还有城市景观数据集等……).这些数据集主要目标是道路分割、光流估计和 3D 跟踪。图像分割和场景解析的评估包括像素精度、平均精度、并集上的区域交集和频率加权 IU。
传统方法
在深度学习之前,很多方法都包括特征提取。用于执行语义分割的一些特征研究包括,梯度方向直方图(HOG)、尺度不变特征变换(SIFT)和 Harris 角点,仅举几个例子。(还有很多,下面是文章的截屏。)
并且执行分割的方法包括简单的阈值处理。(基本上都有一些截止频率/像素强度。)这种方法在医学图像领域非常有效,其中图像通常是灰度级的。一些非监督方法包括 K 均值聚类,以聚类相似的像素,并且在监督学习的情况下,使用支持向量机。最后,马尔可夫随机网络和条件随机场及其变体也广泛用于分割。
最近 DNN 在分段
不同类型的神经网络,例如 ANN、RNN、CNN、LSTM 或 RBM 都可以用于执行分割。尽管有各种各样的 CNN,但它通常用于涉及图像的任务。此外,全卷积神经网络是分割中最流行的网络结构之一。
另一种流行的网络架构是上/下采样网络,类似于自动编码器。存在跟随有上采样网络的下采样网络。(这个地区最著名的网络之一是 U-Net)。
FCN 联合 CRF 及其他传统方法/扩张卷积
除了全卷积网络之外,还使用了不同的网络架构,包括具有 CRF 的 FCNN 或具有域转移的 RCNN,甚至马尔可夫随机场(MRF)。扩张卷积是在内核中插入 0 以增加感受野的卷积运算。(如上所示)第一种,这种网络被称为扩张残差网络(DRN ),以消除由常规扩张卷积运算产生的伪影。
骨干网/金字塔法细分进展
一般来说,骨干网是指网络的主体部分。在深度学习的初期,许多研究使用 VGG 网络作为它们的基础网络。然而,网络体系结构发展导致了残差网络,这种类型的网络甚至以完全卷积残差网络的形式被应用于语义分割。
除了主干网络的发展,研究人员还研究了不同的策略,其中一种策略包括金字塔网络。其中图像被下采样,直到达到一些期望的停止标准。有两种常见的图像金字塔:高斯金字塔,用于对图像进行下采样;拉普拉斯金字塔,用于从金字塔中较低位置的图像重建上采样图像。在语义分割的背景下,图像及其缩小版本可以用作网络的输入。(如下图)。
另一种金字塔方案是阿特鲁空间金字塔池(扩张卷积金字塔池),其中网络使用扩张卷积运算来缩小给定图像。
结论
总之,本文作者回顾了一些传统的语义分割方法。以及深度学习方法,其中包括…
- 全卷积神经网络
- 向上/向下采样方法
- FCN 加入了通用报告格式
- 扩张卷积
- 脊柱网络的研究进展
- 金字塔网络
- 多级特征和多阶段方法(未涉及)
- 监督/弱监督方法和非监督方法。(未覆盖)
最后的话
这篇论文是对与深度学习相关的不同类型的细分的一个很好的概述。最后,由于我要赶飞机,我没有介绍多级特征和多阶段方法以及监督、弱监督和非监督方法。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请点击这里查看我的网站。
同时,在我的推特这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- 刘,徐,邓,杨,杨(2018)。语义图像分割的最新进展。人工智能评论。doi:10.1007/s 10462–018–9641–3
- 罗斯布洛克(2016 年)。用于对象检测的交集(IoU)——PyImageSearch。PyImageSearch。检索于 2018 年 7 月 2 日,来自https://www . pyimagesearch . com/2016/11/07/intersection-over-union-iou-for-object-detection/
- 托视觉集团,U. (2018)。CRF 作为 RNN 语义图像分割。Robots.ox.ac.uk 于 2018 年 7 月 2 日检索,来自http://www.robots.ox.ac.uk/~szheng/crfasrnndemo
- 帕潘德里欧、陈、墨菲和尤耶(2015 年)。用于语义图像分割的 DCNN 弱监督和半监督学习。Arxiv.org。检索于 2018 年 7 月 2 日,来自https://arxiv.org/abs/1502.02734
[论文摘要] TandemNet:使用诊断报告作为可选语义参考从医学图像中提取知识
GIF from this website
我不知道我从哪里得到这篇论文,但我想读它。
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
摘要
这篇论文太酷了,所以作者决定将诊断报告作为网络的输入,而不是仅仅依赖图像的特征。此外,作者还引入了一个双重注意力模型,最后,他们能够创建一个模型,其中有效地整合了来自多模态的知识,并产生了高性能。
简介
当我们想到一个人如何成为一名成功的医生时,不仅他们从 CT 或 MRI 扫描中学习,而且其他资深医生也解释了每个图像中发生的事情。受这种想法的启发,作者决定用不同形式的输入制作一个分类模型。网络架构如下所示。
这个网络要么只接受图像作为输入,要么接受一对图像和文本。它还可以生成医疗报告。然而,我有一个问题,如果医疗记录已经告诉网络诊断是什么,想要有一个 CNN 的点?
方法
在本节中,作者首先描述了网络架构。对于 CNN,他们决定用 Res Wide architecture,对于语言模型,他们决定用 LSTM。此外,他们制作了一个新颖的双注意模型,其中他们不仅接收图像数据(用 V 表示),还接收文本数据(用 S 表示)
此外,作者还介绍了两种推广网络的方法。
1)视觉跳过连接 →其中图像特征像 res net 架构一样跳过连接以增加梯度流
2)随机模态自适应 →其中文本数据被丢弃,使得网络不必依赖于文本数据。
实验
在这里,作者描述了他们如何获得数据,他们总共能够获得 1000,5005003 张图像,病理学家为每张图像提供了一段关于核多形性、细胞拥挤、细胞极性、有丝分裂和核仁突出的内容。接下来,他们描述了如何使用 Torch7 来实现串联网络。(使用 SGD)。
如上所述,我们可以观察到串联网络比其他比较网络具有更高的准确性。(以相当大的幅度。)
上面没有提到的事实是,他们有一个 LSTM 的辍学层,他们发现了一个与辍学率和使用文本数据相反的模式。随着辍学率的增加,模型使用的文本数据越来越少,反之亦然。
此外,当他们可视化每个数据点的隐藏表示时,他们发现使用文本数据可以更好地分布聚类。(t-SNE)
他们将视觉注意力掩模放大到与原始图像相同的尺寸,并将其重叠。之后,他们与病理学家认为最重要的位置进行了比较,并能够发现两个区域之间的高度相关性。当模型同时使用文本和图像时,相关性增加。
最后,使用来自“用于生成图像描述的深度视觉语义排列”的知识,他们也能够生成医疗报告,并且看起来做得很好。
结论
总之,本文作者介绍了一种新颖的网络,称为 TandemNet,它以文本和图像作为输入来执行分类,并获得了较好的结果。
遗言
我在医疗领域看到的最有趣的网络架构之一。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t。
参考
- 张,张,杨(2017)。TandemNet:使用诊断报告作为可选的语义参考从医学图像中提取知识。Arxiv.org。检索于 2018 年 6 月 24 日,来自https://arxiv.org/abs/1708.03070
- 火炬/火炬 7。(2018).GitHub。检索于 2018 年 6 月 24 日,来自https://github.com/torch/torch7
- (2018).Cs.stanford.edu。检索于 2018 年 6 月 24 日,来自https://cs.stanford.edu/people/karpathy/cvpr2015.pdf
【论文摘要】使用深度学习的图像分类中数据增强的有效性
Image from this website
我想知道更多关于数据扩充在多大程度上有助于提高测试/验证数据的准确性。我发现了这篇很棒的论文,想做一个论文总结。
**请注意这篇帖子是为了我未来的自己复习这篇论文上的材料,而不是从头再看一遍。
摘要
本文旨在通过使用传统的数据增强技术(如裁剪、旋转)或使用 GAN ( CycleGAN )来研究数据增强的有效性。
简介
在本节中,作者指出神经网络可以从大量数据中受益匪浅。他们举了一个例子来说明 Google corpus 的发布是如何让文本到语音以及基于文本的模型受益的。作者提出的一个有趣的观点是,对于大量的非结构化数据,任务变成了寻找模式。然而,我们可以采用另一种方法,其中我们有一小组结构化数据并执行增强。最后,作者介绍了他们将要进行实验的数据集,即 MNIST 和微小图像网数据
相关工作
在本节中,作者回顾了一些用于防止过度拟合的流行方法。方法,如增加一个正则项,辍学,批量规范化和转移学习介绍。此外,作者给出了数据增强技术的简单描述,如几何或颜色增强。(大多是仿射变换。).以及如何训练 GAN 的基本描述。
方法
这就是超级有趣的地方,作者将采取两种不同的方法。
a)在训练分类器之前增加数据(使用 GAN 或仿射)
b)通过使用分类器网络的前置神经网络实时增加数据。(基本上,他们正在创建一个从扩充网络到分类器网络的数据管道)
作者将使用传统转换或 CycleGAN(风格转换)来执行数据扩充。(如下图)。
最后,对于增强网络,他们创建了一个小型的 5 CNN 网络,使用用于训练网络的各种损失函数来执行增强。(1.内容丢失,2。风格丧失,3。不亏)
数据集和特征
作者用三个数据集进行了实验,其中两个数据集来自微图像网,第三个数据集来自 MNIST 数据集。第一数据集仅由狗/猫图像组成,第二数据集由狗/金鱼的图像组成。
实验
在这个实验中使用了两个网络,首先是分类网络(SmallNet)和增强网络(Augmentation Network)。两个网络网络架构如下所示。
增强网络的输入是通过连接来自相同类别的两个图像(在它们的通道维度上)来创建附加图像。(这是数据扩充部分。)增强网络仅在训练期间使用,而不在测试期间使用,整个过程如下所示。
最后要考虑的是损失函数,在图像被放大后,作者介绍了三种损失函数。(实际上是两个,因为最终损失函数根本不是损失函数。)
第一个损失是增强图像和目标图像之间的 L2 损失,其中 D 项是增强图像和目标图像的长度
第二种损失是增强图像和目标图像之间的 Gram 矩阵的 L2 损失函数。如上所述,第三损失函数没有损失函数。
结果
对于所有数据集,他们进行了不同类型的增强,并得到了以下结果。
乍一看,我们可以假设无损失功能的神经增强与任何其他不同的方法相比表现最佳。(控制方法是当它们将相同的图像提供给增强网络时。)下面可以看到增强网络生成的一些图像。
作者表示,增强网络似乎从两幅图像中提取了一些关键特征,同时平滑了背景像素。
结论和未来工作
作者指出,使用更复杂的网络来执行分类和扩充是值得的。且还陈述了传统图像增强方法本身是有效的,同时与 GAN 的或神经增强相比消耗更少的时间。
最后的话
这确实是一项有趣的工作,但是在这一点上,我看不到使用 GAN/神经增强来执行数据增强的巨大好处。但是这种方法显示了许多有希望的迹象。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- 朱,j .,帕克,t .,伊索拉,p .,,埃夫罗斯,A. (2017)。使用循环一致对抗网络的不成对图像到图像翻译。Arxiv.org。检索于 2018 年 5 月 21 日,来自https://arxiv.org/abs/1703.10593
- 佩雷斯,l .,,王,J. (2017)。使用深度学习的图像分类中数据扩充的有效性。Arxiv.org。检索于 2018 年 5 月 21 日,来自https://arxiv.org/abs/1712.04621
- MNIST 手写数字数据库,Yann LeCun,Corinna Cortes 和 Chris Burges。(2018).Yann.lecun.com。检索于 2018 年 5 月 21 日,来自http://yann.lecun.com/exdb/mnist/
- 微型图像网络视觉识别挑战。(2018).Tiny-imagenet.herokuapp.com。检索于 2018 年 5 月 21 日,来自https://tiny-imagenet.herokuapp.com/
- 格拉米矩阵。(2018).En.wikipedia.org。检索于 2018 年 5 月 21 日,来自https://en.wikipedia.org/wiki/Gramian_matrix
- 仿射变换。(2018).Mathworks.com。检索于 2018 年 5 月 21 日,来自https://www . mathworks . com/discovery/affine-transformation . html
[论文摘要]桑代克的困惑盒和起源行为的实验分析
GIF from this website
我记不清我是怎么拿到这份文件的,但我想读它。
请注意,这篇帖子是为了我未来的自己复习这篇论文上的材料,而不是从头再看一遍。还要注意,我可能没有足够的领域经验来完全理解这篇文章。
Paper from this website
摘要
当桑代克在 1898 年提交他的论文时,它标志着行为实验分析领域的开始。那篇论文似乎对行为的实证科学产生了巨大的影响。
简介
1898 年" 动物智力:动物联想过程的实验研究 "由桑代克出版。(他只有 23 岁。).尽管当时很少有可信的研究人员对这些经历提出批评,但这篇论文在心理学领域产生了巨大的影响。(我感觉到它在整个科学领域产生了巨大的影响,因为它改变了我们对动物和人类学习的看法。)
实验
桑代克经验的一般方法是把饥饿的动物放在围栏里,它们可以通过一些简单的行为逃离。总之,桑代克把食物放在关动物的笼子外面,并记录下动物逃出笼子的时间。他反复重复了这个实验,并记录了动物逃跑所需的变化。(最著名的实验是拼图盒中的猫实验。).有 15 个盒子,都是木头做的,每个盒子都有一个门,猫可以通过触发某种机制打开门。(例如,拉动悬挂在箱底上方六英寸处的线圈(见图 1)。).
在每个盒子中,盒子 k 出现在桑代克的论文中,它需要三种不同的反应。(踩下踏板,拉动绳子,推开酒吧门。)关于放在这些盒子里的猫,有一点需要注意,那就是它们通常更专注于逃离盒子,而不是把注意力放在笼子外面的食物上。起初,猫的行为似乎是随机的,它无论如何都要挣扎着从笼子里出来,然而,如果猫一次又一次地被关在笼子里。慢慢地,猫的行为改变了,它变得更有意识,表现出更有效的行为。
如上所述,桑代克记录了猫在多次重复的实验中逃脱所需的时间。我们可以观察到所需时间稳步减少。(这是针对简单的盒子情况)。但是当我们绘制盒子 K 所需的时间时,它看起来像下面这样。
我们可以观察到它更慢,并显示出更不稳定的进展迹象。桑代克不仅对逃跑的时间感兴趣,还对猫学习进步的速度感兴趣。(我觉得这可以是曲线的导数。).当在狗/小鸡身上进行同样的实验时,桑代克能够得到类似的结果。
在其他实验中,桑代克直接把动物从笼子里拿出来,例如,当小鸡梳理自己的羽毛时,或者当猫抓痒时。然而,这些实验通常产生更大的性能可变性和更浅的时间曲线,而不是当逃生手段涉及操纵外壳的某个部分时。他还做了泛化实验,从不同的盒子里学到的知识可以应用到另一个盒子里。
理论
在桑代克的时代,大多数人认为动物通过想法的联想来学习,这意味着它们以某种原始的方式理解事件之间的逻辑关系,并使用这些想法来推理解决问题。然而,桑代克对这一观点提出了质疑,因为没有确凿的证据表明动物通过推理理解或学习。首先,他说被关在笼子里的猫的行为是随机的,而不是系统的;第二,动物的行为是渐进的,而不是突然的;第三,动物没有表现出理解行为和结果之间关系的迹象;第四,动物只有在自己执行行为时才学会。
总之,桑代克证明了动物的一般学习行为是尝试和成功,而不是逻辑推理。
评估论文
桑代克的工作是例外的,因为他用重复的实验观察代替了孤立的轶事报道;内省与系统描述;和数字数据的主观印象。(与强化学习领域相关的是,桑代克认识到了灭绝、泛化、辨别和反应链。)
相关视频
Video from Geert Stienissen
最后的话
非常奇怪,在强化学习中,一个智能体学习的行为与实验中的猫相似…
参考
- 吉斯,P. (1999 年)。桑代克的难题箱和行为实验分析的起源。行为实验分析杂志,72(3),433–440 页。doi:1901 年 10 月 10 日
- 吉尔特·斯蒂恩森。(2018).YouTube。检索于 2018 年 7 月 13 日,来自https://www.youtube.com/channel/UC9N3210QbLWZzhFwwDkyEqw
[论文摘要]理解训练深度前馈神经网络的困难
GIF from this website
这是机器学习(ML)社区的另一篇著名论文,我想说这是每个 ML 研究人员需要阅读的基础论文之一。
请注意,这篇帖子是为了我未来的自己回顾和复习这篇论文上的材料,而不是从头再看一遍论文。
摘要
主要思想是,较深的网络比浅的网络具有更好的性能。然而,使用特殊的初始化方法而不是随机选择的值(标准初始化方法)来训练更深的网络。本文调查了为什么会发生这种情况的原因,并研究了不同的激活功能如何影响整个训练过程。
深度神经网络
作者已经声明,新的初始化方法以及训练方法优于更传统的初始化和训练方法。并给出了一个非常有趣的例子,其中无监督的预训练模型可以充当正则化器,因为它在更好的位置初始化参数。
最后,作者指出,本文将通过跨层和跨训练迭代监控多层神经网络的激活和梯度来研究多层神经网络。(查看哪个隐藏的神经元饱和)
实验设置和数据集(无限/有限)
作者介绍了他们将在这个实验中使用的数据集。一个是合成图像(它们可以根据需要生成任意多的图像,因此是无限的),另一个是著名的 MNIST 数据集、 CIFAR 10 数据集和小图像数据集 t。最后,作者讨论了他们将要使用的网络架构、成本函数、激活函数。这里需要注意的一件有趣的事情是使用了软签名激活功能。(我以前从未想过这个问题。)
训练期间激活功能和饱和度的影响(Sigmoid)
对于每个激活函数,有两件事我们需要小心,那就是 1)激活函数的过度饱和,它不会传递梯度,2)过度线性的单位,它不会计算一些有趣的东西。众所周知,Sigmoid 激活函数会减慢学习速度,因为它们的平均值不为零。在作者的实验中也可以看到这种行为。
如上图,训练开始后第四层很快饱和。并且由于这一事实,梯度不能传递到更早的层中,使得训练更加困难。最终,该层能够脱离饱和区域,然而这仅发生在 100 个时期之后。
训练期间激活函数和饱和度的影响(Tanh)
由于围绕零的对称性,tanh()激活函数不会遇到 sigmoid 遇到的相同问题。然而,作者进行的实验中,他们遇到了一种奇怪的现象,其中各层开始按顺序饱和。为什么会发生这种情况仍然是个谜。
训练期间激活功能和饱和度的影响(软设计)
如上所述,对于软符号激活函数,我们可以观察到饱和不会像 tanh 或 sigmoid 那样戏剧性地发生。
此外,当我们绘制激活值的直方图时,我们可以很快看到 tanh 激活在梯度不会流动的-1 和 1 区域中有很多值。但是对于软符号,它们中大多数在我们可以观察到更流畅的梯度流的区域之间,因此训练更好。
成本函数的效果
在这里,作者强调了一个事实,即对于分类任务,使用逻辑回归或条件对数似然成本函数结合 softmax 输出更好。我从来不知道这一点,但事实证明,许多研究人员在分类任务中使用了二次成本函数。(至少在过去是这样)
初始化时的梯度
蓝框 →标准初始化方法
橙框 →规格化初始化方法
在本节中,作者介绍了主要称为规范化初始化的新型初始化方法,并展示了这种新型初始化方法的有效性。
如上所述,当我们比较常规初始化方法(见顶部)时,我们可以观察到每个层的权重值非常不同,而在归一化初始化方法中,每个层的权重值相似。
类似的行为在训练中也有发生。当作者可视化梯度(使用 Tanh 激活函数)时,他们能够观察到这样的事实,即对于标准初始化方法,每层的梯度显著不同,而在归一化初始化方法中,每层的梯度彼此相似。并且作者已经假设不同层的非常不同幅度的梯度可能会导致不适和较慢的训练。
误差曲线和结论
作者
1 得出了几个结论。使用标准初始化
2 时,Sigmoid/Tanh 性能不佳。软签名网络对初始化方法更鲁棒。
3。Tanh 网络可以从规范化的 init 中受益匪浅。
4。这些实验中的许多观察结果还没有得到详细的解释。
最后的话
除了信息量大之外,这篇论文写得非常好。因为一个不说英语的人也能明白。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
与此同时,请在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t
参考
- x .格洛特和 y .本吉奥(2010 年)。理解训练深度前馈神经网络的困难。PMLR。检索于 2018 年 5 月 28 日,来自http://proceedings.mlr.press/v9/glorot10a.html
- MNIST 手写数字数据库,Yann LeCun,Corinna Cortes 和 Chris Burges。(2018).Yann.lecun.com。检索于 2018 年 5 月 28 日,来自http://yann.lecun.com/exdb/mnist/
- CIFAR-10 和 CIFAR-100 数据集。(2018).Cs.toronto.edu。检索于 2018 年 5 月 28 日,来自https://www.cs.toronto.edu/~kriz/cifar.html
- 微型图像网络视觉识别挑战。(2018).Tiny-imagenet.herokuapp.com。检索于 2018 年 5 月 28 日,来自 https://tiny-imagenet.herokuapp.com/
- 作为神经网络激活函数的软设计。(2017).赛菲克·伊尔金·塞伦吉尔。检索于 2018 年 5 月 28 日,来自https://sefiks . com/2017/11/10/soft sign-as-a-neural-networks-activation-function/
- 反向传播?,W. (2018)。为什么非零中心激活函数是反向传播中的一个问题?。交叉验证。检索于 2018 年 5 月 28 日,来自https://stats . stack exchange . com/questions/237169/why-are-non-zero-centered-activation-functions-a-problem-in-back propagation
- 损失函数。(2018).En.wikipedia.org。检索于 2018 年 5 月 28 日,来自https://en . Wikipedia . org/wiki/Loss _ function # Quadratic _ Loss _ function
【论文摘要】用于聚类分析的无监督深度嵌入
Photo by Alexandru Acea on Unsplash
请注意,这篇帖子是为了我未来的自己复习这篇论文上的材料。
Paper from this website
摘要
聚类是一种广泛应用于许多数据相关领域的技术,然而关于聚类的学习表示的研究却很有限。本文的作者提出了一种神经网络,其中同时学习特征表示和执行聚类。
简介
聚类中最重要的一个方面是测量距离的方法。(或相异)。对于 k-means,我们使用点之间的欧几里德距离。然而,另一个重要的方面是执行这些测量的特征空间。原始像素空间中的 K-means 聚类是无效的,因此作者想要回答这个问题:我们可以使用数据驱动的方法来联合求解特征空间和聚类成员吗?
相关工作
聚类已经在许多不同的名称下被研究,例如特征选择、距离函数、分组方法等……并且存在流行的方法,例如 k 均值聚类。最近谱聚类和它的方差得到了普及,因为它们不仅更灵活,而且通常比 k 均值表现得更好。然而,他们的方法有一个缺点,即用户需要大量的内存和计算能力。受 t-sne 方法的启发,作者提出了一种方法,其中他们定义了基于质心的概率分布,并最小化其与辅助目标分布的 KL 散度,以同时改善聚类分配和特征表示。
深度嵌入聚类
作者不是直接在数据空间 X 上执行聚类,而是首先执行到不同空间 Z 的非线性映射(并且大多数情况下 Z 小于原始空间 X)。非线性函数由θ参数化。并且作者的方法具有两个阶段,1)利用深度自动编码器的初始化阶段,2)参数优化(即,聚类),其中他们在计算辅助目标分布和最小化对其的 KL 发散之间迭代。
KL 散度聚类
给定非线性映射的初始估计,所提出的算法做两件事,1)计算嵌入点和聚类质心之间的软分配,2)更新深度映射 f(θ)并通过使用辅助目标分布从当前高置信度分配中学习来改进聚类质心。
按照 t-sne 方法,嵌入点 z 和质心 μ 之间的相似性如上所示计算。并且参数α被设置为 1。
然后使用 KL 散度损失函数,他们试图匹配分布。
p 分布用上面的等式表示。最后,反向传播的数学可以在下面看到。
参数初始化
作者初始化来自预训练去噪自动编码器的权重,(逐层预训练)并且网络架构可以在下面看到。(ReLu 激活功能)。
整个过程的视觉可以在下面看到。
实验
如上所述,作者在两个图像数据集和一个文本数据集上测试了他们的算法。
如上所述,当使用无监督聚类准确度(ACC)时,我们可以观察到作者的方法优于许多其他现有技术方法。
如上所述,作者显示了来自 MNIST 和 STL 中每个聚类的 10 个得分最高的图像,每行对应一个聚类,图像根据它们到聚类中心的距离从左到右排序。我们可以看到,对于 MNIST 数字 9 和 4 被聚类在一起,而对于 STL 数据集,聚类结果对于飞机、汽车和卡车是最好的。
讨论
使用 t-sne,作者可视化了潜在向量 z 的聚类如何随时间变化,如上所述,随着历元的增加,我们可以看到聚类之间的边界线变得更加清晰。
此外,当作者绘制梯度幅度与软赋值 q 的关系图时,他们发现越靠近质心(大 q)的数据点对梯度的贡献越大。
为了查看自动编码器初始化策略的效果,作者还将自动编码器用于其他方法。然而,如上所述,作者的方法仍然能够胜过其他方法。(作者又做了两个关于不平衡数据和聚类数的实验。)
结论
本文提出了一种算法,在该算法中,通过利用自训练目标分布迭代地优化基于 KL 散度的聚类目标来执行对一组数据点的聚类。作者的方法不仅优于许多其他现有技术的方法,而且对超参数设置更加鲁棒。
遗言
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- 谢,吉希克,,(2015)。用于聚类分析的无监督深度嵌入。Arxiv.org。检索于 2018 年 9 月 12 日,来自https://arxiv.org/abs/1511.06335
【论文摘要】递归神经网络(RNNs)在图像字幕生成器中的作用是什么?
GIF from this website
我发现了一篇关于图像标题生成任务的有趣论文。
请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。
摘要
在大多数图像字幕生成的文献中,许多研究者将 RNN 视为系统的生成器部分。然而,在整个系统中使用 RNN 还有其他方法。一种方法是使用 RNN 作为先前生成的单词的编码器,并在模型的最后阶段将编码的表示与图像合并。这篇论文的作者发现,使用 RNN 作为编码器实际上会给出更好的结果。
简介
大多数字幕生成任务集中于具体的概念描述生成,即严格描述图像中内容的字幕。(然而,目前正在进行一些研究以超越这一点,例如叙事生成和视觉问答。).自然语言生成主要有三种方法。
- 首先依赖计算机视觉任务的系统,例如物体检测或图像分类。以及使用编码的图像特征作为 NLG 阶段的输入。
- 将字幕生成任务视为检索问题的系统,其中许多系统依赖于神经模型来处理图像数据和文本数据。
- 系统,由神经网络组成,(我猜这个系统和第一个系统的主要区别是使用了多少神经网络。),并且这些系统通常具有 CNN 来编码图像和 RNN 来生成与该图像相关的字幕。
本文主要讨论第三种方法,大多数研究人员将 RNN 视为生成部分,但事实并非总是如此。如上所述,在 a)中,RNN 看到图像和单词,因此它充当生成器,然而在 b)中,RNN 只看到单词而不是图像,因此仅充当语言特征的编码器。本文调查了这两种体系结构之间的性能,看看哪一种更好,通过作者的实验,他们发现体系结构 b)提供了更好的性能。
背景:神经字幕生成架构
如上所述,典型地,RNN 接收开始符号,并将语言特征传递给 FNN,该开始一个字一个字地生成,直到遇到结束符号。实现这一点的一种方法是给 RNN 提供图像和语言数据,本文作者称之为注入法。另一种方法是仅将 RNN 视为语言模型,如图 1 中的 b)所示。这两种架构都在研究社区中使用。(另一件要注意的事情是,这两个模型都与注意机制兼容。)
注入模型和合并模型之间区别在于,在注入模型中,RNN 负责图像条件语言生成,而在合并模型中,负责编码语言表示。这两种型号在 RNN 还有一些额外的差异,例如重量的数量。
实验
对于数据集,作者选择使用闪烁数据集,并且在这个实验中测试了如上所示的两种不同的网络架构。为了保持公平和简单,作者只对两个网络使用了基本架构。Adam 用作优化器,他们使用 50 的小批量、Xavier 初始化,同时使用交叉熵和作为成本函数。最后他们用 BLEU,METEOR,CIDEr 和 ROUGE-L 来衡量网络的性能。
结果
如上所示,作者对每个模型进行了三次训练,并记录了平均分数。除了 ROUGEL 和 BLEU 分数,我们可以观察到合并架构通常比注入架构表现更好的事实。作者在这次实验后发现了一个有趣的事实,即该模型对 Flicker8K 数据集给出了非常好的结果,这可能意味着数据集本身包含更少的变化,使任务变得更容易。还发现合并模型具有更高的性能与模型大小的比率,并且更有效地利用有限的资源。
讨论
当 RNN 的作用是为给定的图像生成标题时,很自然地认为将图像作为输入是非常有益的,然而,实验结果显示了其他方式。这可能发生的一个原因是由于注入架构的任务的复杂性增加。在该体系结构中,单词和图像都被提供给网络,使得编码任务更加复杂,而在合并体系结构中,RNN 只需要对先前给定的单词进行编码。
结论
总之,本文提出了两种不同的网络架构来执行图像字幕任务。在那两个不同的网络中,RNN 扮演着不同的角色,在第一个网络中,RNN 被赋予了既有先前生成的词又有完整的形象。而在第二种情况下,RNN 充当语言特征编码器,只能访问前面的单词。令人惊讶的是,一般来说,对于图像字幕任务,最好有一个只执行单词编码的 RNN。简而言之,生成任务,涉及序列它是一个更好的想法,有一个单独的网络来编码每个输入数据,而不是把一切交给 RNN。
未来工作
尽管很明显,合并模型的性能比注入模型好得多,但结果并不完全一致。作者正在将这个实验扩展到更大的 MSCOCO 数据集。要问的其他问题是,这种方法对机器翻译任务是否也有类似的影响。合并模式的另一个优点是迁移学习更容易。
最后的话
这是一个有趣领域的非常有趣的工作。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t。
参考
- (2018).Aclweb.org。检索于 2018 年 7 月 7 日,来自http://www.aclweb.org/anthology/W17-3506
- (2018).Nlp.cs.illinois.edu。检索于 2018 年 7 月 7 日,来自http://NLP . cs . Illinois . edu/HockenmaierGroup/8k-pictures . html
论文 101——人工智能如何学会在黑暗中看东西?
大家好,我是尼尚克,欢迎来到论文 101 ,在这个系列中,我们将讨论机器学习和人工智能领域正在进行的令人兴奋的新研究!
我要感谢 两分钟论文 和 Károly Zsolnai-Fehér 通过他们的 YouTube 频道向我介绍了这篇论文。
什么鬼东西?
在智能手机相机时代,弱光摄影是必备的。所有旗舰手机都支持低光摄影,但正如你一定注意到的那样,结果并不那么好。
这是因为他们大多使用传统的去噪和去模糊技术,这些技术可以有效地去除一些噪声,但在黑暗等极端条件下却失败了,这是一个很大的挑战。
本文是应对这一挑战的解决方案。
计算机视觉是人工智能中的一个领域,它围绕着获取视觉输入,或者理解接收到的输入,或者以某种方式操纵给定的输入以获得期望的输出。我们在这里关注的论文是关于第二个用例的。
在他们的论文**学习在黑暗中看东西中,研究人员陈晨**(UIUC)陈奇峰(英特尔实验室)贾旭(英特尔实验室)和弗拉德伦·科尔顿(英特尔实验室)提出了一种模型,它可以在几乎相当于黑暗的极低光照条件下使用一种新的图像处理管道使用****
结果令人震惊!
如果你用没有低光摄影(低 ISO)的相机拍照,它看起来会像这样-
如果你用旗舰智能手机中的低光相机点击同一张照片,结果会如下所示。请注意,由于 BM3D 和较低的 ISO 等缩放滤镜,图片有多粗糙。
Scaling + BM3D Denoising
现在,全卷积网络所做的是获取第一幅图像,并对其进行处理,以获得下图(是的!我没开玩笑。)
Image After Processing Through CNN
等等,什么!
这里的模型使用端到端训练的全卷积网络,该网络利用原始短曝光夜间图像的数据集,以及相应的长曝光参考图像。与传统的去噪和去模糊技术相比,这使得从像夜间摄影这样的极端场景中获得结果非常容易和有效。
CNN 是怎么训练出来的?
CNN 在两组图像上进行训练。
- 作为输入的昏暗(几乎黑暗)场景或短曝光图片。
- 对应的正常照明场景或与目标相同场景的长曝光图片。
在包含 5094 个原始短曝光图像及其对应的长曝光图像的数据集上训练神经网络。
因此,如果你想训练网络,你必须首先点击正常照明条件下的照片,该照片将被用作目标变量,以获得网络的误差。
接下来,你将不得不点击同一场景的低曝光照片,使它看起来很暗。这将作为训练时网络的输入。
这两张照片的对将为网络产生(输入、输出)对,在此基础上它将被训练用于弱光测试图像。
FCN Pipeline
训练是使用 L1 损失和一个 Adam 优化器进行的,它给出了非常高质量的结果,使模型迄今为止最有效!
有多好?
该模型使传统的去模糊和去噪方法相形见绌。下面是与传统 BM3D 去噪的对比
Image Using Traditional Scaling
Image Using Scaling + BM3D Denoising
Image After Processing Through CNN
你可以立即注意到不同之处。
如果我们使用不同的参数(如曝光和照明)将 CNN 的性能与旗舰手机相机进行比较,结果可能会让你大吃一惊!
让我们考虑一个场景,在一个黑暗的房间里点燃 8 支蜡烛,通过不同的相机观察人体模型照片的变化,因为蜡烛的数量每次减半。
8 Candles
4 Candles
请注意,与索尼 a7S 相比,iPhone X 和谷歌 Pixel 2 的照片质量有所下降。这是因为一方面,索尼相机比两种移动相机具有更好的 ISO,移动相机使用传统的去模糊和去噪技术来从原始数据中获得低光照片。
2 Candles
1 Candle
现在,照片在两个智能手机相机中都几乎是黑暗的,这是他们在黑暗等极端条件下失败的结论。
然而,索尼相机上的照片仍然很清晰,因为正如你可能已经注意到的那样,它巧妙地将曝光时间从 0.8 秒改为 1.6 秒,允许更多的光线进入,从而提供更好的照片。
这对于智能手机相机来说是不切实际的,因为它会产生模糊的图像,所以只能在昂贵的高端相机上实现,这些相机具有更好的反射镜头和高效的传感器。
但是,让我们看看如果我们将曝光时间减少到 1/30 秒会发生什么,也就是说,相机在极低的光线和低曝光时间下表现如何。
1 Candle — Low Exposure
如你所见,在这个阶段,所有的摄像机都失灵了,我们看到的是一片漆黑。这是因为两个不同的原因-
- 在移动相机中,这种情况已经发生,因为他们使用传统的去模糊和去噪技术,如 BM3D 去噪,当光线量非常少并且没有任何作用时,这些技术就会失败。
- 在索尼相机中,这是因为曝光时间更短,所以允许进入相机的光量更少,因此图像更暗。
但是坚持住。我们能做些什么,在 1/30 秒的曝光时间和极低光线的条件下获得更好的图像(<0.1 lux)?
Be ready to get amazed as 本文已经做到了我们想要的!
如果将上面 1 支蜡烛、低曝光的图像(照片最暗的图像)中的原始传感器数据输入全卷积网络,我们将得到如下所示的输出!
What! Are You Kidding Me!
惊讶吗?我也是。
我希望这项技术将很快在智能手机相机中实现,你将开始享受机器学习所提供的极弱光摄影!
这就是机器学习和神经网络的力量。
正是这些应用激励越来越多的人研究机器学习和神经网络。这就是论文 101 产生的确切原因!
欢迎在评论中发表你对这篇论文的看法。要了解更多关于这个过程的信息,你可以访问报纸的网站。
另外,欢迎在评论中对论文 101 提出建议和赞赏。
好了,这星期就这样,下次再见!
再见!
如何使用 Paperspace 来训练你的深层神经网络
计算资源是深度学习应用的主要瓶颈之一。这不仅适用于业务用例,也适用于自学。GPU 是一项昂贵的投资,尤其是当你只在某些时候需要它们的时候。云服务为这个问题提供了解决方案:只在你需要的时候租用资源。这篇博文向你展示了如何开始使用这些服务中最用户友好的:Paperspace。
**免责声明:**我没有从 Paperspace 获得任何形式的赞助或报酬。当我在 fast.ai 上开始为程序员开设 深度学习 课程时,我偶然发现了他们,并一直呆在那里。我还决定省去推荐链接,以保持分离的干净。
云服务提供商有很多,Azure、AWS 和 Google Cloud 是其中的三大领导者。那么为什么要使用 Paperspace 呢?我更喜欢它们,因为它们在机器学习方面有清晰和专注的用户体验。特别是对于三大市场领导者来说,机器学习是复杂机器的一个齿轮,涵盖了人们可以从云服务中期望的一切。这种复杂程度符合拥有建立和维护所有依赖关系的资源的公司和其他组织的需要。然而,Paperspace 在运行所需的时间上击败了巨头。我还发现监控我的账单更容易了。
在这篇文章中,我将向你展示如何立即开始使用 Paperspace。明确地说,Paperspace 提供的产品比我在这里描述的更多。如果你想更多地了解他们的产品组合,可以去他们的网站上查看完整的产品列表。
在我开始之前,有一个一般性的评论:在本地机器上尽可能多地测试你的代码。使用云服务需要花钱,当你专注于一项具有挑战性的任务时,很容易忘记这一点。
首先,你必须注册这项服务。这里有一个提示:学习 fast.ai 课程的学生会得到一个促销代码,价值 15 美元。这相当于大约 30 个小时的 GPU 使用时间,所以我建议你开始学习 fast.ai 的优秀课程,并获得额外的好处。
注册后,您就可以访问您的控制台。有三种产品可供选择:渐变、核心和 API。对于快速访问 GPU 资源,我更喜欢渐变。更确切地说,我用笔记本来做这件事。
当你点击 创建笔记本+ 时,会有一系列免费的容器供你选择。如有必要,您还可以配置新的容器。对于快速分析或实验, Jupyter 笔记本数据科学堆栈是完美的选择。你可以在这里找到规格。它允许您同时使用笔记本电脑和控制台,因此通过额外的软件包来扩展功能是没有问题的。
在创建笔记本实例的第二步中,您必须决定要使用的机器。例如,我使用最便宜的 CPU 选项来下载数据,并对我的深度学习模型进行测试。这个选项叫做 C2,每小时只需 0.009 美元。也就是 4 天半的计算能力,1 美元。
由于集成存储,从廉价的 CPU 解决方案开始是可能的。有 200GB 的永久存储可用,它通过storage
文件夹自动连接到每个新实例。这种配置可以让你先用便宜的 CPU 准备好一切。
一旦你确定一切正常,你就可以开始一个新的 JupyterHub 环境。这一次,我选择了 GPU 选项。最便宜的选项从每小时 0.51 美元开始,一直涨到每小时 1.72 美元。也有更强大的机器可用(最高成本为每小时 20.99 美元),但你需要升级你的帐户才能做到这一点。我使用 Paperspace 来支持我在深度学习领域的个人发展。为此,0.51 美元的期权总是足够了。
对结果满意后,您应该将您使用的笔记本(原始文件和 HTML 副本)和训练好的模型导出到您选择的备份位置或版本控制系统。
这些信息已经足够开始您的 Paperspace 之旅。我算了一下上一个深度学习项目的成本。总之,我花了大约三美元(大部分花在模特培训上)。然而,更重要的是,我花了 99%的时间解决实际问题,只有 1%的时间用于设置。
感谢阅读!如果你喜欢这篇文章,留下一些吧👏🏻并在 LinkedIn 或 Twitter 上分享。请在评论和 推特 上告诉我你的想法。再次感谢,继续学习!
并行分布式遗传算法
Image by Pablo Garcia Saldana
进化算法是解决不同优化问题的强有力的方法。进化算法有助于找到合适的解决方案,如果使用严格的方法找到它是如此困难,我们可以说这是不可能的。进化算法最流行的变体之一是遗传算法。你可以在“遗传算法简介——包括示例代码”一文中读到更多关于遗传算法的内容。
有时,如果一个问题很复杂并且个体很大,那么就不可能实现有效的遗传算法,因为计算需要太多的时间,并且不可能将所有需要的数据存储在内存中。为了克服第二个问题,可以将一些个体存储在磁盘上,一旦需要,就将它们加载到内存中。这并不能解决性能问题,此外,它还带来了另一个问题:从磁盘读取(也可能是反序列化)一个个体到内存可能会使整个系统更慢。此外,算法见过的所有个体都是使用相同的遗传算子创建的,因此可能有太多的共同点,因此算法将在局部最优值附近行走。有办法解决这个吗?有可能,是的:我们可以使用并行或分布式遗传算法。
本文描述了两种旨在提高算法性能的遗传算法:并行和分布式遗传算法。
并行遗传算法
并行遗传算法就是这样一种使用多个遗传算法来解决单个任务的算法[1]。所有这些算法都试图解决相同的任务,在它们完成任务后,每个算法中最好的个体被选中,然后它们中最好的被选中,这就是问题的解决方案。这是并行遗传算法最流行的方法之一,尽管还有其他方法。这种方法通常被称为“岛屿模型”,因为种群是相互隔离的,就像现实生活中的生物种群可能生活在不同的岛屿上。图 1 说明了这一点。
Image 1. Parallel genetic algorithm
这些遗传算法互不依赖,因此它们可以并行运行,充分利用多核 CPU 的优势。每个算法都有自己的个体集,因此这些个体可能不同于另一个算法的个体,因为它们具有不同的变异/交叉历史。
文献[2]描述了一种并行遗传算法,其使用两种独立的算法来提高其性能。这两种算法的区别在于选择变异和交叉个体的方式。此外,一些具有最高拟合度的生物被允许从一种算法“迁移”到另一种算法。虽然有时这可能已经足够了,但是当一个任务很难解决或者一个人是一个复杂的实体时,我们可能需要更多的个体多样性。
为了实现这一点,我们可以使用尽可能多的算法(比如说,两倍于我们拥有的 CPU 核心数),并且改变算法的几乎每一个属性。因此,每个算法都有自己的一组个体,这些个体是使用不同于其他算法的方法创建的。这也是一种“岛屿模式”,尽管“岛屿”之间的差异更大。唯一的限制是所有算法使用相同的拟合函数来评估个体,以便可以比较属于不同算法的个体。因此,这些遗传算法可能在以下方面有所不同:
- 新的个体是如何被创造出来的;
- 个体如何变异,如何被选择变异;
- 个体如何交叉,如何被选择进行交叉;
- 有多少人参加了单个交叉项目,结果又有多少人被创造出来;
- 每次算法迭代后有多少个体存活下来,这些生物是如何被选择出来的;
- 每一代包含多少个体;
- 一个算法要经历多少代。
通过改变这些特征,有可能产生许多不同的遗传算法来解决相同的任务,但是具有完全不同的个体。
值得注意的是,这些独立的遗传算法具有与任何其他传统遗传算法相同的结构,因此它们可以从并行遗传算法中提取出来并独立使用。
算法之间的交叉
那么,我们有什么?我们有几个独立运行的遗传算法,它们有自己的个体集。我们可以选择属于不同算法的个体,并将它们杂交。结果,出现在一个算法的个体中的特征将可用于另一个算法。这允许创建这样的个体,这些个体不能由任何算法单独创建,给它们带来更多的多样性并传播便利的特征。
让我们用一个例子来说明这一点。假设我们有三个独立的遗传算法,我们想将它们成对交叉。我们采用第一种算法,随机选择一对中的第二个元素。因此,我们创建了尽可能多的算法对,在每一对中,第一个元素是按顺序选择的,第二个是随机选择的。然后,我们对这两种算法的种群进行交叉,从这两种算法中选取个体。我们以这样一种方式选择个体进行交叉,即来自不同算法的个体被交叉在一起。我们使用由一对算法中的第一个算法使用的交叉机制,并且该算法接收作为交叉的结果而被创建的所有个体;一对算法中的第二个算法只是提供其个体的施主。因此,当新个体是一对中的第一个元素时,每个算法接收新个体。如果一个交叉算法需要两个以上的个体,额外的个体可以从一对算法中的任何一个中选取,这里只建议不要有算法占优势。
当涉及算法之间的交叉时,也可以使用特殊的交叉技术,这仅适用于算法之间的交叉。
建议在过程中间的某个地方(甚至多次)使用算法之间的交叉,而不是在最开始或最后。在最开始的时候,每个算法都有不受突变或交叉影响的新个体,因此它们特定于特定算法的特征没有被清楚地表达。最后,没有更多的世代会影响交叉中产生的新个体,因此它们不会为了决定哪一个更好而与其他个体竞争。
结论
并行遗传算法可能比非并行遗传算法花费更多的时间,这是因为并行遗传算法使用多个计算线程,这反过来导致操作系统更频繁地执行上下文切换。然而,并行遗传算法往往比非并行遗传算法产生更好的结果和更优的个体。
尽管并行可能会显著改善结果,但在某些情况下,这可能还不够。在这种情况下,我们可以使用…
分布式遗传算法
分布式遗传算法实际上是一种并行遗传算法,其独立的算法运行在不同的机器上。此外,在这种情况下,这些算法中的每一个都可能是并行遗传算法!分布式遗传算法也实现了“岛模型”,每个“岛”与其他“岛”更加隔离。如果每台机器运行一个并行遗传算法,我们可以称之为“群岛模型”,因为我们有岛屿群。实际上,单个遗传算法是什么并不重要,因为分布式遗传算法就是让多台机器运行独立的遗传算法来解决同一任务。图 2 说明了这一点。
Image 2. Distributed genetic algorithm with parallel components
当我们必须创建许多个体以观察整个领域时,分布式遗传算法也可能有所帮助,但是不可能将它们全部存储在单个机器的存储器中。
当我们讨论并行遗传算法时,我们引入了“算法间交叉”这一术语。分布式遗传算法使我们能够在不同的机器之间进行交叉!
在分布式遗传算法的情况下,我们有一种控制整体进度和协调这些机器的“主思维”。它还控制机器之间的交叉,选择机器如何配对以执行交叉。一般来说,除了个体通过网络从一台机器移动到另一台机器之外,过程与并行遗传算法的情况相同。为了避免两次转移个人,建议将个人发送到机器,该机器将接收由于交叉操作而创建的新个人。“主脑”也从它所连接的、实际运行计算的次级机器的个体中选择最佳个体。因此,这个“大师头脑”是分布式遗传算法的切入点,它与向它寻求解决方案的人进行交流。
履行
这篇文章主要致力于理论,但当谈到实现时,有可能有一个“分布式遗传算法框架”,负责控制辅助机器和通过网络转移个体。一般来说,这样的框架能够处理除了需要了解个人内部结构的动作之外的所有事情。因此,用户只需执行几项操作:
- 个人创造和处置;
- 个人交叉;
- 个体突变;
- 评估个人的拟合函数。
其他的都是通用的,都可以在框架内实现。这样的框架能够同时运行多个分布式遗传算法,而不需要实际知道正在解决什么问题。
结论
使用并行和分布式遗传算法可以提高使用进化算法的系统的性能。无论如何,我们应该记住,进化算法并不能保证找到一个解决方案,也不能保证找到的方案不会比找到的方案更好。
使用遗传算法时,我们必须处理的一个主要问题是初步收敛到支配他人的个体子集。并行和分布式遗传算法试图解决这一问题,在算法之间引入差异,使它们具有不同的个体集。
使用并行和分布式遗传算法,个体更加分散,因此与使用非并行遗传算法相比,可以创建更少的个体,同时保持相同的解质量。
参考
- 埃里克·坎图-帕斯。并行遗传算法综述
- 阿卜丁·哈萨尼,乔纳森·特雷吉斯。标准和并行遗传算法概述
利用 Dask 并行化特征工程
(Source)
如何使用并行处理扩展功能工具
当计算非常慢时,最重要的问题是:“瓶颈是什么?”一旦你知道了答案,合乎逻辑的下一步就是找出如何绕过瓶颈。
通常,正如我们将看到的,瓶颈是我们没有充分利用我们的硬件资源,例如,当我们的计算机有八个内核时,只在一个内核上运行计算。如果我们的代码不是为了使用我们所有的资源而编写的,简单地获得更大的机器——就 RAM 或内核而言——并不能解决问题。因此,解决方案是重写代码,尽可能高效地利用我们拥有的任何硬件。
在本文中,我们将了解如何重构我们的自动化特性工程代码,使其在笔记本电脑的所有内核上并行运行,同时将计算时间减少 8 倍以上。我们将利用两个开源库——feature tools用于自动化特征工程和 Dask 用于并行处理——并用真实世界的数据集解决一个问题。
We’ll combine two important technologies: automated feature engineering in Featuretools and parallel computation in Dask.
我们的精确解决方案是针对这个问题的,但是我们开发的一般方法可以用于将您自己的计算扩展到更大的数据集。
尽管这里我们将坚持使用一台计算机和 多内核 ,但在未来,我们将使用同样的方法在 多台计算机上运行计算。
GitHub 上的 Jupyter 笔记本中提供了完整的代码实现。如果您还不熟悉 Featuretools,请查看文档或本文。在这里,我们将主要关注使用 Dask 的 Featuretools,跳过一些自动化特征工程的细节。
问题是:数据太多,时间不够
使用 Featuretools 应用自动化特征工程解决家庭信用违约风险问题(目前正在 Kaggle 上进行的机器学习竞赛,目标是预测客户是否会偿还贷款)的主要问题是,我们有大量数据,这导致特征计算时间非常长。使用深度特性合成,我们能够从 7 个数据表和 5800 万行客户端信息中自动生成 1820 个特性,但是调用一个只有一个内核的函数需要 25 个小时,即使是在具有 64gb RAM 的 EC2 实例上!
假设我们的 EC2 实例——甚至我们的笔记本电脑——有 8 个内核,为了加快计算速度,我们不需要更多的 RAM,我们需要利用这些内核。Featuretools 通过在对深度特征合成的调用中设置n_jobs
参数,允许并行处理。然而,目前该函数必须将整个[EntitySet](https://docs.featuretools.com/loading_data/using_entitysets.html)
发送给机器上的所有工作线程(内核)。对于一个大的EntitySet
,如果每个工作者的内存都耗尽了,这会导致问题。我们目前正在特性实验室致力于更好的并行化,但是现在我们用 Dask 解决我们的问题。
解决方法:制造许多小问题
方法是将一个大问题分解成许多小问题,然后使用 Dask 一次运行多个小问题——每个小问题在不同的内核上运行。这里重要的一点是,我们使每个问题—任务— 独立于其他问题,因此它们可以同时运行。因为我们正在为数据集中的每个客户端创建特征,所以每个任务都是为客户端的子集创建特征矩阵。
When one problem is too hard, make lots of little problems.
我们的方法概述如下:
- 通过划分数据,把一个大问题变成许多小问题
- 编写函数,从每个数据分区创建一个特征矩阵
- 使用 Dask 在我们所有的内核上并行运行步骤 2
最后,我们会有一些更小的特征矩阵,然后我们可以将它们组合成一个最终的特征矩阵。同样的方法——将一个大问题分解成许多并行运行的小问题——可以扩展到任何规模的数据集,并在其他分布式计算库中实现,如使用 PySpark 的 Spark 。
无论我们有什么资源,我们都希望尽可能高效地使用它们,我们可以将这个框架扩展到更大的数据集。
数据分区:分而治之
我们的第一步是创建原始数据集的小分区,每个分区包含来自客户机子集的所有七个表的信息。然后,每个分区可以用于独立地计算一组客户端的特征矩阵。
这个操作是这样完成的:获取所有客户端的列表,将其分成 104 个子列表,然后遍历这些子列表,每次都将数据子集化为仅包括子列表中的客户端,并将结果数据保存到磁盘。这个过程的基本伪代码是:
104 个分区是根据反复试验和 3 个一般准则选择的:
- 我们希望至少有与工作线程(核心)一样多的分区,并且数量应该是工作线程数量的倍数
- 每个分区必须足够小,以适合单个工作者的内存
- 更多的分区意味着完成每项任务的时间差异更小
(作为一个额外的优化点,我们将 pandas object
数据类型转换为category
,以减少内存使用。这使我们的整个数据集从 4 GB 增加到大约 2 GB。我推荐阅读关于category
数据类型的 Pandas 文档,这样你就可以有效地使用它们。
将所有 104 个分区保存到磁盘大约需要 30 分钟,但这个过程只需执行一次。
Each partition contains all the data needed to make a feature matrix for a subset of clients.
分区中的实体集
Featuretools 中的实体集是一种有用的数据结构,因为它包含多个表以及它们之间的关系。为了从一个分区创建一个EntitySet
,我们编写一个从磁盘读取分区的函数,然后用表和链接它们的关系生成EntitySet
。
这一步的伪代码是:
注意,这个函数返回的EntitySet
,而不是像我们对数据分区那样保存它。对于这个问题,保存原始数据是一个更好的选择,因为我们可能想要修改EntitySets
——比如通过添加有趣的值或领域知识特性——而原始数据永远不会改变。EntitySets
是动态生成的,然后传递到下一个阶段:计算特征矩阵。
实体集的特征矩阵
函数feature_matrix_from_entityset
正如其名称所暗示的那样:接受先前创建的 EntitySet,并使用深度特征合成生成具有数千个特征的特征矩阵。然后将特征矩阵保存到磁盘。为了确保我们为每个分区创建完全相同的特性,我们生成一次特性定义,然后使用 Featuretools 函数calculate_feature_matrix
。
下面是整个函数(我们传入一个带有EntitySet
和分区号的字典,这样我们可以用一个唯一的名称保存特征矩阵):
Creating a feature matrix from an EntitySet and saving it to disk.
[chunk_size](https://docs.featuretools.com/guides/performance.html#adjust-chunk-size-when-calculating-feature-matrix)
是这个调用中唯一棘手的部分:它用于将特征矩阵计算分解成更小的部分,但是因为我们已经对数据进行了分区,所以这不再是必要的。只要整个 EntitySet 能够容纳在内存中,那么我发现通过将chunk_size
设置为等于观察的数量来一次计算所有的行会更加节省时间。
我们现在拥有了从磁盘上的数据分区到特性矩阵所需的所有独立部分。这些步骤构成了大部分工作,让 Dask 并行运行这些任务非常简单。
释放你的机器
Dask 是一个并行计算库,它允许我们同时运行许多计算,要么使用一台机器上的进程/线程(本地),要么使用许多独立的计算机(集群)。对于单台机器,Dask 允许我们使用线程或进程并行运行计算。
进程不共享内存,在单个内核上运行,更适合不需要通信的计算密集型任务。线程共享内存,但是在 Python 中,由于全局解释器锁(GIL),两个线程不能同时在同一个程序中操作,只有一些操作可以使用线程并行运行。(关于线程/进程的更多信息,请参见这篇精彩的文章)
由于计算特征矩阵是计算密集型的,并且可以针对每个分区独立完成,所以我们想要使用进程。这些任务不需要共享存储器,因为每个特征矩阵不依赖于其他特征矩阵。用计算机科学的术语来说,通过划分数据,我们使我们的问题尴尬的并行,因为工人之间不需要交流。
如果我们使用进程启动 Dask 如以下代码所示——我们有 8 个工作线程,每个内核一个,每个工作线程分配 2 GB 内存(总共 16gb/8 个工作线程,这将根据您的笔记本电脑而有所不同)。
from dask.distributed import Client# Use all 8 cores
client = Client(processes = True)
为了检查是否一切正常,我们可以导航到 localhost:8787,Dask 已经为我们设置了一个散景仪表板。在 Workers 选项卡上,我们看到 8 个工作线程,每个都有 2 GB 的内存:
Workers created by Dask with processes = True (run on a MacBook with 8 cores and 16 GB of RAM).
目前,所有 8 名工人都无所事事,因为我们没有给他们任何事情做。下一步是创建一个“Dask 包”,它基本上是 Dask 分配给工人的任务列表。我们使用db.from_sequence
方法和分区路径列表来制作“包”。
import dask.bag as db
# Create list of partitions
paths = ['../input/partitions/p%d' % i for i in range(1, 105)]# Create dask bag
b = db.from_sequence(paths)
然后,我们把map
计算任务放到包里。map
意味着获取一个函数和一个输入列表,并将该函数应用于列表中的每个元素。由于我们首先需要从每个分区创建一个EntitySet
,我们将相关的函数映射到“包”:
# Map entityset function
b = b.map(entityset_from_partition)
接下来,我们做另一个映射,这次是制作特征矩阵:
# Map feature matrix function
b = b.map(feature_matrix_from_entityset,
feature_names = feature_defs)
这段代码将获取第一个map
—EntitySet
的输出,并将其传递给第二个map.
。这些步骤实际上并不运行计算,而是创建一个任务列表,然后由 Dask 分配给工人。要运行任务并生成我们称之为的特征矩阵:
# Run the tasks
b.compute()
Dask 根据从映射构建的任务图(一个有向无环图)自动分配任务给工人。当计算发生时,我们可以在散景仪表板上查看任务图表和状态。
Dask task graph midway through the computation process.
左边的一组块代表entity_set_from_partition
函数调用,右边的块是feature_matrix_from_entityset.
。从这个图中,我们可以看出这两个函数之间存在相关性,但是在每个分区的特征矩阵计算之间没有。
在散景仪表板上还有许多其他可视化效果,包括任务流(左下方)和操作配置文件(右下方):
Task Stream (left) and Profile (right) of ongoing computation.
从任务流中,我们可以看到所有八个工人同时在使用,总共有 208 个任务要完成。概要文件告诉我们,最长的操作是计算每个分区的特征矩阵。
在我的 MacBook 上,构建和保存所有 104 个特征矩阵花了 6200 秒(1.75 小时)。这是一个相当大的改进,从重写我们的代码到尽可能有效地使用我们可用的硬件。
我们没有得到一台更大的计算机,而是重写代码,以最有效地利用我们拥有的资源。然后,当我们得到一台更大的计算机时,我们将能够使用相同的代码来最小化计算时间。
构建一个特征矩阵
一旦我们有了单独的特征矩阵,如果我们使用允许在线学习的算法,我们可以直接使用它们来建模。另一种选择是创建一个特征矩阵,可以使用 Pandas 在纯 Python 中完成:
Code to join together feature matrices.
单个特征矩阵有 350,000 行和 1,820 列,与我第一次使用单核制作它时的形状相同。
Subset of complete feature matrix.
结论
我们不应该考虑如何获得更多的计算能力,而应该考虑如何尽可能有效地利用我们现有的硬件。在本文中,我们介绍了如何使用 Dask 并行化我们的代码,Dask 让我们使用笔记本电脑完成计算的速度比在单核上快 8 倍。
我们设计的解决方案利用了几个关键概念:
- 把问题分解成更小的、独立的块
- 编写函数,一次处理一个块
- 将每个块委托给一个工人,并行计算
现在,我们不仅可以利用 Featuretools 的自动化特征工程的速度和建模性能,还可以使用 Dask 并行执行我们的计算,并更快地获得结果。此外,我们可以使用相同的方法扩展到更大的数据集,使我们能够很好地应对任何机器学习问题。
如果构建有意义的高性能预测模型是您关心的事情,那么请通过功能实验室与我们联系。虽然这个项目是用开源的 Featuretools 完成的,但商业产品为创建机器学习解决方案提供了额外的工具和支持。
参数推断—最大后验概率
I dare you to not laugh at this comic after going through the post. 😄
在之前的帖子中,我们讨论了最大似然估计背后的动机以及如何计算它。我们还学习了一些通过引用单调函数来计算函数对数似然的技巧,以及它们如何使估计函数临界点的整个过程更容易,因为它们保留了这些临界点。
在 MLE 帖子的最后,我试图通过问一个简单的问题来激发使用 MAP(最大后验概率)的原因:
如果序列如下所示会怎样:
Img. 1: A sequence of two Heads
你认为第三次抛硬币是反面的概率是多少?
很明显,在这种情况下,
Img. 2
为什么?将#tails (0)和#heads (2)放入 theta_MLE 的等式中,
Img. 3
我们得出了结果。这个结果告诉我们,下一次掷硬币是反面的概率是 0(也就是说,它预测没有一次掷硬币会出现反面= > 硬币总是会出现正面),很明显事实并非如此(除非是硬币被重装载的极端情况)。现在,这在参数估计过程中提出了一个大问题,因为它没有给我们下一次翻转的准确概率。我们知道,即使是公平的硬币也有 25%的几率连续出现两个头像(0.5 x 0.5 = 0.25)。所以,硬币也不是不可能是公平的。
后面的
虽然我们知道 MLE 是机器学习中的一个强大工具,但它也有缺陷(正如我们刚刚看到的),这些缺陷发生在我们可用的数据量有限的时候。最大似然估计的问题在于它是一个点估计,也就是说,我们被允许在计算一个特定值的最大似然估计,这导致过度拟合(对于那些以前没有听说过这个术语的人,我建议你参考Quora 上的这个答案)。因为这是一个点估计,所以它与数据过度拟合(连续 2 个正面对),并且它没有考虑硬币可能仍然公平的可能性(或者可能只是稍微偏向正面)。显而易见的问题是:我们如何解决这个问题?
通常,我们对世界上正在发生的与数学无关的过程有着先验信念。让我们举一个简单的例子:假设你和你的朋友在一个“猜硬币”的游戏中打赌。现在,你可能会认为你的朋友已经稍微操纵了硬币,使其偏向他们,也许会使它有点偏向的头像; 55% 正面和 45% 反面(没有人会愚蠢到让它极端偏向某个特定的翻转,因为这很容易被察觉)。你对一个随机过程的这些假设被称为先验。用专业术语来说:
有没有什么方法可以将这些先验的信念用数学方法整合到我们的模型中?
是的:我们可以让参数 theta 本身成为一个随机变量,这也证明了我们一直在使用的符号是正确的;p(F = F |theta)[注意,考虑到这个符号已经暗示了 theta 是一个随机变量,这个假设是多么完美]。
现在我们可以在θ上进行分布,并加入这样的概念,即使在极端情况下(HH),硬币仍然是公平的。正如我们将看到的,这个概念也有助于我们防止过度拟合。
对于任何 x ,我们希望能够在看到数据后表达我们的参数θ的分布,我们通过在观察到的数据序列上调节θ来做到这一点,就像这样:
Img. 4: Posterior notation
其中 D 是一个随机变量,它捕获了手头的观察序列,即我们的数据。现在θ是一个随机变量,它可以取特定的标量值 x 。因为我们讨论的是抛硬币,所以我们知道上面的等式只对[0,1]中的 x 有意义(由于 x 是一个概率,所以它必须在 0 和 1 之间)。
我知道这很难接受。因此,让我们后退一步,尝试理解 MLE 中发生了什么,以及它与我们正在进行的 MAP 估计相比如何:
Img. 5: MLE - Likelihood is the probability of data given the parameter, and we were maximizing this w.r.t. theta.
现在我们感兴趣的是:
Img. 6: MAP — Maximizing the probability of theta after we have observed our data.
现在还不完全清楚地图术语的直观含义,但是当我们完成这篇文章的时候就会明白了。
而一般为,
Img. 7: MLE != MAP
我们可以应用古老的贝叶斯法则来使地图公式变得更加神秘:
Img. 8: Bayes’ rule on MAP (Posterior)
分子包括:
Img. 9: Numerator I — Likelihood
**我们从 MLE 中知道这部分,唯一的区别是它现在用θ=x .固定,它被称为似然。
Img. 10: Numerator II — Prior
这是我们在观察任何数据之前对θ值的先验信念。它在之前被称为,它防止过度拟合。关于前科的一点小动机:**
在很多情况下,我们有理由相信,θ的某些值比其他值更有可能。例如,在我们掷硬币的例子中,我们期望这个值在 0.5 左右,像 0 或 1 这样的极端值不太可能出现。这是 Prior 捕获的内容,它将防止极端结果(过度拟合)。
分母 p(D)称为证据,是一个归一化常数,在我们的例子中并不重要。没有分母,右边的表达式就不再是概率,因此范围不会从 0 到 1。“归一化常数”允许我们得到一个事件发生的概率,而不仅仅是这个事件与另一个事件相比的相对可能性。查看关于堆栈交换的讨论。
我们应该从所有这些讨论中获得三个术语:
- 在先的;在前的
- 可能性,以及
- 在后面的
它们是由贝叶斯法则联系在一起的。因此,先验是我们在观察到任何数据之前对 theta 看起来如何的信念,后验是我们在观察到一些数据之后对 theta 看起来如何的的更新的信念。
**现在我们已经建立了可能性(我们在上一篇文章中一直使用)和后验概率(我们现在感兴趣的)之间的联系。而这两者之间的联系是先验分布,先验分布是我们的模型的一部分。所以,是我们来选择优先。先验的要点是,我们必须在不看观察的情况下选择它,这为(可能是主观的)模型假设留下了空间。除了它需要是一个有效的概率分布之外,先验不需要满足任何特定的规则:
Img. 11: Prior is just a probability distribution.
让我们看几个前科的例子:
- 我们假设存在除 0(HH 序列的最大似然)之外的其他可能性。现在这个先验是非常弱的,因为它没有给出太多关于这些可能性的信息。
- 我们还可以假设参数θ最有可能在 0.4 和 0.5 之间的区域,这大约是 0.5 的真实概率(尽管 MLE 解告诉我们它是 0)。由于我们将假设限制在某个区域,这是一个相当强的先验的例子。
这些主观假设也被称为归纳偏差**。通过引入这些主观假设,我们使我们的分析/模型偏向某些解决方案。这是我们写下模型时必须意识到的事情。
地图估计
下图说明了我们对θ的先验的几种选择:
Img. 12: Prior choices (x-axis represents probability for theta. y-axis represents probability density)
第一张图显示了所有可能参数的均匀分布。它没有对模型施加任何归纳偏差,因此没有比其他方案更倾向于θ的任何方案。换句话说,这是我们的最大似然估计。因此,我们可以说 MLE 是当先验是一致的时映射的一个特例。
其他三个选项对θ施加了一些感应偏置。具体来说,我们可以看到它们都以 0.5 为中心,宽度不同(如果您可以推断出后三个模型对先验假设的严格性的降序,则为一个 cookie。;)).这意味着后三种方法都假设真实解在 0.5 左右的小区间内,区间宽度不同。
好了,现在我们对我们的先验应该是什么样子有了一些想法。在选择之前的模型的背后,我们能有更多的动机吗?一个可能的动机是,我们可以选择一个先验,这样可以简化进一步的计算(它们不会变得非常广泛)。这是为我们的特定模型(在我们的例子中:抛硬币)选择适当先验的驱动因素之一。
由于先验只是另一种概率分布,我们希望选择这种分布,使我们随后的计算更容易。事实证明,每当我们寻找一个直接对应于概率的参数的先验时(就像在我们的例子中,θ对应于抛硬币时尾出现的概率),通常存在这样的先验,它们非常适合。
在我们的例子中,这个先验将是一个 Beta 分布:
Img. 13: pdf of a beta distibution
贝塔分布可以理解为代表一个概率的*分布——也就是说,它代表一个概率的所有可能值,当我们不知道那个概率是什么的时候。更直观的理解,见本。***
好吧,这看起来非常拜占庭式和令人沮丧的乍一看,但留在我这里。让我们仔细看看;我们开始注意到一些我们以前已经见过的术语:
Img. 14: We have seen an extremely similar form in MLE.
我们已经看到了 Img 中的组件。14 在 MLE 中,除了指数中的# 头和# 尾被替换为 a-1 和 b-1。
除了θ项,我们还有归一化常数,它有伽马函数。伽玛函数只不过是阶乘函数的扩展,它的参数下移了 1:
Img. 15: Gamma function
伽马函数的特殊之处在于它允许我们计算任意实数值的阶乘(伽马函数 1.5 是很好的定义,而 1.5!未定义)。
事实上,我们以前在某些地方看到过这种情况,这并不是巧合。我们已经选择了一个共轭先验。每当我们有一个先验,它具有与可能性相似的函数形式,并且它们很好地配合在一起,我们就说所谓的共轭先验,贝塔分布是我们掷硬币实验的可能性的共轭先验。解释如下:在没有看到任何数据的情况下,我们对掷硬币实验的结果有一种感觉。在我们的实验中,如果我们要掷 a+b-2 硬币,那么我们可以选择优先次序,这样掷硬币中的 a-1 会出现尾,剩下的 b-1 会出现头。
所以,如果我们假设硬币是无偏的,我们会选择 a 和 b 相等。我们对这个假设越确定,我们就越会选择 a 和 b。
下图说明了 Beta 分布中 a 和 b 的几种选择:
Img. 16: Four different Beta distributions (x-axis represents the probability for theta. y-axis represents density)
如果你想尝试不同的测试版,请点击这里查看 iPython 笔记本。
四幅图的解释:
a.选择 a 和 b 为 1(相等)意味着我们对实验没有任何假设。这是贝塔分布的一个重要特征:当 a = b = 1 时,它推广为均匀分布。
b.选择一个< b represents that we are less certain about #反面比选择一个#正面。该图通过显示尾部的概率更可能小于 0.5,清楚地说明了这一点。**
c.相比正面,我们对反面是 T21 的把握是正面的两倍。从图中我们可以看到,翻牌是反面的概率偏向大于 0.5。
d.选择 a 和 b 为非整数有利于极端解决方案。不幸的是,为 a 和 b 选择非整数并没有任何可行的物理解释,但是它给了我们在建模先验分布时很大的灵活性。
从某种意义上说,我们对先前的假设越确定,我们就越能选择 a & b,这从 Img 的‘b’和‘c’图中可以看出。16.
既然我们已经通过各种论证论证了β分布是我们掷硬币实验的合适先验,那么让我们把我们所知道的一切代入我们在 Img 中使用的贝叶斯公式。8:
Img. 17: Bayes formula for Posterior
我们知道:
Img. 18: MLE part in our MAP solution
现在你可能会想,我们在之前得到的的可能性中有θ:
Img. 19 : Likelihood
我们现在有 x 而不是θ的原因是因为我们已经假设θ本身是一个随机变量,可以取一个特定的值 x.
因为我们已经决定先验是一个 Beta 分布,它采用以下形式:
Img. 20: Prior
将这些值代入贝叶斯法则:
Img. 21: MAP formulation
第二个陈述通过省略 p(D)和贝塔分布的归一化常数引入了比例符号,因为它们都是常数 w.r.t. x. (此外,省略常数不会改变最大值的位置,只会改变其值。)
考虑上图中的第二个语句。我们可以看到为什么β分布或共轭先验通常是强大的,因为这一项实际上看起来像可能性,除了它有这些校正项 a-1 和 b-1。所以不管|T|和|H|有多极端(比如我们只抛了两次硬币),我们都有这些修正项 a & b。
我们在这里所做的基本上是将结果从极端边际结果中抽离出来,就像我们在数据太少的情况下得到的最大似然结果一样。共轭先验之所以是先验的绝佳选择,是因为它们确实有这种效果。
好了,现在我们只剩下以下术语:
Img. 22: MAP with proportionality
我们如何找到把比例符号变成等号的乘法常数?
让我们绕一个弯子,看看如何得出用常规方法无法求解(或至少很难求解)的特定积分的解:
Img. 23: A not-so-easy integral
你认为你能解析地解出这个纸上积分吗?我不是数学专业的,但对我来说,答案是肯定的和否定的。是的,你可以,但如果你能想出解决方案,用传统的微积分规则得出结果将需要相当长的时间。不,嗯,因为类似的推理需要太长时间。
如果你非常了解你的概率分布,你会知道下面的积分是:
Img. 24: Standard gaussian pdf
均值和单位方差为 0 的标准高斯分布的 pdf,即 X ~ N(0,1),它等于 1。如果你想温习高斯语,我认为 ikipedia 的文章相当可靠。
如果上面的积分等于 1,那么只需要通过两边乘以 sq.rt(2*pi)来重新排列项,就可以得出我们刚才所说的实际积分的答案(Img。23).,我们看到:
Img. 25 : Answer to the not-so-easy integral
因此,从某种意义上说,我们通过逆向工程找到了一个相当困难的积分的解。
现在我们有了一个非常方便的技巧,让我们看看是否可以应用它来找出我们的 MAP 估计的比例常数。
我们知道我们的先验分布总和为 1:
Img. 26: The only constraint on prior
以及 Img 中的 RHS。MAP 的 22 表达式与 pdf 成比例,pdf 积分为 1。注意到和我们的酷魔术惊人的相似了吗?
因此,通过逆向工程,后验概率也必须是贝塔分布,这里唯一起作用的常数是相应贝塔分布的归一化常数:
Img. 27: Constant of Proportionality for our MAP
没有其他常数使我们的 MAP 估计的 RHS 积分为 1。但是因为它必须积分为 1,这是唯一的工作常数。
每当我们应该解决一个困难的积分,我们仔细检查它,并试图找到它是否看起来像一个 pdf。如果是这样,我们可以很容易地逆向工程这个 pdf 的归一化常数,然后可以很容易地解决积分。
Img. 28: Note on the reverse engineering trick
这种逆向工程技巧的一个直接且非常好的结果是,我们可以很容易地确定我们的后验概率的分布。这使我们知道,我们的后验需要是一个贝塔分布,我们也知道参数:
Img. 29: Posterior — Beta distribution
现在我们可以找到我们的参数 theta 的最大值,就像我们在 MLE post 中所做的一样(我跳过了实际的计算;这是对数在 Img 方程中的一个简单应用。21 找出最大值),我们得出以下结果:
Img. 30: MAP Solution
将这个 MAP 估计与 ML 估计(|T|/|H|+|T|)进行比较,我们看到它们非常相似。项|T|/|H|+|T|再次出现在 MAP estimate 中,只不过它被我们先前的信念所修正。
根据我们先前的想法,在看到(i.i.d .)数据后,theta_MAP 是 theta 的最佳猜测。
称为最大后验估计(MAP)。
注意这里最重要的一点:后验工作非常直观。如果我们只有很少的数据(就像在我们的第二个实验中,我们只有两次抛硬币,两次都是头),先验的影响会更强。另一方面,对于固定的 a & b,如果我们进行足够多的抛硬币(例如,一百万次),那么 a & b 的影响几乎可以忽略不计,并且我们非常接近 MLE。这非常直观,因为在低数据范围内,先验防止过拟合,而如果我们从随机过程中获得大量可靠信息,我们就不再需要先验信息了。我们可以从数据本身获得所有信息。换句话说,当我们在数据中游泳时,MLE 占主导地位。
这个过程结束了吗?我们已经融入了我们对世界运作方式和随机过程展开方式的假设。还有什么要完成的?现在我们可以坐下来看 LOTR 三部曲了。
或者我们可以吗?事实证明,当我们将我们先前的信念结合到模型中时,我们隐含地倾向于某些解决方案(通过假设在抛硬币过程中的 beta 分布,我们使 MAP 估计偏向特定的解决方案;看起来像 Beta pdf 的表单)。那么所有其他也能影响一个过程的前科呢,尽管是以一种非常微妙的方式?有没有什么方法可以把它们也合并到我们的模型中?正如你已经知道的,答案是肯定的,我们将在下一篇文章中深入讨论它,当我们谈论我们模型的完全贝叶斯分析时。
我意识到这篇文章有时并不容易理解,其中涉及到很多数学问题。我希望我让你更容易和直观地理解地图估计的过程。如果你发现任何具体的部分太深奥,随时留下评论,我会尽快处理。
资源:我在慕尼黑工业大学的研究生院教授的 ML 课程。在这里随意观看讲座。
如果你觉得这篇文章有趣,请推荐并分享它,这样其他人也可以从中受益。
参数推断—最大似然
The never ending debate of Frequentists and Bayesians. (Image source: xkcd)
他的文章深入探讨了理论机器学习最重要的概念之一,即。,参数推断。当我觉得需要的时候,我会试着专注于对概念的直觉理解,同时嵌入数学公式。如果你曾经在大学上过本科/研究生水平的机器学习课程,你一定遇到过参数推断。当我第一次遇到这种情况时,我绞尽脑汁了好一阵子,试图理解圆周率的概念(不是一个众所周知的参数推断的缩写),这就是为什么我觉得有必要写一篇文章,让其他人更容易理解。我希望当我们完成这篇文章后,你能从中获取一些有价值的东西。我们开始吧。
PI 可以自由地描述为确定参数的过程,这些参数控制着从实验中生成的数据集。例如,如果我们抛硬币十次,得到下面的数据集,
Img. 1: 10 flips of a coin
产生这十次翻转的参数是什么?事实证明,参数推断的过程并非完全无关紧要,需要相当多的数学知识才能理解。如果你了解对数、微积分(准确地说是微分)和基本概率的基础知识,这篇文章应该不难理解。无论如何,让我们言归正传。PI 可以被认为是一个分步骤的过程,有三个主要步骤:
Img. 2: Three steps to Parameter Inference.
我们从最低的一步开始,然后努力到达最高的一步。每一步都比前一步稍微复杂一些,但同时,它为我们提供了一个更健壮的模型来描述数据。这篇文章将详细讨论最底层的步骤最大似然估计,后续文章将讨论另外两个步骤。(附带提示:使用笔和纸可以轻松理解术语和公式,因为介质尚不支持数学符号)。好吧,那么 MLE 是什么?
最大似然估计
如图所示,最大似然估计的整个过程围绕着确定使数据概率最大化的参数。回到抛硬币的例子,你认为第 11 次抛硬币是反面的概率是多少?有两个合乎逻辑的答案:
- 如果你说 0.5,这是一个合理的答案,因为翻转是相互独立的,下一次翻转是尾有 1/2 的机会,即 0.5。
- 另一个答案可能是 0.3。这个答案背后的基本原理是,我们可以预期硬币的翻转会继续到目前为止发生的方式(直到第十次翻转)。
我暂时不会告诉你正确的答案。让我们一起努力找出哪一个是正确的。好的,那么我们需要找出P_11(F_11=Tails),其中 P _ 11 是第 11 次翻转的概率,F _ 11 是第 11 次翻转。这产生了一般情况: i th 翻转为 Tails:
Img. 3
其中 F_i 表示第 i 次翻转,而θ_ I是控制第 i 次翻转的参数。为了表示概率分布取决于θ_ I,我们可以写为:
Img. 4
你看到这里的问题了吗?我们有依赖于参数 theta_1 到 theta_10 (i = 1 到 10) 的数据。这就提出了一个问题,那就是我们如何把它推广到。暂时还是坚持现有的,即 theta_1 到 theta_10。
翻转序列的所有随机性由参数 theta_1 至 theta_10: 控制(建模)
Img. 5
我们目前对 theta_1 了解多少…theta_10 ?他们是否以某种方式与 theta_11 联系在一起?乍一看,似乎没有什么联系。现在我们可以开始 MLE 的过程了:我们需要找到 theta_i 的使得
Img. 6
是尽可能高的。这是 MLE 背后的原则:
Img. 7
MLE 着眼于数据的概率(所谓的可能性; Img。5 & 6】并且它试图找到使该序列的可能性/概率最大化的那些参数θ_ 1到θ_ 10。最后一次重申,我们要选择那些参数,在这些参数下,我们的观察变得最有可能。这就是这个过程被称为 MLE 的原因。
现在让我们尝试实际模拟 Img 中描述的概率。5 & 6.为了能够计算出数据的最大似然估计,我们需要做出两个关键假设:
一、抛硬币互不影响,即互不相关*(第一次抛硬币的结果不影响第二次抛硬币的结果,以此类推) :*
Img. 8: The independence assumption allows us to simplify the complex likelihood term into ten simpler factors.
Img 中的第三个语句。8 只是一个简写符号,描述第二条语句中十项的乘积。
第一个假设允许我们大大简化似然项,但是请注意,速记符号中仍然存在 theta_i 。这意味着我们仍然没有等式中的 theta_11 。
还有一个假设可以进一步解开这个等式。这是因为硬币(一般来说,实验设置)没有显著变化:
二。翻转在数量上是相同的,即它们是同分布的:**
Img. 9: Since the flips are taking place under similar circumstances, we can assume that the parameter governing the flips is one and same.
第二个假设是翻转是同分布的,允许我们从θ中去掉下标 i 。这意味着我们观察到的所有 10 次翻转本质上都是由同一个参数θ决定的;不再有十个参数来控制十次不同的翻转,我们现在只有一个参数来控制整个硬币翻转的顺序,这也包括第 11 次翻转。从某种意义上来说,我们正在把前 10 次抛硬币和第 11 次抛硬币联系起来。我们很快就会看到,这将是推论的关键。**
注意:我们所做的两个假设在机器学习中使用得如此频繁,以至于它们作为一个实体有一个特殊的名称, i.i.d .假设:
总的来说,这 10 次翻转是独立的,并且分布相同。
这允许我们明确地写下我们试图优化的可能性。记住 theta 被定义为翻转出现尾部的概率;我们的序列 w . r . t .θ的概率现在可以表述为:
Img. 10: First term is the probability of Heads, second for Tails, third and fourth for Heads, fifth for Tails and so on. Note that this formula corresponds to the sequence of our coin flip.
因此,通过这种非常广泛和非常直观的假设,我们将似然函数简化为一个相当简单的多项式;我们可以开始优化参数 theta 的函数。
根据我们的模型假设:
Img. 11
上述简化的多项式可以解释为θ的函数,即f(θ)。现在我们想找出这个函数的最大值(最大似然)。对如何进行有什么想法吗?
没错!从这里开始都是基本的高中数学。我们取导数df/d(θ),设为零,求解θ。然后验证临界点(函数斜率为零的点:极大值、极小值和鞍点。在这种情况下,我们只关心最大值),通过将它们插入到 f(theta) 的二阶导数中。
原则上,这相当简单。除了一个警告:f(theta) 的二阶导数已经很难看了,因为我们需要应用乘积法则 两次才能得到它。这是可行的,但要实现这一目标,需要大量单调的技术工作。有什么方法可以简化我们的计算吗?
数学的美妙之处在于它为我们提供了无数的途径来找到一个特定的解决方案。其中一些比另一些容易几倍。我们将应用一个更简单的途径来优化我们的似然函数:
让我们稍微了解一下高中微积分,分析一下单调函数(如果你已经对这个概念很熟悉了,可以继续到本节末尾)。我们已经知道如何找出函数的最大值或最小值,并且实际的最大值和最小值被称为函数的临界点。数学中有一条规则,即如果我们将一个单调函数应用于我们正在优化的另一个函数,单调函数的应用将保留原始函数的临界点*(维基百科文章* 是了解更多关于单调函数的极好来源)。**
如果 x1 < x2 = > f(x1) < f(x2):这是一个单调递增函数。
如果 x1 < x2 = > f(x1) > f(x2):这是一个单调递减函数。
对数函数 是单调递增函数的一个例子:
Img 12: A monotonically increasing function — log(x)
因此,我们可以断定 log f(theta) 与 f(theta)具有相同的最大值。
因此,如果我们将 log 应用于我们的似然函数,我们将得到与我们直接优化它所得到的相同的最大值。
所以我们想找出:
Img. 13: arg max f(theta)
Arg max 是指我们想知道这个函数最大化时θ的值,而不是函数本身的最大值。这意味着我们而不是真正关心的是函数的实际最大值。相反,我们感兴趣的是函数具有最大值的θ的值(在继续之前,让它沉淀片刻)。**
取该函数的日志:
Img. 13: log arg max f(theta)
我们用 g(theta) 表示这个函数:对数似然。
对g(θ)求导
Img. 14: derivative of g(theta)
其中|T|是尾部的数量(在我们的示例中为 3),而|H|是头部的数量(在我们的示例中为 7)。我引入 T 和 H 是为了使解决方案具有普遍性。
将g’(θ)的值设置为零(以找到θ的临界值):
Img. 15: Critical value of theta — I
Img. 16: Critical value of theta — II
因此,任何硬币序列的最大似然估计(MLE ):
Img. 17: Theta MLE
我们已经得到了参数θ的最大似然估计,该参数控制着我们的硬币投掷数据集。回到原来的问题,第 11 次翻转是尾的概率是多少?
设|T| = 3 和|H| = 7,我们得到的答案为 0.3。这证明了 30%是我们最初问题的合理答案。
现在我们需要在二阶导数中代入θ的这个临界值,来验证它确实是最大值。为了简洁起见,我在这里跳过了这个验证。但是请继续下去,说服自己这确实是最大值。
这个最大值被称为θ的 MLE。这个特殊的 theta 是最有可能让我们观察到的序列。
直觉上,这个 30%的值也是合理的,因为我们预计硬币会以开始的方式继续翻转。所以,我们发现当我们看数据时,MLE 解释了我们的直觉,这很好。
MLE 的缺点?
显然,正如我们在阶梯图中已经看到的,找到最大似然并不是参数估计的结束。我们还剩下最大事后估计和完全贝叶斯分析。那么,是什么促使我们不止步于 MLE 并完成流程呢?你能想出一个理由吗?
如果序列如下所示会怎样:
Img. 18: A sequence of two Heads
你认为第三次翻转是反面的概率是多少?
在即将到来的帖子中,我们将探索 MLE 的缺点,找出 MAP ( 最大后验估计)和完全贝叶斯分析背后的直观原理,并且还将建立 ML 中的几个关键概念,即。共轭先验,归纳先验和一种允许我们计算不可解积分的技术。
如果你心中有任何概念对你来说没有直观的意义,并希望看到类似的帖子,请在评论中告诉我,我会尽力提出来。
资源:
- 我在慕尼黑工业大学的研究生院教授的精彩的 ML 课程。你可以在这个 YouTube 频道观看所有讲座。
如果你喜欢这篇文章,请随意推荐和分享,这样其他人也可以从中受益。