Transformer神经网络详细解读与MindSpore框架实战
前言:在生成式AI席卷全球的今天,Transformer早已不是2017年论文中小众的序列建模方案,而是贯穿自然语言处理、计算机视觉、多模态大模型的通用基础架构。无论是GPT系列、BERT,还是ViT、Stable Diffusion,底层均以Transformer为核心骨架。本文将从原理拆解、核心机制分析入手,结合MindSpore框架完成Transformer的搭建、训练与推理,兼顾理论严谨性与工程实战性,适合有一定深度学习基础的开发者阅读,助力快速掌握Transformer在MindSpore中的落地应用。
一、Transformer核心原理详细解读
Transformer由Google Brain于2017年在论文《Attention Is All You Need》中提出,彻底抛弃了传统RNN、LSTM的串行计算模式,仅依靠自注意力机制实现全局依赖建模,同时支持全序列并行计算,解决了传统序列建模架构的核心痛点,成为现代大模型的基础骨架。
1.1 Transformer诞生的背景:打破序列建模瓶颈
在Transformer问世前,序列数据处理的主流方案是循环神经网络(RNN、LSTM、GRU)和卷积神经网络(CNN),但两者均存在明显缺陷:
-
RNN系列:需按时间步逐词处理序列,无法并行化,训练效率极低;同时存在梯度消失/爆炸问题,难以捕捉长序列中远距离的语义关联,依赖门控机制记忆信息,特征提取能力有限。
-
CNN系列:虽支持并行计算,但感受野有限,无法高效捕获全局序列依赖,难以适配长文本、多模态等复杂场景。
Transformer的出现彻底解决了上述问题,其核心优势在于“全局依赖建模+全并行计算”,无需递归或卷积,仅通过注意力机制即可实现序列中任意位置token的关联建模,大幅提升训练效率和模型表达能力。
1.2 Transformer整体架构拆解
标准Transformer采用编码器-解码器(Encoder-Decoder)结构,整体由嵌入层(Embedding)、位置编码(Positional Encoding)、N层堆叠的编码器(Encoder)、N层堆叠的解码器(Decoder)、输出线性层与Softmax组成,架构流程如下:
-
输入处理:源序列/目标序列通过词嵌入层转换为固定维度的向量,叠加位置编码注入序列顺序信息(Transformer无递归结构,无法天然感知序列顺序);
-
编码器编码:堆叠的编码器提取输入序列的全局上下文特征,输出统一维度的特征向量;
-
解码器生成:结合编码器输出的上下文特征与目标序列前缀,通过自回归方式生成输出序列;
-
输出映射:通过线性层将特征向量映射为词表维度,再经Softmax转换为词表概率分布,得到最终预测结果。
1.2.1 编码器(Encoder)结构
编码器由N层完全相同的子层堆叠而成(论文中N=6),每层子层包含“多头自注意力层(Multi-Head Attention)+ 前馈网络(FFN)”,且每个子层均添加残差连接(Residual Connection)和层归一化(Layer Normalization),结构为:LayerNorm(x + SubLayer(x)),核心作用是解决深度网络训练的梯度消失问题,保证模型可堆叠至数十层。
-
多头自注意力层:无掩码设计,允许每个token关注序列中所有其他token,通过多组注意力头并行计算,捕捉多维度、细粒度的全局上下文关联;
-
前馈网络:由两层全连接层组成,激活函数常用GELU或ReLU,公式为:FFN(x) = max(0, xW1 + b1)W2 + b2,作用是对每个token的特征进行独立非线性变换,增强模型表达能力。
1.2.2 解码器(Decoder)结构
解码器同样由N层子层堆叠而成,与编码器相比,每层多了一个“编码器-解码器注意力层(Cross Attention)”,且自注意力层采用掩码机制(Masked Multi-Head Attention),避免生成时泄露未来token信息。每层子层结构为:掩码多头自注意力层 → 交叉注意力层 → 前馈网络,且每层均包含残差连接和层归一化。
-
掩码多头自注意力层:通过上三角掩码屏蔽未来位置的token,确保解码器在生成第t个token时,仅依赖已生成的前t-1个token,保证自回归生成的合理性;
-
交叉注意力层:以解码器输出为Query(查询),编码器输出为Key(键)和Value(值),建模输入序列与输出序列之间的关联,让解码器能够精准关注输入序列中的关键信息;
-
前馈网络:与编码器的前馈网络结构完全一致,负责对解码器的特征进行非线性变换。
1.3 Transformer核心灵魂:自注意力机制
自注意力(Self-Attention)是Transformer的核心,其本质是通过计算序列中每个token与其他所有token的相似度,得到关联权重,再通过权重对所有token的特征进行加权求和,实现全局信息聚合。
1.3.1 单头自注意力的数学原理
单头自注意力的计算过程分为4步,核心公式清晰易懂,具体如下:
-
向量投影:将输入向量X(shape:[seq_len, d_model])分别通过三个可学习的权重矩阵Wq、Wk、Wv,投影得到Query(Q)、Key(K)、Value(V)三个矩阵,即:Q = XWq,K = XWk,V = XWv(d_model为模型输入特征维度,论文中为512);
-
相似度计算:计算Q与K的转置的点积,得到每个token与其他所有token的关联分数,再除以√dk(dk为Q/K的维度,通常为d_model/h,h为注意力头数量),防止数值过大导致Softmax饱和,即:Attention Score = QK^T / √dk;
-
权重归一化:通过Softmax函数将关联分数转换为0~1的权重分布,确保权重之和为1,即:Attention Weight = Softmax(QK^T / √dk);
-
信息聚合:使用权重分布对V进行加权求和,得到单头自注意力的输出,即:Output = Attention Weight × V。
1.3.2 多头自注意力的作用
单头自注意力仅能捕捉单一维度的语义关联,多头注意力通过将Q、K、V切分为h个独立的头(论文中h=8),并行计算每个头的自注意力,再将所有头的输出拼接后,通过一个线性层映射得到最终输出,公式为:
MultiHead(Q,K,V) = Concat(head1, head2, ..., headh)Wo,其中headi = Attention(QWiq, KWik, VWiv)
多头注意力的核心优势的是:能够同时捕捉语法、语义、指代、长距离依赖等多种关联,大幅提升模型的特征提取能力和泛化性能。
1.4 序列顺序注入:位置编码
由于Transformer的注意力机制是全局并行计算,无法天然感知序列中token的位置信息,因此需要通过位置编码(Positional Encoding)为每个token的嵌入向量注入位置特征,确保模型能够区分不同位置的token。
论文中采用正弦余弦位置编码,其核心优势是可泛化到训练时未见过的长序列,无需学习即可表达位置关系,具体公式如下:
PE(pos, 2i) = sin(pos / 10000^(2i/dmodel))
PE(pos, 2i+1) = cos(pos / 10000^(2i/dmodel))
其中,pos为token在序列中的位置(从0开始),i为向量的维度索引,dmodel为模型输入特征维度。位置编码的维度与词嵌入向量维度一致,两者直接相加后作为编码器、解码器的输入。
1.5 Transformer的架构演进与应用场景
原始Transformer为机器翻译任务设计,后续在大模型时代经历了多项关键优化,衍生出两大主流分支,同时突破NLP领域,成为全模态通用架构:
-
编码型架构(如BERT):仅保留编码器,采用双向自注意力,适用于文本分类、实体抽取、问答等理解类任务,核心创新是掩码语言模型(MLM)预训练;
-
解码型架构(如GPT系列):仅保留解码器,采用单向掩码自注意力,适用于对话生成、文本创作、代码生成等生成类任务,核心创新是自回归预训练与模型缩放定律;
-
全模态应用:ViT将图像切分为patch序列,用Transformer替代CNN处理计算机视觉任务;CLIP、GPT-4等多模态模型,将文本、图像、语音统一为序列建模,实现跨模态交互。
二、MindSpore框架介绍与环境准备
MindSpore(昇思)是华为推出的一款全场景深度学习框架,具备自动并行、高效编译、轻量化部署等优势,支持Transformer等复杂模型的快速搭建与训练,同时提供了原生的Transformer相关API,大幅降低模型开发成本。
2.1 MindSpore核心优势(适配Transformer开发)
-
原生支持Transformer架构:提供mindspore.nn.Transformer、TransformerEncoder、TransformerDecoder等API,可直接配置参数快速搭建模型,无需手动实现注意力机制、残差连接等细节;
-
高效并行计算:支持数据并行、模型并行、流水线并行,可通过简单配置实现Transformer的分布式训练,适配Ascend、GPU等硬件环境,提升训练效率;
-
易用性强:API设计简洁,与PyTorch、TensorFlow兼容性较高,开发者可快速上手,同时提供丰富的教程和示例代码,降低实战门槛。
2.2 环境准备(Windows/Linux通用)
本次实战基于MindSpore 2.3.0版本,建议使用Python 3.8~3.10,具体安装步骤如下:
2.2.1 安装MindSpore
根据自身硬件环境(CPU/GPU/Ascend),执行对应安装命令(以CPU版本为例):
pip install mindspore==2.3.0 -i https://pypi.mirrors.aliyun.com/simple/
GPU版本安装命令(需提前安装CUDA):
pip install mindspore-gpu==2.3.0 -i https://pypi.mirrors.aliyun.com/simple/
2.2.2 验证安装
执行以下代码,若正常输出MindSpore版本,说明环境安装成功:
import mindspore as ms print("MindSpore版本:", ms.__version__) # 输出:MindSpore版本: 2.3.0
2.2.3 安装依赖库
安装实战所需的辅助库(数据处理、可视化等):
pip install numpy pandas matplotlib sentencepiece -i https://pypi.mirrors.aliyun.com/simple/
三、MindSpore实现Transformer实战(文本翻译任务)
本次实战以“英→中”文本翻译任务为例,使用MindSpore原生API搭建Transformer模型,完成数据预处理、模型构建、训练与推理全流程,代码可直接复制运行,同时标注关键细节和参数说明,方便开发者理解和修改。
3.1 任务说明与数据集准备
任务:实现简单的英文句子到中文句子的翻译,使用小型英中平行语料(可自行替换为WMT14等大型数据集),数据集格式为“英文句子\t中文句子”,示例如下:
I love you 我爱你 He is a student 他是一名学生 She likes reading books 她喜欢看书
数据集预处理步骤:分词、构建词表、将句子转换为索引序列、 Padding 对齐(确保输入序列长度一致)。
3.2 数据预处理代码实现
使用sentencepiece进行分词,构建英、中两个词表,将文本序列转换为模型可接收的张量格式,具体代码如下:
import mindspore as ms
import numpy as np
import sentencepiece as spm
from mindspore import dataset as ds
# 1. 配置参数
ms.set_context(mode=ms.GRAPH_MODE, device_target="CPU") # 可改为GPU/Ascend
MAX_SEQ_LEN = 32 # 最大序列长度
SRC_VOCAB_SIZE = 3000 # 英文词表大小
TGT_VOCAB_SIZE = 3000 # 中文词表大小
PAD_ID = 0 # Padding标识
UNK_ID = 1 # 未登录词标识
BOS_ID = 2 # 句子开始标识
EOS_ID = 3 # 句子结束标识
# 2. 分词器与词表构建(以小型语料为例,实际可使用大型语料训练分词器)
def train_tokenizer(corpus_path, vocab_size, prefix):
# 训练sentencepiece分词器
spm.SentencePieceTrainer.train(
input=corpus_path,
model_prefix=prefix,
vocab_size=vocab_size,
pad_id=PAD_ID,
unk_id=UNK_ID,
bos_id=BOS_ID,
eos_id=EOS_ID,
model_type="bpe"
)
# 加载分词器
tokenizer = spm.SentencePieceProcessor()
tokenizer.load(f"{prefix}.model")
return tokenizer
# 假设语料文件为train_corpus.txt,格式为“英文\t中文”
train_tokenizer("train_corpus.txt", SRC_VOCAB_SIZE, "src_tokenizer") # 英文分词器
train_tokenizer("train_corpus.txt", TGT_VOCAB_SIZE, "tgt_tokenizer") # 中文分词器
src_tokenizer = spm.SentencePieceProcessor()
tgt_tokenizer = spm.SentencePieceProcessor()
src_tokenizer.load("src_tokenizer.model")
tgt_tokenizer.load("tgt_tokenizer.model")
# 3. 数据预处理函数
def preprocess_fn(line):
# 分割英文和中文句子
src, tgt = line.strip().split("\t")
# 分词并添加BOS/EOS标识
src_ids = [BOS_ID] + src_tokenizer.encode_as_ids(src) + [EOS_ID]
tgt_ids = [BOS_ID] + tgt_tokenizer.encode_as_ids(tgt) + [EOS_ID]
# Padding对齐
src_ids = src_ids[:MAX_SEQ_LEN] + [PAD_ID] * (MAX_SEQ_LEN - len(src_ids))
tgt_ids = tgt_ids[:MAX_SEQ_LEN] + [PAD_ID] * (MAX_SEQ_LEN - len(tgt_ids))
# 构建标签(解码器训练时,标签为tgt_ids[1:],输入为tgt_ids[:-1])
tgt_input = tgt_ids[:-1]
tgt_label = tgt_ids[1:]
return np.array(src_ids, dtype=np.int32), np.array(tgt_input, dtype=np.int32), np.array(tgt_label, dtype=np.int32)
# 4. 构建数据集
dataset = ds.TextFileDataset("train_corpus.txt", shuffle=True)
dataset = dataset.map(operations=preprocess_fn, num_parallel_workers=2)
dataset = dataset.batch(batch_size=8, drop_remainder=True) # 批量处理,批量大小为8
3.3 使用MindSpore搭建Transformer模型
MindSpore的mindspore.nn.Transformer API可直接配置参数搭建完整的Encoder-Decoder结构,无需手动实现注意力、残差连接等细节,核心参数与论文保持一致,同时支持自定义编码器、解码器,具体代码如下:
from mindspore import nn, ops
from mindspore.common.initializer import Normal
class TransformerModel(nn.Cell):
def __init__(self, d_model=512, nhead=8, num_layers=6, dim_feedforward=2048, dropout=0.1):
super(TransformerModel, self).__init__()
# 1. 词嵌入层(英文和中文分别使用独立的嵌入层)
self.src_embedding = nn.Embedding(SRC_VOCAB_SIZE, d_model, embedding_table=Normal(0.02))
self.tgt_embedding = nn.Embedding(TGT_VOCAB_SIZE, d_model, embedding_table=Normal(0.02))
# 2. 位置编码(使用正弦余弦编码)
self.positional_encoding = self._get_positional_encoding(d_model, MAX_SEQ_LEN)
# 3. Transformer核心模块(Encoder-Decoder结构)
self.transformer = nn.Transformer(
d_model=d_model, # 输入特征维度,与词嵌入维度一致
nhead=nhead, # 注意力头数量
num_encoder_layers=num_layers, # 编码器层数
num_decoder_layers=num_layers, # 解码器层数
dim_feedforward=dim_feedforward, # 前馈网络隐藏层维度
dropout=dropout, # dropout比例
batch_first=True, # 输入输出shape为(batch, seq_len, d_model)
norm_first=False # LayerNorm位于子层之后(与论文一致)
)
# 4. 输出线性层(将特征向量映射为词表维度)
self.fc_out = nn.Dense(d_model, TGT_VOCAB_SIZE, weight_init=Normal(0.02))
# 5. Dropout层(用于正则化)
self.dropout = nn.Dropout(dropout)
def _get_positional_encoding(self, d_model, max_seq_len):
"""生成正弦余弦位置编码"""
positional_encoding = np.zeros((max_seq_len, d_model))
pos = np.arange(0, max_seq_len)[:, np.newaxis]
div_term = np.exp(np.arange(0, d_model, 2) * (-np.log(10000.0) / d_model))
positional_encoding[:, 0::2] = np.sin(pos * div_term)
positional_encoding[:, 1::2] = np.cos(pos * div_term)
# 转换为MindSpore张量,添加batch维度适配输入
positional_encoding = ms.Tensor(positional_encoding, dtype=ms.float32)
return positional_encoding
def construct(self, src, tgt):
"""前向传播:src为英文序列,tgt为中文输入序列"""
# 1. 词嵌入 + 位置编码 + Dropout
src_emb = self.src_embedding(src) * ops.sqrt(ms.Tensor(self.src_embedding.embedding_size, dtype=ms.float32))
src_emb = src_emb + self.positional_encoding[:src.shape[1], :]
src_emb = self.dropout(src_emb)
tgt_emb = self.tgt_embedding(tgt) * ops.sqrt(ms.Tensor(self.tgt_embedding.embedding_size, dtype=ms.float32))
tgt_emb = tgt_emb + self.positional_encoding[:tgt.shape[1], :]
tgt_emb = self.dropout(tgt_emb)
# 2. 生成解码器掩码(掩码未来token)
tgt_mask = self.transformer.generate_square_subsequent_mask(tgt.shape[1])
# 3. Transformer前向计算
out = self.transformer(
src=src_emb,
tgt=tgt_emb,
tgt_mask=tgt_mask
)
# 4. 输出映射
out = self.fc_out(out)
return out
# 实例化模型
model = TransformerModel(
d_model=512,
nhead=8,
num_layers=2, # 简化模型,实际可改为6层
dim_feedforward=2048,
dropout=0.1
)
# 打印模型结构
print(model)
# 输出模型参数数量
param_num = sum(p.size for p in model.trainable_params())
print(f"模型参数数量:{param_num}")
关键说明:为了降低训练难度,此处将编码器、解码器层数改为2层(论文中为6层),实际应用中可根据硬件资源和任务需求调整;batch_first=True表示输入输出的shape为(batch, seq_len, d_model),更符合开发者的使用习惯。
3.4 模型训练配置
配置损失函数、优化器、学习率调度器,使用MindSpore的Trainer API简化训练流程,具体代码如下:
from mindspore import Trainer, TrainingArguments, LossMonitor
# 1. 损失函数:交叉熵损失(忽略Padding位置的损失)
loss_fn = nn.CrossEntropyLoss(ignore_index=PAD_ID)
# 2. 优化器:AdamW优化器(Transformer训练常用)
optimizer = nn.AdamW(
params=model.trainable_params(),
learning_rate=1e-4,
weight_decay=1e-5
)
# 3. 学习率调度器:线性衰减学习率
lr_scheduler = nn.LinearLR(
optimizer,
total_step=1000, # 总训练步数
start_factor=1.0,
end_factor=0.1
)
# 4. 训练参数配置
training_args = TrainingArguments(
output_dir="./transformer_mindspore", # 模型保存路径
per_device_train_batch_size=8, # 单设备批量大小
num_train_epochs=50, # 训练轮数
logging_dir="./logs", # 日志保存路径
logging_steps=10, # 每10步打印一次日志
save_steps=100, # 每100步保存一次模型
learning_rate=1e-4,
weight_decay=1e-5,
fp16=False, # 若使用GPU/Ascend,可开启fp16加速
disable_tqdm=False
)
# 5. 定义训练步骤(将模型、损失函数、优化器结合)
class TrainStep(nn.TrainOneStepCell):
def __init__(self, model, loss_fn, optimizer):
super(TrainStep, self).__init__(model, optimizer)
self.loss_fn = loss_fn
def construct(self, src, tgt_input, tgt_label):
out = self.model(src, tgt_input)
# 调整输出shape,适配交叉熵损失(batch*seq_len, vocab_size)
loss = self.loss_fn(out.reshape(-1, TGT_VOCAB_SIZE), tgt_label.reshape(-1))
return loss
# 实例化训练步骤
train_step = TrainStep(model, loss_fn, optimizer)
# 6. 启动训练
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
compute_metrics=None, # 可自行添加准确率等指标
callbacks=[LossMonitor(10)] # 每10步监控损失
)
trainer.train()
3.5 模型推理与结果验证
训练完成后,加载模型,实现英文句子到中文句子的翻译推理,采用自回归生成方式(逐词生成中文句子),具体代码如下:
def translate_sentence(sentence, model, src_tokenizer, tgt_tokenizer, max_seq_len=MAX_SEQ_LEN):
"""
翻译函数:输入英文句子,输出中文翻译结果
"""
model.set_train(False) # 切换为推理模式
# 1. 预处理输入句子
src_ids = [BOS_ID] + src_tokenizer.encode_as_ids(sentence) + [EOS_ID]
src_ids = src_ids[:max_seq_len] + [PAD_ID] * (max_seq_len - len(src_ids))
src_ids = ms.Tensor(src_ids, dtype=ms.int32).expand_dims(0) # 添加batch维度
# 2. 自回归生成中文句子
tgt_ids = [BOS_ID] # 初始化为句子开始标识
for _ in range(max_seq_len - 1):
# 构建当前输入(添加batch维度,Padding对齐)
tgt_input = ms.Tensor(tgt_ids + [PAD_ID] * (max_seq_len - len(tgt_ids)), dtype=ms.int32).expand_dims(0)
# 模型推理
out = model(src_ids, tgt_input)
# 取最后一个token的预测结果,选择概率最大的词
next_token = ops.argmax(out[0, len(tgt_ids)-1, :], axis=0).asnumpy().item()
# 添加到生成序列中
tgt_ids.append(next_token)
# 若遇到EOS_ID,停止生成
if next_token == EOS_ID:
break
# 3. 解码生成的序列,得到中文句子
translated_sentence = tgt_tokenizer.decode(tgt_ids[1:-1]) # 去掉BOS和EOS
return translated_sentence
# 加载训练好的模型(若未训练完成,可使用随机初始化模型测试推理流程)
# model = ms.load_checkpoint("./transformer_mindspore/checkpoint-100.ckpt", model)
# 测试翻译效果
test_sentences = [
"I love you",
"He is a student",
"She likes reading books",
"Transformer is a powerful model"
]
for src_sent in test_sentences:
tgt_sent = translate_sentence(src_sent, model, src_tokenizer, tgt_tokenizer)
print(f"英文:{src_sent}")
print(f"中文:{tgt_sent}")
print("-" * 50)
推理说明:由于使用小型语料和简化模型,翻译效果可能不够精准,实际应用中可通过增加训练数据量、提升模型层数、延长训练轮数等方式优化;同时可添加 beam search 等解码策略,提升生成句子的流畅度。
3.6 MindSpore Transformer分布式训练简介
当数据量较大、模型参数较多时,可使用MindSpore的分布式训练功能提升效率。MindSpore提供了原生的分布式Transformer接口,只需配置全局的data_parallel和model_parallel属性,即可完成分布式并行策略的配置,支持Ascend 910和GPU环境。
核心配置思路:通过TransformerOpParallelConfig配置并行参数,设置pipeline_stage数目实现流水线并行,开启优化器切分节省内存,具体可参考MindSpore官方文档中的分布式训练示例,此处不再展开。
四、常见问题与避坑指南
4.1 模型训练相关问题
-
梯度消失/爆炸:可调整学习率(建议使用1e-4~1e-5)、增加残差连接(MindSpore Transformer已默认实现)、使用预归一化(设置norm_first=True);
-
训练loss不下降:检查词表构建是否正确、数据预处理是否规范(如BOS/EOS标识是否添加)、模型参数初始化是否合理(建议使用Normal初始化);
-
内存不足:减小批量大小、降低模型维度(d_model)、减少编码器/解码器层数,或使用MindSpore的内存优化策略(如梯度累积、优化器切分)。
4.2 MindSpore API使用问题
-
batch_first参数:默认值为False,输入输出shape为(seq_len, batch, d_model),若习惯(batch, seq_len, d_model)格式,需设置为True;
-
掩码生成:解码器的掩码需使用generate_square_subsequent_mask方法生成,避免手动构建掩码时出现错误;
-
位置编码:MindSpore未默认实现位置编码,需手动生成,本文提供的正弦余弦编码可直接复用。
4.3 推理效果优化建议
-
增加训练数据量:使用WMT14等大型英中平行语料,提升模型泛化能力;
-
采用更优的解码策略:替换贪心搜索为beam search,设置beam_size=3~5,提升生成句子的流畅度和准确性;
-
模型微调:使用预训练的Transformer模型(如MindSpore Hub中的BERT、GPT模型)进行微调,大幅提升任务性能。
五、总结与扩展
本文详细拆解了Transformer的核心原理,包括自注意力机制、编码器-解码器结构、位置编码等关键模块,同时结合MindSpore框架完成了文本翻译任务的全流程实战,从数据预处理、模型搭建、训练到推理,代码可直接复用和修改。
Transformer的核心优势在于全局并行计算和强大的全局依赖建模能力,而MindSpore框架通过原生API简化了Transformer的开发流程,同时提供高效的并行计算能力,适配各类硬件环境,助力开发者快速实现复杂模型的落地。
扩展方向:
-
模型优化:尝试Flash Attention、稀疏注意力等优化方法,提升长序列处理效率;
-
任务扩展:将模型适配到文本分类、问答、图像分类(ViT)等任务;
-
多模态探索:结合MindSpore的多模态API,实现文本-图像的跨模态建模。
后续将持续更新Transformer的进阶优化技巧和MindSpore框架的高级用法,欢迎关注交流!如果本文对你有帮助,麻烦点赞、收藏、评论支持一下~
附录:参考资料
-
Transformer原始论文:《Attention Is All You Need》
-
MindSpore官方文档:https://www.mindspore.cn/docs/zh-CN/r2.3.0rc2/api_python/nn/mindspore.nn.Transformer.html
-
MindSpore分布式训练教程:https://www.mindspore.cn/tutorials/experts/zh-CN/r1.9/parallel/transformer.html
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)