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

news2024/9/25 19:21:13

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.coloradmin.cn/o/2083881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下devecostudio-windows-3.1.0.501的下载与安装教程

Windows下devecostudio-windows-3.1.0.501的下载与安装教程 1.华为开发者联盟 2.Deveco Studio下载 一、注册华为账号 进入华为开发者联盟,注册华为账号(如果有手机华为账号,这里通用) 二、下载Deveco Studio3.1.0.501 链接&am…

C++入门基础知识39——【关于C++ 运算符——位运算符】

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

GitHub的AI未来:CEO Thomas Dohmke深入解析

在近期的一次深入访谈中,GitHub的首席执行官Thomas Dohmke分享了他对AI在编程领域未来的看法,GitHub Copilot的成就,以及在微软生态下保持独立性的重要性。以下是对这次讨论的精华总结。 GitHub在AI领域的定位 Thomas Dohmke认为,AI技术需要竞争来推动发展。他指出,GitH…

类与ES6类之间的继承

前言 ● 下面是之前学习ES6 classes的代码 class PersonCl {constructor(fullName, birthYear) {this.fullName fullName;this.birthYear birthYear;}calcAge() {console.log(2037 - this.birthYear);}greet() {console.log(你好${this.fullName});}get age() {return 2037…

JVM 锁的种类

优质博文:IT-BLOG-CN 一、JVM 锁【偏向锁|轻量级锁|重量级锁】 对象头[每个对象都具有对象头] Mark:对象头的标记(32位),描述对象的hash、锁信息、垃圾回收标记、年龄;内容包括:①、指向锁记录…

OpenShift 与 Rancher

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

Nacos2.4.1安装

Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 下载后解压 进入解压目录/bin window启动命令 startup.cmd -m standalone 用的JDK环境17 遇到报错 第一个办法 退回2.4.0哈哈哈 nacos配置为JDK1.8,而JDK17开始使用按模块引入包语法…

阀控多功能智能水表是什么?

阀控多功能智能水表是一种集成了多种先进技术和功能的新型水表,主要用于精确计量和控制水流量。这类水表不仅能够提供准确的数据记录,还具备远程控制、故障报警、数据分析等多种智能功能,适用于住宅、商业和工业等多种应用场景。本文将深入探…

泽众P-One性能测试平台中的环境管理与施压集群分配

P-One是泽众软件自主研发的一站式性能测试平台,在软件性能测试中发挥着重要作用。其中,环境管理和施压集群分配是P-One的关键功能,对于确保测试的准确性和有效性至关重要。 一、环境部署 P-One可以对已安装的压力机进行集中管理,…

240828-Gradio结合Html+Css+Javascript制作年历

A. 最终效果 需求描述 html javascript css 按年生成2016年至2116年的日历,要求如下: 二行六例,每个单元是一个月,且每个单元包含周次信息通过背景为红色的圆圈高亮显示当前的日期第一页显示今年,鼠标左边或键盘左键…

电梯按钮检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

电梯按钮检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

RKNPU入门与实践 ---- 混合量化

目录 前言 一、混合量化 1.1 概念介绍 1.1.1 hybrid_quantization_step1 1.1.2 hybrid_quantization_step2 二、实际编写程序 2.1混合量化第一阶段 2.2 混合量化第二阶段 三、混合量化第一步接口参数proposal 前言 为什么要进行混合量化? 答案&#x…

Zookeeper未授权访问的漏洞处理

echo envi |nc 192.168.0.1 2181 这个命令可以用于获取Zookeepr(下面有zk代替)目标服务器的环境信息、部署路径、版本等敏感信息。如果这些信息被恶意利用,确实可能导致安全漏洞,进而对网络和服务器安全构成威胁。 1.执行zkCli.…

XSS LABS - Level 17 过关思路

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 进入靶场,空空如也,右击页面,查看网页源码,找找可疑点: 可以看到,靶场默认传参,都传…

初赛试题-2022年CSP-J2

目录 先言 二、阅读程序(判断题1.5分,选择题3分,共40分) (1) 16. 17. 18. 19. 20. 21. (2) 22. 23. 24. 25. 26. 27. (3) 28. 29. 30. 3…

18.神经网络 - 非线性激活

神经网络 - 非线性激活 使用到的pytorch网站: Padding Layers(对输入图像进行填充的各种方式) 几乎用不到,nn.ZeroPad2d(在输入tensor数据类型周围用0填充) nn.ConstantPad2d(用常数填充) 在 …

【图像】灰度图与RGB图像的窗宽、窗位的值范围二三问

1. 16位灰度图的窗宽、窗位的值范围? 对于16位的灰度图像,每个像素点可以表示从0到2^16-1(即0至65535)之间的强度值。在医学影像领域,如CT扫描图像中,窗宽和窗位是用来调整图像对比度和亮度的参数&#xf…

【Spring Boot 3】【Web】自定义过滤器

【Spring Boot 3】【Web】自定义过滤器 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费…

fabricjs 添加图片并实时更新小车位置

需求:添加小车图片到画布中, 后端通过ws实时更新小车位置 实际过程中遇到的问题: 设置中心点:我想把图片的中心设置为后端传来的坐标点,可以通过设置对象的originX和originY属性来改变对象的旋转和定位基点。让小车…

error:0308010C:digital envelope routines::unsupported【超详细图解】

目录 一、报错信息 二、分析原因 三、解决方案 一、报错信息 二、分析原因 node.js 18 不兼容oppsll,node.js v17以上版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制 三、解决方案 方案1:打开终端,直接输入…