靴徘讦劭

O. 术语

讲一些神秘的术语。

  • one-hot:“变量”也可以被看作“变量字典集合”中单一元素的子集。集合的子集可以用布尔向量描述,那么一个变量对应的 one-hot 向量就是该单一元素子集对应的仅在一个位置上为一的向量。
  • zero-shot:零样本。即,在某个数据集上训练完成的模型直接迁移到另一个数据集上跑。
  • linear-protocol:训练一个骨干网络后,冻结其中的参数,然后只对各个数据集跑最后的全连接层。

I. MLP

Affine-ReLU/Sigmoid 叠加即是 MLP。

II. CNN

CNN 网络的构造基本上就是 卷积-(BatchNorm)-ReLU-MaxPool 层的叠加,最后接上几层 Affine。卷积也可以使用多层,即 [卷积-ReLU-卷积-ReLU-卷积] 搭配 shortcut 来替代单个卷积。

III. ResNet

ResNet 就是 shortcut 构建。shortcut 在两端维数相同时可以用恒等映射,否则要用 Affine 层,有时效果不是很好(指层数很多)。

IV. RNN

RNN 有一个隐藏状态 hihihi1 和输入 xi1 经过某些层(这些层的参数在一切时刻均是共享的)得到,然后 hi 进一步变成输出 oi

反向传播有时需要梯度剪裁,即若梯度超过阈值 θ 则将其模长手动放缩为阈值。这样可以避免梯度爆炸。

IV.I. GRU

GRU 的隐藏状态并非直接由 hi1xi1 得到,而是先算遗忘门 r 和更新门 zr 衡量 hi1 贡献给候选隐藏态 h~i 的部分,z 衡量 h~ihi1 贡献给 hi 的部分。

IV.II. LSTM

忘记门:将值向 0 减少。

输入门:是否忽略输入。

输出门:是否使用隐藏态。

候选记忆状态:C~t=tanh(XtWxc+Ht1Whc+bc)

记忆单元:Ct=FtCt1+ItC~t

隐藏态:Ht=OttanhCt

V. Attention

词向量可以描述一个词汇,距离衡量两个词汇的相似之处。然而存在一词多义,且一个词可能经由其它成分修饰并拥有完全不同的含义,因此上下文有关。

首先假定我们知道的词向量仅仅包含两个信息:词汇本身,与词汇所在位置。我们的目的是将其转为考虑完上下文后的结果。

词汇位置 o 可以加上例如下方的向量加以表示:

