news 2026/5/7 17:12:02

四个经典的深度学习与 Transformer 基础问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四个经典的深度学习与 Transformer 基础问题

四个经典的深度学习与 Transformer 基础问题

  1. Cross entropy loss 计算公式
  2. softmax 计算公式
  3. 2017 年的transformer (attention is all you need)中位置编码怎么加的
  4. 多头self-attention 的维度变化是怎样的?比如【1,10,768】的变量输入,怎么得到输出的?

1. Cross Entropy Loss (交叉熵损失) 计算公式

交叉熵用于衡量两个概率分布之间的差异。在分类任务中,通常用来衡量真实标签分布ppp与模型预测分布qqq之间的差异。

多分类问题公式:
L=−∑i=1Cyilog⁡(y^i)L = -\sum_{i=1}^{C} y_i \log(\hat{y}_i)L=i=1Cyilog(y^i)

  • CCC:类别总数。
  • yiy_iyi:真实标签的 One-hot 编码(如果属于第iii类则为111,否则为000)。
  • y^i\hat{y}_iy^i:模型预测样本属于第iii类的概率(通常经过 Softmax 输出)。

二分类问题公式(Binary Cross Entropy, BCE):
L=−[ylog⁡(y^)+(1−y)log⁡(1−y^)]L = -\left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right]L=[ylog(y^)+(1y)log(1y^)]

  • yyy:真实标签(000111)。
  • y^\hat{y}y^:预测为正类(111)的概率。

2. Softmax 计算公式

Softmax 函数的作用是将一个包含任意实数的向量(通常是模型最后一层的原始输出 Logits)映射为一个概率分布。向量中每个元素的值都被压缩到(0,1)(0, 1)(0,1)之间,并且所有元素的和为111

公式:
Softmax(zi)=ezi∑j=1KezjSoftmax(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}Softmax(zi)=j=1Kezjezi

  • ziz_izi:输入向量zzz中的第iii个元素。
  • KKK:向量的长度(即类别总数)。
  • eee:自然对数的底数。

(注:在实际工程实现中,为了防止指数爆炸引发数值溢出,通常会在分子分母中同时减去输入向量的最大值:zi=zi−max⁡(z)z_i = z_i - \max(z)zi=zimax(z))


3. Transformer 中的位置编码 (Positional Encoding) 是怎么加的?

在 2017 年的原始论文《Attention Is All You Need》中,位置编码是通过按元素相加 (Element-wise Addition)的方式融入模型的,而不是拼接 (Concatenation)。

具体过程:
输入 Token 经过 Embedding 层后,会得到一个维度为[seq_len, d_model]的词向量矩阵XXX。接着,模型会生成一个维度完全相同的绝对位置编码矩阵PEPEPE。两者直接相加:
Input=Xembedding+PEInput = X_{embedding} + PEInput=Xembedding+PE

PE 矩阵的生成公式(正余弦交替):
PE(pos,2i)=sin⁡(pos100002i/dmodel)PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i)=sin(100002i/dmodelpos)
PE(pos,2i+1)=cos⁡(pos100002i/dmodel)PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i+1)=cos(100002i/dmodelpos)

  • pospospos:当前 Token 在序列中的绝对位置(例如0,1,2...0, 1, 2...0,1,2...)。
  • iii:特征维度索引(对应dmodeld_{model}dmodel中的第2i2i2i2i+12i+12i+1个位置)。
  • dmodeld_{model}dmodel:模型的隐藏层维度(如 512 或 768)。

这种设计的巧妙之处在于,它通过不同频率的三角函数,让模型不仅能感知绝对位置,还能通过线性组合推导出相对位置关系,同时保持了维度不变。


4. 多头自注意力 (Multi-Head Self-Attention) 的维度变化

假设输入变量XXX的维度为[1, 10, 768],即[batch_size, seq_len, d_model]
为了便于说明,我们假设注意力头数h=12h = 12h=12(这是 768 维模型的标准配置,如 BERT-base 或 GPT-2),那么每个头的维度dk=768/12=64d_k = 768 / 12 = 64dk=768/12=64

以下是张量在计算过程中的完整维度变换轨迹:

