基础学习:(7)nanoGPT 剩下的细节
文章目录
- 前言
- 3 继续巴拉结构
- 3.1 encode 和 embedding
- 3.2 全局layernorm
- 3.3 lm_head(language modeling) 和 softmax
- 3.4 softmax 和 linear 之间的 temperature和topk
- 3.5 weight tying
前言
在 基础学习:(6)中, 在运行和训练代码基础上,向代码结构进行了挖掘.并且按照训练和运行过程, 扣了一些细节.但是和周围朋友(感谢 suntianlong)讨论中发现还有不会的地方.因此打算进一步深挖. 接上一个链接:https://blog.csdn.net/mikhailbran/article/details/147217336?spm=1001.2014.3001.5501

3 继续巴拉结构
为了能彻底理解nanogpt,这里继续对结构进行挖掘,尽量消除理解偏差.
3.1 encode 和 embedding
(1) encode
在我们输入提示词(prompt)后 inference 过程首先经过了编码, 由于我们已经有了 一个 meta.pkl, 所以代码走截图箭头过程.

新的提示词可以进行encode, 其实encode的方法非常多,不必拘泥.
# encode the beginning of the prompt
if start.startswith('FILE:'):with open(start[5:], 'r', encoding='utf-8') as f:start = f.read()
start_ids = encode(start)
x = (torch.tensor(start_ids, dtype=torch.long, device=device)[None, ...])
下图就是encode 之后的结果

(2) embedding
我们在论文里能看到embedding, 和常见的NLP 任务一样,我们首先会使用词嵌入算法(embedding algorithm),将输入文本序列的每个词转换为一个词向量。实际应用中的向量一般是 256 或者 512 维, nanogpt 中用"n_embd"进行了约束,也就是768,也就是隐藏层的宽度 在BERT、T5 中,这通常叫 hidden_size.
所以我们能看到这行代码:
tok_emb = self.transformer.wte(idx) # token embeddings of shape (b, t, n_embd)
但是光有词语本身的信息是不够的, 比如语句一般是连续的,主语 谓语 宾语 都是有顺序关系,甚至 如果一个词和另外一个词距离较远,大概率就没有实际关系. 所以nanogpt 这里(其实transformer 也是这么干的) 又计算了词的位置关系
pos_emb = self.transformer.wpe(pos) # position embeddings of shape (t, n_embd)
因此有了大家常看的一张图

这里列举一些 常见的n_embd 大小:
| 模型 | n_embd |
|---|---|
| GPT-2 small | 768 |
| GPT-2 medium | 1024 |
| GPT-2 large | 1280 |
| GPT-2 XL | 1600 |
| GPT-3 (175B) | 12288 |
注意我们这里进行prompt比较简单, 就是 “药老”

所以我们此时b = 1(batch size) t=2(token size)
也因此,形成的 x 就是 1, 2 , 768的shape

至于embedding 如何实现, 有很多,比如用sin cos ,这样可以完美的实现线性组合和加减.不赘述.
(3) dropout
此处还有个细节,dropout.在的到 x 前会过一个dropout.老生常谈了,随机丢数据,提高模型行泛化程度避免过拟合.
3.2 全局layernorm
这里又有个细节, 明明12个block 都计算完了,每层block 都有自己的 layernorm 最后在 182 行代码处又加了一个layernorm
我查了下GPT-2、GPT-3、GPT-4 都保留了这层 ln_f. 以及BERT:encoder 输出后也接 LayerNorm 都是为了稳定输出分布、提高泛化.

3.3 lm_head(language modeling) 和 softmax
transformer论文中有一个 linear 和 softmax
在模型init 时候以及就那个定义好



注意在经过linear之前,我们的x都是 [1,2,768] 的shape,什么意思,就是我们的 x 都是通过768个channel 来进行描述.不是我们人类认识的token.好比将蛋白质分解为了氨基酸. 所以linear 就是要根据字典