pi={sin(o/100002k/d)(i=2k)cos(o/100002k/d)(i=2k+1)

使用统一的 WQ 矩阵(WQ 是模型参数),可以由词向量 xi 生成 qi=xiWQ。同理,有 WK 矩阵自 xi 生成 ki。然后作 softmax 归一化,归一化后的矩阵即为注意力矩阵。同理,可以用 vi=xiWV 生成 vi。生成背景信息向量 Ci 后,将其加到原本的词向量 xi 即可让该词向量与上下文结合。

词向量的维数常常是万级别的,而注意力矩阵的维数仅仅是百级别。WV 的长宽均为词向量的维数,这意味着一大堆参数。而如果把 n×nWV 换成 (n×d)×(d×n) 的两个矩阵,则参数数目立刻就能剧烈减少。

以上部分是单自注意力头的实现。多头的话,就是无数个 WQ,WK,WV 矩阵并行,得到很多背景信息向量,然后全部把它加到词向量上。

VI. Transformer

Transformer 是 Encoder-Decoder 的结构。Encoder 由若干 encoder block 组成,一个 block 包含一次多头连接、一次 Add&Norm、一次 Feed Forward、又一次 Add&Norm。

Add&Norm 是 shortcut 连接后作 Batch-Norm 归一化。

Feed Forward 是 Affine-ReLU-Affine 层。

Decoder block 由三部分组成:第一部分是 Masked 多头+Add&Norm,第二部分是多头+Add&Norm,第三部分是 Feed Forward+Add&Norm,最后作 Softmax 输出。

VII. 对比学习

“监督”指人工对数据的标注。对比学习是一种无监督(有时也认为是自监督)算法。

其思想为:两张图片的相似是不依赖于图片实现的。因此若能将图片转成向量,即可用向量的距离衡量向量的相似,正如 attention 机制尝试将 token 转成向量。事实上,图片也是一种 token,也即这其实属于一种广义的嵌入(真的是广义的吗?狭义的嵌入好像就是这个意思了)。

对比学习需要有衡量相似的方式,而这一“衡量”其实就是一种监督。一般使用“代理任务”作为监督。

有监督学习中,将模型输出与 ground truth 作比计算误差;而对比学习中,定义正负样本,在样本和样本间计算误差。

最基础的代理任务是“个体判别”,所有图像均自成一类,希望将所有图片输入尽量地分开。用一个图片的所有数据增强作为正样本,与其它图片及其数据增强的配对作为负样本。

VII.I. InstDisc

InstDisc 模型采取的任务即为个体判别。使用 CNN 将图片转成初步向量嵌入后,使用数据集中所有图片的嵌入向量(它们的维数不能过高)建立一个 memory bank,每次从 memory bank 中随机一批作负样本,用其修正当前 batch 的嵌入向量后,更新 memory bank。

VII.II. InvaSpread

对于输入的一个 batch,对 batch 中的所有图片数据增强得到一份副本,则一份原本的正样本是其副本,负样本是所有其它图片的原本和副本。缺点:负样本太少了!!!

VII.III. CPC

数据是一个序列。编码器将其转成向量列。向量列输入 RNN 得到隐藏状态,隐藏状态记录了上文的一些信息;如果隐藏态足够优秀,则其理应可以被用于预测下文。因此用“隐藏态-将来态”配对作为正样本,负样本较为随意,例如随机生成 token 通过编码器得到的输出与隐藏态的配对即可作为负样本。

VII.IV. CMC

同一个物体不同的视角下互为正样本。例如,原始图像、深度信息、图像分割等,应具有相似嵌入向量。

VII.V. MoCo

最牛的一集。

MoCo 认为,Transformer 之类的自然语言学习之所以能做到无监督,是因为自然语言的语素是离散的、可以建立字典的,建立字典就等同于为所有 token 打上了字典的标签。然而视觉领域的图像是高维的、连续的,故而相似的方法无法奏效。

本质上其实就是 InstDisc。建立字典后,要求嵌入向量尽量靠近正样本并远离负样本。

xq 表示“anchor”,即样本本身;anchor 经过数据增强得到 positive 正样本 xkxq 经过编码器得到嵌入 q,看作询问 queryxk 得到一堆嵌入 k1,,kn,看作键值 key。键值构成字典。

字典首先要大,才能更好学习特征。还有一个要求是字典要尽量保持一致。

原因:字典小时容易有过拟合的 shortcut。字典不一致(采取了不一样或不类似的编码器)时也许会导致寻找到采取同一个编码器的 shortcut。

但是显卡无法存储过大的字典。因此采用队列处理字典,随着 batch 扫过整个数据集,队列跟着 push 和 pop。与此同时,不同 batch 会更新编码器的参数,因此要采取 momentum encoder,即令 Θq 的 encoder,θiki 的 encoder,则更新为 θi=mθi1+(1m)Θ,使得队列中全体编码器均为相似编码器。


思想是这样,以下是一些细节:

  • 误差函数怎么写?

常规误差:输出结果与 Ground Truth 间的误差。

对比式误差:算嵌入向量间的距离。

对抗式误差:算两个概率分布的差。

先别急。


对于询问 q,假定有唯一的 k+ 与其配对。我们希望让误差函数在下述两点同时满足时,较低:

  • qk+ 相近。
  • q 与全体其它 ki 均不相近。

于是可以定义 InfoNCE-loss,即 noise contrastive estimation,公式为

logexp(qk+/τ)exp(qki/τ)

可以想见,其与 softmax 公式很像。其是把唯一的 k+ 当作数据,然后其它的所有 ki 均是噪声。estimation 意味着 ki 可以选择一组抽样来拟合【这组抽样包含 k+ 与其它 m 个抽样的 ki】。

τ 是温度超参数,用来调整曲线平滑度的。过大的 τ 会导致所有负样本被一视同仁,难以区分;过小的 τ 会强调那些困难的负样本,而困难的负样本正是那些长得很像锚样本的样本,也即潜在的正样本,因此也并非好的学习策略。

  • 其本质还是一个 m+1 类的交叉熵误差,目标是把 q 分到 k+ 的类别中。

误差函数之外,还要研究将 xqqxkk 的编码器。编码器可以相同(在 q,k 的场合共享参数)、部分共享参数,或是完全独立。


什么是 MoCo(Momentum Contrast)?

  • 使用队列维护字典。若干个 batch 共用一批相似的字典,新 batch 投入时,一段时间以前的旧字典元素会被丢弃。
  • k 的编码器是需要更新的。但是如果每次更新均对字典中所有元素更改编码器,这代价很高。因此允许字典中元素使用不同编码器,为了保证编码器的相似性使用 θi=mθi1+(1m)Θ。为保证一致性,m 取很大,如 1103

VII.VI. CLIP

CLIP 是多模态的对比学习。其输入是“图片-描述”对,二者分别经过独立 encoder 后,得到的嵌入向量被看作是正样本,所有来自不同对的配对向量被看作是负样本。也即,大小为 n 的 batch 中包含 n 个正样本对和 n2n 个负样本对。矩阵形式下,则对角线元素为正样本。

对比学习完成后,依赖 prompt 处理细分任务。也即,如果图像识别,每个 class 是一种动物,则可以按照 a picture of a ___, a kind of animal 这样的自然语言方法对整句话 encode 后寻找与图片最接近的描述。


“图片-描述”的对,使得迁移性大大增强,添加新类别的工作变得容易。

Loss 函数,从图像的角度,则有 1 个正样本和 n1 负样本,可以同上交叉熵算;从文本同理,两个误差求和取平均得到总平均误差。

VII.VII. ImageBind

省流:CLIP 加大加量版本。

将各种模态绑在一起,在它们的嵌入直接建立联系。涉及到的模态包括文本、音频、视频、深度图像、IMU(惯性单元?)等。该方法以 image 或 video 为核心,其它模态是可选的,因此对数据集质量的要求不高。因此该方法被称作 ImageBind,即尝试把 image 与其它模态对齐。其应用有:

  • 跨模态检索,例如给定音频寻找相关图片。
  • 嵌入增加,例如海浪声嵌入可以在图片中增加海的背景。
  • 音频到图像的生成,通过 DALLE 解码器实现。

ImageBind 要求模态对齐,即两个模态下数据的配对。常见的对齐模态有 (image,text);(audio,text);(image,depth);(video,audio) 等对齐。CLIP 仅支持双模态对齐,而 IB 若训练 (A,B)(B,C) 同时对齐,则有理由相信 (A,C) 也对齐了。

对于两个模态下的数据 x,y,通过 encoder 得到嵌入 X,Y,然后使用 InfoICE 衡量误差。

logexp(XiTYi/τ)exp(XiTYi/τ)+jiexp(XiTYj/τ)

训练完成后,嵌入增加可以直接将嵌入向量求和,然后在数据库里检索相近图片。图像生成是 DALLE 相关。

posted @   Troverld  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示