四个经典的深度学习与 Transformer 基础问题Cross entropy loss 计算公式softmax 计算公式2017 年的transformer attention is all you need中位置编码怎么加的多头self-attention 的维度变化是怎样的比如【1,10,768】的变量输入怎么得到输出的1. Cross Entropy Loss (交叉熵损失) 计算公式交叉熵用于衡量两个概率分布之间的差异。在分类任务中通常用来衡量真实标签分布ppp与模型预测分布qqq之间的差异。多分类问题公式L−∑i1Cyilog⁡(y^i)L -\sum_{i1}^{C} y_i \log(\hat{y}_i)L−i1∑C​yi​log(y^​i​)CCC类别总数。yiy_iyi​真实标签的 One-hot 编码如果属于第iii类则为111否则为000。y^i\hat{y}_iy^​i​模型预测样本属于第iii类的概率通常经过 Softmax 输出。二分类问题公式Binary Cross Entropy, BCEL−[ylog⁡(y^)(1−y)log⁡(1−y^)]L -\left[ y \log(\hat{y}) (1 - y) \log(1 - \hat{y}) \right]L−[ylog(y^​)(1−y)log(1−y^​)]yyy真实标签000或111。y^\hat{y}y^​预测为正类111的概率。2. Softmax 计算公式Softmax 函数的作用是将一个包含任意实数的向量通常是模型最后一层的原始输出 Logits映射为一个概率分布。向量中每个元素的值都被压缩到(0,1)(0, 1)(0,1)之间并且所有元素的和为111。公式Softmax(zi)ezi∑j1KezjSoftmax(z_i) \frac{e^{z_i}}{\sum_{j1}^{K} e^{z_j}}Softmax(zi​)∑j1K​ezj​ezi​​ziz_izi​输入向量zzz中的第iii个元素。KKK向量的长度即类别总数。eee自然对数的底数。(注在实际工程实现中为了防止指数爆炸引发数值溢出通常会在分子分母中同时减去输入向量的最大值zizi−max⁡(z)z_i z_i - \max(z)zi​zi​−max(z))。3. Transformer 中的位置编码 (Positional Encoding) 是怎么加的在 2017 年的原始论文《Attention Is All You Need》中位置编码是通过按元素相加 (Element-wise Addition)的方式融入模型的而不是拼接 (Concatenation)。具体过程输入 Token 经过 Embedding 层后会得到一个维度为[seq_len, d_model]的词向量矩阵XXX。接着模型会生成一个维度完全相同的绝对位置编码矩阵PEPEPE。两者直接相加InputXembeddingPEInput X_{embedding} PEInputXembedding​PEPE 矩阵的生成公式正余弦交替PE(pos,2i)sin⁡(pos100002i/dmodel)PE_{(pos, 2i)} \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i)​sin(100002i/dmodel​pos​)PE(pos,2i1)cos⁡(pos100002i/dmodel)PE_{(pos, 2i1)} \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)PE(pos,2i1)​cos(100002i/dmodel​pos​)pospospos当前 Token 在序列中的绝对位置例如0,1,2...0, 1, 2...0,1,2...。iii特征维度索引对应dmodeld_{model}dmodel​中的第2i2i2i或2i12i12i1个位置。dmodeld_{model}dmodel​模型的隐藏层维度如 512 或 768。这种设计的巧妙之处在于它通过不同频率的三角函数让模型不仅能感知绝对位置还能通过线性组合推导出相对位置关系同时保持了维度不变。4. 多头自注意力 (Multi-Head Self-Attention) 的维度变化假设输入变量XXX的维度为[1, 10, 768]即[batch_size, seq_len, d_model]。为了便于说明我们假设注意力头数h12h 12h12这是 768 维模型的标准配置如 BERT-base 或 GPT-2那么每个头的维度dk768/1264d_k 768 / 12 64dk​768/1264。以下是张量在计算过程中的完整维度变换轨迹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_heads和head_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^TQ⋅KT):QQQ[1, 12, 10, 64]乘以KTK^TKT[1, 12, 64, 10]。得到 Score 矩阵[1, 12, 10, 10]。缩放与 Softmax:除以dk\sqrt{d_k}dk​​(即648\sqrt{64}864​8)并在最后一个维度长度为 10上应用 Softmax。维度保持[1, 12, 10, 10]。加权求和 (Score⋅VScore \cdot VScore⋅V):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 堆叠层数的稳定。