当前位置: 首页 > news >正文

Qwen2.5模型结构

self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) 这个是用来干嘛的

输出层,词汇投影层,将模型输出的隐藏状态向量映射回词表空间,用于预测下一个token

# 预测 logits,未经过 softmax

lm_logits = self.lm_head(hidden_states)  # shape: [B, L, vocab_size]

之后再通过 softmax 转换为每个 token 的概率。

class Qwen2Model(Qwen2PreTrainedModel):

    def __init__(self, config):

        super().__init__(config)

        self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size)

        self.layers = nn.ModuleList([

            Qwen2DecoderLayer(config) for _ in range(config.num_hidden_layers)

        ])    #这里由config文件决定的有很多很多层

        self.norm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)

每一层结构

class Qwen2DecoderLayer(nn.Module):

    def __init__(self, config):

        ...

        self.self_attn = Qwen2Attention(config)

        self.mlp = Qwen2MLP(config)

        self.input_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)

        self.post_attention_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)

    def forward(self, hidden_states, ...):

        residual = hidden_states

        hidden_states = self.input_layernorm(hidden_states)

        hidden_states, _ = self.self_attn(hidden_states, ...)

        hidden_states = residual + hidden_states

        residual = hidden_states

        hidden_states = self.post_attention_layernorm(hidden_states)

        hidden_states = self.mlp(hidden_states)

        hidden_states = residual + hidden_states

        return hidden_states, ...

self.mlp = Qwen2MLP(config) 这个是什么

标准Transformer FFN

class TransformerFFN(nn.Module):

    def __init__(self, embed_dim, hidden_dim):

        super().__init__()

        self.linear1 = nn.Linear(embed_dim, hidden_dim)

        self.relu = nn.ReLU()

        self.linear2 = nn.Linear(hidden_dim, embed_dim)

    def forward(self, x):

        return self.linear2(self.relu(self.linear1(x)))

相关文章:

  • 【前端笔记】CSS 选择器的常见用法
  • C++ 析构函数
  • goland无法debug
  • 源雀SCRM开源·AI企微客服|RAG知识中枢+自训练闭环
  • 屏蔽力 | 在复杂世界中从内耗到成长的转变之道
  • 在shell中运行RDD程序
  • layui下拉框输入关键字才出数据
  • c++中“”符号代表引用还是取内存地址?
  • 手写 Vue 源码 === 完善依赖追踪与触发更新
  • 数组和集合
  • 【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
  • NHANES指标推荐:AISI
  • Qwen2-VL详解
  • cocos中加入protobuf和编译protobuf的方法
  • 软件设计师2025
  • SecureCRT SFTP命令详解与实战
  • Unity3D 游戏内存优化策略
  • 模拟设计中如何减小失配
  • 淘宝按图搜索商品(拍立淘)Java 爬虫实战指南
  • 罗氏线圈抗干扰特性测试方法研究
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策
  • 数据中心业务今年预增50%,丹佛斯:中国是全球最重要的市场
  • 观察|印巴交火开始升级,是否会升级为第四次印巴战争?
  • 外交部:应美方请求举行贸易代表会谈,中方反对美滥施关税立场没有变化
  • 央行:将支持资本市场两项货币政策工具的额度合并使用
  • 全军军级以上单位新任纪委书记监委主任培训班结业