TowardsDataScience 博客中文翻译 2019(一百四十七)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

深度学习和动量投资

原文:https://towardsdatascience.com/deep-learning-and-momentum-investing-2273e8db5b86?source=collection_archive---------4-----------------------

了解如何以规范和可解释的方式将深度学习模型应用于金融数据

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

在这篇文章中,我概述了我关于深度学习和美国股票动量的新工作论文。我从论文的简短摘要开始,强调研究问题和主要结果,然后我故意戴上我的实践者的帽子(买方 quant / PM,目前在工作和新机会之间转换,提示提示),并专注于纪律量化研究的以下实际方面:

  1. 主动选择特性和特性工程
  2. 选择最佳网络架构和构建集成的系统方法
  3. 模型预测的解释

该论文可在 SSRN网站上获得,论文摘要可在这里找到。我们欢迎并热切期待您的评论、建议和反馈。

这篇文章相当长,所以这里是关键的要点:

  • 我在深度学习框架中调查了一系列动量相关变量的预测能力,并记录了丰富的非线性时变结构对预期回报的影响。建立在深度学习模型预测基础上的投资策略积极利用非线性和互动效应,产生高且具有统计显著性的回报,具有稳健的风险特征,其表现实际上与既定的风险因素不相关。
  • 对模型输入的深思熟虑的方法是至关重要的:金融数据的常见问题,例如稀缺性、非平稳性和状态依赖性,可以通过主动选择功能和功能工程来缓解。
  • 自动化超参数优化非常重要,不仅因为它可以带来更好的模型架构,还因为它增加了一层额外的建模规则,增强了结果的可重复性。
  • 机器学习模型预测的可解释性至关重要。将预测与资产行为的既定事实联系起来的能力是对结果的健全性检查。

一.导言和总结

在金融学中,动量指的是通过过去的价格数据对横截面收益的可预测性。一个标准的例子是,在过去 1 至 12 个月中有高回报的股票继续跑赢同期表现不佳的股票。买入过去的赢家,卖出过去的输家,从而获得正回报,这是金融研究中长期存在的市场异常现象,记录了几乎每一种资产类别,实际上已经有几百年了。请注意,由于股票是与同类股票相比较的,我们谈论的是横截面的可预测性,而不是时间序列动量或趋势跟踪,在时间序列动量或趋势跟踪中,买卖股票的决定仅取决于其过去的表现。在过去的四分之一世纪里,金融文献提出了许多衡量动量的方法,例如从回望视野的角度,并确定了许多令人困惑的变量,如市场波动性,作为一种投资策略来预测其表现。新兴的金融机器学习领域进一步发现,过去的价格数据是未来回报的最强预测因素之一,主导着账面市值比等基本变量。

在本文中,我在深度学习框架中,在不同的时间范围内,研究了一系列基于价格的特征的预测能力。我的成果和贡献如下:

  • **实证:**我记录了这些特征对美国股票市场预期回报的影响中丰富的非线性结构。冲击的大小和符号表现出显著的时间变化,并受特征间相互作用的影响。预期回报的非线性程度也会随着时间的推移而发生很大变化,在不景气的市场中这种程度最高。
  • **方法论:**我利用神经网络输出相对于输入的可微性来研究特征对模型预测的方向性影响、它们随时间的演变以及与其他变量的相互作用。这种分析允许明确地将预测与动量的程式化事实联系起来,从而增加结果的透明度,并展示臭名昭著的黑盒算法的可解释性。我进一步展示了如何利用超参数优化和集成构建方法,以系统的方式选择性能最佳的模型。
  • **实用:**建立在深度学习模型的样本外预测基础上的投资策略积极利用非线性和交互效应,产生高且具有统计意义的回报,具有稳健的风险特征,其表现实际上与既定的风险因素无关,包括动量和来自当前文献的机器学习投资组合。

该员额的其余部分组织如下:

二。特性工程
III 的重要性。型号和数据T5 IV。超参数优化与集成构建
五、测试集结果与预测的可解释性
六、测试集结果与预测的可解释性。结束语

二。为什么特性选择和特性工程很重要?

财务数据是特殊的,需要深思熟虑的方法。首先,与机器学习应用的数据集标准相比,它在范围和可用性方面相当有限——事实上,对于绝大多数市场,我们在 20 世纪 90 年代之前没有高质量的数据。其次,金融数据不是平稳的,这进一步加剧了这个问题。概括地说,管理数据生成过程的规则可以随着时间的推移而改变,例如,三十年前的交易成本比现在高一个数量级,尤其是对于较小的股票,因此保持其他一切都相同,相对于较大和流动性更好的股票,预期回报更高。此外,驱动回报的许多重要变量可能会从模型中忽略,或者在训练集上无法体验到它们的全部值。这个问题的一个具体例子是资产价格在高市场波动期和低市场波动期的截然不同的行为,或制度— 在覆盖仅对应于其中一个制度的时间段的数据子集上训练模型会削弱模型在测试集上进行概括的能力。当然,不仅是市场波动,还有其他变量,如宏观经济统计数据、货币政策声明情绪等。可以概括市场的整体状态。第三,金融数据表现出非常低的信噪比。鉴于像神经网络这样最强大的模型是低偏差和高方差的学习器,这意味着模型过度适应数据中的噪声。总而言之,在金融领域,我们没有几十亿张猫图片来训练模型;金融猫也大多看起来像噪音,如果环境温度低于零度,它们可以在每个闰年的第三个星期四以未知的概率变成绦虫或猫头鹰。

上述所有问题意味着,我们不能依赖绞肉机方法,简单地插入所有可用的原始数据,希望算法将拾取重要的特征,而不会严重过度拟合固有噪声。幸运的是,我们在回报可预测性方面有几十年的研究,基本上是在做功能工程。更重要的是,这些工程特征在它们预测回报的能力背后有一些理论或经验上的正当理由。

例如,帖子顶部的数字显示了 2009 年初多空标准动量策略(即买入过去的赢家,卖出过去的输家)的回报率暴跌。标准的动量交易是根据股票在过去 12 个月的表现来买卖股票,跳过最近一个月,它通常被称为 12-1 动量交易。崩盘的机制很好理解:单个股票回报率的大部分差异都可以归因于一个因素——市场。当市场上涨时,表现出与市场高度同步的股票表现优于与市场相关性较低的股票。在市场低迷时期,情况正好相反。我们可以通过估计斜率系数来衡量共同运动的规范化程度,或在以下股票收益率对市场收益率的简单线性回归中估计βT3,也称为市场模型*😗

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

其中回归的截距,或 *alpha,*衡量股票 i 收益中与市场正交的部分。到 2007 年底,美国股市进入低迷期,到 2009 年初市值损失了一半以上,因此 12-1 momentum 策略投资于低贝塔股票,这些股票在 2008 年市场崩溃中相对未受影响,并做空损失最大的高贝塔股票。请注意,策略或投资组合是其组成部分的线性组合:多头头寸的低贝塔减去空头头寸的高贝塔导致投资组合的总体贝塔为负。换句话说,在 2009 年初,12 比 1 的势头与市场背道而驰。当市场迅速反弹时,这一势头遭受了大萧条后历史上第二次最严重的崩溃,在此期间,12 比 1 的势头踩在同一耙子上。图 1 通过绘制标准普尔 500 指数(顶部面板)的值以及单个股票过去的赢家和输家之间的平均一年市场贝塔值的差异,提供了一个直观的说明。动量策略的平均贝塔值在 2009 年 6 月才再次变为正值,当时市场已经比最低点回升了约 25%。

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

Figure 1: S&P 500 and market beta of momentum strategy

参见丹尼尔和莫斯科维茨(2016) 了解更多关于动量碰撞的信息。
参见这篇文章的第 2.1 节,作者 Boris B 举例说明为什么某些特征作为 ML 算法的输入变量是有意义的

事实上,现有的研究可以为一个好的模型应该能够解释什么提供有力的见解。几段推理立刻给我们一种直觉,市场回报、贝塔系数及其相互作用可能是至关重要的特征。事实上,上面看似简单的单变量回归提供了两个具有经验和理论支持的额外特征:截距或 alpha 的估计值,以及衡量特质波动率的残差的标准差。这里的关键点是,我们可以利用我们对预测回报的特性及其转换的先验知识,设计一组更简洁和可解释的变量,而不是将回报的整个时间序列输入模型,希望它能够自己计算出估计值,并冒着遇到本节开头概述的问题的风险。

我甚至没有触及数据质量问题,这本身是一个重要的话题,但对于动量研究来说是一个较小的问题,因为价格数据与基本会计比率相比相当干净,例如,基本会计比率可以滞后报告,并受到数据提供商的修订,这意味着我们用于训练模型的数据可能与我们在实际应用中的数据有很大不同。

我向对机器学习应用中金融数据的警告感兴趣的读者推荐阿诺特、哈维和马科维茨(2019)

三。模型和数据

A .型号

我将回报预测任务指定为一个分类问题,并估计股票下个月的回报高于和低于整个横截面的中值回报的概率。股票 i 的预测目标或标签定义如下:

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

给定股票 *i 在 *t,X(i,t),特征向量,预测概率是特征和权重的函数:

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

我选择最简单的架构——多层感知器——并通过使用 Adam optimizer 最小化二进制交叉熵来训练模型。我进一步在每个迷你批次中执行了类的平等表示,发现这极大地提高了训练的稳定性。为了正规化,我采用提前停止和辍学。

分类提供了几个优于回归的优势,回归是实证资产定价的主要方法。首先,通过构造,标签在时间上具有相同的分布和相同的幅度,从而通过减轻收益率的横截面分布中的时间变化问题来简化训练。第二,由于二元分类覆盖了整个样本空间,假设测量误差是随机的,则高于某个常数(在我们的情况下是横截面中值)的估计回报率与预期回报率成正比。第三,在实践中,我们往往更关心一项资产相对于其同行的预期表现,而不是对其未来回报的点估计。

B .数据

我使用的是 1965 年 1 月至 2018 年 12 月期间美国股票的标准 CRSP 数据集。在应用数据可用性过滤器后,样本中只剩下大约 20,000 只不同的股票。我还特意将分析的主要部分集中在最大股票的子样本上,每月选择市值最高的 500 只股票,将其余股票作为稳健性检查。由此得出的子样本平均覆盖了美国股票市场总资本的四分之三,在每日回报方面与标准普尔 500 在统计上没有区别。关注大盘股的主要原因是,最近的重复研究提供了令人信服的证据,表明预测回报的绝大多数变量的预测能力都集中在小盘股和小盘股上,这在交易成本和交易价格影响是现实的实践中非常重要。

我将预测范围设置为一个月,并将样本划分如下:训练集涵盖了从 1965 年 1 月到 1982 年 12 月的时间,包括 105,177 个股票月样本;验证集是从 1983 年 1 月到 1989 年 12 月(41,408 个例子);并且测试集是从 1990 年 1 月到 2018 年 12 月(170385)。包括所有股票的附加测试集包含超过 1,200,000 个示例。

根据上一节的讨论,我构建了一组特征,这些特征是由先前研究中的发现激发的,并具有一些为什么或如何与预期回报相关联的基本原理。例如,我包括了 10 天、1、2、3、6、12、18、24 个月的市场回报和波动性,或者上一节中估计的 10 天到 12 个月的市场模型回归的 alpha 和 beta。在论文的第二部分可以找到特征的完整列表、它们背后的基本原理以及相应研究的参考文献。

为了便于训练,我将特定股票的变量标准化,即股票的过去收益、贝塔系数、阿尔法系数等。,通过计算每个时间段的 z 分数。对于市场波动和回报的时间序列,我计算了相对于他们自己的历史到估计日期的 z 分数,以避免前瞻偏差。

四。选择最佳神经网络结构并构建集成

A .超参数优化

深度学习模型对决定模型架构和指导估计过程的超参数的选择非常敏感。模型的性能通常更多地取决于超参数,而不是特定模型的复杂程度。 Bergstra 等人(2013) 认为超参数调整应该是模型评估的正式、量化和可重复的一部分。 Bergstra 等人(2011) 介绍了 TPE 算法——一种允许将超参数调整任务形式化为外部优化问题的顺序贝叶斯优化技术。他们证明 TPE 优于手动和随机搜索。该算法的思想是从超参数 θ 的先验分布开始,将损耗建模为 θ 的随机函数,然后从与低于某个阈值的损耗值相对应的“良好”分布中采样超参数,并挑选最大化下一个优化步骤的预期损耗改善的超参数值。随着优化的进行,采样的超参数收敛到它们的真实值。算法的正式数学描述可以在我论文的附录中找到。以下是几个链接,其中举例说明了如何在 Python 中使用 TPE 和其他超参数优化算法:

一个教程由 Vooban
应用一个密切相关的方法——高斯过程由 Boris B
贝叶斯优化算法由 Yurii Shevchuk 在纽皮
一个教程由 Dawid Kopczyk

我将超参数优化目标函数定义如下:对于一组超参数值,我首先估计模型五次,并挑选每个模型实现的验证损失的五个最佳值,目标值是这 25 个值的平均验证损失。由于训练在很大程度上是随机的,我明确地寻找能够在每次评估运行中和不同运行之间持续实现较低损失的架构。表 1 报告了超参数的先验分布:

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

Table 1: Hyperparameter priors

我使用随机搜索对目标进行 25 次评估来初始化算法,然后执行 700 次 TPE 迭代。图 2 描绘了 TPE 优化过程中的平均损失:蓝点是最佳 50%评估的损失;红色实线是扩大的第一个十分位数的损失,黑色虚线表示每个 TPE 步骤达到的最小损失。

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

Figure 2: TPE optimization progress

随着时间的推移,该算法不断提出更好的超参数配置。下图显示了 TPE 如何在迭代过程中调整超参数的分布,绘制了 TPE 优化的前半部分(蓝色)和后半部分(红色)的学习率(左侧图)和辍学率(右侧图)的十进制对数的先验(黑色虚线)和经验密度:分布向学习率的低值和辍学率的高值收敛。

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

Figure 3: Distributions of hyperparameters during TPE optimization

B .最优系综

神经网络是低偏差和高方差算法,因此像模型集成这样的方差减少技术提供了巨大的优势,同时计算成本低廉。更重要的是,我们可以以简单的方式为集合的每个成分的预测分配最优的权重,而不是简单地平均几个模型的预测。我挑选了在超参数优化过程中实现最低验证损失的 20 个模型规范作为集成的初始候选,然后遵循卡鲁阿纳等人(2004) 算法:从具有最佳模型的大小为 1 的集成开始,每次迭代我从模型池中添加一个新模型(带有替换),使得集成的平均预测产生最低的验证损失。图 4 绘制了算法迭代过程中的集合验证损失:黑色虚线对应于最佳模型的损失,蓝色实线绘制了优化过程中的集合损失。

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

Figure 4: Validation loss during ensemble optimization

在大约 12 次迭代之后,该算法停止考虑新的模型,而是继续调整现有成分的权重。由于集成优化在计算上是廉价的,所以我在测试集上的每次预测之前,使用新的可用信息重新优化集成。

动词 (verb 的缩写)测试集结果和预测的可解释性

答:样本外结果

首先,为了衡量模型对看不见的数据进行归纳的能力,让我们看一下测试集损失。图 5 绘制了总体损失相对于其验证损失的曲线(黑色虚线归一化为 1)。红线表示测试集的平均损失,灰线表示每个月所有股票的平均损失,蓝线表示这个平均值的 12 个月的滚动平均值。就损失而言,与验证集相比,模型的测试集性能平均下降了约三分之一个百分点。这并不奇怪,因为我使用相同的验证数据估计了数百个规范:在验证集上尝试的规范越多,最好的模型偶然超过验证集的可能性就越大——这一点要永远记住。尽管如此,差异还是很小。更重要的是,随着时间的推移,测试损失是稳定的,围绕其长期均值波动。

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

Figure 5: Test set loss

回想一下,该模型输出了下个月的回报率高于横截面中值回报率的估计概率。因此,我们可以直接将预测转化为投资策略,在给定的预测概率范围内购买股票。表 2 报告了最大的 500 只股票样本的等权重投资组合的回报(超过无风险利率)的描述性统计数据。例如,第一组三列报告中位数排序的统计数据:投资于预测概率低于中位数预测概率的股票的投资组合(第一列);高于这个概率(第二列);多空投资组合卖出第一个投资组合中的股票,买入第二个投资组合(第三列)中的股票。类似地,第二个和第三个三元组报告最低和最高预测概率组合的统计数据,概率分别分成五分位数和十分位数。均值、中值回报及其标准差以百分比表示。夏普比率衡量每单位风险的回报,按年计算;最大提现(一项投资经历过的最差回报),最大单月亏损和平均月成交量以百分比表示。括号中的数字是均值回报等于零的零假设的 HAC t 统计量。

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

Table 2: Descriptive statistics of ensemble portfolios: 500 largest stocks

有效做空一半标准普尔 500 成份股并投资另一半的投资组合平均年收益率为 7.2%,这在任何传统水平上都具有显著的统计意义。随着极端十分位数投资组合之间的差异越来越大,高投资组合和低投资组合之间的差距扩大到每年 17.7%。这种增长同时来自“高”和“低”投资组合的较高(较低)回报,为模型捕捉预期回报的横截面分布提供了证据。中位数和十分位数的年度夏普比率分别从 1.11 升至 1.34。对于更集中的种类,投资组合的回报也变得更加正偏。相比之下,同期美国股市的超额收益率为 7.1%,夏普比率为 0.48,最大提取率超过 50%。

下图描绘了投资于整体投资组合的 1 美元的价值(以自然对数表示)。顶部和底部的子图分别显示最大的 500 只股票和所有股票的结果。左图描绘了根据预测概率中值(蓝色实线和虚线)排序的高低投资组合的回报,以及整个股票市场的超额回报(黑色)。右边的面板显示了多空投资组合的回报:中位数、五分位数和十分位数分别用蓝色、红色和灰色绘制。关于“所有股票”样本,表现甚至进一步改善:例如,十分位数投资组合(右下角面板中的灰线)之间的平均收益率差增加到每年 22.3%(t 统计值为 10.5),夏普比率上升到 2 以上。然而,这些原始数据是根据 g̵r̵a̵i̵n 的一卡车盐得出的,没有仔细分析交易成本和可交易性问题。

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

Figure 6.a: Out-of-sample performance of ensemble portfolios: 500 largest stocks

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

Figure 6.b: Out-of-sample performance of ensemble portfolios: all stocks

现有的风险因素能解释整体投资组合的回报吗?

不,他们不能。表 3 报告了时间序列跨度测试的结果,即 Fama 和 French (2015) plus momentum 投资组合的五个因素对总体投资组合超额收益的回归(关于 Fama-French 因素的简要讨论可参见此处)。这些回归的目标是确定测试资产(在我们的例子中是神经网络投资组合)的回报是否可以表示为因素(通常是以前建立的非零回报投资策略,如市场风险溢价)的线性组合。在零假设下,测试资产被因子跨越,回归中的截距或 alphas 为零;斜率估计值衡量测试资产的回报与给定因素的回报的相关程度。

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

Table 3: Spanning tests, 6-factor model

对于表 3 中的每个测试资产(跨行),第一列报告了估计截距α,单位为百分比 p.a,接下来的六列报告了因子的系数,最后一列显示了回归的调整 R。从这一练习中得出的关键结论是,整体投资组合的回报不能被其他风险因素捕捉到,从而产生大量具有统计显著性的阿尔法值。P2-P1 的长短结合投资组合的回报基本上与任何解释变量都不相关。在论文中,我进一步表明,这一结果适用于其他投资组合类别,并且当这组因素包括对冲基金回报和当前金融机器学习文献中其他投资组合的回报时,这一结果是稳健的。

c .哪些特征推动了绩效?

让我们回顾一下目前我们所掌握的信息:

1.该模型很好地概括了样本外的情况,并捕捉到了预期回报的横截面分布。
2。基于整体预测的投资组合会产生高回报,且具有统计学意义。
3。整体投资组合的表现与其他投资策略和既定风险因素无关。

跳过头寸规模和交易成本的重要话题,让我们关注哪些特征推动了预测,它们是如何做到的,以及它是否有意义。

图 7 显示了相对于模型输入,股票回报高于下个月横截面中值回报的预测概率的偏导数。根据平均梯度排列的顶部和底部 10 个输入变量横跨纵轴。对于给定的特征,彩色条和晶须分别代表测试集上所有梯度评估的四分位数和 5–95%范围。每个条形内的黑色实线和圆点表示梯度的中值和平均值。由于变量被标准化为均值为零,标准差为一,解释如下:在其他条件不变的情况下,一只股票的一年 alpha 相对于横截面增加一个小的δ,会使股票收益在下个月高于横截面中位数的预测概率增加大约 100×δ%。

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

