给定批量序列表示 X(形状:[batch, seq, d_model])与权重矩阵 W_Q、W_K、W_V、W_O(均为 d_model×d_model),实现 Masked Multi-Head Self-Attention。
将最后一维按头数 num_heads 均分,每头维度 d_k = d_model / num_heads。
计算步骤:
1) Q = X @ W_Q,K = X @ W_K,V = X @ W_V。
2) 将 Q、K、V reshape 为 [batch, num_heads, seq, d_k]。
3) 计算注意力分数 scores = (Q @ K^T) / sqrt(d_k),其中 K^T 表示每头在最后两维做转置得到 [batch, num_heads, seq, seq]。
4) 使用下三角因果掩码(只能看见当前及更早位置):掩掉上三角元素(置为一个很小的负数)。
5) 在最后一维做 softmax 得到权重,注意数值稳定性(减去每行最大值再做 exp)。
6) attention = softmax @ V(形状 [batch, num_heads, seq, d_k])。
7) 拼回 [batch, seq, d_model] 后,再右乘 W_O。
输出保留两位小数,结果需转换为 Python List。