摘要:Transformer 模型是一种基于自注意力机制的深度学习模型,它最初被提出用于处理自然语言处理 (NLP) 任务,例如机器翻译、文本摘要等。近年来,Transformer 模型也被广泛应用于计算机视觉领域,并在图像分类、目标检测、语义分割等任务中取得了显著
模型介绍
Transformer 模型是一种基于自注意力机制的深度学习模型,它最初被提出用于处理自然语言处理 (NLP) 任务,例如机器翻译、文本摘要等。近年来,Transformer 模型也被广泛应用于计算机视觉领域,并在图像分类、目标检测、语义分割等任务中取得了显著的成果。
若将Transformer模型视为盲盒,在机器翻译任务中,输入一种语言的句子于该盲盒中将得到另一语言的句子。Transformer本质上是一个Encoder-Decoder架构。因此将Transformer拆分成Encoders和Decoders组成的模块。其中编码组件Encoder由多6层编码器组成,解码组件也是如此。
其中编码器由Self-Attention(自注意力层)和FFN(前馈神经网络-全连接层)组成。多个编码器的结构都是相同的,但具有不同的权重。解码器在编码器的基础之上,引入了一个额外的注意力层(encoder-decoder attention)。
注意力机制
注意力机制,即模拟人的注意力,将注意力放在需要关注的信息上,过滤其他无关的外部信息。输入向量q、k、v权重矩阵(可训练的参数矩阵,通过训练得到)
Q向量:你想要获取的目标
K向量:与Q向量进行比较的元素
V向量:与K向量相关且蕴含更深层的信息
自注意力机制可以减少对外部信息的依赖,捕捉数据内部相关性,模型在处理一个词时,查看整个句子/查看词与组成句子的其他词之间的关系。捕捉大规模长距离序列间的相关性,并且不依赖顺序。此外,FFN层的存在要求捕捉各token(基本单元)之间的联系,自注意力机制效果更好。自注意力机制具体流程如下:
先将一句话(序列)拆成多个词(token)。每个词得到对应的词向量(维度给定)(词嵌入算法)。词向量经过qkv权重矩阵得到QKV向量(区别自注意力和注意力)。单个词的q向量与所有其他词的k向量交互处理,经过一系列处理得到该词的自注意力输出向量(编码器的输出),从序列角度则得到自注意力输出矩阵。多头自注意力机制:单个token得到多个QKV向量(有多个qkv权重矩阵),得到多个自注意力输出向量,多个向量进行拼接,通过权重矩阵处理得到注意力输出矩阵(包含输入序列编码信息的矩阵)。优势在于多角度学习更丰富的特征。
详细流程
1. 输入表示:
将输入序列中的每个元素表示为一个向量,例如使用词嵌入 (Word Embedding) 将文本中的每个词表示为一个向量。将输入向量与位置编码向量相加,得到最终的输入表示。2. 编码器 (Encoder):
编码器由多个编码器层 (Encoder Layer) 堆叠而成。每个编码器层包含以下两个子层:自注意力机制 (Self-Attention Mechanism): 计算序列中每个元素与其他元素之间的相关性,并赋予不同的权重。前馈神经网络 (Feed-Forward Neural Network): 对每个元素进行非线性变换,从而提取更丰富的特征。编码器层的输出作为下一个编码器层的输入。3. 解码器 (Decoder):
解码器由多个解码器层 (Decoder Layer) 堆叠而成。每个解码器层包含以下三个子层:自注意力机制 (Self-Attention Mechanism): 计算序列中每个元素与其他元素之间的相关性,并赋予不同的权重。编码器-解码器注意力机制 (Encoder-Decoder Attention Mechanism): 计算解码器层的输入与编码器层的输出之间的相关性,并赋予不同的权重。前馈神经网络 (Feed-Forward Neural Network): 对每个元素进行非线性变换,从而提取更丰富的特征。解码器层的输出作为下一个解码器层的输入。4. 输出层:
对解码器层的输出进行线性变换和 Softmax 操作,得到最终的输出序列。在魔乐社区中的实践
魔乐社区中已经上传了相应的transformer版本,以及基于transformer衍生而来的各种大语言模型或视觉模型,用户可以根据自己的需要自行下载数据集并且可以根据魔乐社区中提供的数据集下载到本地然后训练出医学分割模型,或者根据自己的数据集来训练更适合自己所需的模型。
首先我们要从魔乐社区中下载模型,以vit为例(vision transformer)
可以根据自己的需要,从多种方式下载
使用的方法很简单,简单分为两种
(1)直接使用:我们可以直接在模型主页点击Use in openmind,由于openmind与魔乐社区的高度融合,我们可以直接在开发环境里使用对应的openmind library来加载所需要的模型,下图为示例
可以直接下载一个预训练好的权重(.pt文件)。
(2)下载到本地:此方法可以直接将模型下载到本地,只需要使用git工具即可将社区中的模型下载到本地使用以及微调
点击下载模型
使用git工具下载之后,可以在下载路径中找到,然后就可以直接使用了。
数据集也可以直接在魔乐社区中下载
例如直接寻找到单人人体数据集
可以直接使用git工具下载到本地进行训练。
模型的微调可以根据上文的介绍,对卷积层,池化层以及全连接层进行增加或者改变,可以多尝试来找到最适合自己的那一个微调模型。
对Vision Transformer(ViT)模型进行微调通常涉及以下步骤:
确保你已经安装了必要的库,如PyTorch、transformers和datasets。你可以使用以下命令安装它们:
加载一个预训练的ViT模型,刚刚已经在魔乐社区上下载了一个。
使用`TrainingArguments`配置训练参数,如学习率、批量大小、训练轮次等:
使用`Trainer`类进行微调
可见,我们可以很容易地利用魔乐社区来对vit进行下载使用和改进,魔乐社区大大提升了开发者的开发效率,让工作更加便捷。
体验空间
Transformer算法的灵活性和强大的上下文捕捉能力,使其在智能对话系统和文本摘要生成等领域发挥着重要作用。它能够根据上下文信息生成连贯且合理的文本序列,极大地提升了用户体验和内容创作的效率。
魔乐社区中有transformer的体验空间,可以根据输入的问题来给出回答,可以自行前往魔乐社区体验。
这是体验空间的基础设置,基于openmind可以实现模型在魔乐社区的实现。
例如:输入How many legs does a spider have?
可以得到输出Eight
输入What is the capital of China?
可以得到输出Beijing
输入Who is the next president of American ?
回答:Trump
可见,此模型可以根据输入来自己找到回答
体验空间链接:DataFun/transformer | 魔乐社区
魔乐社区大大提升了我们了解模型、使用模型的效率,且是开源社区,为日后开发者开发提供源动力!
来源:DataFunTalk