前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机视觉中的细节问题(七)

计算机视觉中的细节问题(七)

作者头像
狼啸风云
修改2022-09-03 19:27:38
7420
修改2022-09-03 19:27:38
举报

(1)、RPN的原理

Fast R-CNN的区域建议生成算法SS(Selective Search)还是一个独立的东西,Faster R-CNN引入了RPN使得区域建议也由第五个卷积层来确定,这样相当于将区域建议的生成算法直接集成到网络里,集成RPN后能进一步共享卷积层,因为RPN是基于第五个卷积层的。RPN通过Attention引导Fast R-CNN关注一些特定区域。可将区域建议由SS输出的2000降低为300。

RPN本质上是一个全卷积网络,这个网络有两层,第一层是一个3x3的卷积,256个输出通道,第二层是两个1x1的卷积,两个输出分支,一个输出分支,一个输出通道是4k,输出是矩形框的offset,另一个框输出是分类值,这个分类是二分类。k代表anchor的种类。

参考框是一个基础框,这个框有9种,3种尺度和3中比例,尺度就是大小,比例是长宽比,中心和卷积核的中心是一致的。RPN的offset是对这9个框偏移的纠正。卷积到中心位置时,输出256个通道的卷积,首先送到是否是物体的分类器上,然后送到4k的坐标偏差层,这两个输出是RPN的输出,最终供RoI池化层使用

(2)、Dropout的原理

Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如下图所示。

使用Dropout的神经网络模型 假设我们要训练这样一个神经网络,如下图所示。

标准的神经网络

输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成如下:

(1)、首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3中虚线为部分临时被删除的神经元)

(2)、 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。

(3)、然后继续重复这一过程:

  • 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
  • 从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。
  • 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。

不断重复这一过程。

Dropout的具体工作流程上面已经详细的介绍过了,但是具体怎么让某些神经元以一定的概率停止工作(就是被删除掉)?代码层面如何实现呢?

  • 在训练模型阶段:

无可避免的,在训练网络的每个单元都要添加一道概率流程。

对应的公式变化如下:

  • 没有Dropout的网络计算公式:
  • 采用Dropout的网络计算公式:

上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。

  • 在测试模型阶段:

预测模型的时候,每一个神经单元的权重参数要乘以概率p。

测试阶段Dropout公式:

  • 为什么说Dropout可以解决过拟合?
  1. 取平均的作用: 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
  2. 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
  3. Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。

(3)、贝叶斯决策理论的理解

机器学习可以理解为通过观测数据(X)推测结果(y)。同时学习推断规则(c),使得推断结果

\hat{y}=c(X)
\hat{y}=c(X)

与真实值y误差尽可能的小。举个例子,我拿到了一个硬币,并观察到了它的尺寸(X),就可以通过推断规则(c)来估计投掷结果是正面还是反面(y )。我们能观测到硬币的尺寸X(大、中、小),可能的投掷结果为y:正(1)、反(0)。

1. 当我们一无所知时,如何进行推断?

假设我们第一次接触硬币正反的问题,什么都不知道。因为一无所知,只能预测正面和反面的概率都是0.5。假设我们第一次接触硬币正反的问题,什么都不知道。因为一无所知,只能预测正面和反面的概率都是0.5。

1-p(1)=p(0)=0.2
1-p(1)=p(0)=0.2

此处的p(1)=0.8和p(0)=0.2酒糟做先验概率(prior probability),指的是在观测前我们就已知的结果概率分布 p(y)。此处我们不需要观测硬币尺寸,就可以大胆推测硬币的正反。

2. 当我们有了更多信息,该如何利用它们?

显然,前文提到的估算方法是很不准确的,因为没有考虑到硬币的属性。而且现实情况中我们往往可以观测到硬币的一些属性,而非完全一无所知。因此,我们尝试回答:“当我观测到硬币大小时,它正面朝上的概率是多少?”用数学语言表达就是估计p(y=1|X)。相似的,p(y=0|X)代表当我们观测到硬币属性X时,它被投掷后是反面的概率。