Figure 7: Gradients of predicted probabilities w.r.t. inputs

本质上,上图报告了无条件的预期收益预测值。预测正回报的最显著的横截面特征是 9 个月到 1 年的市场模型 alpha,以及 6 个月和 1 年的价格动量。事实上,一年的 alpha 非常稳健:在超过 170,000 个观察值中,只有两个相对于该变量具有负梯度。在无条件预测因素中,唯一的市场状态变量是 2 年的市场回报。除了与短期反转和信息离散性一致的短期价格特征外, fip (旨在衡量回报是以几次大的跳跃还是以许多小的增量累积的特征),价格动量和市场模型 alpha 在 7 至 8 个月的时间范围内是低预期回报的主要预测因素。事实上,价格动量对预测概率的最大积极贡献出现在 6 个月和 12 个月的回望期,下图(图 8)显示了预测概率相对于价格动量(左图)和市场模型 alpha(右图)对回望期的平均偏导数。少于一个月的跨度被聚集到一个月的仓位中。另一方面,在短于 9 个月的时间范围内,alpha 的贡献恢复为负值。一个特殊的特征是,在六个月的时间范围内,两个变量的梯度都比周围回望期的高得多。总的来说,上面概述的影响与金融文献中的经验证据一致(我在文中提供了参考相关研究的详细讨论)。

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

Figure 8: Gradients of predicted probabilities w.r.t. to inputs by lookback horizon

如果预测更高预期回报的主要特征是 alpha 和动量,那么为什么多空组合投资与使用这些变量的投资策略无关,例如使用过去回报的动量,以及当动量在 2008-2009 年期间受到压制时,这些投资组合如何设法表现出非凡的表现?答案是:功能与市场状态变量的相互作用。

图 9 显示了根据预测概率排序的长短十分位数投资组合的 10 个最大和最小平均梯度。梯度的解释变得有点麻烦,例如:在其他条件相同的情况下,10 天市场回报的一个小的δ变化平均会将股票在投资组合长线中的预测概率增加 0.2×100×δ%。尽管许多变量是回报的相当强的无条件预测器,但多空神经网络投资组合并不简单地买入一年的 alpha 并卖出短期动量。事实上,该投资组合并未表现出任何系统性的横截面特征风险,其幅度与仅做多案例中的风险相似。当然,平均而言,投资组合倾向于押注于贝塔系数、信息离散性和短期特质波动性,但大约有 25%的股票月押注相反。平均而言,投资组合也具有长期市场波动性和市场回报,但这些梯度的变化也是显著的。市场状态变量的优势以及梯度方面的分散赌注使得表 3 中的时间序列测试中的经典静态资产定价因子在捕捉神经网络投资组合回报的变化方面几乎没有解释力,这并不令人惊讶。

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

Figure 9: Gradients of predicted probabilities of long-short portfolio

为了证明市场状态特征如何调节横截面特征的重要性,我绘制了长-短十分位数投资组合的 Hessian 分割图,包括 alpha(图 10)、beta(图 11)和市场状态特征(横轴)。随着市场波动性上升,长期衡量的阿尔法值(以及价格动量,因为两者高度相关)的重要性下降,而短期阿尔法值的梯度上升。最长三个月的市场回报正好相反。换句话说,在不景气的市场中,当回报率低而波动性高时,该模型会动态地将更多的重要性分配给近期表现。

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

Figure 10: Second order effects, impact of market state features on alphas

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

Figure 11: Second order effects, impact of market state features on betas

对贝塔系数来说,市场波动性增加的影响总体上是积极的,除了短期。如果类似期限的市场回报高于其长期平均水平,则贝塔系数在更长的期限内获得更高的梯度。短期市场回报非常积极地调节贝塔系数,例如,允许直接利用第二节中讨论的病态动量行为:当市场趋势恢复向上时,即短期市场回报增加时,关于贝塔系数的预测梯度也增加,这对于 10 天市场回报尤为突出。

不及物动词结束语

当然,拥有将传统金融预测方法打得落花流水的模型是件好事,但《邮报》的信息更加微妙:

首先,正确处理数据在金融机器学习中至关重要:除了确保数据集的质量,提出关于哪些功能应该工作以及为什么工作的假设或心理模型也是有用的。这至少有两个目的:(I)通过消除主导原始数据的噪声,工程特征使得算法更容易学习输入和预测之间的关联;(二)缓解了倾听的问题——在结果已知后的假设——人类非常擅长愚弄自己。

其次,自动化超参数优化不仅允许以系统的方式搜索性能最佳的架构,更重要的是,它还有助于结果的再现性。

第三,预测的可解释性对于理解模型如何工作以及结果是否通过健全性检查至关重要。此外,掌握模型在什么条件下会失效也很关键。

欢迎评论和反馈。感谢您的阅读。

参考

r .阿诺特、C. R .哈维和 h .马科维茨(2019 年)。机器学习时代的回溯测试协议。《金融数据科学杂志》1 (1),64–74。在 https://ssrn.com/abstract=3275654有售

伯格斯特拉、J. S .、巴登内特、r .、本吉奥、y .、凯格尔、B. (2011 年)。超参数优化算法。在神经信息处理系统的进展(第 2546–2554 页)。

伯格斯特拉,j .,亚明斯,d .,,考克斯,D. D. (2013)。创建模型搜索的科学:视觉架构的数百维超参数优化。

Caruana,r .,Niculescu-Mizil,a .,Crew,g .,& Ksikes,A. (2004 年 7 月)。模型库中的集成选择。在第二十一届机器学习国际会议论文集(第 18 页)。ACM。

丹尼尔,k .,&莫斯科维茨,T. J. (2016)。动量崩溃。财经杂志122 (2),221–247。在https://ssrn.com/abstract=2371227有售

Fama,E. F .,& French,K. R. (2015 年)。五因素资产定价模型。财经杂志116 (1),1–22。

深度学习和 SAR 应用

原文:https://towardsdatascience.com/deep-learning-and-sar-applications-81ba1a319def?source=collection_archive---------3-----------------------

地球观测应用的进展和挑战概述

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

High resolution (25cm) SAR data from F-SAR, a DLR airborne system. Image courtesy of DLR, the German Aerospace Center

介绍

虽然深度学习的炒作周期似乎正在消退一点(神经网络人工智能很简单!),神经网络和计算机视觉的复兴正在成为常态,在过去五年中,这些技术在遥感领域出现了许多有用的应用。目标检测和土地覆盖分类似乎是深度学习在遥感中研究最多和商业化程度最高的应用,但还有许多其他领域也受益于,如数据融合、3D 重建和图像配准。深度学习在遥感中日益广泛的使用是由于两个趋势:1)无处不在、易于使用的云计算基础设施,包括 GPUs2)易于使用的机器学习工具的开发和越来越多的采用,如谷歌的 Tensorflow、AWS SageMaker 和许多其他的开源框架;以及 3)一个不断扩大的服务生态系统,用于创建带标签的训练数据(规模数字 8)以及开放的带标签数据集,如 AWS 上的SpaceNet

深度学习、神经网络和计算机视觉近年来也越来越频繁地用于合成孔径雷达(SAR)数据。大多数领先的卫星地球观测分析公司,如 Orbital Insight笛卡尔实验室Ursa 已经在其分析工作流程中扩大了 SAR 数据的使用。据我所见,从这些技术的使用中受益最大的领域是:目标检测(自动目标识别)、土地覆盖分类、变化检测和数据扩充。最近似乎也有一些关于深度学习的应用如何有利于干涉 SAR 分析的调查。然而,使用 SAR 数据进行深度学习存在一些挑战。其中,明显缺乏大的标记训练数据集,并且因为 SAR 数据具有斑点噪声,并且比光学数据稍不直观,所以对于人类标记器和模型来说,正确地对特征进行分类可能是一个挑战。

我将重点介绍一些将受益于深度学习和高重访、高分辨率 SAR 数据的应用,比如来自五车二星座的数据。我还将概述一些挑战,五车二希望帮助更广泛的 SAR 用户群体解决这些挑战。

目标检测

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

Automated target recognition with a CNN and the MSTAR dataset.

SAR 深度学习应用的大多数研究和开发都是针对对象检测和土地覆盖分类的。在合成孔径雷达领域,目标检测通常被称为自动目标识别(ATR)。ATR 的研究在 90 年代获得了动力,起源于军事应用,但后来扩展到广泛的民用商业用途。文献中已经研究了一系列 ATR 问题,从在已知地形和杂波中找到一个很好理解的目标,到根据视角和其他目标的遮挡识别可能具有明显不同的 SAR 响应的目标。一般来说,这个问题涉及到寻找相对较小的目标(车辆、船只、电力基础设施、石油和天然气基础设施等)。)在杂乱主导的大场景中。

最近,卷积神经网络(CNN)的使用提高了各种目标的目标识别模型的性能。CNN 在 SAR ATR 中的首次出现似乎是在最近的 2015 年,当时证明了 CNN 的使用与当时被认为是最先进的其他方法具有竞争力。其他人已经扩展了这项工作,并且展示了 MSTAR 数据集中特征的> 99%的分类准确率,其中包括军用车辆。近年来,更多使用 CNN 的民用和商用例子不断涌现,包括一个绘制电网图的项目,一个辨别船只和冰山的竞赛,以及一些识别浮油钻井平台的研究。到目前为止,我接触到的大部分工作都集中在雷达反向散射图像上,但一些论文强调了使用相位数据获得额外目标信息的潜力。

土地覆盖分类

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

Classifying sea ice depth from Sentinel-1 data using a CNN.

较大特征和土地覆盖的分类也受益于深度学习方法和独立于天气的可靠 SAR 监测的应用。虽然使用神经网络进行 SAR 数据分类并不新鲜,但自 2015 年引入完全卷积神经网络以来,深度学习用于土地覆盖分类的使用似乎大大增加了。已经有很多研究在探索使用 CNN 对常见土地覆盖进行分类的可行性,比如道路建筑洪水城市区域农作物。深度学习还被用于一些有趣的非典型土地覆盖(或水覆盖)应用,如识别石油泄漏对不同厚度的海冰进行分类。通常,深度学习的使用优于经典方法,尽管它在时间和计算成本上可能不会更有效。然而,与所有监督学习技术一样,性能高度依赖于标记训练数据的质量。

变化检测

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

Detecting urban change in UAVSAR data using stacked autoencoders.

高分辨率、高节奏的 SAR 数据非常适合变化检测应用,因为它能够看穿云层并捕捉反射能量振幅和相位相干性的变化。我惊讶地发现,对于深度神经网络在 SAR 数据变化检测中的应用,已经有了如此多的研究。与主要使用 CNN 的目标检测不同,已经有多种神经网络方法用于解决识别 SAR 数据中表面变化的问题。一般来说,这些方法要么依赖于对多时相叠加的土地覆盖进行分类,然后比较分类后的结果,要么对多时相数据之间的辐射差异或相位差进行分类。有使用受限玻尔兹曼机器PCANet堆叠自动编码器和多层感知器监督收缩自动编码器(sCAE)和聚类sCAEs 和模糊 c 均值以及 CNNs 的后一种方法的例子。还有另一类有趣的方法,使用 SAR 和光学图像作为输入,并使用深度卷积耦合网络来识别异构数据的变化。大多数研究得出结论,深度学习方法比以前使用马尔可夫随机场和主成分分析的方法表现出更好的性能(更低的假阳性和假阴性率)。

变形监测和 InSAR

在使用深度学习方法分析干涉图或支持 InSAR 处理方面,似乎迄今为止还没有太多的研究。然而,有证据表明人们对这一领域感兴趣,一些早期研究使用 CNN 识别包裹阶段的变形模式,以及资助的项目将深度学习方法集成到 InSAR 处理链中。在将深度学习方法应用于相位展开方面,也有一些更广泛适用的工作。我们很可能会在未来几年看到更多关于这些主题的公开研究,因为各种机构都有公开的博士职位,专注于将机器学习应用于 InSAR 工作流。

数据扩充

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

Generating High Quality Visible Images from SAR Images Using a GAN.

已经有一些有趣的研究将 CNN 和生成对抗网络(GANs)应用于 SAR 数据增强和数据融合。一个有益于目标探测的研究领域是使用CNN 来估计和减少 SAR 振幅数据中的斑点噪声。结果是通过单个前馈过程产生“干净”的 SAR 图像。还可以使用 GANs 提高 SAR 数据的表观分辨率。在文献中,有从 Sentinel-1 分辨率到 TerraSAR-X 分辨率的图像转换的例子。虽然这些方法似乎不能很好地保持特征结构,但它们对 SAR 的超分辨率和风格转换的未来是一个有趣的观点。还可以使用 GANs通过去斑点和彩色化使高分辨率 SAR 数据看起来更像光学图像,这可以帮助 SAR 图像的视觉解释。现在有新的数据集可用,这将有助于推进这种类型的工作和其他需要 SAR 和光学数据融合的应用。

挑战

当我回顾关于这些应用的文献时,一个共同的挑战是显而易见的:缺乏高质量的标注 SAR 训练数据,特别是在高分辨率下。与所有监督学习方法一样,模型的性能和结果高度依赖于训练数据输入。最常用的高质量训练数据集是 MSTAR 数据集,但它只包含有限数量的军事特征。其他研究人员已经求助于创建他们自己的带注释的训练数据集,但是组装大型全球数据集可能会非常昂贵,因为高分辨率源数据的选项有限,并且很少有开放许可证(例如 UAVSAR )。有一些方法可以通过模拟和迁移学习来增强训练数据,但您仍然需要一个合理的数据集作为起点。我计划在以后的博客文章中讨论这一挑战、一般的搜救训练数据以及五车二的设想。

五车二致力于通过支持为各种商业和政府用例创建大型高分辨率标记 SAR 训练数据集的工作,为使用 SAR 数据开发深度学习应用的社区做出贡献。如果您正在使用航空或卫星 SAR 数据进行对象检测、变化检测和其他深度学习应用, 我们希望收到您的来信 ,了解更多关于您的工作和您面临的挑战。

深度学习和土壤科学—第 3 部分

原文:https://towardsdatascience.com/deep-learning-and-soil-science-part-3-c793407e4997?source=collection_archive---------17-----------------------

土壤光谱学和迁移学习

这是我致力于深度学习在土壤科学中的应用的系列文章的第二篇。这是一个正在进行的系列,到目前为止还包括:

[## 深度学习和土壤科学—第 1 部分

预测土壤性质的土壤光谱学。根据光谱图预测多种土壤特性的多任务卷积神经网络。

towarsdatascience.com](https://medium.com/@spadarian/deep-learning-and-soil-science-part-1-8c0669b18097) [## 深度学习和土壤科学—第二部分

使用上下文空间信息的数字土壤制图。从点信息生成土壤图的多任务 CNN。

towardsdatascience.com](/deep-learning-and-soil-science-part-2-129e0cb4be94)

其他与地球科学相关的文章:

[## 用 SHAP 解释 CNN 生成的土壤地图

使用 SHAP 来证实数字土壤制图 CNN 捕捉到了合理的关系。

towardsdatascience.com](/explaining-a-cnn-generated-soil-map-with-shap-f1ec08a041eb) [## GeoVec:用于地球科学的单词嵌入

词语嵌入的类比、分类、关联和空间插值。

towardsdatascience.com](/geovec-word-embeddings-for-geosciences-ac1e1e854e19)

系列的第一部分中,我介绍了一个多任务卷积神经网络(CNN ),用于从光谱数据中同时预测多种土壤特性。我们观察到,与传统方法相比,预测误差显著降低,这要归功于 a)CNN 处理复杂信号的卓越能力,以及 b)多任务学习的协同效应。

在这篇文章中,我将谈论土壤光谱学背景下的迁移学习。这是之前工作的延伸,所以我将跳过土壤光谱数据、光谱图和多任务学习等概念。

语境

规模问题

据信,在特定区域或土壤范围内生成的模型在该区域表现最佳,而在应用于其他对比土壤类型时表现不佳。在土壤学中,土壤属性的高度空间依赖性意味着为特定区域生成的模型应在该空间域之外小心使用,因为它们可能会失去有效性。反过来,将全球、大陆或国家光谱库应用于局部地区或区域也会有问题。国家模型在该国的局部地区应用时往往表现不佳。当在国家一级应用全球模式时,观察到同样的情况。这是可以理解的,因为全球或国家模型通常能够捕捉到跨越不同土壤类型的更广泛的总体趋势。另一方面,局部区域可能具有全球模型无法捕捉的短尺度变化。

本文使用的术语“全球”模型是指基于大规模光谱库(本系列第一部分的中使用的同一欧洲光谱库)校准的模型,而“本地”是指“全球”数据集(国家)内的一个区域。全局和局部模型都是有价值的,理想情况下,我们希望将从更一般的全局模型中学到的一些规则转移到局部领域。在机器学习中,这种共享域内信息的过程被称为迁移学习。

这项工作旨在评估迁移学习的有效性,将通用土壤光谱校准模型“本地化”到一个国家的背景下,模拟全球数据集对当地用户不可用的情况。据我们所知,这是迁移学习首次应用于土壤光谱建模。

迁移学习

“我手上的一幅连环漫画是关于制造专家系统的公司之间的工业间谍活动的。一家公司通过开发超级专家系统获得了市场领先地位,另一家公司雇佣了一名间谍来了解他们是如何做到的。这名间谍闯入另一家公司,却发现他们正在捕获人类专家,取走他们的大脑,将他们切成薄片,然后将这些薄片插入他们最畅销的模型中。”

哈利·柯林斯。人类、机器和知识结构。

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

Original image: https://pixabay.com/photo-1787622/

作为人类,我们能够将之前获得的知识应用到具有相似特征的任务中。迁移学习,也称为归纳学习,是 ML 的一个分支,试图模拟这一过程。在我们的特殊情况下,给定一个全局数据域 G 和一个局部数据域 L ,以及 LG ,传统的 ML 方法认为两个域是不同的,生成两个独立的模型, f ( G )和 f ( L )。相比之下,承认 GL 在某种程度上相关,迁移学习能够使用由 f ( G )结合数据域l’、⊆l所学习的部分概括来生成模型f(l’)。值得注意的是,在实践中,有可能|L '|<|<|L|,这给迁移学习带来了相当大的优势,尤其是在数据收集和分析有限的情况下。

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

Global and local domains.

该过程背后的逻辑是,在第一次训练中(在全局数据集上),算法生成光谱数据性质的内部表示。为了成功地学习这种表示,模型需要大量的观察,这正是全局数据集所提供的。在随后的训练(在本地数据集上)中,模型已经“知道”光谱数据如何表现,只需要足够的观察来微调模型并将其调整到本地条件。

模型

我们使用多任务 CNN 同时预测有机碳含量、阳离子交换容量、粘土含量和 pH 值。我们比较了 3 种类型的模型:

  • **本地:**仅利用相应国家的数据。从可用数据中,我们随机保留了 10%作为测试数据集。其余数据中,90%用于训练,10%用于验证和超参数选择。
  • **全球:**从整个 LUCAS 数据集(约 20000 个来自欧洲各地的样本)中,排除了对应国家的数据。其余数据中,90%用于训练,10%用于验证和超参数选择。
  • **转移:**相应国家的训练集用于“本地化”先前用全球数据训练的全球模型。相应国家的验证集用于超参数选择。

整个转移过程可总结如下图:

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

“Localisation” of a global model. Coloured Layers represent trained weight, which are not modified after being learned.

结果

逐国

在 21 个国家中的 18 个国家,与当地和全球模型相比,迁移学习显示至少一种土壤特性有显著改善。四个国家在所有四个方面都有显著改善。即使在没有发现显著变化的情况下,转移模型也有降低平均 RMSE 的明显趋势。在 14 个国家中,所有四项资产的平均 RMSE 都有所下降,在总共 84 项国家和资产组合中,有 76 项(90.5%)有所下降。与第二个表现最好的模型相比,转移模型产生的平均 RMSE 减少量分别为 OC、CEC、粘土和 pH 值的 10.5%、11.8%、12.0%和 11.5%。

在少数情况下,转移模型的性能比全局或局部模型差。原因是全局模型的误差远大于局部,产生负迁移。在实践中,当开发局部模型时,通过在训练期间跟踪模型的性能来确定源模型(全局)是否有益,或者是否需要更积极的转移总是有用的。理想情况下,当正转移发生时,转移模型的误差应显示较低的初始和最终量值,如下所示。

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

