- 博客(296)
- 收藏
- 关注
原创 【CS336】从0开始构建大模型,学习笔记合集(网上最详细的版本!连上课提问的QA都有!还做了知识扩展)
博主精心整理的CS336学习笔记系列,涵盖GPU架构优化、Triton框架应用、大模型并行化策略等核心内容(5-14课),1-3课和15-17课预计2026年4月前更新。笔记不仅包含课程讲解,还补充了公式推导、课堂QA及参考链接,旨在帮助读者深入掌握知识。目前已发布10篇详细教程,涉及模型训练、推理优化及数据策略等实战内容。欢迎关注学习!
2026-03-09 09:56:03
28
原创 为什么大模型训练优先用 bf16 而非 float16,而且需要保留 float32 的参数副本
bf16优于fp16的核心和fp32几乎一致的数值范围(8位指数),彻底避免大模型训练的上溢/下溢,无需损失缩放,训练稳定性拉满;而bf16的精度低问题,会被大模型的海量参数弥补,对收敛无显著影响。保留fp32参数副本的核心bf16/fp16精度不足,无法表示微小的参数更新步长,直接更新会导致梯度量化为0;fp32的高精度能保证优化器计算和参数更新的有效性,避免误差累积,是混合精度训练的「精度兜底」。
2026-02-05 10:00:00
1045
原创 pytorch中哪些操作是视图,哪些操作是复制
视图操作:不复制底层内存,仅修改,新张量是原张量的「视角」,修改互影响t()view();复制操作:新建内存并拷贝数据,新张量和原张量独立,修改互不影响clone()(非连续时)//花式索引;条件操作:是否复制取决于原张量状态,核心是reshape()切片to(),用3行验证代码可快速判断;PyTorch设计优先视图操作(O(1)高效),仅在无法通过元信息映射内存时才会触发复制,这是对内存和效率的优化。
2026-02-05 10:00:00
607
原创 详解 torch.finfo()
是查询浮点型张量机器属性的工具,整数型用,核心用于规避数值溢出和精度损失;最常用属性是eps(机器精度),是判断浮点相等的核心依据,绝对不能用==直接比较浮点数;比特数越多,精度越高、表示范围越大,显存/计算开销也越大PyTorch 的finfo和 NumPy 完全兼容,CUDA 浮点类型的属性和 CPU 一致。
2026-02-04 12:13:14
666
原创 pytorch返回张量元素总数量的方法 x.numel()
x.numel() 是 PyTorch 中的一个方法,用于返回张量 x 中所有元素的总数量(即张量的总大小)。在 Python 内置列表中,可以用 len(x) 获取长度,但 numel() 是多维张量的总元素数。:计算张量 x 的所有维度上的元素个数,相当于 x 的形状(shape)所有维度的乘积。在 NumPy 中,类似的方法是 x.size 或 x.size 属性。:PyTorch 的 Tensor 对象。:一个整数,表示张量中的元素总数。
2026-02-04 11:53:21
111
原创 DiskANN原理介绍、应用场景、与其他工具对比、基本使用方式
DiskANN是一款高效的大规模高维向量近似最近邻检索库,由微软研究院和华盛顿大学联合开发。其核心优势在于低内存占用、高速检索和超高精度,可支持百亿级向量的离线/在线检索。通过"内存图索引+磁盘有序向量"的混合架构,DiskANN实现了亚毫秒级检索延迟,同时保持接近100%的召回率。相比FAISS、HNSW等工具,DiskANN特别适合超大规模、内存有限的场景,广泛应用于图像搜索、推荐系统、NLP等领域。该工具提供Python/Java接口,无需GPU即可实现高性能检索,已成为工业界处理
2026-02-02 10:00:00
1308
原创 Annoy的原理、适用场景、与其他工具对比、使用示例
Annoy是轻量级近似最近邻检索库,核心优势是极简易用、索引轻量、原生支持增量添加,是Python生态中快速实现ANN检索原型的首选;核心算法是随机投影森林,放弃了复杂的图结构,以轻微的精度损失换来极致的使用体验,适配千万级以内的小体量向量检索;与DiskANN(百亿级、工业级)形成互补,原型开发选Annoy,超大规模工业落地选DiskANN,中大规模有GPU则选FAISS;余弦相似度检索时必须对所有向量做L2归一化,核心调优参数为n_trees(树的数量)和search_k(检索节点数);
2026-02-02 10:00:00
1338
原创 详解向量数据库中的PQ算法(Product Quantization)
PQ算法是Faiss、Milvus等向量数据库的核心技术之一,在保持可接受精度的同时,极大提升了大规模向量检索的效率。,通过将高维向量分割成子向量并分别量化,实现大幅度的内存压缩和快速的近似最近邻搜索。Product Quantization(乘积量化)是一种。
2026-01-19 20:28:02
920
原创 IVF(Inverted File)原理图解:高维向量的分桶加速搜索
IVF 的核心原理是“聚类分桶+局部搜索”,通过将高维向量按相似度划分到不同桶,大幅缩小搜索范围,实现高效近似最近邻搜索。其优势在于结构简单、速度快、内存占用低,缺陷是依赖聚类质量、召回率有上限。实际应用中,常通过调整K和nprobe平衡性能,或与 PQ、HNSW 等算法结合,适配不同场景(如低内存场景用 IVF-PQ,高召回场景用 IVF-HNSW)。IVF 是向量搜索的“基础工具”,理解其分桶逻辑,能更好地掌握复杂混合索引的设计思路。
2026-01-17 20:43:57
1423
原创 图解 HNSW(Hierarchical Navigable Small Worlds)原理
用“分层结构”实现快速范围定位,用“可导航小世界图”实现精准近邻查找。通过融合概率跳表的分层思想与 NSW 的贪心路由机制,HNSW 解决了传统图算法搜索慢、易陷入局部最小值的问题,成为当前向量相似度搜索的首选算法之一。实际使用中(如通过 Faiss 实现),需根据业务需求调整核心参数,平衡召回率、搜索速度与内存成本。
2026-01-17 20:00:38
999
2
原创 KDITransformer 原理与代码解析
KDI-Transformer(Kernel Dependency Integration Transformer)是一种针对Transformer架构的改进变体,核心是通过。传统自注意力的注意力权重计算基于点积(dot-product),仅捕捉两两token的直接线性依赖;机制增强注意力机制对序列依赖关系的建模能力,解决传统自注意力在长序列建模中计算复杂度高、依赖捕捉不充分的问题。(V为Value矩阵,与标准Transformer一致)。(m为低维映射维度),将输入映射为。(随机傅里叶特征近似)。
2026-01-16 10:15:00
1575
原创 如何兼容不同版本的 scikit-learn(sklearn)库,统一获取“均方根误差(RMSE)”的计算函数
最终无论 sklearn 版本是新是旧,代码中。
2026-01-16 10:00:00
800
原创 为什么分类任务的损失函数是交叉熵
在信息论中,熵(Entropy)衡量一个分布的不确定性;交叉熵(Cross-Entropy)衡量用分布QQQ去编码分布PPP的数据,需要的平均比特数HPQ−∑i1nPilogQiHPQ−i1∑nPilogQiPPP:真实标签的分布(one-hot 分布,只有真实类别对应的Pi1P(i)=1Pi1,其余为0);QQQ:模型预测的概率分布。贴合任务本质:直接衡量预测分布与真实分布的差异,符合分类任务的概率建模目标;
2026-01-15 10:13:41
826
原创 Predictions Balancing(预测平衡)的核心原理和代码实现
核心原理:Predictions Balancing 是后处理技术,通过调整预测阈值或缩放预测概率,让预测分布贴合目标分布,修正模型预测偏差;核心方法:阈值调整法(调整决策边界,适合只需修正类别预测)、概率缩放法(修正概率值,适合需要校准概率的场景);核心价值:无需重新训练模型,即可快速修正类别不平衡、域偏移导致的预测偏差,提升模型实际应用效果。
2026-01-15 10:00:00
1379
原创 伪标签(Pseudo Labeling)的核心原理和实战
self.fc2 = nn.Linear(128, 10) # 10个数字类别x = x.view(x.size(0), -1) # 展平:(64,7,7) -> (64*7*7,)return x# 初始化模型、损失函数、优化器核心原理:伪标签是半监督学习方法,用有标签数据训练初始模型,给无标签数据打高置信度伪标签,再混合训练提升模型性能;核心流程:有标签训练初始模型 → 生成高置信度伪标签 → 混合数据迭代训练;应用场景。
2026-01-14 10:15:00
2011
原创 正则化损失的原理和代码实现
核心原理:正则化通过在损失函数中加入参数惩罚项,约束参数大小,本质是“牺牲部分训练拟合度,换取更强的泛化能力”;核心好处:解决过拟合问题,提升模型泛化能力,L1还能实现特征选择,L2让模型更稳定;代码关键:正则化损失=原始损失+λ×惩罚项(L1是参数绝对值和,L2是参数平方和,偏置项一般不惩罚)。
2026-01-14 10:00:00
1943
原创 tf.feature_column.embedding_column()的底层实现原理
的核心是封装了Embedding层,本质是通过可训练的嵌入矩阵,将高维稀疏的类别ID映射为低维稠密向量;底层实现是「ID索引→查表(替代one-hot+矩阵乘法)→ 可选的多值合并」,并做了跳过显式one-hot的性能优化;嵌入矩阵是可训练参数,会随模型训练更新,最终让语义相近的类别ID对应向量距离更近。简单来说,这个接口的价值是把“高维稀疏类别特征编码”的复杂逻辑封装起来,让用户无需手动实现嵌入层,只需配置参数即可完成特征的语义编码。
2026-01-13 11:00:00
754
原创 tf.parse_example使用详解
首先需要创建一个特征描述字典(key 是特征名,value 是对应的解析规则),用或:固定长度特征(如单值的年龄、分数,或固定长度的向量);:可变长度特征(如文本词汇、多标签,解析后为 SparseTensor)。示例:"age": tf.io.FixedLenFeature(shape=(), dtype=tf.int64), # 单值int,shape=()表示标量。
2026-01-13 10:30:00
621
原创 梯度累积Trick:显存受限下的大Batch训练神器
在深度学习训练中,大BatchSize往往能带来更稳定的梯度更新和更好的模型泛化能力,但GPU显存不足的问题常常让人望而却步。梯度累积(Gradient Accumulation)作为一种经典的显存优化Trick,能让你用小Batch模拟大Batch训练效果,无需升级硬件就能解锁更大规模的模型训练,堪称资源受限场景下的"救命稻草"。
2026-01-12 11:00:00
699
原创 tf.feature_column.embedding_column()实战-如何将稀疏数据转为dense向量
稀疏数据(如用户 ID、品类标签、文本词汇等)无法直接输入模型,需先通过 tf.feature_column.categorical_column_with_* 系列接口(如 with_identity、with_hash_bucket)将其转为 稀疏 ID 列(CategoricalColumn)。关键细节:嵌入矩阵的初始值为随机值,后续会随模型训练(通过反向传播)不断优化,最终让语义 / 逻辑相近的稀疏 ID 对应到向量空间中相近的稠密向量。
2026-01-12 10:30:00
247
原创 深入浅出RLHF中的对数概率计算:从模型输出到策略梯度的核心桥梁
函数完整体现了RLHF中对数概率计算的工程逻辑:从模型logits的基础处理,到多响应维度的适配,再到响应序列的索引匹配,每一步都围绕“维度对齐”和“数值稳定”两大核心目标。维度管理优先使用Einops库,简化多维张量变换;对数概率计算优先使用,保证数值稳定性;索引操作必须保证维度严格匹配,避免梯度计算时的维度错误。
2026-01-09 11:12:48
610
原创 深入浅出RLHF中的优势函数计算:从原始奖励到归一化奖励的工程实现
原始奖励验证了“奖励→优势”的核心逻辑,但缺乏工程实用性;中心化奖励解决了“绝对奖励干扰相对评价”的问题;归一化奖励进一步标准化了奖励尺度,实现了工业级的训练稳定性;最大奖励是极端场景的特殊选择,通用性差。在大模型RLHF中,优势函数的本质是“将绝对奖励转化为相对优势”,而归一化奖励正是这一目标的最优实现——它让模型聚焦“每个prompt下的相对好坏”,而非被绝对数值或尺度差异误导,最终实现稳定、高效的策略更新。
2026-01-09 10:44:20
790
原创 深入浅出PPO损失函数:从朴素策略梯度到Clipped PPO的代码实现解析
朴素策略梯度验证了策略梯度的核心逻辑,但缺乏工程实用性;非裁剪PPO引入策略比率,为策略更新增加“锚点”;裁剪PPO通过比率裁剪和保守更新,实现了工业级的训练稳定性。
2026-01-08 21:23:20
1318
原创 KL散度的三种公式解析,含代码复现
KL散度(相对熵)用于衡量两个概率分布pxp(x)px和qxq(x)qx的“差异程度”,非对称KLp∣∣q≠KLq∣∣pKLp∣∣qKLq∣∣pKLp∥qEx∼plogpxqxKLp∥qEx∼plogqxpxx∼px \sim px∼p:表示期望是对分布pxp(x)px取的;log\loglog通常为自然对数(ln\lnln。
2026-01-08 21:18:19
1160
原创 Python 变量作用域详解:local、nonlocal 与 global 的区别
类型作用域范围声明关键字典型场景核心特点局部变量仅限当前函数内部无需声明函数内临时计算函数执行结束后销毁,外部不可访问全局变量整个程序(函数内外均可访问)global多函数共享状态(如配置参数)需在修改时声明,生命周期与程序一致非局部变量嵌套函数的外层函数局部作用域nonlocal递归计数、闭包状态保存仅用于嵌套结构,修改外层函数的局部变量,不影响全局。
2025-10-21 14:38:17
747
原创 通俗易懂地解释Bradley-Terry-Luce(BTL)模型
BTL模型通过两两对比数据计算隐形实力分,进而得出整体排名。例如三款奶茶的受欢迎度通过两两PK结果(如A赢B 60次)转化为实力分(A=1.8),使A赢B的概率(60%)与分数比一致,最终按分数排序(A>B>C)。该模型将零散对比转化为系统排名,类似体育积分制,无需直接评选最优,通过两两胜负关系即可推导整体排序。适用于多选一场景,选某款概率由其分数占比决定。
2025-09-22 20:36:11
550
原创 通俗易懂地解释 On-Policy 和 Off-Policy 的区别
强化学习中的On-Policy和Off-Policy策略在数据来源与使用方式上存在本质区别。On-Policy必须使用当前策略实时生成的数据进行训练,典型如Sarsa算法,特点是数据即时但无法复用;Off-Policy则可利用历史数据或其他策略生成的数据(如Q-Learning),数据利用率高但需处理数据偏差问题。关键差异体现在数据利用率、探索灵活性、计算复杂度等方面:On-Policy简单稳定但效率低,Off-Policy灵活高效但实现复杂。选择策略需权衡实时性与数据利用需求。
2025-09-22 19:14:30
2168
原创 【cs336学习笔记】[第14课]实战数据过滤和去重
本讲深入探讨数据集处理机制,包括过滤算法和应用方法。过滤算法部分介绍了KenLM(基于Kneser-Ney平滑的快速n-gram模型)用于语言质量评估,fastText分类器实现高效文本分类,以及DSIR通过重要性重采样进行数据选择。过滤应用涵盖语言识别、质量评估和毒性检测。去重技术则涉及布隆过滤器、MinHash和局部敏感哈希(LSH)等方法。这些技术共同构成了处理大规模语言模型数据的关键流程,兼顾效率与准确性。
2025-09-10 10:00:00
1332
原创 详解 pytorch dataload 原理及各组件代码
PyTorch DataLoader是深度学习训练中的核心数据加载工具。它通过Dataset基类管理数据,实现__len__和__getitem__方法获取样本。DataLoader负责批处理、打乱顺序和多进程加载,支持自定义collate_fn进行数据变换。官方实现提供高效的数据管道,包括内存固定(pin_memory)等优化功能。自定义简化版DataLoader展示了其核心原理:索引处理、批采样和数据处理流程。实际应用中,DataLoader能显著提升训练效率,特别是配合多进程和GPU加速时。
2025-09-09 15:35:30
810
原创 【cs336学习笔记】[第13课]训练数据策略
本文摘要探讨了训练语言模型时数据的关键作用。研究表明,数据质量远比模型架构重要,这从各大公司对训练数据的严格保密可见一斑。文章详细介绍了预训练的三个阶段(预训练、中期训练、后训练)及其数据特征,并通过BERT、GPT-2等案例分析了不同数据源(如Wikipedia、Common Crawl)的特点和处理方法,包括去重、语言识别和质量过滤等技术。特别指出即使是高质量数据源也可能存在投毒攻击等安全隐患,强调数据整理是影响模型性能的决定性因素。
2025-09-09 10:00:00
1136
原创 详解布隆过滤器
Bloom过滤器摘要: Bloom过滤器是一种空间高效的概率型数据结构,通过m位比特向量和k个独立哈希函数实现集合成员查询,支持常数时间的插入与查询。其核心特性是允许假阳性(误判存在但实际不存在),但确保“不存在”的判断绝对正确。典型应用如Web缓存快速判断URL是否在缓存中,假阳性的代价可控。当参数优化(哈希函数数k≈(ln2)·m/n)且m=8n时假阳性率约2%,m=10n时低于1%。相比传统数据结构(需Ω(n·log u)位存储),Bloom过滤器以极低空间开销(仅m位)实现高效查询,但无法存储键的额
2025-09-08 18:57:50
1151
原创 古德哈特定律(Goodhart‘s Law)
该定律由英国经济学家查尔斯·古德哈特(Charles Goodhart)在1975年提出,最初用于批判撒切尔夫人政府的货币主义政策,指出当政府试图管理金融指标时,这些指标便不再是可信的经济风向标。古德哈特定律(Goodhart’s Law)表述为“当一个指标变成了目标,它将不再是个好指标”。
2025-09-07 10:00:00
552
原创 详解 ELO 评分系统
ELO评分系统是一种衡量对弈水平的评价方法,由物理学家阿帕德・埃洛创立,最初用于国际象棋排名。其核心原理是通过预期表现与实际结果的差异来调整分数。Chatbot Arena利用ELO分数评估AI模型,方法是让用户比较两个模型对同一提示词的回复,根据用户选择更新模型分数。系统为新模型赋予初始分数(如1000分),通过公式计算预期胜率,再根据用户评价结果(胜者1分,败者0分)调整分数。文中提供了Python实现代码,包含模型添加、预期胜率计算和分数更新等功能,支持动态纳入新模型并进行实时评分。该机制能客观反映模
2025-09-06 20:41:16
2179
原创 【cs336学习笔记】[第11课]如何用好scaling law
摘要:本文探讨了大模型扩展的最佳实践,重点分析$\mu P$参数化方法在稳定扩展中的作用。通过Cerebras-GPT和MiniCPM的案例研究,展示了$\mu P$如何通过调整初始化方式(1/width缩放)和学习率(1/width缩放)实现超参数稳定性,从而减少计算资源消耗。MiniCPM进一步提出WSD学习率策略(预热-稳定-衰减),解决了传统余弦学习率无法复用早期检查点的问题。实验表明,$\mu P$结合WSD能显著提升小模型扩展效率,在1.2B-2.4B参数规模实现5倍计算节省,同时保持损失与ba
2025-09-06 11:50:30
1016
原创 图解小波变换(WT,wavelet transform)
小波变换与傅里叶变换对比分析 小波变换是一种时频分析方法,通过多尺度分解将信号分为近似分量(低频整体特征)和细节分量(高频局部特征)。与傅里叶变换(FFT)相比,小波变换具有时频局部化能力,能同时分析信号的时间和频率特性。FFT适合处理平稳信号(如固定频率正弦波),而小波变换更擅长分析非平稳信号(如突变信号)。在分解过程中,小波变换采用可变分辨率:低频部分高频率分辨率,高频部分高时间分辨率。典型应用包括信号去噪、图像压缩和故障诊断等。
2025-09-05 10:00:00
1374
原创 图解 FFT 快速傅里叶变换
本文介绍了傅里叶变换的基本原理及其在信号处理中的应用。傅里叶变换将周期信号分解为正弦/余弦函数的加权和,而非周期信号则视为无限大周期信号。快速傅里叶变换(FFT)将DFT计算复杂度从O(n²)降至O(nlogn)。通过示例展示了频域分量合成时域信号的过程,以及从时域信号中提取频域信息的方法。FFT能有效识别信号中的主要频率成分及其振幅,但存在局限性:对于非平稳信号,无法获得频率成分出现的时间信息。文中提供了Python代码实现平稳和非平稳信号的FFT分析,通过图形化展示了频域与时域的对应关系。
2025-09-04 15:46:15
1672
原创 详解 CKA(Centered Kernel Alignment)
本文介绍了CKA(中心化核对齐)方法的核心原理、数学公式和Python实现。CKA通过核函数将特征映射到高维空间,计算两个特征矩阵的相似性,取值范围为[0,1]。文章详细阐述了核矩阵构造、中心化操作和HSIC计算的数学过程,并提供了线性核和RBF核的Python实现代码,包括自动计算RBF核参数的启发式方法。CKA可用于评估神经网络特征表示、模型特征提取能力等场景,支持线性和非线性关系的比较。代码展示了如何计算随机特征矩阵的CKA值,验证了方法的有效性。
2025-09-04 10:30:00
1742
原创 【已解决】jupyter 转 python文件 时遇到 ModuleNotFoundError: No module named ‘notebook.services‘
尝试将 ipython 转成 py 文件时报错。解决方案:更新 notebook 的版本。
2025-09-03 11:15:00
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