Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

    • 零样本学习
  • 集成学习

  • Mamba

  • PyTorch

  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • 零样本学习
Geeks_Z
2024-12-30

零样本学习

在zero-shot-learning里面呢?跟刚才讲的task是一样的,source data有label,target data每天label。在刚才task里面可以把source data当做training data,把target data当做testing data,但是实际上在zero-shot learning里面,它的difine又更加严格一点。它的difine是:今天在source data和target data里面,它的task是不一样的。

比如说在影像上面(你可能要分辨猫跟狗),你的source data可能有猫的class,也有狗的class。但是你的target data里面image是羊的样子,在source data里面是从来没有出现过羊。但是这个task在语音上很早就有solution了,其实语音是常常会遇到zero-shot learning的问题。

在这里插入图片描述

假如我们把不同的word都当做一个class的话,那本来在training的时候跟testing的时候就有可能看到不同的词汇。你的testing data本来就有一些词汇是在training的时候是没有看过的。

那在语音上我们如何来解决这个问题呢?不要直接去辨识一段声音是属于哪一个word,我们辨识的是一段声音是属于哪一个音标。然后我们在做一个音标跟table对应关系的表,这个东西也就是词典。在辨识的时候只要辨识出音标就好,再去查表说:这个音标对应到哪一个word。这样就算有一些word是没有在training data里面的,它只要在你的词典里面出现过,你的model可以正确辨识出声音是属于哪一个音标的话,你就可以处理这个问题。

在影像上我们可以把每一个class用它的attribute来表示,也就是说:你有一个database,这个database里面会有不同可能的class跟它的特性。假设你要辨识的是动物,但是你training data跟testing data他们的动物是不一样的。但是你有一个database,这个database告诉你说:每一种动物它是有什么样的特性。比如狗就是毛茸茸,四只脚,有尾巴;鱼是有尾巴但不是毛茸茸,没有脚。

这个attribute要更丰富,每一个class都要有不一样的attribute(如果两个class有相同的attribute的话,方法会fail)。那在training的时候,我们不直接辨识说:每一张image是属于哪一个class,而是去辨识说:每一张image里面它具备什么样的attribute。所以你的neural network target就是说:看到猩猩的图,就要说:这是一个毛茸茸的动物,没有四只脚,没有尾巴。看到狗的图就要说:这是毛茸茸的动物,有四只脚,有尾巴。

在这里插入图片描述

那在testing的时候,就算今天来了你从来没有见过的image,也是没有关系的。你今天neural network target也不是说:input image它是哪一种动物,而是input这一张image它是具有什么样的attribute。所以input你从来没有见过的动物,你只要把它的attribute长出来,然后你就查表看说:在database里面哪一种动物它的attribute跟你现在model output最接近。有时可能没有一摸一样的也是没有关系的,看谁最接近,那个动物就是你要找的。

zero-shot-learning

那有时候你的attribute可能非常的复杂(attribute dimension非常大),你可以做attribute embedding。也就是说现在有一个embedding space,把training data每一个image都通过一个transform,变成一个embedding space上的一个点。然后把所有的attribute也都变成embedding space上的一个点,这个g(∗) f(∗) 可能是neural network,那training的时候希望f跟g越接近越好。那在testing的时候如果有一张没有看过的image,你就可以说这张image attribute embedding以后跟哪个attribute最像,那你就可以知道它是什么样的image。

在这里插入图片描述

image跟attribute都可以描述为vector,要做的事情就是把attribute跟image都投影到同一个空间里面。也就是说:你可以想象成是对image的vector,也就是图中的x,跟attribute的vector,也就是图中的y都做降维,然后都降到同一个dimension。所以你把x通过一个function f都变成embedding space上的vector,把y通过另外一个function g也都变成embedding space上的vector。

但是咋样找这个f跟g呢?你可以说f跟g就是neural network。input一张image它变成一个vector,或者input attribute 变成一个vector。training target你希望说:假设我们已经知道y1 x1 attribute,y2 x2 attribute,那你就希望说找到一个f跟g,它可以让x1 y1 影到embedding space以后越接近越好,x2 y2 影到embedding space以后越接近越好。

那现在把f跟g找出来了,那现在假如有一张你从来没见过的imagex3 你的testing data里面,它也可以透过这个f变成embedding space上面的一个vector,接下来你就可以说这个embedding vector它跟y3 接近,那y3 是它的attribute