最后的话

迁移学习被证明是有效的本地化一个通用的土壤光谱校准模型产生的大陆数据集。对于本研究中考虑的大多数国家而言,与使用全球模型(一般模型)或地方模型(仅使用各自国家的数据生成)相比,都有所改善。

我们的发现也强调了全球数据库的重要性。它们对于理解行星尺度的过程至关重要,但对于补充我们在局部尺度的知识也很重要。合作对每个人都有好处,甚至对数据丰富的国家或组织也是如此。

迁移学习模型不要求全局数据集可用于本地培训。一旦校准了全局模型,就只能共享需要重新训练的模型。这是数据隐私问题的潜在解决方案。重要的是要记住,如果全局数据集对本地用户可用,则所提出的方法也是适用的。

引用

关于这项工作的更多细节可以在相应的论文中找到。

Padarian,j .,Minasny,b .和 McBratney,A.B .,2019。迁移学习定位大陆土壤 vis-NIR 校准模型。Geoderma(出版中)。

https://www . research gate . net/publication/330145641 _ Transfer _ learning _ to _ localise _ a _ continental _ soil _ vis-NIR _ calibration _ model

用于分离快分量和慢分量的深度学习方法

原文:https://towardsdatascience.com/deep-learning-approach-for-separating-fast-and-slow-components-2e6142d041dc?source=collection_archive---------19-----------------------

一些背景

