Qwen2.5简要全流程以及Q&A

1 输入prompt 得到input id

input id: [B,L] # batch size , lenth

2 embeding之后得到 input_embeds: [B,L,D] # demensions

3 进入Transformer层

先通过linear层得到shape不变的 QKV

多头注意力 分割Dimension , kv变成 [B,H,L,head_dim] h是head,head_dim * head = Dimension

(如果有kvcache的话):

new key [B, H, 1 head_dim]

past key [B,H,L_prev,dim]

concat:[B,H,L_prev+1,dim]

Attn输出 [B,L,D]

outputs = self.transformer(input_ids, ...)

final_hidden_states = outputs[0] # shape: [B, L, D]

logits = self.lm_head(final_hidden_states) # shape: [B, L, vocab_size]

self.transformer 是由多层 Qwen2Block(带 attention + feedforward)堆叠组成,每层更新一次 hidden state。最终最后一层输出的 hidden state 就是 final_hidden_states。

logits = lm_head(final_hidden_states)

→ [B, L, vocab_size]

(值是每个位置对每个词的预测得分)

遇到到是哪个token_id之后 用tokenizer.decode()得到最终的词

lm_head是什么

语言建模头(Language Modeling Head)

一个线性层,将输出的hidden_states映射到词表维度

vocab_size = 151936, hidden_size = 4096

self.lm_head = nn.Linear(4096, 151936, bias=False)

得到logits之后还有一个sampling的过程

greedy sampling 直接取最大值

next_token = ops.argmax(next_token_logits, axis=-1) # [B]

Top-k / Top-p Sampling:

用 softmax 得到概率

probs = ops.softmax(next_token_logits, axis=-1) # [B, vocab_size]

根据策略采样

next_token = sample_from(probs, top_k=50, top_p=0.95, temperature=1.0)

top_k 取前k个概率大的

top_p 累积概率小于0.95

相关推荐
COOCC13 小时前
PyTorch 实战:Transformer 模型搭建全解析
人工智能·pytorch·python·深度学习·神经网络·目标检测·transformer
海底火旺4 小时前
JavaScript 原型探秘:深入理解 .constructor 属性
前端·javascript·深度学习
www_pp_4 小时前
# 利用迁移学习优化食物分类模型:基于ResNet18的实践
人工智能·深度学习·迁移学习
悠悠海风4 小时前
目标检测中的损失函数(二) | BIoU RIoU α-IoU
人工智能·深度学习·目标检测
清风序来8 小时前
一,开发环境安装
人工智能·深度学习
pljnb14 小时前
循环神经网络(RNN)
人工智能·rnn·深度学习
摸鱼仙人~15 小时前
深度学习优化器和调度器的选择和推荐
人工智能·深度学习
进取星辰17 小时前
PyTorch 深度学习实战(39):归一化技术对比(BN/LN/IN/GN)
人工智能·pytorch·深度学习
摸鱼小能手~18 小时前
TextCNN 模型文本分类实战:深度学习在自然语言处理中的应用
深度学习·自然语言处理·分类