泛化深度学习综述

机器学习系统通常假设训练和测试分布是相同的。为此,一个关键的需求是开发可以推广到unseen分布的模型。领域泛化(DG,Domain generalization),即分布外泛化(out-of-distribution generalization),近年来引起了越来越多的关注。领域泛化处理的是一个具有挑战性的环境,其中给定了一个或多个不同但相关的领域,目标是学习一个可以泛化到unseen测试领域的模型。最近领域泛化领域取得了巨大进展。该综述对这些进展进行了回顾。

来自:Generalizing to Unseen Domains: A Survey on Domain Generalization

背景概述

有监督机器学习的目标是设计一个模型,该模型可以从训练数据中学习,然后将该模型应用于测试数据。传统的ML模型是基于独立同分布假设的,即训练和测试数据来自相同且独立的分布。然而,这种假设在现实中并不成立。当训练数据和测试数据的概率分布不同时,模型的性能往往会由于域偏差而恶化。收集所有可能领域的数据来训练模型是昂贵的(比如ChatGPT)。因此,增强ML模型的泛化能力在工业和学术领域都很重要。

与泛化相关的研究课题很多,如领域自适应、元学习、迁移学习等。近年来,领域泛化受到了广泛的关注。如图1所示,领域泛化的目标是从一个或多个不同但相关的领域(即不同的训练数据集)学习模型,该模型将在看不见的测试领域上实现泛化。

fig1

  • 图1:训练集由属于素描、卡通和艺术绘画领域的图像组成。DG旨在学习一个在照片这种看不见的目标域上也能表现良好的模型。

在过去的几年里,领域泛化在计算机视觉和自然语言处理等各个领域都取得了重大进展。DG可以定义如下:

  • X X X表示输入空间, Y Y Y表示输出空间。域(domain)由从分布中采样的数据组成。我们记其为 S = { ( x i , y i ) } i = 1 n ∼ P X Y S=\left\{(x_{i},y_{i})\right\}_{i=1}^{n}\sim P_{XY} S={(xi,yi)}i=1nPXY,其中, x ∈ X , y ∈ Y x\in X,y\in Y xX,yY P X Y P_{XY} PXY表示输入样本和输出标签的联合分布。 X X X Y Y Y表示相应的随机变量。
  • DG如图2所示,给定 M M M个源域 S t r a i n = { S i ∣ i = 1 , . . . , M } S_{train}=\left\{S^{i}|i=1,...,M\right\} Strain={Sii=1,...,M},其中 S i = { ( x j i , y j i ) } j = 1 n i S^{i}=\left\{(x_{j}^{i},y_{j}^{i})\right\}_{j=1}^{n_{i}} Si={(xji,yji)}j=1ni。每个域的联合分布是不同的: P X Y i ≠ P X Y j , 1 ≤ i ≠ j ≤ M P^{i}_{XY}\neq P^{j}_{XY},1\leq i\neq j\leq M PXYi=PXYj,1i=jM。领域泛化的目标是在这些源域上学习一个可推广的预测函数 h : X → Y h:X\rightarrow Y h:XY,以在unseen测试域 S t e s t S_{test} Stest上实现最小的预测误差: m i n h E ( x , y ) ∈ S t e s t [ l ( h ( x ) , y ) ] min_{h}\mathbb{E}_{(x,y)\in S_{test}}[l(h(x),y)] minhE(x,y)Stest[l(h(x),y)]其中, E \mathbb{E} E为期望, l l l为损失函数。

目前有些研究热点与领域泛化密切相关,包括但不限于:迁移学习、领域适应、多任务学习、多领域学习、元学习、终身学习和零样本学习。表1中总结了它们与领域泛化的差异,下面将简要描述这些任务。