(这项工作的幻灯片可以在 https://speaker deck . com/jchin/decompositing-dynamics-from-different-time-scale-for-time-lapse-image-sequences-with-A-deep-CNN 找到)

在经历了 9 年帮助单分子测序对科学界变得有用的冒险后,我辞去了在 PacBio 的研究员工作(见我在 PacBio 头几年的故事)。我的大部分技术/科学工作都与 DNA 序列有关。虽然有一些令人兴奋的深度学习方法可以解决一些有趣的问题,但我确实喜欢探索 DNA 测序空间之外的一些东西。

我不久前加入了 DNAnexus。该公司已成为生物数据/测序数据处理云计算平台的领导者。我认为用该平台演示开发除 DNA 序列之外的生物数据的深度学习模型是有用的。怀着这样的目标,前首席安全官 Andrew Carroll 和我决定看看我们能为一些生物成像相关的工作做些什么。

当我们在寻找一些例子的时候, Gene Myers (是的,第一个完成全人类基因组鸟枪法组装的人)发表了一个工具 CSBdeep 来自德国德累斯顿马普分子细胞生物学和遗传学研究所(MPI-CBG) 的他的实验室用于从光片共焦图像中创建超分辨率图像,用于研究生物发育过程。

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

Example of using CSBDeep to archive super-resolution: Left: the original images. Right: the super-resolution images generated by CSBdeep. The image is provided by Ying Gu Lab.

受 CSBDeep 论文的启发,Andrew 联系了一位正式的合作者, Ying Gu ,看看她是否有一些有趣的图片让我们在我们的平台上演示使用 CSBDeep。利用 DNAnexus 云计算平台,重现 CSBDeep 结果并将其应用于新图像相对容易。尽管如此,我在想我们是否可以做一些不同的,新的事情,至少对我来说。

一部电影不仅仅是静态图像,它更有趣

原来,英古的研究工作是跟踪涉及纤维素合成的特定蛋白质,解决生物能源的重要问题。我们得到的图像是追踪细胞内分子的延时电影。最初,我认为我们可能能够通过使用多帧的深度学习来实现超分辨率。虽然我们在这个问题上取得了一些初步的成功,但我却“分心”去解决另一个不同的问题。

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

In the image stack, the slow changing background contributes to the non-zero auto-correlation at longer timescales.

当我看延时电影时,很难不注意到一些背景成分(例如,植物细胞的主干微管),以及以不同速度移动的不同斑点或粒子。我认为可以使用深度学习(作为一种无监督的学习方法)来分离背景,慢速组件和激活组件。

在这样的延时电影中,我们怎样才能把运动部分和静止部分分开呢?

第一,背景图的获取其实并不太难。我们可以对堆栈中的所有图像的每个像素取平均值或中值来获得背景。为了得到前景图像,我们可以从每幅图像中减去平均背景。如果背景真的是静态的,这应该是最容易做到的事情。然而,这种方法也假设只有一个有趣的“前景”事实上,潜在的生物过程可能具有不同的组件,这些组件具有不同的动态范围,我们可能能够使用深度学习架构来分解不同的组件。

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

From (T —t) to T: If ∆t is longer than the typically “faster” components, then we can
catch the slow component using such autoencoder architecture.

使用多个自动编码器预测不同时间尺度的未来

这样的延时电影有什么背景?在深度学习神经网络架构中,自动编码器可以学习具有隐藏层的简化表示,以再现输入。训练期间的损失函数通常是输出和输入之间的 L2 差。如果我们认为背景是电影的不变部分,我们应该希望我们可以使用这样的自动编码器来学习简化的表示,该表示可以从早期的输入预测后期的输出。图像的不变部分在不同的时间点应该可以被自动编码器学习。

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

我们可以认为,一幅特定时间的图像可以从更早时间不同尺度的特征或成分中重建出来。我们使用自动编码器从(t-∆t)预测时间 t 的图像。如果 t 很大,那么我们希望自动编码器能够学习背景部分。我们可以用更小的 t 来学习更快的部分等等。例如,我们可以将时间 t 的图像构建为 t-8(帧)、t-4(帧)、t-2(帧)和 t-1(帧)的图像的预测组合,以捕捉不同时间尺度的贡献。

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

沿着这一思路,我们测试了下面的一个建筑展示,用于分解英姑小组生成的延时电影。我认为我们得到了相当好的结果。

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

From left to right: (a) Original (b) Slow Components (c ) Fast Component (d) Pseudo-color composition from the slow and fast components

其他相关作品

虽然我认为我们提出的方法很有趣,并且很容易用 PyTorch 实现,但肯定有一些以前的工作解决了类似的问题。例如,Mikael Henaff、Junbo Zhao 和 Yann LeCun 的论文“使用误差编码网络 (EEN)在不确定性下的预测”使用从预测误差到潜在空间的反馈机制来获得更好的预测结果。

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

ENN Model Architecture

视频背景去除是图像处理领域的一个重要研究课题,对此我们并不感到奇怪。我要感谢来自 GrailEarl Hubbell ,当我在 2018 年末的一次当地生物信息学会议上介绍这项工作时,他向我指出了用于视频背景去除的鲁棒 PCA 方法

利用 DNAnexus 云平台构建深度学习模型

我在这里的一部分练习也是为了作为 DNAnexus 平台的新手练习“吃自己的狗粮”。下面是一个原型的截图,我和我的同事在 DNAnexus 平台上开发了一个支持云的 Jupyter 实验室工作站的集成解决方案。通过这样的集成,我们可以无缝集成数据管理、模型构建和评估。

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

我们学到了许多关于在 GPU 实例上使用 Jupyter Lab 和 Docker 后端的利弊的经验,并希望我们学到的经验可以帮助我们尽快更好地改进 DNAnexus 产品。

承认

我要感谢小然·辛和应谷与我们分享了他们的研究成果来验证这个想法。我也要感谢安德鲁·卡罗尔把我们连接到英姑的实验室。当然,对于我在 DNAnexus 的同事们帮助我快速入门,以便我可以开始利用这个平台进行有趣的 ML/AI 工作,我永远不会足够感谢。

基于深度学习的超分辨率,不使用 GAN

原文:https://towardsdatascience.com/deep-learning-based-super-resolution-without-using-a-gan-11c9bb5b6cd5?source=collection_archive---------1-----------------------

本文描述了用于图像改善、图像恢复、修复和超分辨率的技术和训练深度学习模型。这利用了 Fastai 课程中教授的许多技术,并利用了 Fastai 软件库。这种训练模型的方法是基于非常有才华的人工智能研究人员的方法和研究,我已经在信息和技术方面归功于他们。

据我所知,我在训练数据中应用的一些技术在这些学习方法中是独一无二的(截至 2019 年 2 月),只有少数研究人员将所有这些技术结合在一起使用,他们大多数可能是 Fastai 的研究人员/学生。

超分辨率

超分辨率是放大和/或改善图像细节的过程。通常,低分辨率图像被作为输入,并且同一图像被放大到更高的分辨率,这是输出。高分辨率输出中的细节在细节基本未知的地方被填充。

超分辨率本质上是你在电影和连续剧中看到的东西,比如 CSI,有人放大图像,图像质量提高,细节就出现了。

我第一次听说“人工智能超级分辨率”是在去年 2018 年初的优秀 YouTube 2 分钟论文中,该论文以对最新人工智能论文的简短精彩评论为特色(通常长于 2 分钟)。当时这看起来像是魔法,我不明白这怎么可能。绝对符合阿瑟·C·克拉克的名言“任何先进的技术都与魔法无异”。我没有想到,不到一年的时间,我就可以训练自己的超分辨率模型,并撰写相关文章。

这是我正在撰写的一系列文章的一部分,作为我在人工智能和机器学习方面正在进行的学习和研究的一部分。我是一名软件工程师和分析师,我的日常工作是成为一名人工智能研究员和数据科学家。

我写这些部分是为了加强我自己的知识和理解,希望这也能对其他人有所帮助和兴趣。我试图用尽可能简单的英语来讲述大部分内容,希望它对任何熟悉机器学习的人来说都有意义,并有一些更深入的技术细节和相关研究的链接。这些主题和技术很难理解,我花了好几个月的时间进行实验和写作。如果你不同意我所写的,或者认为它是错误的,请联系我,因为这是一个持续的学习过程,我会感谢你的反馈。

下面是一个低分辨率图像的示例,对其进行了超分辨率处理以提高其分辨率:

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

Left low resolution image. Right super resolution of low resolution image using the model trained here.

基于深度机器学习的超分辨率试图解决的问题是,基于传统算法的放大方法缺乏细节,无法消除缺陷和压缩伪像。对于手动执行这些任务的人来说,这是一个非常缓慢和艰苦的过程。

好处是从从未存在或已丢失的图像中获得更高质量的图像,这在许多领域甚至在医学应用中挽救生命都是有益的。

另一个用例是计算机网络间传输的压缩。想象一下,如果您只需要发送一个 256x256 像素的图像,而实际上需要的是一个 1024x1024 像素的图像。

在下面的一组图像中,有五幅图像:

  • 要放大的低分辨率输入图像
  • 通过最近邻插值放大的输入图像
  • 通过双线性解释放大的输入图像,这是您的互联网浏览器通常需要的
  • 通过该模型的预测,输入图像被升级和改进
  • 目标影像或地面实况,其被缩小以创建较低分辨率的输入。

目标是将低分辨率图像改进为与目标一样好(或更好),称为地面实况,在这种情况下,地面实况是我们缩小为低分辨率图像的原始图像。

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

Comparing the low resolution image, with conventional upscaling, a deep learning model prediction and the target/ground truth

为了实现这一点,数学函数采用缺少细节的低分辨率图像,并在其上产生细节和特征的幻觉。在这样做的过程中,该功能找到了原始摄像机可能从未记录的细节。

这个数学函数被称为模型,放大的图像是模型的预测。

一旦这个模型和它的训练被解释了,在这篇文章的结尾提到了潜在的伦理问题。

图像修复和修补

为超分辨率而训练的模型对于修复图像中的缺陷(jpeg 压缩、撕裂、折叠和其他损坏)也应该是有用的,因为模型对某些特征应该看起来像什么有概念,例如材料、毛发甚至眼睛。

图像修复是修饰图像以移除图像中不需要的元素(如铁丝网)的过程。对于训练来说,常见的是剪切图像的一些部分,并训练模型来替换丢失的部分,这是基于应该有什么的先验知识。当由熟练人员手动执行时,图像修复通常是一个非常缓慢的过程。

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

Left an image with holes punched into it and text overlayed. Middle deep learning based model prediction of repaired image. Right the target or Ground truth without defects.

超分辨率和修复似乎经常被认为是分开的和不同的任务。然而,如果一个数学函数可以被训练来创建图像中没有的额外细节,那么它也应该能够修复图像中的缺陷和缺口。这假设这些缺陷和缺口存在于训练数据中,以便模型学习它们的恢复。

超分辨率的 GANs

大多数基于深度学习的超分辨率模型是使用生成对抗网络(GANs)训练的。

GANs 的局限性之一是,它们实际上是一种懒惰的方法,因为它们的损失函数,即 critical,是作为过程的一部分来训练的,而不是专门为此目的而设计的。这可能是许多模型只擅长超分辨率而不擅长图像修复的原因之一。

普遍适用

许多深度学习超分辨率方法不能普遍适用于所有类型的图像,几乎都有其弱点。例如,为动物的超分辨率训练的模型可能不适合人脸的超分辨率。

用本文中详细描述的方法训练的模型似乎在包括人类特征在内的各种数据集上表现良好,这表明在任何类别的图像上有效放大的通用模型是可能的。

X2 超分辨率的例子

以下是在 Div2K 数据集上训练的同一模型的 X2 超分辨率(图像大小加倍)的十个示例,该数据集是各种主题类别的 800 幅高分辨率图像。

例子一来自一个在不同种类的图像上训练的模型。在早期的训练中,我发现改善人类图像的效果最差,而且呈现出更艺术的平滑效果。然而,在通用类别数据集上训练的这个版本的模型已经设法很好地改善了这张图像,仔细观察面部、头发、衣服褶皱和所有背景中添加的细节。

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

Super resolution on an image from the Div2K validation dataset, example 1

例子二来自一个在不同种类的图像上训练的模型。该模型为树木、屋顶和建筑窗户添加了细节。再次令人印象深刻的结果。

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

Super resolution on an image from the Div2K validation dataset, example 2

例子三来自一个在不同类别的图像上训练的模型。在不同数据集上训练模型的过程中,我发现人脸的结果最不令人满意,但是在不同类别的图像上训练的模型已经成功地改善了面部的细节,并查看了添加到头发上的细节,这令人印象深刻。

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

Super resolution on an image from the Div2K validation dataset, example 3

例子四来自一个在不同种类的图像上训练的模型。添加到镐轴、冰、夹克褶皱和头盔上的细节令人印象深刻:

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

Super resolution on an image from the Div2K validation dataset, example 4

例子五来自一个在不同种类的图像上训练的模型。花卉的改进令人印象深刻,鸟眼、鸟嘴、皮毛和翅膀的细节也是如此:

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

Super resolution on an image from the Div2K validation dataset, example 5

例子六来自一个在不同种类的图像上训练的模型。这个模型成功地给人的手、食物、地板和所有的物体添加了细节。这真是令人印象深刻:

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

Super resolution on an image from the Div2K validation dataset, example 6

例子七来自一个在不同种类的图像上训练的模型。该模型将毛发聚焦,并保持背景模糊:

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

Super resolution on an image from the Div2K validation dataset, example 7

例八来自一个在不同类别的图像上训练的模型。该模型很好地锐化了窗口之间的线条:

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

Super resolution on an image from the Div2K validation dataset, example 8

例子九来自一个在不同种类的图像上训练的模型。皮毛的细节真的好像是模特想象出来的。

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

Super resolution on an image from the Div2K validation dataset, example 9

例 10 来自在不同类别的图像上训练的模型。这似乎真的令人印象深刻的锐化周围的结构和灯光。

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

Super resolution on an image from the Div2K validation dataset, example 10.

示例 11 来自在不同类别的图像上训练的模型。羽毛的改进和变尖非常明显。

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

Super resolution on an image from the Div2K validation dataset, example 11.

示例 12 来自在不同类别的图像上训练的模型。这种内部图像几乎在所有地方都得到了微妙的改善。

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

Super resolution on an image from the Div2K validation dataset, example 12.

示例 13 来自在不同类别的图像上训练的模型。这是本节的最后一个例子,一个复杂的图像已经被锐化和改进。

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

Super resolution on an image from the Div2K validation dataset, example 13.

该模型的预测具有超高的分辨率

以上所有图像都是在训练期间或训练结束时对验证图像集进行的改进。

经过训练的模型已用于创建超过 100 万像素的放大图像,以下是一些最佳示例:

在该第一示例中,以高 JPEG 质量(95)保存的 256 像素正方形图像被输入到模型中,该模型将图像放大到 1024 像素正方形图像,执行 X4 超分辨率:

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

Super resolution using deep learning, example 1

上面的图片集不一定能准确预测,查看我的公共 Google drive 文件夹中的完整 PDF:
https://drive.google.com/open?id = 1g 0 o7 ul 7 zllxki _ 0 gsz 2 C4 qo 4 f 71 S6 F5 I

在下一个例子中,以低 JPEG 质量保存的 512 像素图像(30)被输入到模型中,该模型将图像放大到 1024 像素的正方形图像,对较低质量的源图像执行 X2 超分辨率。在这里,我相信模型的预测看起来比目标地面真实图像更好,这是惊人的:

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

Super resolution using deep learning, example 2

上面的图片集不一定能准确预测,请查看我的公共 Google drive 文件夹中的全尺寸 PDF:
【https://drive.google.com/open? id = 1 fro 6n 7d qfh qzw 5-oTGTMgjUTMQGsGeaD

用最基本的术语来说,这个模型:

  • 接受图像作为输入
  • 让它通过一个训练有素的数学函数,这是一种神经网络
  • 输出与输入尺寸相同或更大的图像,这是对输入尺寸的改进。

这建立在杰瑞米·霍华德和雷切尔·托马斯在 Fastai 课程中建议的技术之上。它使用 Fastai 软件库、PyTorch 深度学习平台和 CUDA 并行计算 API。

Fastai 软件库打破了很多复杂深度学习入门的障碍。因为它是开源的,所以如果需要的话,很容易定制和替换你的架构的元素来适应你的预测任务。这个图像生成器模型是建立在 Fastai U-Net 学习器之上的。

该方法使用以下内容,下面将进一步解释其中的每一项:

  • 一种交叉连接的 U-Net 架构,类似于 DenseNet
  • 基于 ResNet-34 的编码器和基于 ResNet-34 的解码器
  • 用 ICNR 初始化进行像素混洗放大
  • 从预训练的 ImageNet 模型进行迁移学习
  • 基于来自 VGG-16 模型的激活、像素损失和克矩阵损失的损失函数
  • 区别学习率
  • 渐进调整大小

这个模型或数学函数有超过 4000 万个参数或系数,允许它尝试执行超分辨率。

剩余网络

ResNet 是一种卷积神经网络(CNN)架构,由一系列残差块(ResBlocks)组成,如下所述,通过跳跃连接将 ResNet 与其他 CNN 区分开来。

当最初设计 ResNet 时,它以显著的优势赢得了当年的 ImageNet 竞争,因为它解决了渐变消失的问题,即随着层数的增加,训练速度变慢,准确性没有提高,甚至变得更差。正是网络跳过连接完成了这一壮举。

这些在下面的图表中显示,并在描述 ResNet 中的每个 ResBlock 时进行更详细的解释。

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

Left 34 Layer CNN, right 34 Layer ResNet CNN. Source Deep Residual Learning for Image Recognition: https://arxiv.org/abs/1512.03385

残余块(ResBlocks)和密集块

如果卷积网络在靠近输入的层和靠近输出的层之间包含较短的连接,则卷积网络可以训练得更深入、更准确、更有效。

如果您将损失面(模型预测的变化损失的搜索空间)可视化,这看起来就像下图中左侧图像所示的一系列山丘和山谷。最低的损失就是最低点。研究表明,一个较小的最优网络可以被忽略,即使它是一个较大网络的一部分。这是因为损失面太难导航。这意味着向模型中添加层会使预测变得更糟。

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

Loss surface with and without skip connections. Source: Visualising loss space in Neural networks: https://arxiv.org/abs/1712.09913

一个非常有效的解决方案是在网络各层之间增加交叉连接,允许在需要时跳过大部分。这创建了一个损失表面,看起来像右边的图像。这对于用最佳权重训练模型以减少损失要容易得多。

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

A ResBlock within a ResNet. Source: Deep Residual Learning for Image Recognition: https://arxiv.org/abs/1512.03385

每个 ResBlock 从其输入有两个连接,一个经过一系列卷积、批量规格化和线性函数,另一个连接跳过这一系列卷积和函数。这些被称为身份连接、交叉连接或跳过连接。两个连接的张量输出相加在一起。

稠密连接的卷积网络和稠密块

在 ResBlock 提供张量相加的输出的情况下,这可以被改变为张量连接。随着每个交叉/跳跃连接,网络变得更加密集。然后,ResBlock 变成 DenseBlock,网络变成 DenseNet。

这允许计算跳过架构中越来越大的部分。

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

DenseBlocks within a DenseNet. Source: Densely Connected Convolutional Networks: https://arxiv.org/pdf/1608.06993.pdf

由于串联,DenseBlocks 与其他架构相比会消耗大量内存,非常适合较小的数据集。

u 型网

U-Net 是为生物医学图像分割开发的卷积神经网络架构。已经发现 u-网对于输出与输入大小相似并且输出需要该量的空间分辨率的任务非常有效。这使得它们非常适合于创建分割蒙版和图像处理/生成,如超分辨率。

当卷积神经网络通常与用于分类的图像一起使用时,使用一系列每次减小网格大小的两个步长的卷积,图像被获取并向下采样到一个或多个分类中。

为了能够输出与输入大小相同或更大的生成图像,需要有一个上采样路径来增加网格大小。这使得网络布局类似于 U 形,U 形网络下采样/编码器路径形成 U 形的左侧,上采样/解码器路径形成 U 形的右侧

对于上采样/解码器路径,几个转置卷积实现这一点,每个卷积在现有像素之间和周围添加像素。基本上执行下采样路径的相反过程。上采样算法的选项将在后面进一步讨论。

请注意,该模型的基于 U-Net 的架构也有交叉连接,这将在后面详细说明,这些不是原始 U-Net 架构的一部分。

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

A U-Net network architecture. Source: http://deeplearning.net/tutorial/_images/unet.jpg

原来的研究可在这里:https://arxiv.org/abs/1505.04597

上采样/转置卷积

网络的解码器/上采样部分(U 的右手部分)中的每个上采样需要在现有像素周围以及现有像素之间添加像素,以最终达到期望的分辨率。

这个过程可以从论文“深度学习卷积算法指南”中可视化如下,其中在像素之间添加零。蓝色像素是原始的 2x2 像素扩展到 5x5 像素。在外部添加 2 个像素的填充,并在每个像素之间添加一个像素。在这个例子中,所有新像素都是零(白色)。

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

Adding pixels around and between the pixels. Source: A guide to convolution arithmetic for deep learning: https://arxiv.org/abs/1603.07285

这可以通过使用像素的加权平均(使用双线性插值)对新像素进行一些简单的初始化来改善,否则会不必要地使模型更难学习。

在这个模型中,它使用了一种改进的方法,称为像素混洗或带有 ICNR 初始化的亚像素卷积,这导致像素之间的间隙被更有效地填充。这在论文“使用高效亚像素卷积神经网络的实时单幅图像和视频超分辨率”中有所描述。

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

Pixel shuffle. Source: Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network, source: https://arxiv.org/abs/1609.05158

像素混洗以因子 2 放大,使图像的每个通道中的维度加倍(在网络的该部分的当前表示中)。然后执行复制填充以在图像周围提供额外的像素。然后,执行平均池以平滑地提取特征并避免由许多超分辨率技术产生的棋盘图案。

在添加了这些新像素的表示之后,随着路径继续通过网络的解码器路径,随后的卷积改善了这些像素内的细节,然后再进行另一个步骤并使维度加倍。

u 网和精细图像细节

当使用唯一的 U-Net 架构时,预测往往缺乏细节,为了帮助解决这个问题,可以在网络的块之间添加交叉或跳过连接。

不是像在 ResBlock 中那样每两个卷积添加一个跳过连接,而是跳过连接从下采样路径中相同大小的部分跨越到上采样路径。这些是上图中显示的灰色线条。

原始像素通过跳过连接与最终的 ResBlock 连接,以允许在知道输入到模型中的原始像素的情况下进行最终计算。这导致输入图像的所有细节都在 U-Net 的顶部,输入几乎直接映射到输出。

U-Net 块的输出被连接起来,使它们更类似于 DenseBlocks 而不是 ResBlocks。但是,有两个跨距卷积可以减小网格大小,这也有助于防止内存使用量增长过大。

ResNet-34 编码器

ResNet-34 是一个 34 层 ResNet 架构,它被用作 U-Net(U 的左半部分)的下采样部分中的编码器。

在将 ResNet-34 编码器转换为具有交叉连接的 U-Net 的情况下,Fastai U-Net 学习器在配备有编码器架构时将自动构建 U-Net 架构的解码器端。

为了使图像生成/预测模型知道如何有效地执行其预测,如果使用预训练的模型,将大大加快训练时间。然后,该模型具有需要检测和改进的特征种类的初始知识。当照片被用作输入时,使用在 ImageNet 上预先训练的模型和权重是一个很好的开始…用于 pyTorch 的预训练 ResNet-34 可从卡格尔:https://www.kaggle.com/pytorch/resnet34获得

损失函数

损失函数基于论文《实时风格传输和超分辨率的损失》中的研究以及 Fastai 课程(v3)中所示的改进。

本文重点研究特征损失(文中称为感知损失)。这项研究没有使用 U-Net 架构,因为当时机器学习社区还不知道它们。

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

Source: Convolutional Neural Network (CNN) Perceptual Losses for Real-Time Style Transfer and Super-Resolution: https://arxiv.org/abs/1603.08155

此处使用的模型使用与论文相似的损失函数进行训练,使用 VGG-16,但也结合了像素均方误差损失和克矩阵损失。Fastai 团队发现这非常有效。

VGG-16

VGG 是 2014 年设计的另一个 CNN 架构,16 层版本用于训练该模型的损失函数。

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

VGG-16 Network Architecture. Source: https://neurohive.io/wp-content/uploads/2018/11/vgg16-1-e1542731207177.png

VGG 模式。在 ImageNet 上预先训练的网络用于评估发电机模型的损耗。通常这将被用作分类器来告诉你图像是什么,例如这是一个人,一只狗还是一只猫。

VGG 模型的头部被忽略,损失函数使用网络主干中的中间激活,其代表特征检测。网络的头部和主干将在后面的培训部分进一步介绍。

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

Different layers in VGG-16. Source: https://neurohive.io/wp-content/uploads/2018/11/vgg16.png

这些激活可以通过查看 VGG 模型找到所有的最大池层。这些是检测网格大小变化和特征的地方。

在下图中可以看到可视化各种图像激活的热图。这显示了在网络的不同层中检测到的各种特征的例子。

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

Visualisation of feature activations in CNNs. Source: page 4 of https://arxiv.org/pdf/1311.2901.pdf

该超分辨率模型的训练使用基于 VGG 模型激活的损失函数。损失函数在整个训练过程中保持固定,不像 GAN 的关键部分。

特征图有 256 个 28×28 的通道,用于检测毛发、眼球、翅膀和类型材料等特征以及许多其他类型的特征。使用基本损失的均方误差或最小绝对误差(L1)误差来比较(目标)原始图像和生成图像在同一层的激活。这些是特征损失。该误差函数使用 L1 误差。

这使得损失函数能够了解目标地面真实影像中的特征,并评估模型预测的特征与这些特征的匹配程度,而不仅仅是比较像素差异。

培训详情

训练过程从如上所述的模型开始:使用基于在 ImageNet 上预训练的 VGG-16 架构的损失函数结合像素损失和 gram 矩阵,在 ImageNet 上预训练的基于 ResNet-34 架构的 U-Net。

培训用数据

幸运的是,在大多数应用程序中,可以创建几乎无限量的数据作为训练集。如果采集了一组高分辨率图像,可以将这些图像编码/调整大小为较小的图像,这样我们就有了具有低分辨率和高分辨率图像对的训练集。然后,我们的模型预测可用于评估高分辨率图像。

低分辨率图像最初是一半尺寸的目标/地面真实图像的副本。然后,使用双线性变换对低分辨率图像进行初始放大,以使其与目标图像具有相同的尺寸,从而输入到基于 U-Net 的模型中。

在这种创建训练数据的方法中采取的操作是模型学习适应的操作(颠倒该过程)。

可以通过以下方式进一步扩充训练数据:

  • 在一定范围内随机降低图像质量
  • 随机选择农作物
  • 水平翻转图像
  • 调整图像的照明
  • 添加透视扭曲
  • 随机添加噪声
  • 在图像上随机打孔
  • 随机添加覆盖的文本或符号

下面的图像是数据扩充的一个例子,所有这些都是从同一个源图像生成的:

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

Example of data augmentation

将每个图像的质量降低和噪声改变为随机的改进了结果模型,允许它学习如何改进所有这些不同形式的图像退化,并更好地概括。

功能和质量改进

基于 U-Net 的模型增强了放大图像中的细节和特征,通过包含大约 4000 万个参数的函数生成了改进的图像。

训练模特的头部和骨干

这里使用的三种方法特别有助于训练过程。这些是渐进调整大小、冻结然后解冻主干中权重的梯度下降更新和区别学习率。

该模型的架构分为两部分,主干和头部。

主干是 U-Net 的左侧部分,是基于 ResNet-34 的网络的编码器/下采样部分。头部是 U-Net 的右侧部分,即网络的解码器/上采样部分。

主干已经基于在 ImageNet 上训练的 ResNet34 预先训练了权重,这就是迁移学习。

头部需要训练其权重,因为这些层的权重被随机初始化以产生期望的最终输出。

在最开始,网络的输出基本上是像素的随机变化,而不是使用 ICNR 初始化的像素混洗子卷积,其被用作网络的解码器/上采样路径中每个升级的第一步。

一旦经过训练,骨架顶部的头部允许模型学习用骨架中预先训练的知识做一些不同的事情。

冻住脊梁,练好脑袋

网络主干中的权重被冻结,因此最初只训练头部中的权重。

学习率查找器运行 100 次迭代,并绘制损失与学习率的关系图,选择最陡斜率附近朝向最小损失的点作为最大学习率。可选地,可以使用比最低点小 10 倍的速率来查看是否表现得更好。

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

Learning rate against loss, optimal slope with backbone frozen

“适合一个周期”政策用于改变学习速度和动力,在 Leslie Smith 的论文中有详细描述

https://arxiv.org/pdf/1803.09820.pdf和西尔万·古格的https://sgugger.github.io/the-1cycle-policy.html

渐进调整大小

首先在大量较小的映像上进行训练,然后扩展网络和训练映像,这样会更快。将图像从 64px 乘以 64px 放大并改善为 128px 乘以 128px 比在更大的图像上执行该操作要容易得多,在更大的数据集上也要快得多。这被称为渐进式调整大小,它也有助于模型更好地概括,因为它看到更多不同的图像,不太可能过度拟合。

这种渐进式调整大小的方法是基于 Nvidia 与 progressive GANs 的出色研究:https://research . Nvidia . com/sites/default/files/pubs/2017-10 _ Progressive-Growing-of/karras 2018 iclr-paper . pdf。这也是 Fastai 用来在 ImageNet 上击败科技巨头的方法:https://www.fast.ai/2018/08/10/fastai-diu-imagenet/

该过程是在较大的批次中用小图像进行训练,然后一旦损失降低到可接受的水平,则创建新的模型,该模型接受较大的图像,从在较小的图像上训练的模型转移学习。

随着训练图像大小的增加,批次大小必须减小以避免耗尽内存,因为每个批次包含更大的图像,每个图像中的像素是四倍。

请注意,输入图像中的缺陷是随机添加的,以提高模型的恢复属性,并帮助它更好地概括。

从训练集中分离出来的验证集的示例以一些渐进的大小显示在这里:

在每个图像尺寸下,执行 10 个时期的一个循环的训练。这是冷冻的骨干重物。

图像尺寸被加倍,并且对于通过网络的较大图像的路径,用额外的网格尺寸来更新模型。重要的是要注意砝码的数量不会改变。

步骤 1:从 32 像素乘 32 像素放大到 64 像素乘 64 像素。使用 1e-2 的学习率。

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

Super resolution to 64px by 64px on a 32px by 32px image from the validation set. Left low resolution input, middle super resolution models prediction, right target/ground truth.

步骤 2:从 64 像素乘 64 像素放大到 128 像素乘 128 像素。使用 2e-2 的学习速率。

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

Super resolution to 128px by 128px on a 64px by 64px image from the validation set. Left low resolution input, middle super resolution models prediction, right target/ground truth

步骤 3:从 128 像素乘 128 像素放大到 256 像素乘 256 像素。使用了 3e-3 和 1e-3 之间的区别学习率。

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

Super resolution to 256px by 256px on a 128px by 128px image from the validation set. Left low resolution input, middle super resolution models prediction, right target/ground truth

步骤 4:从 256 像素乘 256 像素放大到 512 像素乘 512 像素。使用 1e-3 和之间的区别学习率。

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

Super resolution to 512px by 512px on a 256px by 256px image from the validation set. Left low resolution input, middle super resolution models prediction, right target/ground truth

解冻主干

主干被分成两层组,头部是第三层组。

然后,整个模型的权重被解冻,并且该模型用判别学习率来训练。这些学习率在第一层组中要小得多,然后在第二层组中增加,最后一层组在头部再次增加。

在脊柱和头部解冻的情况下,再次运行学习率查找器。

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

Learning rate against loss with backbone and head unfrozen

使用 1e-6 和 1e-4 之间的区别学习率。头部的学习速率仍然比先前的学习周期低一个数量级,在先前的学习周期中,只有头部被解冻。这允许对模型进行微调,而不会有损失已有精度的风险。这被称为学习率退火,当我们接近最佳损失时,学习率降低。

在更大的输入图像上继续训练将提高超分辨率的质量,但是批量大小必须保持缩小以适应内存限制,并且训练时间增加,并且达到了我的训练基础设施的极限。

所有训练都是在 Nvidia Tesla K80 GPU 上进行的,内存为 12GB,从开始到结束不到 12 个小时,逐步调整大小。

结果

训练的渐进调整大小部分中的以上图像显示了基于深度学习的超分辨率在改善细节、去除水印、缺陷和赋予缺失的细节方面是多么有效。

接下来的三个基于来自 Div2K 数据集的图像的图像预测都通过相同的训练模型对其执行了超分辨率,这表明深度学习超分辨率模型可能能够普遍应用。

注意:这些来自实际的 Div2K 训练集,尽管该集被分成我自己的训练和验证数据集,并且模型在训练期间没有看到这些图像。后面还有来自实际 Div2K 验证集的更多示例。

左:256 x 256 像素输入。中间:来自模型的 512 x 512 预测。右:512 x 512 像素地面真实目标。看着火车前面的通风口,细节改进很清楚,非常接近地面真实目标。

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

256 by 256 pixel super resolution to 512 by 512 pixel image, example 1

左:256 x 256 像素输入。中间:来自模型的 512 x 512 预测。右:512 x 512 像素地面真实目标。下面这个图像预测中的特征改进是相当惊人的。在我早期的训练尝试中,我几乎得出结论,人类特征的超分辨率将是一项过于复杂的任务。

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

256 by 256 pixel super resolution to 512 by 512 pixel image, example 2

左:256 x 256 像素输入。中间:来自模型的 512 x 512 预测。右:512 x 512 像素地面真实目标。请注意白色的“安全出口”文字和镶板线是如何改进的。

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

256 by 256 pixel super resolution to 512 by 512 pixel image, example 3

Div2K 验证集上的超分辨率

来自官方 Div2K 验证集的超分辨率示例。这里有 PDF 版本:https://drive.google.com/open?id = 1 ylselpp _ _ emdywihpmlhw 4 fxjn _ LybkQ

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

Model prediction comparison on the Div2K validation dataset

牛津 102 Flowers 数据集上的超分辨率

超分辨率来自于花的图像数据集上的单独训练模型,我认为这非常出色,许多模型预测实际上看起来比在验证集上真正执行超分辨率的地面事实更清晰(训练期间看不到的图像)。

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

Validation results upscaling images from the Oxford 102 Flowers dataset consisting of 102 flower categories

牛津-IIIT Pet 数据集上的超分辨率

下面的例子来自一个单独的训练模型,放大了狗的低分辨率图像,令人印象深刻,同样来自验证集,创建了更精细的皮毛细节,锐化了眼睛和鼻子,并真正改善了图像中的特征。大多数放大的图像接近地面真实情况,当然比双线性放大的图像好得多。

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

Validation results upscaling images from Oxford-IIIT Pet dataset, a 37 category pet dataset with roughly 200 images for each class.

我相信这些结果是令人印象深刻的,模型必须发展出一种“知识”,即照片/图像的原始主题中的一组像素必须是什么。

它知道某些区域是模糊的,并且知道重建模糊的背景。

如果模型在损失函数的特征激活上表现不佳,它就无法做到这一点。实际上,该模型已经逆向工程了匹配这些像素的特征,以匹配损失函数中的激活。

限制

对于要由模型学习的恢复类型,它必须作为要解决的问题存在于训练数据中。当在一个训练过的模型的输入图像上打孔,而这个模型不知道如何处理它们,就让它们保持不变。

需要在图像上产生幻觉的特征,或者至少是相似的特征,必须存在于训练集中。如果模型是在动物上训练的,那么模型不太可能在完全不同的数据集类别上表现良好,例如房间内部或花。

在特写人脸上训练的模型的超分辨率结果不是特别令人信服,尽管在 Div2K 训练集中的一些例子上确实看到了特征上的良好改进。特别是在 X4 超分辨率中,虽然特征比最近邻插值更加锐化,但是特征呈现出几乎是绘制的/艺术的效果。对于分辨率非常低的图像或有很多压缩伪像的图像,这可能仍然是更好的选择。这是我打算继续探索的一个领域。

结论

使用损失函数训练的基于 U-Net 深度学习的超分辨率可以很好地执行超分辨率,包括:

  • 将低分辨率图像放大到更高分辨率的图像
  • 提高图像质量并保持分辨率
  • 移除水印
  • 从图像中消除损坏
  • 移除 JPEG 和其他压缩伪像
  • 给灰度图像着色(另一项正在进行的工作)

对于要由模型学习的恢复类型,它必须作为要解决的问题存在于训练数据中。在经过训练的模型的输入图像中打孔,模型不知道如何处理它们,就让它们保持不变,而当打孔被添加到训练数据中时,经过训练的模型可以很好地恢复它们。

这里展示的所有图像超分辨率的例子都是来自我训练的模型的预测。

下面有五个例子,我认为模型的预测(中间)与目标(右边)一样好或非常接近,目标是来自验证集的原始地面真实图像。该模型适用于动物特征,如毛皮和眼睛,眼睛是一个非常困难的任务,以锐化和增强。

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

Super resolution concluding example 1

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

Super resolution concluding example 2

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

Super resolution concluding example 3

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

Super resolution concluding example 4

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

Super resolution concluding example 5

还有最后一个来自验证集的例子,在我看来,模型的预测(中间)比目标(右边)更好,即来自验证集的原始地面真实图像。

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

Super resolution concluding example 6, model prediction possibly better than the ground truth target?

后续步骤

我热衷于将这些技术应用于不同主题的图像和不同的领域。如果你认为这些超分辨率技术可以帮助你的行业或项目,那么请联系我们。

我计划将这个模型转移到一个生产 web 应用程序中,然后可能转移到一个移动 web 应用程序中。

我正在对 Image Net 数据集的较大子集进行训练,该数据集包含许多类别,以产生一个有效的通用超分辨率模型,该模型对任何类别的图像都表现良好。我还在训练我在这里训练的相同数据集的灰度版本,其中模型正在给图像着色。

我计划尝试像 ResNet-50 这样的模型架构,以及一个带有初始主干的 ResNet 主干。

伦理问题

通过产生在诸如安全镜头、航空摄影或类似的类别中不存在的幻觉细节,然后从低分辨率图像生成图像可能会使其远离原始的真实主题。

想象一下,如果面部特征被细微地改变,但足以通过面部识别来识别一个实际上不在那里的人,或者航拍照片被改变,足以通过另一种算法将一座建筑物识别为另一个样子。多样化的训练数据应该有助于避免这种情况,尽管随着超分辨率方法的改进,这是一个问题,因为缺乏机器学习研究社区历史上使用的多样化训练数据。

法斯泰

感谢 Fastai 团队,没有你们的课程和软件库,我怀疑我是否能够进行这些实验并了解这些技术。

基于深度学习的 web 应用:从数据收集到部署

原文:https://towardsdatascience.com/deep-learning-based-web-application-from-data-collection-to-deployment-9e89f29b67df?source=collection_archive---------19-----------------------

从头开始构建图像分类器 web 应用程序,不需要 GPU 或信用卡。

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

这篇文章描述了如何在不需要 GPU 或信用卡的情况下为图像分类构建一个基于深度学习的网络应用

尽管有很多文章描述这种东西,但我找不到完整的指南来描述从数据收集到部署的所有步骤,而且一些细节也很难找到(例如,如何在 Google Drive 上克隆 Github repo)。

文章很大程度上基于 fast.ai 的程序员实用深度学习课程(简直太神奇了)。它分为以下几个部分:

  1. 数据采集
  2. 培训
  3. 部署

本指南面向已经具备基本编码和深度学习经验的人*;如果有些概念是全新的,你最好从更具体的文章开始。*

我们将看到一个如何构建*猫科动物分类器的例子。完整代码这里有,你可以在这里 测试 web 应用(如果不行说明我已经关机了;可以看看 fast.ai 玩具模型这里)!*

1.数据收集

第一个问题是数据收集。虽然在像 Kaggle 这样的网站上有许多预先存在的数据集,但你可能会对构建我们自己的数据集感兴趣。在这种情况下,我们对区分斑点猫科动物感兴趣,如下图所示。

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

Cheetah, Jaguar, Leopard and … Other

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

因此,给定一幅图像,我们的分类器应该告诉我们它是否包含一只猎豹、一只美洲豹、一只或其他什么。是的,我知道这完全没用。然而,这有利于练习和娱乐:)。