我们给p(y=1|X)和p(y=0|X)起了个名字,叫做后验概率(posterior probability)指的是在观测到X后我们对结果y的估计。和p(y=1)不同,它不是计算y=1的概率,而是计算当且仅当X被观测到时y=1的概率。

先验概率和后验概率之间的关系是什么?简单来看,后验概率可以被看做是对先验概率的一种“更加细致的刻画和更新“,因为此时我们观测到了X,有了额外的信息。所以后验概率比先验概率更有意义,因为引入了额外的观测信息,所以预测的准确度得到了加强。而大部分机器学习模型尝试得到的,就是后验概率。

(4)、过拟合与欠拟合

说你想学英语。你没有先前的语言知识,但你听说最伟大的英国作家是莎士比亚。一个自然的行动方式当然必须是将自己锁定在图书馆并记住他的作品。经过一年的学习,你从学业中走出来,前往纽约市,并向你看到的第一个人打招呼,“Good dawning to thee, friend!”(这种用法貌似只在莎士比亚作品出现过)作为回应,你看到一脸鄙视和嘀咕'疯狂'。不受干扰,你再试一次:“Dear gentlewoman, How fares our gracious lady?”另一次失败,匆匆撤退。在第三次尝试失败后,你心烦意乱:"悲伤!多么可悲!"。实际上很遗憾:你刚刚犯了建模中最基本的错误之一,过度拟合了训练数据。

过拟合模型表现为在训练集上具有高方差和低偏差。

这会导致对新测试数据预测时与训练数据的不一致。让我们从学习英语的尝试中打破这个令人困惑的定义。我们想要构建的模型是如何使用英语进行交流的表示。我们的训练数据是莎士比亚的全部作品,我们的测试集是纽约。如果我们根据社会接受度来衡量绩效,那么我们的模型就无法应用于测试数据。到目前为止,这似乎很简单,但差异和偏见呢?

方差是模型响应训练数据而变化的程度。由于我们只是记忆训练集,我们的模型具有很大的差异:它高度依赖于训练数据。如果我们阅读JK罗琳而不是莎士比亚的全部作品,模型将完全不同。当在新测试集上应用具有高方差的模型时,它不能很好地执行。这就像一个学生已经记住了教科书中的问题,但在面对现实世界面临的问题时无助。

偏差是方差的另一面,因为它代表了我们对数据做出的假设的强度。在我们学习英语的过程中,我们没有形成初步的模型假设,并且信任Bard的工作,教我们关于语言的一切。这种低偏见似乎是积极的 - 为什么我们想要偏向于我们的数据呢?但是,我们应该始终对数据告诉我们完整故事的能力持怀疑态度。任何自然过程都会产生噪音,我们无法确信我们的训练数据会捕获所有噪音。通常,我们应该对我们的数据做一些初步的假设,并在我们的模型中为训练数据中没有看到的波动留出空间。

总结到目前为止:偏差是指我们忽略了多少数据,而方差是指我们的模型对数据的依赖程度。在任何建模中,总是会在偏差和方差之间进行权衡,当我们建立模型时,我们会尝试达到最佳平衡。偏差与方差适用于任何模型,从最简单到最复杂,是数据科学家理解的关键概念!

我们看到一个过拟合的模型具有高方差和低偏差。反过来怎么样:低方差和高偏差?这被称为欠拟合:不是过于密切地跟踪训练数据,而是一个不合适的模型忽略了训练数据的教训,并且无法学习输入和输出之间的潜在关系。

让我们从我们的例子来考虑这个问题。从我们之前尝试建立英语模型中学习,我们决定提前对模型做出一些假设。我们还会切换我们的训练数据,并观看节目朋友的所有剧集,自学英语。为了避免从第一次尝试中重复我们的错误,我们提前做出一个假设,即只有以语言中最常见的单词开头的句子 ,be,to,of和an才是重要的。当我们学习时,我们不注意其他句子,相信我们会建立一个更好的模型。

经过长时间的训练,我们再次前往纽约的街道。这次我们的表现略好一些,但是我们的谈话再次无处可去,我们不得不承认失败。虽然我们知道一些英语并能理解有限数量的句子,但由于我们对训练数据的偏见,我们未能学习语言的基本结构。该模型不会受到高度变化的影响,但我们从最初的尝试过度校正!

