计算机视觉基础. 1 学习导论

1 .引言

学习的目的是从过去的经验中吸取教训,以解决未来的问题。通常,这涉及搜索解决问题过去实例的算法。然后,该算法可以应用于该问题的未来实例。

过去和未来不一定指日历日期;相反,它们指的是学习者之前看到的内容以及学习者接下来将看到的内容。

因为学习本身就是一种算法,所以它可以被理解为一种元-算法:一种输出算法的算法(图9.1)。

学习通常由两个阶段组成:训练阶段,我们搜索一个在过去的问题实例(训练数据)上表现良好的算法;测试阶段,我们部署学习到的算法来解决问题的新实例。

2. 有样本学习

从样本中学习也称为监督学习。

想象一下,你发现了一本古老的数学课本,上面有看起来很神奇的证明,但有一个你不认识的符号,“⋆”。你可以看到它在方程式中到处使用,并记下它的行为示例:
在这里插入图片描述

你认为⋆代表什么?它在计算什么功能?你有吗?让我们测试一下你的答案:3⋆5的值是多少?(答案如下图所示。)这可能看起来不像,但你刚刚完成了学习!你通过看例子学到了⋆的作用。事实上,图9.2显示了您所做的工作:
在这里插入图片描述
事实证明,我们几乎可以从例子中学到任何东西。记住,我们正在学习一种算法,即从输入到输出的可计算映射。在这种情况下,示例的正式定义是{输入,输出}对。你给出的⋆示例由四对这样的配对组成:
在这里插入图片描述

这种学习,即观察示例输入输出行为并推断出解释这种行为的函数映射,称为监督学习。
这种学习的另一个名称是将模型与数据相匹配。
根据我们给出的例子,我们能够用一个简单的代数方程来模拟⋆的行为。让我们试试更复杂的东西。从图9.3中的三个例子中,你能找出运算符F的作用吗?
在这里插入图片描述
你可能会想到“它填补了缺失的像素”这样的东西。这完全正确,但它掩盖了很多细节。记住,我们想学习一种算法,一种完全明确的过程。F究竟如何填充缺失的像素?
这很难说出口。我们可能需要一个非常复杂的算法来指定答案,一个如此复杂的算法,以至于我们永远不可能用手写出来。这就是机器学习的意义所在。机器为我们编写算法,但只有当我们给它很多例子,而不仅仅是这三个例子时,它才能这样做。

有些东西是无法从例子中学习的,比如不可计算的函数。不可计算函数的一个例子是一个函数,它接受一个程序作为输入,如果程序最终将完成运行,则输出1,如果它将永远运行,则输入0。它是不可计算的,因为没有算法可以在有限的时间内解决这个问题。然而,有可能学习到一个很好的近似值。

3. 无样本学习

即使没有样本,我们仍然可以学习。我们可以尝试提出一种算法,优化输入输出映射的理想属性,而不是匹配输入输出示例。这类学习包括无监督学习和强化学习。
在无监督学习中,我们得到了输入数据在这里插入图片描述的示例,但没有被告知目标输出在这里插入图片描述。因此,学习者必须提出一个具有有用属性的输入数据的模型或表示,如某些目标函数所衡量的。例如,目标可能是将数据压缩为低维格式,仍然保留有关输入的所有信息。我们将在本书关于表征学习和生成建模中遇到这种学习。
在强化学习中,我们假设我们得到一个奖励函数,该函数明确地衡量学习函数输出的质量。确切地说,奖励函数是从输出到分数的映射:r:Y→ℝ。这个函数试图提出一个最大化奖励的函数。本书不会详细介绍强化学习,但这种学习正在成为计算机视觉的重要组成部分,特别是在机器人视觉的背景下。

乍一看,无监督学习和强化学习看起来很相似:两者都最大化了一个函数,该函数对输入-输出映射的理想属性进行评分。最大的区别在于,无监督学习可以访问训练数据,而强化学习通常不能;相反,强化学习者必须收集自己的训练数据。

4. 关键成分