第一件事是收集每个班级的图像样本。有几种方法可以从网上抓取图像;我们将利用 fast.ai 提供的 image_cleaner 模块 。其他的选择可能是Google _ images _ download包,或者你可以试着从浏览器使用 javascript 控制台,就像这里的一样

image _ cleaner提供可从 Jupyter 笔记本使用的应用程序。你需要做的就是安装 fastai 库并在 Jupyter 笔记本中运行以下代码:

Warning: to be run in Jupiter Notebook, it doesn’t work in Jupyter Lab and CoLab

这将导致类似这样的结果:

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

You need to set the keywords for the search, the number of images and the minimum quality.

比你想象的容易,对吧?我们只需要注意几个细节**😗*

  1. 在你的搜索中要精确;可能值得使用特殊字符来强制包含(“”)或排除(-)。例如:猫科动物“美洲虎”——汽车。
  2. 要下载超过 100 张图片,你需要安装 selenium 和 chromedriver。
  3. **有不同的方法来训练分类器 理解图像是否不对应于任何考虑的类别。 一种方法是创建一个"**其他"**类包含随机图像。对于“**other”类,我们的搜索是:动物-美洲虎-猎豹-豹。
  4. 您的数据集中很可能会有一些噪声图像;应该“用手”将它们移除。拥有一个相对较小的干净数据集比拥有一个巨大的嘈杂数据集要好。

现在我们有了一个全新的干净的数据集。训练时间到了!

2.培养

现在呢?每个人都知道,为了能够训练一个图像分类器,你需要大量的图像和图形处理器!或者……也许不是?

我们不需要收集这么多图像,这是因为两个惊人的技术:数据增强迁移学习**。第一种技术是通过从现有图像开始构建新图像来自动扩充数据集,如下图所示:**

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

Example of Data Augmentation

**第二种技术是使用预先训练好的模型,在我们的例子中是 ResNet34 **。这个网络已经在 ImageNe t 数据集上进行了训练,可以检测数千个类别。因此,我们可以预期由最后一个隐藏层给出的图像表示“捕捉”了大量复杂的图案,即它提供了智能特征。

即使这些概念可能看起来不完全清楚,这也不应该阻止我们部署我们的应用程序。事实上, fast.ai 库使得这些技术变得非常容易使用。

为了在不需要信用卡的情况下免费访问 GPU,我们可以使用 Google Colab,这是 Google 提供的一项服务,因此与 Google Drive 高度集成。

**在谷歌实验室中创建和运行一个 Jupyter 笔记本相当简单。要启用 GPU,请按“运行时”、“运行时类型,并将“硬件加速器”设置为 GPU。

然而,我们还需要:

  1. 连接驱动
  2. 与 Git/GitHub 通信

一旦我们将数据放入 Google Drive,要从 Colab Notebook 访问它,我们只需运行以下代码:

现在我们可以从“路径”加载数据。

要从 Drive 使用 Github,我们基本上使用 Colab 笔记本作为命令行,如这里的所述。就我个人而言,我在我称为*git _ communicator . ipynb .*的项目之外使用过一个 Colab 笔记本

因此,要克隆 Github 存储库,我们只需在 Colab 的笔记本上运行以下代码:

一旦我们完成了修改,我们就可以运行通常的 git 命令(以“!”开头)提交和推送修改)来自 Colab 笔记本手机。

一旦我们为我们的项目创建了一个 GitHub 库,我们就能够在 Google Drive 上克隆**,利用一个免费的 GPU在 Colab 上运行现有的笔记本,然后提交修改!**

既然我们已经解决了技术问题,是时候训练我们的分类器了。还是那句话, fast.ai 让它超级简单。首先,让我们加载数据**😗*

这段代码创建了一个 DataBunch 对象:

  1. 保留 20%的数据进行验证
  2. 应用标准数据扩充技术
  3. 应用 ImageNet 数据集规范化

很好,现在我们将使用带有预训练权重的 ResNet34 网络架构,并且仅训练最后一个隐藏层与输出层的连接。这可以通过两行代码来完成:

该代码使用了fit-one-cycle策略,这是一种智能技术,通过使用开始时逐渐增加,后来逐渐减少的学习速率,在短时间内训练网络。这使我们得出以下结果:

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

在不到 6 分钟的时间里,我们在验证集上达到了几乎 93%的准确率。然而,我们可以观察到培训损失仍然大于验证损失。这意味着仍有改进的空间!

现在也许值得对整个网络进行训练,不仅仅是最后一层。这也可以通过两行代码来实现:

在策略中为最大学习速率设置一个片而不是单个值允许用不同的学习速率训练网络**。第一层将用较小的学习率来训练,因为它们“检测”在不同图像数据分布中不应该改变太多的简单模式。**

让我们看看我们现在得到的混淆矩阵:

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

哇,这是验证集上 98.73 %的准确率

如果我们将它作为专业应用,我们将不得不提供一个单独的测试集来评估我们的分类器的性能。然而,对于像我们这样的玩具项目来说,这个结果已经足够了!

由于我们对模型感到满意,我们可以通过运行以下命令将其导出以进行部署:

learn.export()

运行模型所需的一切都将存储在一个名为 export.pkl 的文件中,在我们的例子中放在“data”目录中。

3.部署

如果说训练很容易,那么部署就更容易了,多亏了DockerRender

Docker 是一个允许使用容器轻松部署和运行应用程序的工具。简而言之,它是一种虚拟机,而不是虚拟化整个操作系统,使用与运行系统相同的 Linux 内核,从而提高性能。

Render 是一个 web 服务,允许非常容易地构建和运行 web 应用程序(以及其他)。

同样,我们甚至不需要理解这些东西实际上是如何工作的。我们可以简单地使用 fast.ai 提供的示例代码(这里是),把它添加到我们的存储库中(或者从头开始分支)。

要在渲染时部署,只需:

  1. 创建一个渲染帐户,并将其连接到 Github
  2. 将训练好的模型文件 export.pkl 上传到 Google Drive 并使其可下载
  3. 用 URL 编辑model_file_url变量到 export.pkl更新文件server.py中的行classes****
  4. 编辑index.html以更改网站文本和布局(可选)
  5. 启动新服务

所有这些步骤在中详细描述。

最后,你现在应该有一个基于深度学习的 web 应用程序!它应该是这样的:

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

结束语

  1. 数据决定一切。整个过程最重要的是得到一个像样的数据集。
  2. 在这个应用程序中,我们只对动物的图像进行训练**。网络可能会对其他主题的图像表现出意想不到的行为。**
  3. 我们基于验证集来评估性能。在现实世界的应用中,我们应该使用测试集来避免有偏见的估计。
  4. fast.ai 库非常酷,它让复杂的高级技术变得非常容易使用。然而,如果你需要更多地控制正在发生的事情,直接使用它的后端 PyTorch 可能会更好。

深度学习基础:速成课程

原文:https://towardsdatascience.com/deep-learning-basics-a-crash-course-3213aa9e477c?source=collection_archive---------17-----------------------

了解什么是深度学习,以及深度学习算法在现实应用中是如何使用的!

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

机器学习 (ML)和深度学习 (DL)技术正在被应用于各个领域,数据科学家在许多不同的行业都受到追捧。

通过机器学习,我们可以识别出我们获取知识的过程,而这些知识并不是从数据中显而易见的,从而做出决策。机器学习技术的应用可能会有很大的不同,可以在医学、金融和广告等不同的学科中找到。

深度学习利用了比 20 世纪 80 年代使用的更先进的神经网络。这不仅是理论发展的结果,也是计算机硬件进步的结果。

在这个速成课程中,我们将学习深度学习和深度神经网络 (DNNs),即具有多个隐藏层的神经网络。我们将讨论以下主题:

  • 深度学习简介
  • 深度学习算法
  • 深度学习的应用

我们开始吧!

这个速成课程改编自 Next Tech 的 **Python 深度学习项目(第一部分:基础)**课程,该课程探索了深度学习的基础知识,建立了一个 DL 环境,并构建了一个 MLP。它包括一个浏览器内沙盒环境,预装了所有必要的软件和库。这里可以开始

深度学习简介

给定通用近似定理,你可能想知道使用多个隐藏层有什么意义。这绝不是一个天真的问题,在很长一段时间里,神经网络都是这样使用的。

使用多个隐藏层的一个原因是,逼近一个复杂的函数可能需要隐藏层中大量的神经元,这使得它不实用。使用深度网络的一个更重要的原因是,深度网络不仅仅学习在给定输入 X 的情况下预测输出 Y,它还理解输入的基本特征,深度网络与隐藏层的数量没有直接关系,而是与学习的水平有关。

让我们看一个例子。

在 H. Lee、R. Grosse、R. Ranganath 和 A. Ng 于 2009 年发表的《机器学习国际会议记录》(ICML)(Proceedings of the International Conference on Machine Learning)中,作者用不同类别的物体或动物的图片训练了一个神经网络。在下图中,我们可以看到网络的不同层如何学习输入数据的不同特征。在第一层中,网络学习检测一些基本特征,例如所有类别中所有图像共有的线条和边缘:

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

The first layer weights (top) and the second layer weights (bottom) after training

在接下来的图层中,如下图所示,它将这些线和边组合在一起,以构成特定于每个类别的更复杂的要素:

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

Columns 1–4 represent the second layer (top) and third layer (bottom) weights learned for a specific object category (class). Column 5 represents the weights learned for a mixture of four object categories (faces, cars, airplanes, and motobikes)

在最上面一行,我们可以看到网络如何检测每个类别的不同特征。人脸的眼睛、鼻子和嘴巴,汽车的门和轮子,等等。这些特征是的抽象。也就是说,网络已经学习了特征的一般形状,例如嘴或鼻子,并且可以在输入数据中检测该特征,尽管它可能有变化。

在上图的第二行中,我们可以看到网络的深层是如何将这些特征组合成更复杂的特征的,比如人脸和整辆汽车。深度神经网络的优势在于,它们可以通过从训练数据中推导出这些高级抽象表示来自己学习这些表示。

深度学习算法

我们可以将深度学习定义为一类机器学习技术,其中信息在分层中进行处理,以理解越来越复杂的数据的表示和特征。在实践中,所有的深度学习算法都是神经网络,它们共享一些共同的基本属性。它们都由相互连接的神经元组成,这些神经元被组织成层。它们的不同之处在于网络架构(神经元在网络中的组织方式),有时还在于它们的训练方式。

考虑到这一点,让我们看看神经网络的主要类别。下面的列表并不详尽,但它代表了当今使用的绝大多数算法。

多层感知器

一种具有前馈传播、全连接层和至少一个隐藏层的神经网络。

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

该图展示了一个具有两个隐藏层的 3 层全连接神经网络。输入层有 k 个输入神经元,第一隐层有 n 个隐神经元,第二隐层有 m 个隐神经元。在这个例子中,输出是两个类 y ₁和 y ₂.上面是永远开启的偏置神经元。一层中的一个单元连接到上一层和下一层中的所有单元(因此是完全连接的)。

卷积神经网络

CNN 是一种前馈神经网络,具有几种特殊的层。例如,卷积层对输入图像(或声音)应用一个滤波器,方法是在输入信号上滑动该滤波器,以产生一个 n 维的激活图。有一些证据表明,中枢神经系统中的神经元的组织方式类似于大脑视觉皮层中生物细胞的组织方式。今天,在大量的计算机视觉和自然语言处理任务上,它们优于所有其他的 ML 算法。

递归神经网络

这种类型的网络有一个内部状态(或内存),它是基于所有或部分已输入网络的输入数据。递归网络的输出是其内部状态(以前输入的记忆)和最新输入样本的组合。同时,内部状态发生变化,以合并新输入的数据。由于这些特性,递归网络是处理序列数据(如文本或时间序列数据)的任务的理想选择。

自动编码器

一类无监督学习算法,其中输出形状与输入形状相同,允许网络更好地学习基本表示。它由输入层、隐藏层(或瓶颈层)和输出层组成。虽然这是一个单一的网络,但我们可以将其视为两个组件的虚拟组合:

  • 编码器:将输入数据映射到网络的内部表示。
  • 解码器:试图从网络的内部数据表示中重建输入。

强化学习

强化算法学习如何通过许多步骤实现一个复杂的目标,当它们做出错误的决定时使用惩罚,当它们做出正确的决定时使用奖励。这是一种经常用来教机器如何与环境互动的方法,类似于人类行为由负面和正面反馈形成的方式。RL 通常用于构建电脑游戏和自动驾驶汽车。

深度学习的应用

机器学习,特别是深度学习,在预测质量、特征检测和分类方面产生了越来越多令人惊讶的结果。许多最近的结果甚至成为了新闻!以下是这些技术在今天或不久的将来可以应用的几种方式:

自动驾驶汽车

如今,新车有一套安全和便利的功能,旨在使驾驶体验更安全,压力更小。其中一个功能是当汽车遇到障碍物时自动紧急制动。另一个是车道保持辅助系统,它允许车辆停留在当前车道上,而无需驾驶员用方向盘进行校正。为了识别车道标志、其他车辆、行人和骑自行车的人,这些系统使用一个前向摄像头。我们可以推测,未来的自动驾驶汽车也将使用深度网络进行计算机视觉。

图像和文本识别

谷歌的视觉 API亚马逊的 Rekognition 服务都使用深度学习模型来提供各种计算机视觉能力。这些包括识别和检测图像中的对象和场景、文本识别、人脸识别等等。

医学成像

医学成像是各种创建身体内部视觉表示的非侵入性方法的总称。其中一些包括磁共振图像 ( MRIs )、超声波、计算机轴向断层扫描 ( CAT )扫描、X 射线和组织学图像。典型地,这样的图像由医学专业人员分析以确定患者的状况。机器学习,特别是计算机视觉,正在实现计算机辅助诊断,它可以通过检测和突出图像的重要特征来帮助专家。

例如,为了确定结肠癌的恶性程度,病理学家必须使用组织学成像来分析腺体的形态。这是一项具有挑战性的任务,因为形态学可以有很大的不同。深度神经网络可以自动从图像中分割出腺体,让病理学家来验证结果。这将减少分析所需的时间,使其更便宜和更容易获得。

病史分析

另一个可以受益于深度学习的医疗领域是病历记录的分析。在医生诊断病情和开出治疗处方之前,他们会查阅患者的病史以获得更多的信息。深度学习算法可以从这些大量记录中提取最相关和最重要的信息,即使它们是手写的。这样,医生的工作可以变得更容易,同时也降低了出错的风险。

语言翻译

谷歌的神经机器翻译 API 使用——你猜对了——深度神经网络进行机器翻译。

语音识别和生成

Google Duplex 是深度学习的另一个令人印象深刻的真实世界演示。这是一个新系统,可以通过电话进行自然对话。例如,它可以代表用户预订餐馆。它使用深度神经网络来理解对话,并生成现实的、类似人类的回复。

Siri、谷歌助手和亚马逊 Alexa 也依靠深度网络进行语音识别。

赌博

最后,AlphaGo 是一台基于深度学习的人工智能 ( AI )机器,它在 2016 年 3 月因击败世界围棋冠军 Lee Sedol 而成为新闻。AlphaGo 在 2016 年 1 月已经成为新闻,当时它击败了欧洲冠军范辉。虽然,在当时,它似乎不太可能继续击败世界冠军。几个月后,AlphaGo 以 4 比 1 的比分横扫对手,实现了这一非凡的壮举。

这是一个重要的里程碑,因为围棋比国际象棋等其他游戏有更多可能的游戏变化,而且不可能事先考虑到每一步可能的棋。此外,与国际象棋不同,在围棋中,甚至很难判断棋盘上单个棋子的当前位置或价值。2017 年,DeepMind 发布了名为 AlphaZero 的 AlphaGo 更新版本。

在这个速成课程中,我们解释了什么是深度学习,以及它与深度神经网络的关系。我们讨论了不同类型的网络和深度学习的一些现实应用。

这只是一个开始——如果你想了解更多关于深度学习的信息,Next Tech 有一个 Python 深度学习项目系列,探索跨计算机视觉、自然语言处理(NLP)和图像处理的真实世界深度学习项目。本系列的第 1 部分涵盖了 DL 的基本概念,如何建立 DL 环境,以及如何构建 MLP。这里可以开始

深度学习丛书 3.1 到 3.3 概率质量和密度函数

原文:https://towardsdatascience.com/deep-learning-book-series-3-1-to-3-3-probability-mass-and-density-functions-fe7e41ca6539?source=collection_archive---------16-----------------------

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

该内容是古德费勒(Goodfellow,I .)、本吉奥(Bengio,y .)和库维尔(a .)(2016 年)的深度学习书籍中关于概率的第三章系列的一部分。它旨在提供关于数学理论的直觉/绘图/python 代码,并作为我对这些概念的理解而构建。

Github :相应的 Python 笔记本可以在这里找到

我很高兴在这里展示我的深度学习系列(Goodfellow 等人的书)的以下内容。这是根据第三章概率制作的第一个帖子/笔记本。对于那些已经知道我关于线性代数第二章的帖子/笔记的人来说,目标和结构是一样的。目的是让没有深厚数学背景的人更容易理解这本书。更多信息可以参考入门帖

我认为通过使用代码(这里是 Python)和可视化来获得对数学概念更好的直觉是可能的。该结构遵循书的子章节,它可以作为额外的内容,给出例子和细节。

这第一部分是关于第 3.1 至 3.3 章。第 3.1 章是对概率的介绍,不包含任何技术难度。因此,您可以在此处直接阅读。第 3.2 章实际上只是一个定义,所以主要部分是 3.3 关于概率质量函数概率密度函数。看完之后,随机变量及其概率分布(对于离散和连续变量)对你来说就没有秘密了🏄🏾‍♂️.

为了理解它,我们还将学习一些非常有用的数学工具:

🔧离散变量与连续变量

🔧衍生

🔧积分

🔧曲线下面积

这些概念对于一般数据科学和机器学习来说非常重要。

3.2 随机变量

概率的目标是处理不确定性。它给出了描述随机事件的方法。随机变量是一个可以根据随机事件的结果取多个值的变量。可能的结果是变量可能取的值。

如果结果是有限的(例如掷骰子事件中的 6 种可能性),则称随机变量为离散的

如果可能的结果不是有限的(例如,在 0 和 1 之间画一个数可以给出无穷多个值),则称随机变量为连续

和书中一样,我们将使用下面的符号:一个小写的普通字体字母代表一个随机变量:x。

例 1。

假设变量 x 是一个随机变量,表示掷骰子的结果🎲。变量可以取值 1、2、3、4、5 或 6。它是一个离散的随机变量。

3.3 概率分布

所以一个随机变量可以取多个值。很重要的一点是,要知道某些值是否会比其他值更经常遇到。一个随机变量可以取的每一个可能值的概率的描述叫做它的概率分布

离散变量和连续变量的概念很重要,我们将研究两种情况下概率分布的概念。即使它们是相关的,也存在一些差异。

反正一个随机变量 x 的概率分布描述的是每一个结果的概率(概率 1 表示变量会一直取这个值,概率 0 表示永远不会遇到)。这个函数叫做概率分布。更具体地说,它被称为离散变量的概率质量函数和连续变量的概率密度函数