学习范式训练数据测试数据条件测试数据是否可访问
Multi-task learning S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn Y i ≠ Y j , 1 ≤ i ≠ j ≤ n Y^{i}\neq Y^{j},1\leq i\neq j\leq n Yi=Yj,1i=jnYes
Transfer learning S s o u r c e , S t a r g e t S^{source},S^{target} Ssource,Starget S t a r g e t S^{target} Starget Y s o u r c e ≠ Y t a r g e t Y^{source}\neq Y^{target} Ysource=YtargetYes
Domain adaptation S s o u r c e , S t a r g e t S^{source},S^{target} Ssource,Starget S t a r g e t S^{target} Starget P ( X s o u r c e ) ≠ P ( X t a r g e t ) P(X^{source})\neq P(X^{target}) P(Xsource)=P(Xtarget)Yes
Meta learning S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn以及来自 S n + 1 S^{n+1} Sn+1的少量样本 S n + 1 S^{n+1} Sn+1 Y i ≠ Y j , 1 ≤ i ≠ j ≤ n + 1 Y^{i}\neq Y^{j},1\leq i\neq j\leq n+1 Yi=Yj,1i=jn+1Yes
Lifelong learning S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn S i S^{i} Si按顺序排列Yes
Zero-shot learning S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn S n + 1 S^{n+1} Sn+1 Y n + 1 ≠ Y i , 1 ≤ i ≤ n Y^{n+1}\neq Y^{i},1\leq i\leq n Yn+1=Yi,1inNo
Domain generalization S 1 , . . . , S n S^{1},...,S^{n} S1,...,Sn S n + 1 S^{n+1} Sn+1 P ( S i ) ≠ P ( S j ) , 1 ≤ i ≠ j ≤ n + 1 P(S^{i})\neq P(S^{j}),1\leq i\neq j\leq n+1 P(Si)=P(Sj),1i=jn+1No
  • 表1:领域泛化与相关学习范式的比较。

多任务学习在几个相关任务上联合优化模型。通过在这些任务之间共享表示,我们可以使模型更好地概括原始任务。请注意,多任务学习并不旨在增强对新任务(unseen)的泛化能力。特别的,多领域学习是一种多任务学习,它在多个相关领域上进行训练,为每个原始领域学习良好的模型,而不是为了增强unseen测试领域的表现。

迁移学习在源任务上训练模型,旨在提高模型在不同但相关的目标领域上的性能。预训练微调是迁移学习的常用策略,其中源域和目标域代表不同的任务,并且在微调训练中访问目标域数据。在DG中,目标域无法访问,训练和测试数据的任务通常是相同的,但它们具有不同的分布。

领域自适应(DA)近年来很流行。DA旨在使用现有的训练源域最大限度地提高给定目标域的性能。DA和DG之间的区别在于,DA可以访问目标域数据,而DG在训练期间看不到它们。这使得DG比DA更具挑战性,但在实际应用中更现实。

元学习旨在通过从以前的经验或任务中学习算法本身。元学习是一种学习到学习的方法,旨在通过从一系列相关任务中学习到通用的学习策略或优化算法,使得模型能够快速适应新任务。元学习要求模型能够在遇到新任务时,通过少量的样本和迭代优化过程快速学习并适应新任务。

终身学习,或称持续学习(continual learning),关注多个连续领域之间的学习能力。它要求模型在保留先前学到的经验的同时,通过适应新知识来不断学习。这也与DG不同,因为终身学习可以在每个时间步长访问目标域,并且它不会显式处理域之间的不同分布。

零样本学习旨在从已看到的类中学习模型,并对训练中未看到的类别的样本进行分类。相反,领域泛化通常研究训练和测试数据来自同一类但分布不同的问题。这么看来,似乎零样本学习是更难的。

零样本学习涉及的数据包括:

  • 已知类:模型训练时用到的带类别标签的图像。
  • 未知类:用于模型测试,注意在训练时不知道这些类别标签。
  • 辅助信息:对已知类和未知类图像的描述或语义属性或词嵌入等信息。该信息充当了已知类和未知类之间的桥梁。