欠拟合(高偏差,低方差)与过拟合(低偏差,高方差)的图

我们能做什么?严格关注数据会过拟合,忽略数据会欠拟合。必须有一种方法来找到最佳平衡!幸运的是,数据科学中存在一种称为验证的完善解决方案。在我们的示例中,我们仅使用了训练集和测试集。这意味着我们无法提前知道我们的模型在现实世界中的作用。理想情况下,我们会设置一个"预测试"来评估我们的模型,并在真正的测试之前进行改进。这种"预测试"被称为验证集,是模型开发的关键部分。

我们学习英语的两次失败让我们变得更加聪明,现在我们决定使用验证集。

我们同时使用莎士比亚的作品和朋友show因为我们已经学到了更多的数据,几乎总能改进模型。这次的不同之处在于,经过训练之后,在我们上街之前,我们会在一群朋友中评估我们的模型,这些朋友每周聚在一起讨论当前的英语。第一周,我们几乎被踢出谈话,因为我们的语言模型非常糟糕。但是,这只是验证集,每次我们犯错误时都可以调整我们的模型。最终,我们可以与小组进行对话并声明我们已准备好进行测试。再次在现实世界中冒险,我们终于成功了!我们的模型现在非常适合通信,因为我们有一个关键元素,一个用于模型开发和优化的验证集。

在数据科学模型中,我们使用了大量的验证集,因为否则我们最终会过度拟合验证集!这是通过我们将训练数据分成不同的子集,或者如果我们有大量数据,我们可以使用多个验证集。这个概念性示例仍然涵盖了问题的所有方面。现在,当你听说过拟合与欠拟合以及偏见与差异时,你有一个概念框架来理解问题以及如何解决它!

总结:

过拟合:过分依赖训练数据

欠拟合:未能学习训练数据中的关系

高方差:模型根据训练数据显着变化

高偏差:对模型的假设不够导致忽略训练数据

(5)、EM算法

EM算法简介:

EM算法其实是一类算法的总称。EM算法分为E-Step和M-Step两步。EM算法的应用范围很广,基本机器学习需要迭代优化参数的模型在优化时都可以使用EM算法。

EM算法的思想和过程:

  1. E-Step:E的全称是Expectation,即期望的意思。E-step也是获取期望的过程。即根据现有的模型,计算各个观测数据输入到模型中的计算结果。这个过程称为期望值计算过程,即E过程。
  2. M-Step:M的全称是Maximization,即最大化的意思。M-step也是期望最大化的过程。得到一轮期望值以后,重新计算模型参数,以最大化期望值。这个过程为最大化过程,即M过程。
  3. 最大化的意思是我们在使用这个模型时希望我们定义的函数能使得到的结果最大化,而结果越大越接近我们希望得到的结果。我们优化的目标也就是这些能得到最大值的函数。

常见的EM算法有:隐含马尔科夫模型的训练方法Baum-Welch算法;最大熵模型的训练方法GIS算法等。

EM算法结果

EM算法不一定能保证获得全局最优解,但如果我们优化的目标函数是一个凸函数,那么一定能保证得到全局最优解。否则可能获得局部最优解。因为如果优化的目标函数有多个峰值点,则如果优化到某个不是最高的峰值点处,则会无法再继续优化下去,这样获得的是局部最优解。

(6)、鞍点

鞍点(saddle point)这个词来自z=x2−y2z=x2−y2的图形,在x轴方向向上曲,在y轴方向向下曲,像马鞍,鞍点为(0,0)。

拥有两个以上参数的函数。它的曲面在鞍点好像一个马鞍,在某些方向往上曲,在其他方向往下曲。在一幅等高线图里,一般来说,当两个等高线圈圈相交叉的地点,就是鞍点。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (1)、RPN的原理
  • (2)、Dropout的原理
  • (3)、贝叶斯决策理论的理解
  • (4)、过拟合与欠拟合
  • (5)、EM算法
  • (6)、鞍点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档