将 x 映射为 字典中的哪个字段,当程序运行到这里可以清晰看到logits 已经由用768个维度表示的向量转化为了vacab 字典中的每个 token 的原始得分或者置信度.

但是这个置信度不是概率,因此最后经过softmax 就是概率分布
3.4 softmax 和 linear 之间的 temperature和topk
如果你仔细看代码你就会发现,还有一点tricky的内容就是 红框中的内容,先处以了temperature 再用了 top_k. top_k好理解,就是选出k个最大概率的结果.但是这个 temperature 有讲究.

这是softmax 公式

如果处以温度,就是

实际上其的作用就是调整形状
假设我们有logits = [5.0, 1.0, -1.0]
那么不同温度有:
| 温度 | softmax(logits / T) ≈ |
|---|---|
| 0.5 | [0.99, 0.009, 0.001] |
| 1.0 | [0.88, 0.12, 0.01] |
| 2.0 | [0.60, 0.30, 0.10] |
看图就能知道

当 T < 1:大的 logit 被“放大”,小的被“压缩”,分布变陡,更倾向高置信 token , 先的预测更保守, 因为置信度高的更高,置信度度低的更低.
当 T > 1:所有 logit 被“压缩”,差距变小,softmax 更平滑,因为置信度高的压低了,置信度度低的被太高了.因此容易采样到原本低概率的 token(因为) ,因此预测结果更发散,更有创造性
3.5 weight tying
权重共享,这里是指 wte 和 m_head 权重是相同的