零样本学习可以使用提示范式的思想,根据提示中的语义信息来推断和分类未知类别的样本。

零样本学习和领域泛化都涉及到模型对未知情况下的泛化能力。零样本学习主要关注如何在测试阶段对未知类别进行分类,而领域泛化则关注如何在新领域中对模型进行泛化,以适应不同的数据分布。虽然二者有一定的联系,但在具体问题和应用中,它们有不同的侧重点。其实,DSIL-DDI应属于零样本学习,Capsule-encoder-decoder属于领域泛化


零样本学习(Zero-shot Learning)和小样本学习(Few-shot Learning)是两种不同的学习范式:

  • 零样本学习:在零样本学习中,我们面临的是一种全新的分类任务,即在训练阶段没有见过新类别的样本,但我们要对这些新类别的样本进行分类。这意味着我们需要利用一些先验信息(例如类别的属性、语义描述等)来学习如何分类到新类别。零样本学习旨在解决从已知类别到未知类别的迁移学习问题。
  • 小样本学习:在小样本学习中,我们面临的是样本数量有限的分类任务,但是我们可以访问到每个类别的少量训练样本。与传统的机器学习任务相比,小样本学习更具挑战性,因为我们需要在非常有限的样本上进行学习和泛化。小样本学习的目标是在少量样本的情况下实现准确的分类。

领域泛化方法

fig2

  • 图2:领域泛化方法分类。

领域泛化方法被分为三类:Data manipulation,Representation learning,Learning strategy。

对于Data manipulation:这类方法侧重于处理输入,以帮助学习一般表示。沿着这条线,有两种流行的技术:Data augmentation,主要基于输入数据的增强、随机化和转换;Data generation,生成不同的样本以帮助泛化,比如VAE和GAN。

对于Representation learning:这类方法是领域泛化中最流行的方法。有两种具有代表性的技术:首先是领域不变表示学习,比如performs kernel、对抗性训练、域之间的显式特征对齐或不变风险最小化(invariant risk minimization);其次是特征解纠缠(feature disentanglement),这试图将特征分解为领域共享或领域特定的部分,以更好地泛化。

对于Learning strategy,这类方法侧重于利用一般的学习策略来提高泛化能力,主要包括以下几种方法:集成学习(ensemble learning),它依靠集成的力量来学习统一和泛化的预测函数;元学习,通过构建元学习任务来模拟领域转移需要学习的一般知识;梯度运算,它试图通过直接对梯度进行运算来学习泛化表示;分布式鲁棒优化,学习训练域的最坏分布情况;自监督学习,构建pretext任务来学习泛化表征。此外,还有其他策略,比如度量学习。

表示学习:领域不变表示和特征解纠缠

将预测函数分解为 h = f ∘ g h=f\circ g h=fg,其中 g g g是表示学习函数, f f f是分类器函数,表示学习可以形式化为: m i n f , g E x , y l ( f ( g ( x ) ) , y ) + λ l r e g min_{f,g}\mathbb{E}_{x,y}l(f(g(x)),y)+\lambda l_{reg} minf,gEx,yl(f(g(x)),y)+λlreg其中, l r e g l_{reg} lreg为正则化项。目前,人们设计了许多方法来更好地学习具有相应 l r e g l_{reg} lreg的特征提取函数 g g g。下面,根据不同的学习原理将现有的表征学习分为两大类:领域不变的表征学习和特征解纠缠。

领域不变表征学习

有工作从理论上证明(Analysis of representations for domain adaptation),如果特征表示对不同的领域保持不变,则该表示是通用的,并可转移到不同的域。基于这一理论,已经提出了大量的领域自适应算法。类似地,对于域泛化,目标是将特定特征空间中多个源域之间的表示差异减少到域不变,以便学习的模型能够对看不见的域具有可泛化的能力。沿着这条线,主要有四种类型的方法:基于内核的方法、领域对抗性学习、显式特征对齐和不变风险最小化。