学习算法由三个关键成分组成:

  1. 目标:对于学习者来说,成功或至少表现良好意味着什么?
  2. 假设空间:我们将搜索的从输入到输出的可能映射集是什么?
  3. 优化器:我们究竟如何在假设空间中搜索特定的映射,以最大化目标?

当这三种成分应用于大量数据,并在足够的硬件(称为计算)上运行时,可以做出惊人的事情。
本章我们将重点介绍学习算法,但数据和计算往往更重要。
在这里插入图片描述
学习器输出一个算法f: X→Y,它将输入x∈X映射到输出y∈Y。通常,f被称为学习函数。学习优化的目标通常是一个函数,对模型输出进行评分,L:Y→ℝ,或将模型输出与目标答案进行比较,L: Y×Y→ℝ。我们可以互换地称这个L为目标函数、损失函数或损失。损失总是指我们寻求最小化的目标,而目标函数可以用来描述我们寻求最小化和寻求最大化的目标。

4.1 参数化的重要性

假设空间可以用学习者考虑的所有可能函数的集合 F 来描述。例如,一个假设空间可能是
“从 R 2 ℝ^2 R2 R ℝ R的所有映射”,另一个可能是“满足距离度量条件的所有函数 R × R → R ≥ 0 {ℝ ×ℝ →ℝ_{≥0}} R×RR0”。然而,通常情况下,我们不仅会指定假设空间,还会指定如何对空间进行参数化。例如,我们可以说我们的参数化假设空间是 y = θ 1 x + θ 0 {y=θ_1x+θ_0} y=θ1x+θ0,其中 θ 0 {θ_0} θ0 θ 1 {θ_1} θ1是参数。这个例子对应于从 R → R {ℝ→ℝ} RR的仿射函数空间,但这不是参数化该空间的唯一方法。另一种选择是 y = θ 2 θ 1 x + θ 0 {y=θ_2θ_1x+θ_0} y=θ2θ1x+θ0,参数为θ0、θ1和θ2。
这两种选择参数化了完全相同的空间,也就是说,任何仿射函数都可以通过任一参数化来表示,而这两种参数化只能表示仿射函数。然而,这两个参数化并不等价,因为优化器和目标可能会对不同的参数化有不同的处理方式。因此,为了完全定义学习算法,指定假设空间的参数化方式非常重要。

过度参数化模型在现代计算机视觉中尤为重要,在这种模型中,你使用的参数超过了拟合数据所需的最小值;大多数神经网络(第12章)都被过度参数化了。

5. 经验风险最小化:从样本中学习公式化

最后一节中的三个要素可以使用经验风险最小化(ERM)框架进行公式化。该框架特别适用于监督学习,在该学习中,我们正在学习一个函数,该函数在给定许多训练示例的情况下从x预测y
在这里插入图片描述,这样做是为了最小化我们在所有训练数据(即经验分布)上产生的平均误差(即风险)。ERM问题如下:
在这里插入图片描述
这里,F是假设空间,L是损失函数,是训练数据(例如{输入,输出}对),F是学习函数。

6. 学习作为概率推理

根据损失函数,ERM通常被解释为进行最大似然概率推理。在这种解释中,我们试图推断出为数据分配最高概率的假设 f f f。对于给定x预测y的模型,最大似然 f f f为:
在这里插入图片描述

在这里插入图片描述项称为给定模型f和观测到的x值的y值的似然性,最大化这个量称为最大似然学习。

为了完全指定这个模型,我们必须定义这个条件分布的形式。一个常见的选择是,预测误差( y − f ( x ) y-f(x) yf(x))是高斯分布的,这就形成了最小二乘法的目标。

在后面的章节中,我们将看到先验概率 p ( f ) p(f) p(f)也可用于推断最可能的假设。当先验与似然函数结合使用时,我们得到了最大后验学习(MAP学习),它在给定训练数据的情况下推断出最可能的假设:
在这里插入图片描述

7 案例研究