又是你会遇到一个问题,如果我没有database呢?我根本不知道每一个动物的attribute是什么,肿么办呢?那你可以借用word vector。我们知道word vector的每一个dimension就代表了现在word某种attribute。所以你不一定需要一个datbase去告诉你说:每一个动物的attribute是什么。假设你有一组word vector,这组word vector里面你知道每一个动物对应的word vector,那你可以把你的attribute直接换成word vector,再做跟刚才一样的embedding就结束了。

在这里插入图片描述

假设我们的train的query是要让xn 过f、跟yn 过g之后的距离越接近越好。这样子的话是有问题的,这样你的model只会learn到说:它把所有不同的x跟所有不同的y都投影同一个点,这样子距离最好。所以你的loss function这样定其实是不行的,所以你要稍微重新设计一下你的loss function。前面这个loss function只有考虑到xn yn 接近越好,但没有考虑 xn 另一个yn,它的距离应该被拉大。

max里面两个的element分别是0,k-f(xn)跟g(yn)的inner product,加上一个max(m不等于n)里面的f(xn)跟g(ym)的inner product。这个k是自己difine的margin(一个constant,在train的时候自己difine)

这个max的两个element一个是0,一个是maxf(xn)∗g(ym)。它会从0跟这个式子中选一个最大的,所以这一项的最小值就是0。什么时候会等于0呢?当你另外一项小于0的时候,这个loss就会是0。所以今天k−f(xn)∗g(yn) inner product 加上maxm≠nf(xn)∗g(ym) inner product小于0的时候,这一项会是zero loss,整理一下得到下面的这个式子f(xn)g(yn)−maxm≠nf(xn)∗g(ym) inner product小于k的时候是zero loss。这一项也和解释为:当f(xn) g(yn) inner product大于另外一项(y不是yn 面找一个m,这个ym xn 最接近的)

如果xn yn 间的inner product大过所有其它的ym xn 间的inner product,而且要大过一个margin k。

在这里插入图片描述

还有另外一个简单的Zero-Shot learning的方法叫做convex combination of semantic embedding。这个方法是说:我们也不要做什么learning,假设我们现在有一个语音辨识系统,有一个word vector,这两个是从网络上下载下来的,就可以做这件事情。

我把一张图丢到neural network里面去,它的output没有办法决定是哪一个class,但它觉得有0.5的几率是lion,有0.5的几率是tiger。接下来你在去找lion跟tiger的word vector,然后把lion跟tiger的word vector得到新的vector(用1:1的比例混合,0.5V(tiger)+0.5V(lion)),那你再看哪一个word的vector跟这个混合之后的结果最接近。假设是liger最接近,那这个东西就是liger(狮虎)

在这里插入图片描述

以下是这个的实验结果,也是蛮惊人的。我们来比一下人类跟机器的差别,第一张图,CNN判别说是sea lion(海狮),DeViSE没有得到好的结果,ConSE判别为各种sea lion。

在这里插入图片描述

在training的时候,machine看过如何把英文翻译成韩文,知道咋样把韩文翻译为英文,知道咋样把英文翻译为日文,知道咋样把日文翻译为英文。但是它从来没有看过日文翻译韩文的data,但是可以翻,但是它从来没有看过韩文翻译日文的data,但是可以翻。

在这里插入图片描述

为什么zero-shot在这个task上是可行的呢?如果你今天用同一个model做了不同语言之间的translation以后,machine可以学到的事情是:对不同语言的input 句子都可以project到同一个space上面

我们现在根据我们learn好得translation,那个translation有一个encoder,它会把你input的句子变成vector,decoder根据这个vector解回一个句子,就是翻译的结果。那今天我们把不同语言都丢到这个encoder里面让它变成vector的话,那这些不同语言的不同句子在这个space上面有什么不一样的关系呢?

它发现说今天有日文、英文、韩文这三个句子,这三个句子讲的是同一件事情,通过encoder embedding以后再space上面其实是差不多的位置。在左边这个图上面不同的颜色代表说:不同语言的用一个意思。所以你这样说:machine发明了一个新语言也是可以接受的,如果你把这个embedding space当做一个新的语言的话。machine做的是:发现可一个sequence language,每一种不同的语言都先要先转成它知道的sequence language,在用这个sequence language转为另外一种语言。

在这里插入图片描述

所以今天就算是某一个翻译task ,你的input语言和output语言machine没有看过,它也可以透过这种自己学出来的sequence language来做translation。

一些paper给予参考。

在这里插入图片描述

自我学习 & 自我聚类

target data有label,source data没有label的状况叫做self-taught learning。target label没有label,source data也没有label的状况叫做self-taught clustering。

在这里插入图片描述

上次更新: 2025/06/25, 11:25:50
领域自适应和领域泛化
集成学习

← 领域自适应和领域泛化 集成学习→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式