基于kernel的方法

基于核的方法是机器学习中最经典的学习范式之一。基于核的机器学习依赖于核函数将原始数据转换到高维特征空间,不需要计算数据在该空间中的坐标,而是简单地计算特征空间中所有样本对之间的内积。最具代表性的基于核的方法之一是支持向量机(SVM)。对于领域泛化,有很多基于核的算法,其中表示学习函数 g g g被实现为一些feature map φ ( ⋅ ) φ(·) φ(),该feature map很容易使用 核函数 k ( ⋅ , ⋅ ) k(·,·) k(⋅,⋅)(如RBF核和拉普拉斯核)来计算。

在基于核函数的方法中,通常使用核函数来度量样本之间的相似度或距离。常用的核函数包括线性核函数、多项式核函数、高斯核函数等。这些核函数可以将原始数据映射到高维特征空间,使得在该特征空间中的样本之间的距离能够更好地表示它们在原始空间中的相似性。

基于核函数的方法在领域泛化中的应用主要有两个方面:

  • 领域自适应(Domain Adaptation):在领域自适应问题中,训练数据和测试数据来自于不同的数据分布,模型需要在训练数据的领域上学习,然后在测试数据的领域上进行泛化。基于核函数的领域自适应方法通过在核函数中引入领域自适应的约束,例如最大均值差异(Maximum Mean Discrepancy,MMD),来减小训练数据和测试数据之间的领域差异,从而提高模型在测试数据上的性能。
  • 迁移学习(Transfer Learning):在跨领域学习问题中,训练数据和测试数据可能来自于不同的领域,但存在一些共享的信息或知识可以用于泛化。基于核函数的跨领域学习方法通过在核函数中考虑源领域和目标领域的相似性,从而在源领域学到的知识能够帮助提升在目标领域的泛化性能。

总的来说,基于核函数的方法通过将数据映射到高维特征空间,并在该空间中计算相似度或距离来实现领域泛化。它可以在非线性和复杂的数据分布中有效地建模,并在训练数据和测试数据之间存在领域差异的情况下提高模型的泛化性能。这类方法隐含地将领域偏差问题转移到多领域所有样本的相似性,可以想象kernerl的映射根据样本距离将所有数据放到了同一个高维空间

领域对抗学习

领域对抗性训练被广泛用于学习领域不变特征。比如用于DA的领域对抗神经网络(DANN),该网络训练生成器和鉴别器。鉴别器被训练来区分领域,而生成器被训练来欺骗鉴别器来学习域不变特征表示。

具体而言,用于DG的领域对抗学习包括以下几个步骤:

  • 特征提取器:首先,需要设计一个用于提取数据特征的模型,如卷积神经网络CNN。该模型用于将原始数据转换为高层次的特征表示。
  • 领域分类器:为了区分不同领域的数据,需要添加一个领域分类器,用于预测样本来自于哪个源领域。领域分类器可以是一个二分类器,其输入是特征提取器的输出。
  • 领域对抗损失函数:为了实现领域不可区分性,需要通过领域对抗损失函数来训练特征提取器,使其生成的特征在源领域和目标领域上无法被领域分类器区分。
  • 分类器训练:同时,需要在目标领域上进行分类器的训练。通常使用交叉熵损失函数来衡量分类器的分类性能,并将其作为主要优化目标。

通过交替地训练特征提取器、领域分类器和分类器,领域对抗学习方法可以实现在源领域和目标领域上的分类性能和领域不可区分性的平衡。特征提取器在训练过程中学习到的特征表示具有较好的领域泛化性能,可以在目标领域上实现良好的分类性能。

需要注意的是,领域对抗学习的成功与否取决于源领域训练数据的质量。

显式特征对齐

这一系列工作将跨源域的特征对齐,通过显式特征分布对齐或特征归一化来学习域不变表示。