接下来的三个部分涵盖了特定学习问题的几个案例研究。示例1和3展示了机器学习中最常见的两种工作方式:回归和分类。示例2,Python程序,表明本章中的范式不仅限于简单的系统,也可以应用于非常通用和复杂的模型。

7.1 示例1:线性最小二乘回归

最简单的学习问题之一是线性最小二乘回归。在这种情况下,我们的目标是用一条线来模拟两个变量x和y之间的关系。
作为一个具体的例子,x代表外面的温度,y代表海滩上的人数。如前所述,我们在许多观察到的{室外温度、海滩人数}对上训练(即拟合)我们的模型,表示为在这里插入图片描述。在测试时,该模型可用于预测新查询 x ′ x^′ x y y y值,如图9.4所示。
在这里插入图片描述
我们的假设空间是线性函数,也就是说,x和我们对y的预测之间的关系具有形式 y ^ = f θ ( x ) = θ 1 x + θ 0 ŷ=fθ(x)=θ_1x+θ_0 y^=fθx=θ1x+θ0。这个假设空间由两个标量参数化, θ 0 , θ 1 ∈ R θ_0,θ_1∈ℝ θ0θ1R,即直线的截距和斜率。在本书中,我们将使用 θ θ θ来指代正在学习的任何参数。在这种情况下,我们有 θ = [ θ 0 , θ 1 ] θ=[θ_0, θ_1] θ=[θ0θ1]. 学习包括找到这些参数的值,以最大化目标。
我们的目标是,预测应该是最小二乘意义上的近地面真实目标,也就是说, ( y ^ ( i ) − y ( i ) ) 2 (ŷ^{(i)}-y^{(i)})^2 (y^(i)y(i))2对于所有的样本在这里插入图片描述应该是最小的。我们将此目标称为L2损失:
在这里插入图片描述

将使用 J ( θ ) J(θ) J(θ)表示所有训练数据点上的总目标,作为参数的函数;我们将使用L表示每个数据点的损失。也就是说,在这里插入图片描述

完整的公式如下:
在这里插入图片描述
可以选择任意数量的优化器来解决这个问题。第一个想法可能是“尝试使用 θ θ θ一堆随机值,并返回使目标最大化的值。”事实上,这种简单的方法是有效的,但它可能会相当慢,因为我们是在盲目地寻找好的解决方案。更好的办法是利用搜索问题中的结构。对于线性最小二乘问题,微积分工具为我们提供了清晰的数学结构,使求解优化问题变得容易,正如我们接下来所展示的那样。
从微积分中,我们知道,在函数 J ( θ ) J(θ) J(θ)相对于变量θ的任何最大值或最小值处,导数在这里插入图片描述我们试图找到目标 J ( θ ) J(θ) J(θ)的最小值:
在这里插入图片描述
公式可以重写为:
在这里插入图片描述
其中
在这里插入图片描述

这里解释下为啥可以这么搞。因为在矩阵计算中,矩阵的平方就等于矩阵的转置乘以矩阵本身,而在平方下,减法的位置互换对结果没影响,因此可以达到重写公式的结果。

J是一个二次方程,它的导数为0时,是全局最小点。因此,我们可以通过找到导数为零的点来求解使J最小化的 θ ∗ θ* θ。求导如下:
在这里插入图片描述
将这个导数设置为零,求解θ*:
在这里插入图片描述
θ*定义了我们数据的最佳拟合线,这条线可用于预测x的未来观测值的y值
在这里插入图片描述
现在可以将整个线性最小二乘学习问题总结如下:
在这里插入图片描述

在这些图中,我们有时会仅用 L L L来描述目标,在这种情况下,意味着在这里插入图片描述

7.2 示例2:程序实例

在另一端,我们有所谓的程序归纳,这是最广泛的学习算法类别之一。在这种情况下,我们的假设空间可能是所有Python程序。让我们对比一下线性最小二乘法和Python程序归纳法。图9.6显示了线性最小二乘法的样子。
在这里插入图片描述
图中显示了解决相同问题的Python程序归纳。在这种情况下,学习函数是一个将x映射到y的Python程序。学习包括搜索所有可能的Python程序的空间(在某个最大长度内)。显然,这是一个比仅仅找到两个标量困难得多的搜索问题。在第11章中,我们将看到使用过于强大的假设空间的一些陷阱,而使用更简单的假设空间就可以了。
在这里插入图片描述