3.3.1 离散变量和概率质量函数

概率质量函数是描述与随机变量 x 相关的概率的函数,为避免混淆,该函数被命名为 P (x)或 P (x = x )。 P (x = x )对应随机变量 x 取值 x 的概率(注意字体不同)。

例 2。

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

说明离散随机变量和概率质量函数的骰子实验

让我们把一个骰子掷无限次,看看 1 的比例,2 的比例等等。我们称 x 为随机变量,它对应于掷骰子的结果。因此,随机变量 x 只能取下列离散值:1、2、3、4、5 或 6。因此它是一个离散随机变量

概率质量函数的目的是描述每个可能值的概率。在我们的例子中,它描述了得到 1 的概率,得到 2 的概率等等。在骰子滚动实验的情况下,我们有相同的概率获得每个值(如果我们假设骰子是完美的)。这意味着我们可以写:

P(x = 1)=P(x = 2)=P(x = 3)=P(x = 4)=P(x = 5)=P(x = 6)

现在,我们如何计算概率 P (x = 1), P (x = 2)等等。?因为我们有 6 种可能的结果,并且它们是等概率的,所以我们有:

P(x = 1)=P(x = 2)=P(x = 3)=P(x = 4)=P(x = 5)=P(x = 6)= 1/6

顺便说一下,这个分布显示了每个值的相同概率:它被称为均匀分布

概率质量函数可能看起来像这样:

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

骰子实验的概率质量函数

y 轴给出概率,x 轴给出结果。

让我们用代码重现第一个例子,以确保一切都很清楚:

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

我用 Numpy 函数zeros()创建了一个填充了 0 的数组。每次投掷时,我从 6 种可能性中选择一个值。然后,我使用参数return_counts设置为True的 Numpy 函数unique()来获得每个可能结果的数量。我画出了每个可能值的比例。

我们可以看到,分布看起来像均匀分布,每个结果的概率约为 1/6(约为 0.17)。

联合概率分布

现在让我们看看如果掷两个骰子会发生什么。对于每个骰子,结果都与某个概率相关联。我们需要两个随机变量来描述这个博弈,假设 x 对应第一个骰子,y 对应第二个骰子。我们还有两个与随机变量相关的概率质量函数: P (x = x )和 P (y = y )。这里,对于两个骰子,随机变量(1、2、3、4、5 或 6)和概率质量函数的可能值实际上是相同的,但不需要如此。

在我们对 x 取一个特定值而 y 取另一个特定值的概率感兴趣的情况下,联合概率分布很有用。例如,第一次掷骰子得到 1,第二次掷骰子得到 2 的概率是多少?每对值对应的概率写成 P (x = x, y = y )或 P (x,y)。这就是我们所说的联合概率

例 3。

例如,让我们计算第一个骰子为 1,第二个骰子为 2 的概率:

P (x = x, y = y ) = 1/6。1/6 = 1/36 = 0.028

概率质量函数的性质

一个函数是概率质量函数,如果:

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

∀这个符号的意思是“为了任何人”。

这意味着对于 x 范围内的每个可能值 x (在掷骰子实验的例子中,所有可能值为 1、2、3、4、5 和 6),结果对应于该值的概率在 0 和 1 之间。概率为 0 表示事件不可能发生,概率为 1 表示您可以确定结果将符合该值。

在骰子的例子中,每个可能值的概率是 1/6,介于 0 和 1 之间。此属性已实现。

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

这意味着与每个可能值相关联的概率之和等于 1。

在骰子实验的例子中,我们可以看到有 6 种可能的结果,每种都有 1/6 的概率,总共是 1/6 * 6 = 1。此属性已实现。

3.3.2 连续变量和概率密度函数

有些变量不是离散的。它们可以在一定范围内取无限多的值。但是我们仍然需要描述与结果相关的概率。连续变量的概率质量函数的等价物被称为概率密度函数

在概率质量函数的情况下,我们看到 y 轴给出了一个概率。例如,在我们用 Python 创建的图中,得到 1 的概率等于 1/6 = 0.16(查看上面的图)。它是 1/6,因为它是 6 种可能性中的一种。

但是,对于连续变量,我们不能这样做,因为可能性的总数是无限的。例如,如果我们画一个介于 0 和 1 之间的数字,我们有无限多种可能的结果(例如 0.320502304……)。在上面的例子中,我们有 6 种可能的结果,导致大约 1/6 的概率。现在,我们有每个概率等于 1/+ = 0。这样的功能不会很有用。

因此,概率密度函数的 y 轴不代表概率值。为了得到概率,我们需要计算曲线下的面积(我们将在下面看到关于曲线下面积的一些细节)。这样做的好处是,它导致了根据一定范围(在 x 轴上)的概率:如果范围增加,曲线下的面积也增加。让我们看一些例子来澄清这一切。

例 4。

假设我们有一个随机变量 x,可以取 0 到 1 之间的值。这是它的概率密度函数:

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

概率密度函数

我们可以看到,0 似乎是不可能的(概率在 0 左右),1 也不是。pic 约为 0.3,这意味着将在该值附近获得很多结果。

通过计算该范围的曲线下面积,可以从某个范围的值之间的概率密度函数中找到概率。例如,绘制 0.5 到 0.6 之间的值的概率对应于以下区域:

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

概率密度函数和曲线下面积在 0.5 到 0.6 之间。

我们很容易看到,如果我们增加范围,概率(曲线下的面积)也会增加。例如,对于 0.5–0.7 的范围:

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

概率密度函数和曲线下面积在 0.5 到 0.7 之间。

我们一会儿会看到如何计算曲线下的面积,并得到与特定范围相关的概率。

概率密度函数的性质

概率质量函数和概率密度函数之间的这些差异导致概率密度函数的不同性质:

在这种情况下, p (x)不一定小于 1,因为与概率不对应(概率本身仍需在 0 和 1 之间)。

例 5。

例如,假设我们有一个连续的随机变量,取值范围在 0 到 0.5 之间。该变量由均匀分布描述,因此我们将得到以下概率分布函数:

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

概率密度函数(均匀分布)。曲线下的面积等于 1 (2 * 0.5),y 值大于 1。

我们可以看到 y 值大于 1。概率由曲线下的面积给出,因此它也取决于 x 轴。

🤨如果您想亲自看看,我们将用 Python 再现这个例子。为此,我们将创建一个随机变量 x,它可以随机取 0 到 0.5 之间的值。由于 Numpy 函数random.uniform(),将使用均匀分布。该函数的参数是最低值(包括)、最高值(不包括)和样本数。因此np.random.uniform(0, 0.5, 10000)将创建 10000 个随机选择为> 0 且≤0.5 的值。

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

看起来不错!🏄🏽‍♀️

我们可以看到,这个形状看起来像我上面画的那样,所有的 x 在 0 到 0.5 之间,y 轴值都在 2 左右。

然而,在这个情节中有一件事很耐人寻味。我们讨论过连续变量,这里我们用条形表示分布。解释和之前一样:我们需要离散化函数来统计每个区间的结果数。实际上,间隔的数量是函数distplot()的一个参数。让我们试着使用许多箱子:

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

我们可以看到,我们仍然在 2 左右,但可变性比以前更大(条形可以从 1 到 4,而在上一个图中不是这种情况)。知道为什么吗?🤔

💡这是因为由于我们采用了更多的箱,每个箱中的值数量较少,导致估计不太准确。如果这个假设是真的,我们可以通过增加样本数量来减少这种可变性。让我们试试:

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

太好了🤸🏼‍♂️

我们现在可以去第二处房产了!

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

对于概率质量函数,我们已经看到概率之和必须等于 1。这不是概率密度函数的情况,因为概率对应于曲线下的面积,而不是直接对应于 y 值。然而,这意味着曲线下的面积必须等于 1

我们在上一个例子中看到,面积实际上等于 1。由于均匀分布的平方形状,它可以很容易地获得和可视化。因此,可以将高度乘以宽度:2 * 0.5 = 1。

然而,在许多情况下,形状不是正方形,我们仍然需要计算曲线下的面积。让我们看看如何做到这一点!

🔧曲线下面积

特定数值范围的函数曲线下的面积可通过函数的积分计算。我们会看到,计算函数的积分与计算导数是相反的。这意味着如果你得到一个函数 f ( x )并计算结果函数f’(x)的积分,你将得到 f ( x )。😮

函数在某一点的导数给出了它的变化率。描述另一个函数(导数)变化率的函数和曲线下面积之间有什么联系🤔?

先说一个关于导数的点!然后,通过下一个图形示例,它将变得非常清晰。🔮

例 6。

我们想模拟车辆的速度。假设函数 f ( x ) = x 在时间(x 轴)的函数中定义了它的速度(y 轴)。

首先,我们将绘制函数 f (x)= x it 以查看其形状:

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

形状是抛物线!它表明速度在开始时缓慢增加,但在恒定的持续时间内增加得越来越多。

我已经创建了一个包含 x 轴所有点的变量 x (使用 Numpy 的函数arange())。所以它只是从-10 到 10 的所有值,步长为 0.1。让我们看看前 10 个值。

array([-10\. , -9.9, -9.8, -9.7, -9.6, -9.5, -9.4, -9.3, -9.2, -9.1])

这里是 Numpy 的arange()函数的文档

在我们的例子中,函数定义了车辆的速度与时间的函数关系,因此负值没有意义。让我们只取 x 轴的正的部分,以避免负的时间(我们会说 0 是实验的开始)。

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

好,这样更好!

这个函数的导数是 f '(x)=2 x 。欲了解更多关于衍生规则的信息,请点击查看

下面是一个f’(x)的情节:

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

🔧导数

导数的这个表示表示加速度。 f ( x )描述了车辆的速度与时间的函数关系,导数 f '( x )表示速度与时间的函数关系的变化率,即加速度。

我们可以看到车辆的加速度随时间线性增加。导数告诉我们,车速的变化率是 2 x 。例如,当 x =0 时,变化率等于 2 * 0 = 0,因此速度不变。当 x =3 时,变化率为 2 * 3 = 6。这意味着此时,时间增加 1,速度增加 6。