对于特征分布对齐:该方法通过显式地使多个源域的特征分布尽可能接近来实现特征对齐(核方法和对比学习是隐式的)。具体操作包括以下步骤:

  • 统计多个源域的特征分布。使用某种距离度量(如KL散度)来衡量源域之间的特征分布差异。
  • 引入一个最小化领域距离的损失函数,以迫使分布尽可能接近。

对于特征归一化:该方法通过将多个源域的特征进行归一化,使得它们具有相似的统计特性,从而达到特征对齐的目的。具体操作包括以下步骤:

  • 统计多个源域的特征的均值和方差,可以使用样本均值和方差进行估计。
  • 对这些特征进行归一化,例如通过减去均值并除以方差来进行零均值单位方差化。确保在特征归一化过程中,保持特征的一致性。

不变风险最小化

Arjovsky等人从另一个角度考虑了域不变性。他们并不寻求对齐所有域的表示分布,而是在表示空间的顶部强制执行最优分类器,使其在所有域中都相同。直觉是,预测的理想表示是 y y y的cause,因果机制不应受到其他因素或机制的影响,因此是领域不变的。IRM(Invariant risk minimization)可以公式化为: m i n g ∈ G ,   f ∈ ∩ i = 1 M a r g m i n f ′ ∈ F ϵ i ( f ′ ∘ g ) ∑ i = 1 M ϵ i ( f ∘ g ) min_{g\in G,\thinspace f\in\cap_{i=1}^{M}argmin_{f'\in F}\epsilon^{i}(f'\circ g)}\sum_{i=1}^{M}\epsilon^{i}(f\circ g) mingG,fi=1MargminfFϵi(fg)i=1Mϵi(fg)其中, ϵ \epsilon ϵ表示风险risk,即error。对于 g g g的函数类 G G G f f f的函数类 F F F f f f的约束体现了所有域共享相同表示的分类器,并且目标函数鼓励 f f f g g g实现低源域风险。然而,这个问题很难解决,因为它在约束条件下涉及内部优化问题。因此后续开发了一个代理问题来学习更实用的特征提取器 g g g m i n g ∈ G ∑ i = 1 M [ ϵ i ( g ) + λ ∣ ∣ ▽ f ϵ i ( f ∘ g ) ∣ f = 1 ∣ ∣ 2 ] min_{g\in G}\sum_{i=1}^{M}[\epsilon^{i}(g)+\lambda||\triangledown_{f}\epsilon^{i}(f\circ g)|_{f=1}||^{2}] mingGi=1M[ϵi(g)+λ∣∣fϵi(fg)f=12]其中考虑伪表示分类器 f = 1 f=1 f1,并且梯度范数项测量该分类器的最优性。 ϵ i ( g ) \epsilon^{i}(g) ϵi(g)是在第 i i i个领域上的分类误差, λ \lambda λ是一个正则化参数, ∣ ∣ ▽ f ϵ i ( f ∘ g ) ∣ f = 1 ∣ ∣ 2 ||\triangledown_{f}\epsilon^{i}(f\circ g)|_{f=1}||^{2} ∣∣fϵi(fg)f=12表示在整个领域集合上对 f ∘ g f\circ g fg的梯度的范数平方。

优化目标是在不同的领域上最小化分类误差,并通过对 g g g的梯度进行正则化来鼓励 g g g具有平滑的变化。具体操作如下:

  • 针对每个领域 i i i,计算使用 g g g得到的分类误差 ϵ i ( g ) \epsilon^{i}(g) ϵi(g)
  • 对于 g g g,计算分类器 f f f相对于整个领域集合上的分类误差的梯度 ∣ ∣ ▽ f ϵ i ( f ∘ g ) ∣ f = 1 ∣ ∣ 2 ||\triangledown_{f}\epsilon^{i}(f\circ g)|_{f=1}||^{2} ∣∣fϵi(fg)f=12
  • 对于给定的空间 G G G,通过最小化目标函数,可以找到在多个领域上表现良好且具有领域泛化能力的 g ∗ g^{*} g