7.3 示例3:分类和Softmax回归

计算机视觉中的一个常见问题是识别对象。这是一个分类问题。我们的输入是图像x,我们的目标输出是类标签y(图9.8)。
在这里插入图片描述
我们应该如何将这项任务表述为一个学习问题?第一个问题是,我们如何表示输入和输出?表示图像非常简单;正如我们在本书其他地方看到的,它们可以表示为表示红绿蓝颜色的数字数组: x ∈ R H × W × 3 x∈ℝ^{H×W×3} xRH×W×3,其中H是图像高度,W是图像宽度。
我们如何表示类标签?事实证明,一个方便的表示方法是让y是K维向量,对于K个可能的类,如果y表示类K,则 y k = 1 y_k=1 yk=1,否则 y k = 0 y_k=0 yk=0。这种表示称为独热编码,因为向量中只有一个元素处于开启状态(“热”)。
每个类都有一个唯一的热点代码。我们很快就会明白为什么这种表述是有意义的。热点代码是我们正在学习的函数的目标。我们的目标是学习一个函数 f θ f_θ fθ,该函数输出 ŷ与单热代码匹配的向量,从而正确地对输入图像进行分类。

一个代表K=5个不同类的独热编码示例:在这里插入图片描述

接下来,我们需要选择一个损失函数。我们的第一个想法可能是,我们应该尽量减少错误分类。这相当于所谓的0-1损失:
在这里插入图片描述
其中𝟙是指标函数,当且仅当其参数为真时,其计算结果为1,否则为0。不幸的是,最小化这种损失是一个离散的优化问题,而且是NP-hard 的。相反,人们通常使用交叉熵损失,它是连续的和可微分的(使其更容易优化):
在这里插入图片描述

考虑这一点的方法是,k应该表示我们认为图像是k类图像的概率。在这种解释下,最小化交叉熵可以最大限度地提高我们模型预测下地面真实观测y的对数似然性。
为了使这种解释有效,我们要求ŷ表示概率质量函数(pmf)。在K个类上的pmf p被定义为具有[0,1]范围内元素的K维向量,其总和为1。换句话说,p是(K-1)-单纯形上的一个点,我们将其表示为 p ∈ K – 1 p∈K–1 pK1

(K-1)-单纯形,△K-1,是所有元素之和为1的K维向量的集合。K维一维热码存在于△K-1的顶点上。

为了确保我们学习到的函数 f θ f_θ fθ的输出具有这样的性质,即 f θ ∈ K – 1 f_θ∈^{K–1} fθK1,我们可以分为两个步骤:(1)首先应用函数 z θ : X → R K zθ:X→ℝ^K zθXRK。(2) 然后将输出压缩到[0,1]范围内,并将其归一化为1。一种流行的挤压方式是通过softmax功能:
在这里插入图片描述

使用softmax是一种建模选择;我们可以使用任何函数来压缩一个有效的pmf,即一个非负向量,其总和为1。

z中的值称为logits,可以解释为每个类的非标准化对数概率。现在我们有了,
在这里插入图片描述
下图显示了在训练期间处理一张鱼的照片时变量的样子。
在这里插入图片描述
该预测将大约40%的概率放在真实类别上,“guitarfish”,因此我们与理想预测相差60%(由红色条表示;理想预测将使真实类别的概率达到100%)。我们的损失为-log 0.4。
这个学习问题也称为softmax回归,可以总结如下:

Softmax回归只是对分类问题建模的一种方法。对于如何将输入数据映射到类标签,我们本可以做出其他选择。

在这里插入图片描述
注意,我们只部分指定了假设空间,未指定优化器。这是因为softmax回归是指具有这种一般形式的整个学习方法家族。这就是我们根据前面描述的三个关键要素来概念化学习问题的原因之一:通常可以单独开发它们,然后混合搭配。

