赞
踩
这一周终于开始看论文了,昨晚睡觉前突然觉得论文看得越多越糊涂,在gpt帮助下和网路搜索总结一下以上模型。全是自己的理解,轻喷。
知乎上的解释:把目标字作为query(q),把上下文的各个字作为key(k),并将q和各个k的相似性作为权重,把上下文各字的value(v)融入目标字的原始value中。即:目标字的增强语义表示。
首先注意力机制就是让模型能像人一样有选择有重点地关注它收到的信息,我的理解是这样更适合处理特定的任务。这几篇论文中涉及的最多的就是self-attention(自注意力机制)和multi-head attention(多头注意力)。
self-attention就是自己做q,k,v。对一句话中的每个字都分别增强语义向量表示,比如李宏毅老师举得例子,“i saw a saw”,如果不结合这句话的上下文,机器无法区分最后一个saw是看见的意思还是锯子的意思。
multihead self-attention是为了增强attention的多样性,利用不同的self-attention获得文本中每个字在不同语义空间下的增强语义向量再进行线性组合,最后获得一个与原始字向量长度相同的增强语义向量。
在b站ViT的论文精讲中,老师解释了多头注意力的维度变化形式。如head=12,inputs=(197*768),那么会变成12个(197*64),最后再concat在一起恢复(197*768)的维度。
transformer是由一个整体的encoder和一个整体的decoder构成的,它们都可以有n个block组成。block的基本结构是——attention+add&norm+ffn+add&norm。
整体的思路是:inputs和outputs分别被embedding并添加上positional encoding(因为transformer没有使用rnn,rnn可以记忆时间的先后信息)后进入一个多头自注意力层,可以理解为进一步抽取其信息。然后inputs抽取出来的信息进入n个encoder block输出了隐藏层信息,这个信息作为cross attention的k和v,outputs抽取的信息作为q。注意:decoder这边的第一个多头自注意力层是masked掉的,因为对于当前t位置的信息,我们不需要关注t+1及以后的,只要看t前的,所以对之后的token都做一个mask操作不让decoder看它。最后decoder的输出做一个linear映射到vocab的维度,再通过softmax找出下一个预测的词最可能是什么。
transformer中的teacher forcing(强制学习):即给decoder正确的输出,而不是由上一步预测而来的输入,相当于给decoder作弊。
bert李沐老师说就是半个trm,因为bert是由trm的encoder组成的。bert是用与特定任务无关的大量无标注语料训练的一个大模型,它通过两个预训练任务Masked LM和Next Sentence Prediction来获得文本中的包含丰富语义信息的语义表示representation。
针对不同的特定任务,bert的输入不同。如单文本分类,bert会在文本前插入一个<cls>,其输出就作为整篇文本的语义表示;而语句对分类任务(应用:问答、语句匹配)除了用一个<cls>,还有<seq>分割src句子和tar句子,除了positional encoding还有segment ecoding来区分前后句。
Q1:为什么用<cls>的输出代表整篇文本?
A1:因为这个无明显语义信息的符号会更公平地融合文本中各个词的语义信息。
Q2:bert是如何通过encoder来完成MLM任务的?
A2:遮蔽掉的单词会通过BERT的encoder部分进行处理,然后通过一个全连接层(通常是一个线性变换)将输出映射到词汇表的维度,然后再经过softmax操作。
beit是bert在cv领域的应用,它主要是参考了bert通过MLM预训练任务来训练encoder提取语义特征的能力。但是原始的bert中输出一个softmax就可以对应到词表的位置,来判断这个mask的预测是否正确。但是运用于图像的时候,我们没有一个现成的词表可以映射,有人提出用像素值,也就是对像素进行MLM任务,但这样工作量非常大不现实。
解决的方法是训练了一个dVAE的自编码器,其中包含一个tokenizer和一个decoder。在预训练时decoder不用。tokenizer负责将图像转为visual tokens(gt)。
输入的image还会被split成patches并展成向量后传给ViT encoder,被mask掉的位置通过encoder输出的hi通过Masked Image Modeling Head预测出对应的token并和gt作比较。
beit的损失由重构损失(dVAE的tokenizer和decoder,相当于优化一个自编码器)和beit的encoder的参数,让预测的visual token和gt尽可能接近
Q1:那个head到底是什么?
A1:线性层+softmax?(之后看看代码)
如果一张图片拆分为像素再拉平送进trm可能无法处理,所以提出了patch的概念,如一张图片224*224,patch为16*16,那么就成了14*14的patches,拉平就可以给trm处理了。
和bert一样添加了一个特殊符号<cls>,它的输出给MLP作分类。
注意ViT是有监督的,输入的图片有一个对应标签的label,最后和MLP的输出作比较。
相当于是自监督形式的vit。主要用自监督的形式(类似MLM的任务)把encoder训练的能捕捉图像的语义特征,把encoder用在之后的特定任务中。
注意自监督训练时,这个自编码器是不对称的,具体指:encoder只输入未被mask掉的patch,decoder输入的是encoder的隐藏层输出和被mask掉的patch。这样会提高速度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。