IRM的目标是通过在训练中强制模型在不同的领域中具有相同的预测结果来实现领域泛化。IRM的实现通常涉及以下步骤:

  • 定义领域集合:首先,需要定义一组不同的领域。每个领域代表训练数据的不同来源或分布。
  • 构建域不变性约束:为了实现领域泛化,需要构建一种域不变性约束。这个约束的目标是使模型对于输入数据的领域变化具有不变性。一种常见的做法是使用领域分类器,它尝试根据输入数据预测其来源领域。通过最小化领域分类器的错误,可以鼓励模型在不同领域中保持一致的预测。
  • 优化模型:在训练过程中,通过最小化域分类器的错误和任务损失来优化模型。域分类器的error鼓励模型学习域不变的表示,而任务loss则与特定任务相关。

IRM的核心思想是通过显式地建模和优化域不变性来实现领域泛化。


特征解纠缠

解纠缠表示学习旨在学习将样本映射到特征向量的函数,该特征向量包含关于不同变量因子的所有信息,每个维度(或维度的子集)仅包含关于某些因子的信息。基于解纠缠的DG方法通常将特征表示分解为可理解的组成(特征子集),其中一个特征是域共享/不变特征,另一个是域特定特征。基于解纠缠的DG的优化目标可以概括为: m i n g c , g s , f E x , y l ( f ( g c ( x ) ) , y ) + λ l r e g + μ l r e c o n ( [ g c ( x ) , g s ( x ) ] , x ) min_{g_{c},g_{s},f}\mathbb{E}_{x,y}l(f(g_{c}(x)),y)+\lambda l_{reg}+\mu l_{recon}([g_{c}(x),g_{s}(x)],x) mingc,gs,fEx,yl(f(gc(x)),y)+λlreg+μlrecon([gc(x),gs(x)],x)其中 g c g_c gc g s g_s gs分别表示域共享和域特定的特征表示提取器。 λ λ λ µ µ µ是权衡参数。 l r e g l_{reg} lreg是一个正则化项,明确鼓励将域共享特征和特定特征分离, l r e c o n l_{recon} lrecon表示防止信息损失的重建损失。注意, [ g c ( x ) , g s ( x ) ] [g_{c}(x),g_{s}(x)] [gc(x),gs(x)]表示两种特征的组合(不限于concat操作)。

根据网络结构和实现机制的选择,基于解纠缠的DG主要可分为三类:多分量分析、生成建模和因果激励方法。

多分量分析

在多分量分析中,通常分别使用域共享和域特定的网络参数来提取域共享和领域特定的特征。

比如Ding和Fu(Deep domain generalization with structured low-rank constraint)为每个域设计了特定于域的网络,为所有域设计了一个共享的域不变网络,以学习解纠缠表示,其中采用低秩重构以结构化低秩方式对齐两种类型的网络。

通常,多分量分析可以在不同的体系结构中实现,并且对于表示解纠缠有效。

生成建模和因果激励

从数据生成过程的角度来看,生成模型可以用于解纠缠。这种方法试图从领域层面、样本层面和标签层面来阐述样本的生成机制。生成模型不仅可以提高OOD性能,还可以用于生成任务,生成式建模对许多潜在的应用都很有用。

因果关系是对统计之外的变量关系(比如联合分布)的更精细描述。因果关系提供了系统在干预下如何表现的信息,因此它自然适用于DG,因为领域转移可以被视为一种干预。特别是,在因果机制下,所需的表示是标签的真正原因(例如,物体形状),因此预测不会受到对相关但语义无关的特征(例如,背景、颜色、风格)的干预影响。

对于领域泛化,He等人重新加权特征,以反映因果效应。Zhang等人将傅立叶特征作为图像的成因因素,并加强了这些特征之间的独立性。使用对象标识的附加数据(这是一个比类标签更详细的标签),在给定相同对象的情况下,强制实现了表示与域索引的条件独立性(Deep stable learning for out-of-distribution generalization)。