总而言之,函数的导数给出了它的变化率。在我们的例子中,变化率是另一个函数( f '( x ) = 2 x ),但是它可以是常数(变化率总是相同的,例如 f ‘( x )=2)或者是二次函数(例如f’(x)=x)。

🔧积分

能够计算导数是非常强大的,但是有没有可能反过来:从变化率到变化本身😮。哇,太酷了!答案由函数的积分给出。

f '( x )的积分还给我们 f ( x )。符号如下:

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

这意味着我们拿 f '( x )去拿回 f ( x )。这里的符号 dx 意味着我们对 x 进行积分,也就是说,我们对由 y 加权的切片求和(参见这里的)。

如果我们再举一个例子:

我们可以看到有一个区别:增加了一个常数 c 。这是因为无穷多个函数可以给出导数 2 x (例如 x + 1 或者x+294……)。我们丢失了一些信息,而且无法恢复。

现在,图形解释(我喜欢这个💛):我们已经看到 2 x 是描述函数 x 的变化率(斜率)的函数。现在如果我们从 f '( x )到 f ( x )我们可以看到 f '( x )曲线下的面积对应于 f ( x ):

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

f’(x)的曲线下面积对应 f(x)。这说明了积分和导数是如何逆向运算的。

该图显示了函数f’(x)= 2x,我们可以看到曲线下的面积呈指数增长。该区域代表不同的范围([0–0]、[0–1]、[0–2]、[0–3])。我们可以计算曲线下的面积(使用勾股定理并除以 2,因为面积是半平方)并找到以下值:0,1,4,9…这对应于原函数f(x)=x!🎺

结论

总而言之,我们已经看到了什么是随机变量,以及离散变量(概率质量函数)和连续变量(概率密度函数)的概率分布是如何表示的。我们还学习了联合概率分布的概念和基础数学工具,如导数和积分。

现在,您拥有了深入研究概率的所有工具。下一部分将是 3.4 到 3.8 章。我们将看到我们称之为边际和条件概率、链式法则和独立性的概念。

如果你想继续关注: TwitterGithubLinkedin

我希望这能帮助你对这一切有更好的直觉!如有任何问题/注意事项/更正,请随时联系我!😀

最初发布于https://hadrienj . github . io/posts/Probability-Mass-and-Density-Functions/

深度学习丛书 3.4 和 3.5 边际和条件概率

原文:https://towardsdatascience.com/deep-learning-book-series-3-4-and-3-5-marginal-and-conditional-probability-8c6239e453b8?source=collection_archive---------21-----------------------

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

The sum rule allows to calculate marginal probability from joint probability.

该内容是古德费勒(Goodfellow,I .)、本吉奥(Bengio,y .)和库维尔(a .)(2016 年)的深度学习书籍中关于概率的第三章系列的一部分。它旨在提供关于数学理论的直觉/绘图/python 代码,并作为我对这些概念的理解而构建。

Github :相应的 Python 笔记本可以在这里找到

我们已经在上一篇 / 笔记本关于深度学习书的 3.1 到 3.3 章学习了概率的基础知识。我们已经学习了什么是随机变量,概率质量函数或概率密度函数。我们的目标也是为了获得对非常常用的工具的更多直觉,比如导数、曲线下面积和积分。

在这第二篇关于边际和条件概率的文章/笔记中,你将学习离散和连续变量的联合和边际概率。然后,我们会看到条件概率的概念,以及相依事件和独立事件的区别。这些都对应了深度学习这本书的 3.4 章和 3.5 章。

我们将坚持概率中使用的数学符号。你会发现这是一种表达思想的富有表现力和综合性的方式!

3.4 边际概率

在前面的文章中,我们已经看到了一次一个随机变量的概率。在某些情况下,查看多个事件的概率可能会很有趣。例如,我们会问:“如果我掷硬币两次,恰好得到一个‘正面’和一个‘反面’的概率是多少?要回答这类问题,我们需要考虑多个事件。

注释

让我们从符号的一些细节开始。像往常一样,确保每一个数学符号都清晰明了是很重要的。下图总结了我们将在本文中使用的符号🔧:

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

Dictionary of mathematical expressions and their corresponding English traductions.

上一篇帖子我们已经看到,P(x= x ,y= y )是指 x 取特定值x和 y 取特定值 y联合概率。关于符号的详细信息,您也可以参考上一篇文章。你也可能遇到交集符号:∩。例如,P(x ∩ y)对应于 x 和 y 同时出现的概率。

例 1。

让我们从一个处理边际概率概念的例子开始。

在这个实验中,我们抛硬币(第一个事件)和掷骰子(第二个事件)。我们看每个事件的概率。例如,得到“正面”的概率是 1/2。掷出 1 的概率是 1/6。下图分别显示了每个事件的每个结果的概率:

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

The probabilities of two events (tossing a coin and throwing a dice) are represented individually.

你可能会对我在表格中显示概率感到惊讶。实际上,我把问题倒过来了:这些概率就是边际概率。“marginal”这个名字提醒我们可以把它们写在表格的空白处。

问题是:我们可以写在表格中间的其他概率是什么?它们是联合概率。它是获得两种特定结果的概率:

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

Marginal probability. The probabilities of two events (tossing a coin and throwing a dice) are represented. The marginal probabilities are in the ‘margin’ and correspond to the probabilities of each event alone.

例如,我们可以看到,得到 1 和“头”的概率等于 1/6 * 1/2 = 1/12。边际概率表示在边际上,对应于变量子集的概率分布。

求和规则

有时,您知道事件的联合概率,并需要从中计算边际概率。边际概率是用求和规则计算出来的。如果你回头看最后一张表,你可以看到写在页边空白处的概率是相应行或列的概率之和。

从数学上来说,我们有:

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

我们将研究这个方程的细节。

第一,提醒字体重要,表示不同的东西。x 是离散随机变量(例如,对应于掷骰子),x是随机事件的结果(例如,一个可能的骰子结果:1、2、3、4、5 或 6)。同样,y 是随机变量(假设对应于掷硬币),而 y 是 y 的结果(“正面”或“反面”)。

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

-第一个蓝色部分可以读作“对于 x 中的所有 x ”。这里,这是方程为真的一个条件。因此,只有当结果 x 在 x 的可能结果中时,表达式才为真。例如,如果随机变量 x 对应于掷骰子,我们知道 x 可以取值 1、2、3、4、5 或 6。只有当 x 实际上取这些值中的一个时,该等式才成立。

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

-绿色部分是 x 取特定值 x 的概率。例如,仍然在骰子实验中,P(x=6)对应于掷出 6 的概率。

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

-橙色的 sum 符号表示我们将对该符号之后的元素求和(这里 P(x= x ,y= y ))。sum 符号下的小 y 表示我们对 y (P(x= x ,y=1),P(x= x ,y=2 等所有可能的值求和。).

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

-红色部分是 x 取值xy 取值 y 的概率。

那么这个方程说明了什么呢?

这意味着 x= x 的概率等于在每个可能的 y 上对应于 x= x 的概率之和。下面的例子将阐明这种说法。

例 2。

和上一个例子一样,我们将做一个投掷骰子和硬币的实验。上表的中间给出了 x 和 y 取特定值的概率,也就是说,我们得到了投掷和投掷的特定结果。例如,掷出 1 并掷出“正面”的概率是 P(x=1,y=“正面”)= 1/12。

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

Joint probability to toss a head and to throw a 1.

我们可以使用前面的等式

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

假设我们想计算掷出 1 的概率:

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

这是 x=1 时 y 上的概率之和。有两种可能:我们可以有 x=1 和 y= '正面’或者 x=1 和 y= ‘反面’。用更数学的术语来说,我们可以说:

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

这有意义吗?由于 y 的每一种情况都被考虑在内,这只是掷出 1 的概率。这叫做边际概率

我希望现在注释清楚了。如果你还没有掌握这些数学符号,不要担心:这只是一个习惯问题💪🏼。你会发现这是一种有用的综合思维方式。

连续变量

同样的技巧可以用于连续变量,但是我们需要用积分代替求和。提醒一下,对于连续变量,变量取某个特定值的概率接近 0 0 0因为有无限的可能性(参见上一篇 / 笔记本)。

例 3。

假设我们有两个变量 x 和 y 的联合概率密度函数,我们想计算一个边际概率。首先,我们需要三个维度来表示概率密度函数:变量 x 的值、变量 y 的值以及与获得这两个值相关联的概率。

例如,让我们用正态分布来表示两个变量 x 和 y。Numpy random.normal()(参见 doc )中的函数创建一个从正态分布中提取的值的向量。第一个参数是分布的平均值,第二个是标准偏差,第三个是样本数。

例如,np.random.normal(0, 1, 1000)创建一个长度为 1000 的向量:

np.random.seed(123)
x = np.random.normal(0, 1, 1000)
x.shape

这返回(1000,)

如果我们取这个向量中所有值的平均值,我们会得到一个接近 0 的值:

标准差告诉我们单个值是否或多或少偏离了平均值。

让我们创建两个连续分布:

np.random.seed(123)
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)sns.distplot(x)
plt.title(‘x’)
plt.xlim(-4, 4)
plt.show()sns.distplot(y)
plt.title(‘y’)
plt.xlim(-4, 4)
plt.show()

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

让我们试着理解这些图到底代表了什么。我使用了 Seaborn 包中的函数distplot。y 轴给出了变量取 x 轴给出的值的概率密度**。你可以在上一篇文章 / 笔记本中找到更多关于概率密度函数的细节。简而言之,对于 x 轴的某个范围,必须计算曲线下的面积,以获得在该范围内获得值的概率。**

那么,边际概率呢?如果想得到 x 的边际概率,需要得到概率密度函数的曲线下沿 y 轴的面积。您可以想象我们只从 y 轴(或该轴上的投影)看 3D 图,并获得曲线下的面积。

对于离散变量 x 和 y,我们已经看到边际概率 P(x)是 y 的每个值的概率之和。现在我们的变量是连续的,我们必须使用积分,但原理是相同的:

-为了计算边际概率 P(x),我们计算变量在 x 轴上投影的曲线下的面积。

-为了计算边际概率 P(y),我们计算变量在 y 轴上投影的曲线下的面积。

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

Probability density functions of two gaussian variables — source.

当我们知道联合概率分布时,这用于恢复一个变量的概率分布。

这可以用下面的等式来表示:

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

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

关于整合的更多解释,你可以看看这个帖子 / 笔记本。方程式末尾小 d 后面的变量表示用于积分的变量。在第一个方程中,我们对 y 积分,这意味着我们把 x 看作一个常数。我们在第二个等式中做相反的事情。

3.5 条件概率

条件概率是指给定一个事件发生另一个事件的概率。

从属和独立事件

首先,区分依赖事件和独立事件非常重要!这两种情况下的直觉都有点不同。

独立事件的例子:骰子和硬币

在这个例子中,我们做了一个扔骰子和硬币的实验。我们将调用两个随机变量来描述这些事件,x 对应于掷骰子,y 对应于掷硬币。

我们可以问的一个问题是:掷骰子得到 3,掷硬币得到 1 的概率是多少?

我们可以看到这两个事件是独立的,因为我们不期望一个事件对另一个事件有任何影响。

相关事件示例:一副牌中的两张牌

在这个例子中,我们将得到一副牌中的两张牌而不替换。当我们拿第一张牌(所有 52 张牌都在这副牌中)和拿第二张牌(现在有 51 张牌,少了一张)时,概率是不同的。这意味着事件是相关的:第一次抽奖的结果将影响第二次抽奖的概率。

我们可以问的一个问题是:当我们第一次抽中 6 时,第二次抽中 6 的概率是多少?

注释

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

Conditional probability.

下面介绍一些新的记法:P(y= y | x= x 描述了条件概率:是给定随机变量 x 取特定值 x 的情况下,随机变量 y 取特定值y的概率。它不同于 P(y= y ,x= x )对应的是随机变量 y 得到结果 y 和随机变量 x 得到结果 x 的概率,在条件概率的情况下,与随机变量 x 相关联的事件已经产生了它的结果( x )。

在数学上,条件概率和联合概率之间有一个方便的关系:

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

我们来啰嗦一下,用通俗易懂的英语把等式转换一下:

假定随机变量 x 取值 x ,随机变量 y 取值 y 的概率是两个事件发生的概率(y 取值yx 取值 x )与 x 取值 x 的概率之比。

换个方向看可能更直观:

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

可以这样理解:要计算两个事件发生的概率,我们得取第一个事件发生的概率(P(x=x)乘以给定第一个事件发生的情况下第二个事件发生的概率(P(y= y | x= x) )。清楚了吗?

概率倍增

这最后一个解释引出了一个问题。我们用概率乘法(P(x= x )乘以 P(y= y | x= x ))来表示多个事件发生的概率(P(y= y ,x= x )。让我们看看为什么这是有意义的。

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

The probability is the ratio between the number of successful outcomes over the total number of outcomes.

以两个独立的事件为例:我们投掷硬币两次(第一次对应于第一个事件,第二次对应于第二个事件),我们希望计算得到两个“正面”的概率。我们知道,每次试验得到“正面”的概率是 1/2。

为了理解为什么必须使用概率乘法,我们需要理解每个事件的概率是多少。先来关注第一个事件,第一次抛硬币。概率 1/2:1 对应于“成功”结果的数量(即得到一个“头”)。分母(2)对应于可能性的总数。可能的结果是“正面”或“反面”,所以有两种结果。这就导致了我们的概率 1/2。

如果我们考虑这两个事件,这是所有可能的结果:

  • 头和头
  • 正面和反面
  • “反面”和“正面”
  • “尾巴”和“尾巴”

我们仍然有 1 个成功结果(“正面”和“正面”),并且有 4 个可能的结果。因此,得到“正面”和“正面”的概率是 1/4。

诀窍就在这里。要得到可能结果的总数,我们只需将每个事件的结果数相乘。在这种情况下是 2 * 2。如果我们将事件概率相乘,我们得到:1/2 * 1/2 = 1/4。

为了确保条件概率非常清楚,我们将举一个独立和相关事件的例子。此外,独立概念的更多细节将在 3.7 中解释。

我们将从独立事件的情况开始。

例 4。

首先,让我们回顾一下我们需要的所有数学符号。P(x= x )是变量 x 取状态 x 的概率。例如,P(x=3)对应于在骰子上掷出 3 的概率。同理,P(y= y )是随机变量 y 取值 y 的概率。例如,P(y='heads ‘)对应于得到’ head '的概率。

P(y= y ,x= x )是这些事件的联合概率。例如,P(x=3,y=“正面”)是在骰子上掷出 3 并在硬币上得到“正面”的概率。对于这个例子,假设我们知道 P(x=3,y=‘heads’)=1/12。

P(y= y | x= x )对应于给定 x= x 时 y= y 的概率。因此,这是一个条件概率。例如,P(y= ‘正面’ | x=3)对应于我们已经在骰子上掷出 3 的情况下得到正面的概率。

注意 P(y=‘heads’ | x=3) = P(y='heads '),因为这些事件是独立的。这意味着 x 的概率对于 y 的任何结果都是一样的。

在我们的示例中,我们有:

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

我们可以看到确实 P(y = ’ heads ’ | x = 3)= P(y = ’ heads ')= 0.5。

我们将用一个依赖事件的例子来结束这篇文章。

例子

在这个例子中,我们抽取两张没有替换的卡片。第一步是运用我们所学的知识,用数学符号写出问题。我们称 x 为对应于第一次抽取的变量,y 为对应于第二次抽取的变量。随机变量 x 和 y 都可以取值 1、2、3、4、5 或 6。这些是变量的可能结果。

我们已经看到,计算条件概率的一般公式是:

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

假设我们在第一次抽牌时抽了 6,我们想知道在第二次抽牌时抽 6 的概率。我们可以这样写:P(y=6 | x=6)。

我们需要:

-第一次抽中 6 的概率(P(x=6))

-在第一次和第二次中均抽到 6 的概率(P(y=6,x=6))

在第一次抽牌时,抽到 6 的概率是 4/52(52 张牌中有 4 张 6),所以 P(x=6)=4/52。抽对 6 的概率是:

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

我们要计算的条件概率是:

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

这意味着,一旦我们已经拿到了一张 6,我们有 13 次机会(几乎是 6%)拿到 6。我们可以注意到它对应的是 3/51(更多细节在下一章)。

结论

我们已经看到,边际概率是指在多个事件的实验中,单个事件发生的概率。在这些边际概率和表示两个事件发生的概率的联合概率之间存在关系。

我们也谈到了条件概率。它对应于特定条件下的概率,例如,在一副牌中得到一个 6 的概率,知道我们已经得到一个 6 并且没有替换它。我们研究了非独立事件和独立事件的情况。

我希望这篇文章能帮助你使用和阅读这些概念背后的数学符号。

2020 年你应该读的深度学习书籍

原文:https://towardsdatascience.com/deep-learning-books-you-should-read-in-2020-7806048c1dc5?source=collection_archive---------11-----------------------

现在关于深度学习最好的书是什么?

随着机器学习和数据科学的兴起,它们被应用到每一个地方,并改变着每一个行业,难怪机器学习方面的专家会获得丰厚的报酬和很多关注。如果你已经读过几本数据科学机器学习书籍,那么是时候关注深度学习了:神经网络、Keras、Tensorflow、Scikit-learn 等。

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

Deep Learning books to read in 2020

入门水平

如果你刚刚进入机器学习领域,有一本书是我不能不推荐的。简直太棒了!

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

用 Python 介绍机器学习是机器学习和深度学习的顺利入门。它没有假设任何关于编码和 Python 的知识,它介绍了机器学习的基本概念和应用,通过例子讨论了各种方法。那是我见过的最适合入门级深度学习工程师的书。

中间能级

如果你已经完成了几个机器学习项目,你对 Keras 或 Tensorflow 有所了解,你使用过 scikit-learn,那么我有两条建议给你。

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

使用 Scikit-Learn 和 TensorFlow 的动手机器学习涵盖了深度学习的所有基础知识,工作代码和充满色彩的惊人可视化。读起来真的很有趣,它是一个完整的 400+页的指南,通过分类,聚类,神经网络和其他方法,有很多例子可以自己尝试。

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

使用 Python 进行深度学习就是使用 Keras 作为深度学习的主要框架。Keras 的创建者 Francois Chollet 对这种易于使用且高效的框架做了很好的概述。从 MNIST 到 CNN,从计算机视觉到 NLP。都在一个地方,以简洁的形式给出。

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

深度学习和围棋游戏的目标是使用围棋作为指导示例,向您教授神经网络和强化学习。在这本书的过程中,你将学习如何创建你自己的机器人/代理人来玩这个游戏,这非常棒。

专家级

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

如果你对深度学习很认真,深度学习是必读书。它没有给出代码,假设您在这个阶段能够自己编写所有代码,但是它给出了为什么某些层工作得更好、如何优化超参数、使用什么网络架构等等的解释。它给出了深度学习的最新描述。

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

机器学习:概率视角是关于机器学习的数学视角。很难阅读,但当你建立深度学习模型时,对于你可能遇到的任何数学问题来说,这是一个很好的参考。作为百科全书式的参考资料,它非常有用。仅供专家使用。

如果您想要更多书籍推荐,请参阅以下列表:

[## 加入我的深度学习时事通讯

让我们保持联系。每周或双周电子邮件。](https://creative-producer-9423.ck.page/c3b56f080d) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Data Science Job

最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。

深度学习:如何使用 CNN 构建狗检测器和品种分类器?!

原文:https://towardsdatascience.com/deep-learning-build-a-dog-detector-and-breed-classifier-using-cnn-f6ea2e5d954a?source=collection_archive---------4-----------------------

这项工作是 Udacity 的数据科学顶点项目的一部分。

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

概述:

你可能会认为在图像中识别狗的品种对你来说是一件容易的事情。你是对的!找到具有最小类间差异的犬种配对可能并不困难,例如,卷毛寻回犬和美国水猎犬。

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

但是,这两个呢?!

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

哼,没那么容易!

在最近十年,使用深度学习技术和几行 python 代码来区分图像中的狗品种要容易得多。在这篇博客中,我将带你从头开始创建卷积神经网络(CNN ),并利用 ImageNet 上最新的图像分类技术。这个模型可以作为现实世界和用户提供的图像的移动或 web 应用程序的一部分。给模型一个图像,它确定是否有狗,并返回估计的品种。如果图像是人类,它将返回最相似的狗品种。你可以在我的 GitHub repo 里找到代码。

人体探测器

我使用 OpenCV 的实现的基于 Haar 特征的级联对象分类器来检测人脸。级联函数是一种基于机器学习的方法,在许多带有正面(有人脸)和负面(没有任何人脸)标签的图像上进行训练。detectMultiScale 获取所有面的坐标,然后将它们作为矩形列表返回。但是不要忘记在使用之前将 RGB 图像转换成灰度。

下面的 face_detector 函数计算照片中有多少张人脸:

def face_detector(img_path):
    img = cv2.imread(img_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray)
    return len(faces) > 0

人脸检测器的性能在 100 个人和狗的图像样本上进行评估。这个检测器从人类数据中识别所有的人脸,但是在狗数据集上表现不佳。它有大约 11%的假阳性。

狗探测器

是时候使用另一个在狗数据集上表现更好的检测器了。我在 Keras 的 ImageNet 上使用了预训练的 ResNet50 权重,该权重在包含 1000 个标签的超过 1000 万张图像上进行训练。

在下面的代码中,paths_to_tensor 获取图像的路径,并返回一个可用于 ResNet50 的 4D 张量。但是,Keras 中的所有预训练模型都需要额外的处理,如归一化,这可以通过使用 preprocess_input 来完成。如果在存储于 img_path 的图像中检测到狗,dog_detector 函数返回“True”。

from keras.preprocessing import image                  
from tqdm import tqdm
from keras.applications.resnet50 import preprocess_input, decode_predictionsdef path_to_tensor(img_path):
    img = image.load_img(img_path, target_size=(224, 224)
    return np.expand_dims(x, axis=0)def paths_to_tensor(img_paths):
    list_of_tensors = [path_to_tensor(img_path) for img_path in       tqdm(img_paths)]
    return np.vstack(list_of_tensors)def ResNet50_predict_labels(img_path):
    img = preprocess_input(path_to_tensor(img_path))
    return np.argmax(ResNet50_model.predict(img))def dog_detector(img_path):
    prediction = ResNet50_predict_labels(img_path)
    return ((prediction <= 268) & (prediction >= 151))

为了评估狗检测器,我检查了 ImageNet 上 RestNet50 的预测类别是否属于狗品种类别。狗检测器表现良好,没有任何假阴性。

既然我们在图像中认出了狗,那么是时候预测狗的品种了。但首先我们应该更详细地分析训练数据集:

数据集

该数据集共有 133 个不同品种的 8,351 幅图像。可供模型学习的图像数量大约是每种 62 张,这对于 CNN 来说可能还不够。在这个现实世界的设置中,图像有不同的分辨率,大小,照明条件,也有一些图像有一只以上的狗。通过比较相同标签图像的像素强度分布,我注意到,例如,American_staffordshire_terrier 的照片在对比度、大小和亮度方面有所不同。这两幅图像中的红色、绿色和蓝色通道的强度值分布不同。数据的这种变化使得给狗分配品种的任务变得更加具有挑战性。

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

训练数据中品种标签的分布显示数据略有不平衡,平均每类 53 个样本。大多数品种在训练、有效和测试数据集中具有几乎相同的分布。

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

此外,作为数据处理的一部分,我通过将每个图像中的每个像素除以 255 来对图像进行去标度。

指标

由于我们在这里处理的是一个多分类问题,并且数据略有不平衡,所以我使用了准确性评估度量和分类交叉熵成本函数。但是,首先,标签必须是分类格式。目标文件是与这种格式的图像相关的编码狗标签列表。如果预测的概率导致与实际不同的标签并导致更高的准确性,则这种多类对数损失会惩罚分类器。一个完美的分类器的损失为零,准确率为 100%。

对狗的品种进行分类

这里我用 Relu 激活功能在 Keras 中创建了一个 4 层 CNN。该模型从 224 2243 个颜色通道的输入图像开始。这个输入图像很大但很浅,只有 R、G 和 b。卷积层通过减少宽度和高度来挤压图像,同时逐层增加深度。通过添加更多的过滤器,网络可以学习照片中更重要的特征,并更好地进行归纳。

我的第一层产生 16 个特征通道的输出,作为下一层的输入。过滤器是 16 个方阵的集合,输出特征图是输入特征和内核的加权和。在训练过程中,通过 ImageNet 数据计算内核的权重,它所做的是滑过输入特征映射并产生输出特征。因此,输出特征的形状取决于内核和输入特征的大小。

查看本页可以更好地理解 CNN 是如何工作的。

我认为输入和输出特征具有相同的大小是最理想的。所以,我决定使用相同的填充去图像的边缘,所有的层都用零填充,步幅为 2。我还使用了 max-pooling 操作来确保我不会丢失图片中的信息,同时降低过度拟合的可能性。最大池取一个位置周围的最大像素。经过四个卷积层和最大池,然后是两个完全连接的层,我训练了分类器。卷积层提取图像特征,分类器根据之前获得的特征进行分类。下图显示了顶部的特征块序列和分类器如何从原始图像传输信息并预测所需的目标值。

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

CNN 的模型架构是:

from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequential# Model Architecture
model = Sequential()model.add(Conv2D(filters=16, kernel_size=2, padding='same', activation='relu', input_shape=(224,224,3)))
model.add(MaxPooling2D(pool_size=2)) model.add(Conv2D(filters=32, kernel_size=2 , padding='same' , activation='relu'))
model.add(MaxPooling2D(pool_size=2))model.add(Conv2D(filters=64 , kernel_size=2 , padding='same' , activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Dropout(0.4))model.add(Conv2D(filters=128 , kernel_size=2 , padding='same' , activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Dropout(0.4))model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(133,activation='softmax'))model.summary()

由于没有足够的图像数据来训练模型,从头开始创建的模型表现不佳,精度为 12%。一个潜在的改进是数据扩充,以添加更多的数据。该策略通过随机填充、裁剪和旋转图像来修改图像。它还使模型能够更好地概括,而不会过度拟合,当然,使用适当的参数。

正如前面提到的,在这样的小数据上训练从头制作的 CNN 分类器会导致欠拟合,并且有这么多层,参数调整经常会导致过拟合。因此,是时候利用迁移学习预训练网络来创建 CNN 品种分类器了,尽管这些模型并不是为这项任务而明确创建的。但是这些网络的一个优点是,它们是在大数据集上训练的,ImageNet 有数百万张带标签的图像,并且达到了 90%的准确率。此外,它们可以推广到 ImageNet 之外的其他图像。

我在 Keras 中实现了预训练的模型,如 VGG、Inception V3 和 ResNet,并比较了它们的准确性。我将它们用作固定的特征提取器,并通过使用随机梯度下降、0.001 的学习率和内斯特罗夫动量最小化交叉熵损失函数来微调全连接层。同样,最后一个完全连接的层被更改为狗的品种数,133。然后,每个模型被训练 25 个时期,每批 20 个样本。

# model Architecture
Xception_model = Sequential()
Xception_model.add(GlobalAveragePooling2D(input_shape=(train_Xception.shape[1:])))
Xception_model.add(Dense(133, activation='softmax'))checkpointer = ModelCheckpoint(filepath='saved_models/weights.best.Xception.hdf5', verbose = 0, save_best_only=True)sgd = SGD(lr= 1e-3 , decay=1e-6, momentum=0.9 , nesterov = True)# compile the model
Xception_model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])# Training the model 
Xception_model.fit(train_Xception , train_targets, 
               validation_data = (valid_Xception, valid_targets),
               shuffle = True,
               batch_size = 20,
               epochs = 25,
               verbose = 1)

Xception 模型优于所有其他模型,准确率为 86%,测试数据损失为 0.4723。总的来说,基于盗梦空间的模型在 ImageNet 上略胜 VGG 和雷斯网;此外,它的计算效率更高。可以通过应用更合适的微调技术来提高模型性能。例如,训练与特定狗特征相关的几个顶层,并冻结检测更一般特征的其他层。因为它们已经在 ImageNet 权重中被捕获。

结果

现在,是时候将检测器和异常预测繁殖结合起来,并在不同大小和分辨率的几幅图像上测试它们了。如前所述,准确性被选为该分类器的模型评估指标。该代码获取一个图像路径,首先确定图像是狗、人还是两者都不是,然后返回预测的相似品种:

def Xception_predict_breed (img_path):
    bottleneck_feature = extract_Xception(path_to_tensor(img_path)) 
    predicted_vector = Xception_model.predict(bottleneck_feature) 
    return dog_names[np.argmax(predicted_vector)]def display_img(img_path):
    img = cv2.imread(img_path)
    cv_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    imgplot = plt.imshow(cv_rgb)
    return imgplotdef breed_identifier(img_path):
    display_img(img_path)
    prediction = Xception_predict_breed(img_path)
    if dog_detector(img_path) == True:
        print('picture is a dog')
        return print (f"This dog is a {prediction}\n")

    if face_detector(img_path) == True:
        print('picture is a human')
        return print (f"This person looks like a {prediction}\n")

    else:
        return print('The picture is neither dog nor human')

结果表明,该模型运行良好。例如,它可以在测试数据中预测 American_staffordshire_terrier,同时对不同亮度、大小和缩放级别的图像进行训练。

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

下面是在人类图像上的结果:

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

测试数据预测的混淆矩阵如下所示。但是,很难想象哪些品种被错误分类。

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

为了更好地理解错误分类的情况,我将预测值和实际值配对。该模型无法在大白熊和库瓦斯之间进行分类,这两种动物都是白色、体型大且毛茸茸的。它也分不清獒和牛獒,后者是牛头犬和獒的混种。通过添加更多的数据,该模型将能够学习更多的具体特征,并区分这些相似的品种,这甚至让人类感到困惑。

潜在的改进

由于模型存在轻微的不平衡,可以通过数据扩充和增加更多的训练标记数据来提高模型的精度。随着获取更多数据,Convnet 模型将更有能力从图像中学习更多相关和特定的狗特征。但是,它需要大量的时间和内存使用。另一种提高模型准确性的可能方法是对几个网络的预测进行平均,以获得最终的预测,称为集成技术。正如我之前提到的,一个改进可以是应用更合适的微调策略来根据数据调整权重。此外,对最终模型的正确分析是给图像添加一些噪声,并观察它的表现。

结论

在这项工作中,我实现了 haar 级联分类器和 ResNet50 预训练的权重来检测人脸和狗。我还花了一些时间探索数据,以找到图像特征,这有助于我应用更合适的技术。对于犬种分类,我已经开始使用一些卷积层数作为基线网络。该模型的表现比随机猜测要好,133 分之一,但仍然不足。

在给定的时间和内存能力下,我决定利用几个迁移学习架构来增强 CNN 的性能,这导致了显著的改进。我使用预先训练的模型作为固定特征提取器,并改变了全局平均池层、完全连接层,并应用了其他微调方法。Xception 和 ResNet50 产生了比其他更高的准确率,大约 86%。由于混合品种之间存在一些相似性,这类数据集非常复杂,因此要获得更高的准确性是非常具有挑战性的。

最后,我在不同强度分布的相同标记照片上测试了该模型,它的性能相当好。

这个项目最令人兴奋的部分是现代通信网络如何通过几行代码让我们轻松完成甚至人类都觉得具有挑战性的任务。但是在给定的时间和记忆能力下,很难对模型进行改进。我计划探索上述的改进方法,并将更新这个博客以获得更好的结果。

如果你觉得有趣,请随意使用我的代码。

深度学习、计算机视觉和自动光学检测

原文:https://towardsdatascience.com/deep-learning-computer-vision-and-automated-optical-inspection-774e8ca529d3?source=collection_archive---------10-----------------------

热轧带钢表面缺陷分类实例研究

自动光学检测常用于电子工业和制造业,在生产过程中检测产品或部件的缺陷。从概念上讲,图像分类、对象检测和语义分割的深度学习中的常见实践都可以应用于自动光学检查。图 1 显示了图像识别中的一些常见任务,图 2 显示了钢零件表面缺陷的一些示例,以供交叉参考。

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

Figure 1. Different tasks in image recognition. [source]

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

Figure 2. NEU Surface Defect Dataset: Image Classification (left) and Object Detection (right). [source]

本文介绍了深度学习在热轧带钢表面缺陷图像分类中的应用研究。这篇文章的其余部分组织如下。首先,我们将讨论数据和任务。其次,我们将讨论三种用于评估的深度学习模型:基线模型、InceptionV3 和 MobileNet。最后,我们将介绍实验,然后评估结果。

NEU 表面缺陷数据库

NEU 表面缺陷数据库 收集了六种典型的热轧带钢表面缺陷。该数据集由 1800 张 200x200 的灰度图像组成,均匀标记在 6 个类别上,即滚入比例补丁龟裂麻面内含物划痕。图 3 显示了数据库中的示例图像。

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

Figure 3. Sample images in NEU Surface Defect Database. [source]

我们在这里的任务是探索这种多类分类问题的深度学习模型。注意,根据数据库的来源,该数据集对图像分类提出了两个困难的挑战,即类内变异类间相似度:

  • 类内变异,即同一类中可能出现不同的模式。例如划痕(图 3 最后一栏)的类别包括水平划痕、垂直划痕、倾斜划痕等。此外,由于照明和材料变化的影响,类内缺陷图像的灰度是变化的。
  • 类间相似度,即相似的方面可能出现在不同的类下。例如,滚入比例龟裂麻面中的一些图像可能看起来很像。

虽然类内变异和类间相似性已经在不同的应用中得到解决,但在这种情况下,这些问题肯定会成为一个问题。

模型选择和微调

Keras 2.2.2(以 Tensorflow 1.10.0 为后端)实现了三个深度学习模型进行评估:

  • 一个简单的卷积神经网络作为基线模型 : 3 个Conv2D/MaxPooling2D对作为特征提取器,3 个密集层作为分类器;(图 4)
  • InceptionV3 : Keras 应用 InceptionV3 使用 1 个globalaveragepool2d层和 2 个 Dense 层对分类器进行微调;(图 5)
  • MobileNet : Keras 应用 MobileNet 使用 1 个globalaveragepooli2d层和 2 个 Dense 层对分类器进行微调;(图 6)

更多关于数据处理和模型训练的共同工程决策:

  • 没有数据增强;
  • 培训/验证分成 90/10;
  • 没有预先训练的重量;
  • 20 个时期没有提前停止;

Figure 4. simple convolutional neural network.

Figure 5. InceptionV3 Fine-Tuning.

Figure 6. MobileNet Fine-Tuning.

实验和评估

  • 图 7 简单卷积神经网络(基线):验证准确率高达 52.78%;
  • 图 8 InceptionV3 微调:验证准确率高达 98.89%。这个模型似乎在 14 个时代后过度拟合;
  • 图 9 MobileNet 微调:验证准确率高达 100.00%。该模型在时期 4 达到 99.44%,然后在时期 10 和时期 14 达到 100.00%。(好得不像真的?!查看这里的完整日志

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

Figure 7. training/validation history of the simple convolutional neural network.

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

Figure 8. training/validation history of InceptionV3 Fine-Tuning.

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

Figure 9. training/validation history of MobileNet Fine-Tuning.

结论

本文对热轧带钢表面缺陷的分类进行了研究。为自动光学检测实施缺陷分类解决方案实际上类似于在图像分类的深度学习中进行常见实践。显然,知道如何对 MNIST 数据集进行分类并从 Keras 应用程序中导入/调整模型的人应该能够完成这项工作。然而,我仍然想写下这个帖子,原因有几个。

  1. 虽然自动光学检测在工业中非常重要,但是自动光学检测的公共数据集相对较少,因为大多数拥有这些数据的公司可能不想公开这些数据。因此,研究人员和从业人员可能缺乏数据集和调查基准。NEU 表面缺陷数据集为图像分类和目标检测提供数据,这无疑是一个很好的实践设置。
  2. 一般来说,自动光学检测数据集的大小小于教科书数据集(如 MNIST 或 CIFAR)和流行数据集(如 ImageNet 或 COCO)。)在NEU 表面缺陷数据集的情况下,每类只有 300 幅图像用于训练和验证。此外,由于要考虑类内差异、类间相似性和受检产品/组件/材料的性质,正确应用数据扩充可能是一个挑战。
  3. 一些深度学习模型适用于自动光学检查的任务,但一些模型可能不是好的选择。然而,模型选择和微调没有金科玉律。使用从 ImageNet 学习的权重进行迁移学习(或者应该使用多少预先训练的权重)是否可以帮助我们执行自动光学检测的任务,这是事先未知的。

最后评论:如果读者想知道深度学习方法和机器学习方法在这项任务中的区别,请查看英特尔人工智能学院下的这篇博客

感谢阅读。如果您有任何意见或问题,请随时留言。

深度学习的可解释性:来自物理学的提示

原文:https://towardsdatascience.com/deep-learning-explainability-hints-from-physics-2f316dc07727?source=collection_archive---------7-----------------------

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

Image by Ralf Kunze from Pixabay.

内部 AI

从物理学角度看深层神经网络

如今,人工智能几乎存在于我们生活的每一个部分。智能手机、社交媒体、推荐引擎、在线广告网络和导航工具是基于人工智能的应用的一些例子,它们已经影响到我们的日常生活。在诸如语音识别自动驾驶机器翻译视觉对象识别等领域的深度学习已经系统地提高了艺术水平有一段时间了。

然而,使深度神经网络(DNN)如此强大的原因仅仅是启发式地 [理解](https://arxiv.org/pdf/1608.08225.pdf),即我们仅从经验中知道,我们可以通过使用大型数据集并遵循特定的训练协议来实现出色的结果。最近,有人提出了一种可能的解释,这种解释基于一种基于物理学的概念框架,称为重整化群 (RG)和一种被称为受限玻尔兹曼机器 (RBM)的神经网络之间的显著相似性。

RG 和 RBMs 作为粗粒化过程

重正化是一种用于研究物理系统在微观部分信息不可用时的行为的技术。这是一种“粗粒化”的方法,它展示了当我们缩小并检查不同长度尺度的物体时,物理规律是如何变化的,“戴上模糊的眼镜”。

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

When we change the length scale with which we observe a physical system (when we “zoom in”), our theories “navigate the space” of all possible theories (source).

RG 理论的巨大重要性来自于它提供了一个强有力的框架,从本质上解释了为什么物理学本身是可能的

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

To describe the motion of complex structures such as satellites, one does not need to take into account the motions of all its constituents. Picture by 3Dsculptor/Shutterstock.com.

RG 理论提供了一个强有力的框架来解释为什么物理学本身是可能的。

例如,要计算绕地球运行的卫星的轨道,我们只需要运用牛顿运动定律。我们不需要考虑卫星微观成分极其复杂的行为来解释它的运动。我们在实践中所做的是对系统基本组件(在这种情况下是卫星)的详细行为进行某种“平均”。RG 理论解释了为什么这个过程如此有效。

此外,RG 理论似乎表明,我们目前关于物理世界的所有理论都只是一些未知的“真实理论的近似(用更专业的术语来说,这种真实理论“生活”在物理学家所谓的标度变换的固定点附近)。

RG 理论似乎表明,我们目前关于物理世界的所有理论都只是一些未知的“真实理论”的近似。

当被研究的系统处于临界点时,RG 工作良好,并表现出自相似性。一个自相似系统在它被观察的任何长度尺度下都是"完全或近似地类似于它自身的一部分。显示自相似性的系统的例子有分形

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

Wikipedia animation showing the Mandelbrot set and we zoom in (source).

处于临界点的系统在相距甚远的部分之间表现出很强的相关性。所有的子部分影响整个系统,系统的物理性质变得完全独立于其微观结构。

人工神经网络也可以被视为一个粗粒度的迭代过程。人工神经网络由几个层组成,如下图所示,早期的层仅从输入数据中学习较低级别的特征(如边缘和颜色),而较深的层将这些较低级别的特征(由早期的特征提供)组合成较高级别的特征。用 Geoffrey Hinton话来说,深度学习社区的领军人物之一:“你首先学习简单的特性,然后在此基础上学习更复杂的特性,这是分阶段进行的。”此外,与 RG 工艺的情况一样,更深的层只保留被认为相关的特征,不强调不相关的特征

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

Convolutional neural network (CNN). The complexity level of the forms recognized by the CNN is higher in later layers (source).

确切的联系

物理学和机器学习都处理具有许多成分的系统。物理学研究包含许多(相互作用的)物体的系统。机器学习研究包含大量维度的复杂数据。此外,类似于物理学中的 RG,神经网络设法对数据进行分类,例如动物的图片,而不管它们的组成部分(例如大小和颜色)。

在 2014 年发表的一篇文章中, Pankaj MehtaDavid Schwab 两位物理学家基于重整化群理论对深度学习的性能进行了解释。他们表明 dnn 是如此强大的特征提取器,因为它们可以有效地“模仿”粗粒化过程,这是 RG 过程的特征。用他们的话说“DNN 架构[……]可以被视为一种迭代的粗粒度方案,其中神经网络的每个新的高级层从数据中学习越来越抽象的高级特征”。事实上,在他们的论文中,他们设法证明了在 RG 和受限玻尔兹曼机器 (RBM)之间确实有一个精确的映射,这是一个构成 DNN 积木的双层神经网络。

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

From the 2014 paper by Mehta and Schwab where they introduced the map between RG and DNNs built by stacking RBMs. More details are provided in the remaining sections of the present article (source).

文献中还有许多其他工作将重正化和深度学习联系在一起,遵循不同的策略,具有不同的目标。尤其是基于信息瓶颈方法Naftali Tishby 及其合作者的工作引人入胜。另外, Mehta 和 Schwab 只解释了一种神经网络的图谱,后续的工作已经存在。然而,为了简洁起见,我在这里将重点放在他们的原始论文上,因为他们的见解导致了该主题的大量相关后续工作。

在给出这种关系的一个相对详细的描述之前(参见这篇文章中一个很好的,虽然不太专业的描述),我将提供一些 RG 理论和 RBM 的一些事实。

重整化群理论:鸟瞰

如上所述,重正化包括将粗粒化技术应用于物理系统。RG 理论是一个通用的概念框架,因此人们需要方法来操作这些概念。变分重整化群(VRG)就是这样一种方案,由 Kadanoff,Houghton 和 Yalabik 于 1976 年提出。

为了阐述清楚,我选择集中在一个特定类型的系统来说明 RG 是如何工作的,即量子自旋系统,而不是进行全面的概括。但在钻研数学机械之前,我要给出一个“手挥动”的解释自旋在物理学中的意义。

物理学中的自旋概念

在物理学中,自旋可以被定义为“基本粒子、复合粒子和原子核所携带的角动量的一种内在形式。”尽管根据定义,自旋是一个没有经典对应物的量子力学概念,但具有自旋的粒子通常(尽管不正确)被描述为围绕自身轴旋转的小陀螺。自旋与现象密切相关。

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

The particle spin (black arrow) and its associated magnetic field lines (source).

重整化的数学

让我们考虑一个由 N 个自旋组成的系统或系综。出于可视化的目的,假设它们可以放在一个网格上,如下图所示。

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

A 2-dimensional lattice of spins (represented by the little arrows). The spheres are charged atoms (source).

因为自旋可以向上或向下,所以它们与二进制变量相关联

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

索引 i 可以用来标记晶格中自旋的位置。为了方便起见,我将用矢量 v. 来表示自旋的构型

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

对于处于热平衡的系统,与自旋组态 v 相关的概率分布具有以下形式:

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

这就是无处不在的玻尔兹曼分布(为方便起见,温度设为 1)。物体H(v)就是系统所谓的哈密顿量,其中可以定义为“系统中所有粒子的动能[和]势能之和对应的算符”。分母 Z 是一个归一化因子,称为配分函数

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

系统的哈密顿量可以表示为对应于自旋之间相互作用的项的总和:

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

该组参数

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

被称为耦合常数,它们决定了自旋之间(第二项)或自旋和外部磁场之间(第一项)的相互作用强度。

我们需要考虑的另一个重要的量是自由能。自由能是一个最初来自热力学的概念,在热力学中,自由能被定义为物理系统中可以被转换来做功的能量。数学上,在我们的情况下,它由下式给出:

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

符号“tr”代表(来自线性代数)。在本上下文中,它表示可见自旋 v 的所有可能配置的总和。

在重正化过程的每一步,系统在小尺度下的行为被平均化。粗粒度系统的哈密顿量用新的耦合常数表示

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

并且获得新的粗粒度变量。在我们的例子中,后者是块自旋 h 而新的哈密顿量是:

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

为了更好地理解什么是块自旋,考虑下面的二维晶格。每个箭头代表一次旋转。现在把晶格分成正方形块,每块包含 2×2 个自旋。块旋转是对应于这些块中的每一个的平均旋转。

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

In block spin RG, the system is coarse-grained into new block variables describing the effective behavior of spin blocks (source).

注意,新的哈密顿量与原来的哈密顿量具有相同的结构,只是用自旋的块的配置代替了物理自旋。

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

Both Hamiltonians have the same structure but with different variables and couplings.

换句话说,模型的形式不会改变,但是当我们缩小时,模型的参数会改变。通过系统地重复这些步骤,可以获得理论的完全重正化。在几次 RG 迭代之后,一些参数将被丢弃,一些将被保留。剩下的被称为相关运营商

这些哈密顿量之间的联系是通过自由能(上面描述的几行)在 RG 变换后不变的要求获得的。

变分重整化群(VRG)

如上所述,为了实现 RG 映射,可以使用变分重整化群(VRG)方案。在这个方案中,映射是由一个操作符实现的

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

其中 λ 是一组参数。该算子对隐藏自旋和输入(可见)自旋之间的耦合进行编码,并满足以下关系:

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

其定义了上面给出的新的哈密顿量。尽管在精确的 RG 变换中,粗粒度系统将具有与原始系统完全相同的自由能,即

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

这相当于以下条件

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

在实践中,这个条件不能完全满足,变分方案被用来寻找使自由能之间的差异最小化的 λ

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

或者等效地,近似精确的 RG 变换。

成果管理制概述

我已经在以前的文章中详细描述了受限玻尔兹曼机器的内部工作原理。这里我将提供一个更简洁的解释。

[## 神经量子态

神经网络如何解决量子力学中高度复杂的问题

towardsdatascience.com](/neural-quantum-states-4793fdf67b13)

受限玻尔兹曼机器(RBM)是生成式的,基于能量的模型。用于非线性无监督特征学习。它们最简单的版本只包含两层:

  • 一层可见单元,用 v 表示
  • 一个隐藏层,单位用 h 表示

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

Illustration of a simple Restricted Boltzmann Machine (source).

我将再次考虑一个二进制可见数据集 v 以及从一些概率分布中提取的 n 元素

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

Eq. 9: Probability distribution of the input or visible data.

RBM 中的隐藏单元(由矢量 h 表示)耦合到可见单元,其相互作用能量由下式给出

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

能量子指标 λ 代表变分参数的集合{ cb,W } 其中前两个元素是矢量,第三个是矩阵。RBMs 的目标是输出一个依赖于 λ- 的概率分布,它尽可能接近输入数据P(v)的分布。

与配置( vh )和参数 λ 相关的概率是该能量泛函的函数:

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

根据这个联合概率,通过对隐藏单元求和,可以容易地获得可见单元的变分(边缘化)分布。同样,隐藏单元的边缘化分布通过对可见单元求和来获得:

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

我们可以将 RBM 哈密顿量定义如下:

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

可以选择 λ 参数来优化所谓的 Kullback-Leibler (KL)散度或相对熵,其测量两个概率分布的不同程度。在目前的情况下,我们感兴趣的是真实数据分布和 RBM 产生的可见单位的变化分布之间的 KL 散度。更具体地说:

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

当两个分布相同时:

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

准确映射 RG 和 RBM

Mehta 和 Schwab 表明,为了建立 RG 和 RBMs 之间的精确映射,可以为变分算子选择以下表达式:

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

回想一下,哈密顿量 H ( v )包含编码在其中的输入数据的概率分布。通过这种变分算子的选择,可以快速证明隐藏层上的 RG 哈密顿量和 RBM 哈密顿量是相同的:

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

此外,当可以实现精确的 RG 变换时,真实的和变分的哈密顿量是相同的:

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

于是我们看到,具有自旋 v 和的重整化群的一步——块自旋可以精确地映射成由可见单元 v 和隐藏单元构成的双层 RBM。**

随着我们堆叠越来越多的 RBM 层,我们实际上正在执行越来越多轮的 RG 转换。

伊辛模型的应用

*根据这个*原理,我们得出结论,RBMs,一种无监督的深度学习算法,实现了变分 RG 过程。这是一个非凡的对应,梅塔和施瓦布通过在一个广为人知的伊辛自旋模型上实现堆叠 RBM 来展示他们的想法。他们将从伊辛模型中取样的自旋组态作为输入数据输入到 DNN 中。他们的结果表明,值得注意的是,DNNs 似乎正在执行(Kadanoff) 块自旋重正化。

用作者的话说,“令人惊讶的是,这种局部块自旋结构从训练过程中出现,表明 DNN 正在自组织实施块自旋重整化……我对我们感到震惊的是,你不用手动输入,它就会学习”。

他们的结果表明,值得注意的是,DNNs 似乎正在执行块自旋重正化。

在他们的论文、的下图中,展示了 DNN 的建筑。在 B 中,学习参数 W 被绘制以显示隐藏和可见单元之间的交互。在 D 中,当我们沿着 DNN 层移动时,我们看到了块自旋的逐渐形成(图中的斑点)。在 E 中,显示了再现三个数据样本宏观结构的 RBM 重建。

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

Deep neural networks applied to the 2D Ising model. See the main text for a detailed description of each of the figures (source).

结论和展望

2014 年 Mehta 和 Schwab 表明,一种受限玻尔兹曼机器(RBM),一种神经网络,与重正化群有关,重正化群是一个最初来自物理学的概念。在本文中,我回顾了他们的部分分析。正如之前所认识到的,RG 和深度神经网络都具有显著的“哲学相似性”:都将复杂的系统提取为相关的部分。这种 RG-RBM 映射是这种相似性的一种形式化。

由于深度学习和生物学习过程有许多相似之处,因此假设我们的大脑也可能使用某种“类固醇上的重整化”来理解我们感知的现实并不算过分。

正如其中一位作者建议的那样,“也许对于如何从数据中挑选出相关的特征有一些普遍的逻辑,我会说这是一个暗示,也许有类似的东西存在。”

假设我们的大脑也可能使用某种“类固醇上的重整化”来理解我们感知的现实,这并不是太夸张。

这方面的问题是,与 RG 工作良好的自相似系统(具有类似分形的行为)相比,自然界中的系统通常不是自相似的。正如神经科学家 Terrence Sejnowski 所指出的,突破这一限制的一种可能方式是,如果我们的大脑以某种方式在临界点运行,所有神经元都影响整个网络。但是那是另一篇文章的主题!

感谢您的阅读,再见!一如既往,我们随时欢迎建设性的批评和反馈!

我的 Github 和个人网站 www.marcotavora.me 有(希望)一些关于数据科学和物理学的其他有趣的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值