8 Learning to Learn

Learning ,也称为元学习,是学习的一种特殊情况,其中假设空间是学习算法。
回想一下,学习者根据问题的过去实例进行训练,以产生一种可以解决问题未来实例的算法。元学习的目标是处理我们将遇到的未来问题本身就是学习问题的情况,例如“找到这些数据点的最小二乘线拟合”。为此进行训练的一种方法是举例。假设我们得到以下{input,output}示例:
在这里插入图片描述
这些是执行最小二乘回归的示例;因此,学习者可以通过学习执行最小二乘回归来拟合这些例子。

请注意,最小二乘回归并不是适合这些例子的唯一解决方案,使用其他方法可能会得出一个同样适合的不同解决方案。

由于最小二乘回归本身就是一种学习算法,我们可以说学习者学会了学习。我们在本章开始时说学习是一种元算法:它是一种输出算法的算法。Metalearning是一种元算法,我们可以通过在学习器上添加另一个外循环来可视化它,如图9.10所示。
在这里插入图片描述
请注意,您可以递归地应用这个想法,构建元-元-元-…-元学习器。人类至少要完成这一过程的三个层次,如果不是更多的话:我们已经进化到在学校里被教导如何自己快速学习。

根据我们目前的定义,进化是一种学习算法。

9 总结

学习是一种非常通用和强大的解决问题的方法。它将数据转化为算法。在这个大数据时代,学习往往是首选方法。它是几乎所有现代计算机视觉系统的主要组成部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python导出Excel表格中的lua配置

背景:游戏开发中, 策划使用Excel配置游戏中的参数数据,写一个工具用于导出这些配置 工具选择使用 python来开发,这样Windows、macOS、Linux平台都可以使用,而且有丰富的第三方模块。 本机先安装python,我…

二叉树相关练习

二叉树相关oj题: 对称二叉树 解题思路:判断一棵树是否轴对称,先判断左右子树结构是否相同,结构相同的情况下再判断对应的val是否轴对称,判断根节点的左右子树,再判断根节点的左右子树的左右子树是否轴对称…

CAD二次开发IFoxCAD框架系列(25)- 自动加载和初始化的使用

自动加载,意思就是我们不需要每次重启都得要去输入netload加载软件,这个我们该怎么解决,CAD给我们提供了注册表的方式来进行加载,IFoxCAD给我们提供了非常便捷的操作注册表的方法。 namespace ifoxgse.Core.System;public static…

【Python系列】text二进制方式写入文件

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言 | Leetcode C语言题解之第376题摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

Redux的中间件原理分析

Redux的中间件原理分析 redux的中间件对于使用过redux的各位都不会感到陌生&#xff0c;通过应用上我们需要的所有要应用在redux流程上的中间件&#xff0c;我们可以加强dispatch的功能。最近抽了点时间把之前整理分析过的中间件有关的东西放在这里分享分享。本文只对中间件涉…

Leetcode 404-左叶子之和

题目 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 题解 二叉树的题目&#xff0c;如果需要返回某个值&#xff0c;可以分左右子树递归计算&#xff0c;最后sumleftright 递归三部曲&#xff1a; 确定递归函数的参数和返回值 判断一个树的左叶子节点之和&…

插入排序

插入排序是一种简单直观的排序算法。它的基本思想是将待排序的数据分成已排序和未排序两部分&#xff0c;每次从未排序部分选择一个元素插入到已排序部分的合适位置&#xff0c;直到未排序部分为空。 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将一个元素插…

Windows系统安装MySQL

下载MySQL 打开网址MySQL :: Download MySQL Community Server点击图下所示位置Download 进入图下所示界面&#xff0c;点击图下所示位置不登录下载 已下载完成 安装MySQL 将下载好的压缩包解压到一个专门的位置&#xff0c;该软件为绿色版软件&#xff0c;解压即可使用 配置…

Open3D mesh Taubin滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 参数详解 返回值 2.2完整代码 三、实现效果 3.1加入噪声的mesh 3.2Taubin迭代10次 3.3Taubin迭代100次 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云…

