尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
nanoGPT 逐行讲解——CausalSelfAttention
CausalSelfAttention第29-76行—— 最重要class CausalSelfAttention(nn.Module):def __init__(self, config):super().__init__()assert config.n_embd % config.n_head 0# QKV 投影一个线性层同时计算 Q, K, Vself.c_attn nn.Linear(config.n_embd, 3 * config.n_embd, biasconfig.bias)# 输出投影self.c_proj nn.Linear(config.n_embd, config.n_embd, biasconfig.bias)# 正则化self.attn_dropout nn.Dropout(config.dropout)self.resid_dropout nn.Dropout(config.dropout)self.n_head config.n_headself.n_embd config.n_embdself.dropout config.dropout# Flash Attention 检查PyTorch 2.0self.flash hasattr(torch.nn.functional, scaled_dot_product_attention)if not self.flash:# 因果掩码确保只能看到左边的tokenself.register_buffer(bias, torch.tril(torch.ones(config.block_size, config.block_size)).view(1, 1, config.block_size, config.block_size))def forward(self, x):B, T, C x.size() # Batch, Time, Channel# 1. 投影得到 Q, K, Vq, k, v self.c_attn(x).split(self.n_embd, dim2)# 2. 多头重塑[B, T, C] → [B, heads, T, head_dim]k k.view(B, T, self.n_head, C // self.n_head).transpose(1, 2)q q.view(B, T, self.n_head, C // self.n_head).transpose(1, 2)v v.view(B, T, self.n_head, C // self.n_head).transpose(1, 2)# 3. 计算注意力if self.flash:# 高效实现PyTorch 2.0y torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_maskNone,dropout_pself.dropout if self.training else 0,is_causalTrue)else:# 手动实现att (q k.transpose(-2, -1)) * (1.0 / math.sqrt(k.size(-1)))att att.masked_fill(self.bias[:,:,:T,:T] 0, float(-inf))att F.softmax(att, dim-1)att self.attn_dropout(att)y att v# 4. 合并多头输出y y.transpose(1, 2).contiguous().view(B, T, C)# 5. 输出投影y self.resid_dropout(self.c_proj(y))return y数据流详解输入: [B, T, C] (Batch , Sequence, Embedding Dim)│▼┌─────────────────────────────────────┐│ c_attn: Linear(C → 3*C) ││ 一次投影同时得到 Q, K, V │└─────────────────────────────────────┘│▼┌─────────────────────────────────────┐│ 重塑为多头 ││ [B, T, 3*C] → [B, heads, T, hs] ││ 其中 hs C / heads │└─────────────────────────────────────┘│▼┌─────────────────────────────────────┐│ Attention(Q, K, V) ││ softmax(QK^T / √hs) V │└─────────────────────────────────────┘│▼┌─────────────────────────────────────┐│ 合并多头 输出投影 ││ [B, heads, T, hs] → [B, T, C] │└─────────────────────────────────────┘为什么叫Causal因果因为掩码矩阵 self.bias 是下三角矩阵[[1, 0, 0, 0],[1, 1, 0, 0],[1, 1, 1, 0],[1, 1, 1, 1]]这确保位置 i 只能看到位置 0~i看不到未来。
RELATED

相关推荐

MLP / Feed-Forward Network

MLP / Feed-Forward Network

MLP / Feed-Forward Network(第78-92行)class MLP(nn.Module):def __init__(self, config):super().__init__()# 输入投影:C → 4Cself.c_fc nn.Linear(config.n_embd, 4 * config.n_embd, biasconfig.bias)self.gelu nn.GELU() # 激…

📅 2026/10/9 5:45:15
Cookie-Session、JWT与OAuth 2.0:主流登录凭证方案深度对比与选型指南

Cookie-Session、JWT与OAuth 2.0:主流登录凭证方案深度对比与选型指南

在Web应用和API开发中,身份认证是保障系统安全的第一道防线。很多开发者一提到登录认证,第一反应就是“用Token”,但Token只是众多凭证方案中的一种。在实际项目中,你是否遇到过Session共享的难题?是否纠结于JWT的无状…

📅 2026/10/7 5:38:22
Transformer底层原理(二)Self-Attention 的数学本质

Transformer底层原理(二)Self-Attention 的数学本质

引言:上一篇我们用"一次看完全句、按相关性加权汇总"建立了注意力的直觉,并写了一个加权平均版的小例子。但那个例子有个明显的漏洞:它没有任何可学习的参数。相似度直接由词向量点积决定,模型学不到"该关注什么&q…

📅 2026/10/8 9:44:46
MORE NEWS

更多资讯

📰

记忆机制:对话内与跨对话的记忆

很多人对大模型记忆有一个根深蒂固的误解:以为对话多了,模型就"认识"你了,就"记得"你上周说过什么。这个错觉很危险,因为它把工程的归工程的、模型的归模型的,全搅在了一起。今天我把这件事讲清楚…

📰

激光共聚焦显微镜:从原理到应用的全面解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

一文读懂Prometheus+Grafana监控体系(进阶篇)

本文深入探讨PrometheusGrafana监控体系(进阶篇),涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。最近在处理DevOps与运维相关项目时,PrometheusGrafana监控体系(进阶篇)成为团队讨论最…

📰

关于ELK日志分析平台搭建(进阶篇),你需要知道的一切

本文深入探讨ELK日志分析平台搭建(进阶篇),涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。很多团队在DevOps与运维场景中都会遇到与ELK日志分析平台搭建(进阶篇)相关的挑战。本文结合生产环境经验…

📰

Pinyon Shift 原生渲染器深度解析:从PM4命令流到EDRAM、Resolve与纹理解码的完整指南

【免费下载链接】pinyon-shift A playable preview of Forza Horizon static recompilation 项目地址: https://gitcode.com/gh_mirrors/pi/pinyon-shift 点击查看 免费下载 Pinyon Shift 把 Xbox 360 版《Forza Horizon》重新编译为 PC 原生程序,其核心…

📰

英语副词详解

一、什么是副词?副词是修饰动词、形容词、其他副词、介词短语、从句或整个句子的词。它的核心功能是提供额外的信息,通常回答以下问题:如何 (How)? 何时 (When)? 何地 (Where)? 到什么程度 (To what extent)? 以及为什么 (Why)?你可以把…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