Step 1: 线性映射生成 Q, K, V
输入XXX[1, 10, 768]分别乘以三个权重矩阵WQ,WK,WVW^Q, W^K, W^VWQ,WK,WV(形状均为[768, 768])。

  • Q,K,VQ, K, VQ,K,V形状均变为:[1, 10, 768]

Step 2: 拆分为多头 (Split Heads)
将最后一个维度d_model拆分为num_headshead_dim,并进行张量转置,以便后续按头进行并行矩阵乘法。

  • Reshape:[1, 10, 768]→\rightarrow[1, 10, 12, 64]
  • Transpose:[1, 10, 12, 64]→\rightarrow[1, 12, 10, 64][batch_size, num_heads, seq_len, head_dim]

Step 3: Scaled Dot-Product Attention
在每个头上独立计算注意力。

  • 计算注意力分数 (Q⋅KTQ \cdot K^TQKT):
    QQQ[1, 12, 10, 64]乘以KTK^TKT[1, 12, 64, 10]
    得到 Score 矩阵:[1, 12, 10, 10]
  • 缩放与 Softmax:
    除以dk\sqrt{d_k}dk(即64=8\sqrt{64}=864=8),并在最后一个维度(长度为 10)上应用 Softmax。维度保持[1, 12, 10, 10]
  • 加权求和 (Score⋅VScore \cdot VScoreV):
    Score 矩阵[1, 12, 10, 10]乘以VVV[1, 12, 10, 64]
    得到多头注意力输出:[1, 12, 10, 64]

Step 4: 拼接多头 (Concatenate)
将所有头的结果拼回原始序列维度。

  • Transpose (把头数移回去):[1, 12, 10, 64]→\rightarrow[1, 10, 12, 64]
  • Reshape (展平):[1, 10, 12, 64]→\rightarrow[1, 10, 768]

Step 5: 最终线性映射 (Output Projection)
将拼接后的张量乘以输出权重矩阵WOW^OWO(形状[768, 768]),进行特征融合。

  • 最终输出维度[1, 10, 768]

总结来说,输入是[1, 10, 768],经过 MHA 内部复杂的张量切分、转置乘法和拼接后,输出依然保持严格的[1, 10, 768],这保证了 Transformer 堆叠层数的稳定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 17:11:53

C++ map核心用法:从入门到精通

一、上期回顾掌握 set/multiset:底层红黑树、自动排序、元素唯一 / 可重复、只能迭代器遍历。今天学 map/multimap,真正工程开发用得最多的键值对容器。二、map 核心概念map:存储 key-value 键值对底层依旧红黑树key 唯一、自动按 key 升序排…

作者头像 李华
网站建设 2026/5/7 17:09:09

基于MCP协议构建多模态AI工具集:从原理到实战部署

1. 项目概述:一个多模态AI的“万能遥控器” 如果你正在构建一个AI应用,并且厌倦了为每一个新功能——比如生成一张图、搜索一段资料、或者把文字变成语音——都去单独对接一套API、写一堆胶水代码,那么这个项目可能就是你在找的“瑞士军刀”…

作者头像 李华
网站建设 2026/5/7 17:07:56

串口助手完整指南:跨平台串口调试工具使用详解

串口助手完整指南:跨平台串口调试工具使用详解 【免费下载链接】SerialPortAssistant This project is a cross-platform serial port assistant. It can run on WINDOWS, linux、android、macos system. 项目地址: https://gitcode.com/gh_mirrors/se/SerialPor…

作者头像 李华
网站建设 2026/5/7 17:07:03

ThingsBoard MQTT数据上报进阶:如何设计高效的遥测数据JSON结构?

ThingsBoard MQTT数据上报进阶:高效遥测数据JSON结构设计实战 在物联网项目开发中,数据上报的效率直接影响系统整体性能。当设备数量达到数百甚至上千,每个设备又包含多个传感器时,如何设计合理的JSON数据结构就成为了架构设计的…

作者头像 李华
网站建设 2026/5/7 17:06:49

拯救中文电子书:Calibre路径翻译问题的终极解决方案

拯救中文电子书:Calibre路径翻译问题的终极解决方案 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址: htt…

作者头像 李华