对于单源领域泛化,可以使用数据增强来呈现因果因素的信息。增强操作被视为在基于特定领域知识的不相关特征的干预下产生结果。在因果考虑下也有生成方法。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个十余年来快速发展的崭新领域,深度学习受到了越来越多研究者的关注,它在特征提取和建模上都有着相较于浅层模型显然的优势.深度学习善于从原始输入数据中挖掘越来越抽象的特征表示,而这些表示具有良好的泛化能力.它克服了过去人工智能中被认为难以解决的一些问题.且随着训练数据集数量的显著增长以及芯片处理能力的剧增,它在目标检测和计算机视觉、自然语言处理、语音识别和语义分析等领域成效卓然,因此也促进了人工智能的发展.深度学习是包含多级非线性变换的层级机器学习方法,深层神经网络是目前的主要形式,其神经元间的连接模式受启发于动物视觉皮层组织,而卷积神经网络则是其中一种经典而广泛应用的结构.卷积神经网络的局部连接、权值共享及池化操作等特性使之可以有效地降低网络的复杂度,减少训练参数的数目,使模型对平移、扭曲、缩放具有一定程度的不变性,并具有强鲁棒性和容错能力,且也易于训练和优化.基于这些优越的特性,它在各种信号和信息处理任务中的性能优于标准的全连接神经网络.该文首先概述了卷积神经网络的发展历史,然后分别描述了神经元模型、多层感知器的结构.接着,详细分析了卷积神经网络的结构,包括卷积层、池化层、全连接层,它们发挥着不同的作用.然后,讨论了网中网模型、空间变换网络等改进的卷积神经网络.同时,还分别介绍了卷积神经网络的监督学习、无监督学习训练方法以及一些常用的开源工具.此外,该文以图像分类、人脸识别、音频检索、心电图分类及目标检测等为例,对卷积神经网络的应用作了归纳.卷积神经网络与递归神经 网络的集成是一个途径.为了给读者以尽可能多的借鉴,该文还设计并试验了不同参数及不同深度的卷积神经网络来分析各参数间的相互关系及不同参数设置对结果的影响.最后,给出了卷积神经网络及其应用中待解决的若干问题
KNN(k-近邻)算法是一种基于实例的学习(instance-based learning)或非泛化学习(non-generalizing learning)的监督学习算法。它可以用于分类和回归。 KNN算法的基本思想是:给定一个新的数据点,通过在训练集中找到 k 个最近邻居,来预测该数据点的类别或数值。 数据集构造: 为了构造一个适合KNN算法的数据集,我们可以从以下两个方面考虑: 1. 数据点:我们可以随机生成一些数据点,或者从已有数据集中选取一部分数据点。这些数据点应该包含需要分类或回归的特征值,以及对应的类别或数值。 2. 类别或数值:对于分类问题,我们需要为每个数据点标记一个类别,例如二分类问题中的0和1。对于回归问题,我们需要为每个数据点标记一个数值。 k值设置: k 值的设置会影响KNN算法的性能。一般来说,k 值应该根据数据集的大小和特征数量来进行选择。如果数据集比较小,可以选择较小的 k 值;如果数据集比较大,可以选择较大的 k 值。另外,k 值也可以通过交叉验证来进行选择。 Python实现代码: 下面是一个简单的Python实现KNN算法的代码。其中,我们使用sklearn库中的KNeighborsClassifier来实现KNN分类器。 ```python from sklearn.neighbors import KNeighborsClassifier # 构造数据集 X = [[0, 0], [1, 1], [0, 1], [1, 0]] y = [0, 1, 1, 0] # 创建KNN分类器 knn = KNeighborsClassifier(n_neighbors=3) # 训练模型 knn.fit(X, y) # 预测新数据点的类别 print(knn.predict([[1, 2]])) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值