分布式云扩展 AI 边缘算力,助力用户智能化创新

近期&#xff0c;AI 创新圈再次发布重磅产品更新。OpenAI 全新旗舰版多模态模型 GPT-4o 横空出世&#xff0c;其打通文本、图像、视频的富媒体理解能力以及敏捷的智能化对话&#xff0c;将 AI 助手的人性化表达效果&#xff0c;提升至更高水平。 ​ 从技术源头来看&#xff0c…

数据线性结构

一、线性表 优点&#xff1a;可以很快速的找到内存地址 查询&#xff0c;修改快 缺点&#xff1a;在中间部分新增&#xff0c;删除部时需要移动后续的元素 像java中的stream流的过滤等操作都是新建立一个集合有序插入返回&#xff0c;空间换时间 java中list下标为什么要从0开…

网工面试题(安全)

上一篇&#xff1a;网工面试题&#xff08;数通&#xff09; 防火墙 防火墙的应用场景 防火墙&#xff1a;部署在网络出口处/服务器区(数据中心&#xff09;/广域网接入&#xff0c;用于防止外界黑客攻击、保护内网安全硬件。 传统防火墙和下一代防护墙的区别 传统防火墙的功能…

AJAX day-02 HTTP格式JSON格式

目录 一. 计算机网络 1.1 网络参考模型 1.2 各层重要对应的协议 1.3 DNS解析&#xff08;域名解析服务器&#xff09; 1.4 FTP&#xff08;文件传输协议&#xff09; 1.5 UDP&#xff08;用户数据报协议&#xff09; 1.6 TCP(传输控制协议) 1.7 IP(网际互连协议) 1.8 …

golang本地缓存fastcache高性能实现原理

1. git仓库 https://github.com/abbothzhang/fastcache 2. 整体原理 initCache时不会申请内存&#xff0c;只有第一次set时候才会申请&#xff0c;且会一次性申请64MB&#xff0c;后面不够了又一次性申请1024*64MB大小内存 2.1. 时序图 3. 高性能原因 将cache分为512个buc…

C++奇迹之旅:深度解析list的模拟实现

文章目录 &#x1f4dd;前言&#x1f320;list节点&#x1f309;list &#x1f320;迭代器的创建&#x1f309;const迭代器 &#x1f320;代码&#x1f6a9;总结 &#x1f4dd;前言 &#x1f320;list节点 我们先建立一个列表里的节点类listnode&#xff0c;用来构造list的节…

数据仓库系列 3:数据仓库的主要组成部分有哪些?

你是否曾经好奇过,当你在网上购物或使用手机应用时,背后的数据是如何被存储和分析的?答案就在数据仓库中。本文将为你揭开数据仓库的神秘面纱,深入探讨其核心组成部分,以及这些组件如何协同工作,将海量数据转化为有价值的商业洞察。 目录 引言:数据仓库的魔力1. 数据源和数据…

[Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解

目录 1.体育课测验(二)1.题目链接2.算法原理详解 && 代码实现 2.合唱队形1.题目链接2.算法原理详解 && 代码实现 3.宵暗的妖怪1.题目链接2.算法原理详解 && 代码实现 1.体育课测验(二) 1.题目链接 体育课测验(二) 2.算法原理详解 && 代码实现…

解决Selenium已安装,在pycharm导入时报错

搭建设selenium环境时&#xff0c;selenium已安装&#xff0c;但是在pycharm中使用“from selenium import webdriver”语句时红线报错 解决方案&#xff1a; 1.file->settings进入设置 2.点击加号&#xff0c;搜索‘selenium’安装 3&#xff0c;等待安装完成&#xff0…

项目技巧二

目录 java中Date和mysql数据库datetime数据类型 注意&#xff1a; 在yml文件中配置成员变量的值 1.写一个yml文件 2.写一个与yml相互映射的类来读取yml的属性信息 3.在其他子模块的配置类中开启此类&#xff0c;读取yml文件的内容信息 4.直接依赖注入&#xff08;因为已…