这里有个17年的论文: https://arxiv.org/pdf/1608.05859v3
根据这个论文的思路:
1 linear 和 m_head 两者的维度是一样的,所以从尺寸上一样
Embedding: [vocab_size , n_embd]
Output head: [n_embd , vocab_size]
2 embedding 和 output head 虽然过程不一样,但是数学过程上是可逆.
3 论文用了很多 模型尝试,发现都没有退化,且部分效果还挺好.
最后该论文证明这个效果确实可以,所以大家都这么用了
相关文章:
基础学习:(7)nanoGPT 剩下的细节
文章目录 前言3 继续巴拉结构3.1 encode 和 embedding3.2 全局layernorm3.3 lm_head(language modeling) 和 softmax3.4 softmax 和 linear 之间的 temperature和topk3.5 weight tying 前言 在 基础学习:(6)中, 在运行和训练代码基础上,向代…...
【HDFS】verifyEC命令校验EC数据正确性
verifyEC命令是HDFS里用于验证EC文件正确性的一个工具。这是一个非常实用的工具,能帮助我们确定EC的数据内容是否正确,并且如果不正确的话,还有可能会触发reportBadBlock给NN,让NN进行块的重构。 本文先介绍一下verifyEC命令的使用方法,再描述其实现原理细节。 一、命令…...
YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响
在目标检测领域,标签噪声与尺度敏感问题始终是制约模型性能提升的"阿喀琉斯之踵"。2025年CVPR最佳论文提出的尺度动态损失函数(Scale-based Dynamic Loss, SDL),通过构建自适应损失调节机制,不仅实现了对YOLOv11检测精度的指数级提升,更重新定义了损失函数的设…...
Spark-SQL连接Hive总结及实验
一、核心模式与配置要点 1. 内嵌Hive 无需额外配置,直接使用,但生产环境中几乎不使用。 2. 外部Hive(spark-shell连接) 配置文件:将hive-site.xml(修改数据库连接为node01)、core-site.xml、…...
ROS 2的跨平台优势:国产芯片与Ubuntu系统的深度协同
一、国产硬件全场景适配:从教育到工业的ROS 2革命 瑞芯微三剑客性能解析 芯片架构特性ROS 2优化方案典型延迟/算力RK3399双核A72四核A53启用rmw_fastrtps内存池隔离通信延迟≤1.5msRK3588四核A766TOPS NPUrknn_ros2中间件实现算法热加载目标检测15ms4KRK3576六核A…...
Linux Wlan-四次握手(eapol)框架流程
协议基础 基于 IEEE 802.1X 标准实现的协议 抓包基础 使用上一章文章的TPLINK wn722n v1网卡在2.4G 频段抓包(v2、v3是不支持混杂模式的) eapol的四个交互流程 根据不同的认证模式不同,两者的Auth流程有所不同,但是握手流程基…...
web组件和http协议
1.web组件 2.自定义元素 3.影子DOM 4.HTML模板 5.http协议 6.tcp ip协议...
软件工程师中级考试-上午知识点总结(下)
6. 知识产权和标准化 软件著作权客体:指的是受软件著作权保护的对象,即计算机程序和相关文档。知识产权具有严格的地域性。不受保护期限制:著名权、修改权、保护作品完整权;注意的是,发表权受保护期限制。专利权在期满…...
IO流--字节流详解
IO流 用于读写数据的(可以读写文件,或网络中的数据) 概述: I指 Input,称为输入流:负责从磁盘或网络上将数据读到内存中去 O指Output,称为输出流,负责写数据出去到网络或磁盘上 因…...
Cesium学习笔记——dem/tif地形的分块与加载
前言 在Cesium的学习中,学会读文档十分重要!!!在这里附上Cesium中英文文档1.117。 在Cesium项目中,在平坦坦地球中加入三维地形不仅可以增强真实感与可视化效果,还可以提升用户体验与交互性,…...
FPGA 中 XSA、BIT 和 DCP 文件的区别
在 FPGA(现场可编程门阵列)开发中,XSA、BIT 和 DCP 文件是常见的文件类型,它们在功能、用途、文件内容等方面存在明显区别,以下是详细介绍: 1. XSA 文件 定义与功能 XSA(Xilinx Shell Archiv…...
Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
当前EXSI上虚拟机所在的单独数据磁盘空间满了,需要对空间进行扩容,我们先在主机对磁盘容量进行调整,然后在系统里面对磁盘空间进行拓展,这些操作需要保留数据并且不改变现有的磁盘格局。 遵循大致操作流程是: 1.先登录…...
Java排序算法百科全书:原理、实现与实战指南
一、排序算法全景视图 1. 算法分类体系 graph TDA[排序算法] --> B[比较排序]A --> C[非比较排序]B --> B1[基本排序]B1 --> B11[冒泡排序]B1 --> B12[选择排序]B1 --> B13[插入排序]B --> B2[高效排序]B2 --> B21[快速排序]B2 --> B22[归并排序]B…...
开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据
Author :PNJIE DATE: 2025/04/21 V0.0 前言 该项目旨在使用Matlab处理LTspice的.raw文件,包括动态计算和绘图,部分脚本基于LTspice2Matlab项目: PeterFeicht/ltspice2matlab: LTspice2Matlab - 将LTspice数据导入MATLAB github地址&#x…...
(二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)
框架:GrafanaPrometheusMysqld_exporter 一、监控查看端安装 Grafana安装-CSDN博客 普罗米修斯Prometheus监控安装(mac)-CSDN博客 1.启动Grafana服务 brew services start grafana 打开浏览器输入http://localhost:3000进入grafana登录…...
c++基础·列表初始化
目录 一、列表初始化的核心优势 二、基础数据类型与数组初始化 1. 基础类型初始化 2. 数组初始化 三、类与结构体初始化 1. 构造函数匹配规则 2. 注意事项 四、标准容器初始化 五、聚合类型(Aggregate Types)初始化 1. 聚合类型定义 2. 初始化…...
RK3588上编译opencv 及基于c++实现图像的读入
参考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安装依赖包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…...
论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Alignment: A Comprehensive Survey 人工智能对齐:全面调查 https://arxiv.org/pdf/2310.19852 https://alignmentsurvey.com/ https://www.doubao.com/cha…...
element-ui中的上传组件el-upload非自动上传监听不到success
当设置了:auto-upload"false" 监听不到success回调 要用自定义请求去监听 :http-request"requestUploadFile" //设置 auto-upload为false,要自定义请求http-request //:auto-upload"false" //:http-request"requestUploadFi…...
Git创建空分支并推送到远程仓库
new-empty-branch是新分支的名称 完全空提交(Git 2.23)【推荐】 git switch --orphan new-empty-branch git config user.email "youexample.com" git config user.name "Your Name" git commit --allow-empty -m "初始空提交…...
Github中项目的公开漏洞合集
前言 最近在搜CVE的时候,意外发现了GitHub Security Advisories。 可能对一些人来说,已经是老东西了。但我还是第一次见到。 觉得挺好用的,就分享出来。 GitHub Security Advisories GitHub Security Advisories 是 GitHub 提供的一项重要…...
蚂蚁全媒体总编刘鑫炜再添新职,出任共工新闻社新媒体研究院院长
2025年4月18日,共工新闻社正式宣布聘任蚂蚁全媒体总编刘鑫炜为新媒体研究院院长。此次任命标志着刘鑫炜在新媒体领域的专业能力与行业贡献再次获得权威机构认可。 刘鑫炜深耕新媒体领域多年,曾担任中国新闻传媒集团新媒体研究院院长、蚂蚁全媒体总编等职…...
吴恩达强化学习复盘(2)K-Means初始化|K的选择|算法优化
K-Means初始化 K-Means 算法的第一步是随机选择位置作为初始聚类中心(new one through newk),但如何进行随机猜测是需要探讨的问题。一般需要多次尝试初始猜测,以期望找到更好的聚类结果。 K 值选择及初始聚类中心选取方法 K 值…...
SQL优化案例分享 | PawSQL 近日推出 Lateral Join 重写优化算法
一、Lateral 查询语法介绍 Lateral 查询是SQL中的一种连接方式,它允许FROM子句中的子查询引用同一FROM子句中前面的表的列。虽然这种特性提供了强大的表达能力,但在某些场景下可能导致性能问题。PawSQL优化器近日实现了一种针对特定类型Lateral Join的重…...
电子电器架构 ---软件定义汽车的电子/电气(E/E)架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...
ONLYOFFICE协作空间3.1发布:虚拟数据房间中基于角色的表单填写、房间模板、改进访客管理等
全新升级的 ONLYOFFICE 协作空间有着约 40 项新功能和改进,将您的文档协作和管理体验提升到全新高度。阅读本文,了解所有优化功能。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目,专注于高级和安全的文档处理,可提供文本文档、…...
Docker如何更换镜像源提高拉取速度
在国内,由于网络政策和限制,直接访问DockerHub速度很慢,尤其是在拉取大型镜像时。为了解决这个问题,常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源,并提供当前可用的镜像源。 换源方法 方法1&#x…...
深入理解 HTML5 Web SQL 数据库:用法、现状与替代方案
一、引言 在 Web 开发的领域中,客户端存储一直是一个关键的话题。HTML5 带来了多种客户端存储的解决方案,其中 Web SQL 数据库曾经是一个备受关注的选项。尽管如今它已被废弃,但了解其原理、使用方法以及为何被替代,对于 Web 开发者来说仍然具有重要的意义。本文将深入探讨…...
【C++教程】C++中为什么优先使用 cout/cin流
在 C 中,优先使用 cout/cin 流而非 C 风格的 printf/scanf,主要出于以下设计理念和实际优势: 1. 类型安全(Type Safety) cout/cin 是类型安全的 流操作符(<< 和 >>)通过运算符重载自…...
示波器探头状态诊断与维护技术指南
一、探头性能劣化特征分析 信号保真度下降 ・时域表现:上升沿时间偏离标称值15%以上(如1ns探头测得≥1.15ns) ・频域特性:-3dB带宽衰减超过探头标称值20%基准稳定性异常 ・直流偏置电压漂移量>5mV(预热30分…...
