–2025.12.16 从上次记录后,在10月后面就复习完了zero-to-hero章节的全部内容。有从零构建一个GPT,核心就是实现一个Transformer,然后再构建一个generator生成器,用于不断地生成文本。Tokenization,它的一个重要任务是将文本转换为模型可以理解的数值表示,即tokenize,这里实现了一个BPE算法,理解了在不同细粒度上的BPE算法,一个更贴近计算机,一个更贴近人类语言。重新实现了一个ChatGPT2的模型,它的完整路径,包括Decoder的搭建,前相传播以及自回归生成器,损失计算实现,数据加载器,引入权重共享机制,初始化参数,控制残差流动引起的方差变化,接下来便是一系列的优化,如启动TF32,启动BF16等等优化。在11月份,还对Ultralytics的源码进行了一个深入的解析,搞清了整个项目代码它们之间的层级复用关系,能够添加自定义一些模块进去,改变网络的一些运行逻辑。
–2025.10.19 复习了zero-to-hero前4章节的内容,构建自动微分了解了自动求导是如何实现的,其中包括了一个深度优先搜索算法用来查找这一路径上依赖的变量并将其添加到待求导列表中;从二元语法的统计模型到神经网络形式,二者在二元模型中精度相差无几,从结果上看是等价的,统计模型中依赖数据集中的已有模式即组合的出现频率,根据频率再去预测(抽样)下一个词,神经网络的形式则是将求得的输出先求其自然指数的值,再求其softmax概率;扩展到n元语法,此时依靠统计模型的频率变得更困难,而使用神经网络可以模拟高维的语法结构;参数初始化到batchnorm,提出了网络初始化的重要性比如加快模型收敛,让模型表现得更健壮,batchnorm的出现让训练过程和使用的batch变得耦合,即函数的输出不仅依赖输入x和函数的参数,也依赖于当前随机选择的batch量,但也可以看作是一种正则化的表现,它引入了熵,给变量增加了一点抖动;手动计算反向传播,有按元素相乘以及求矩阵的梯度两种形式,前向传播和反向传播存在一种对偶性;手动实现大语言模型中的基础tokenizer,BPE算法。
–2025.10.05 YOLOV3-SPP源码学习完了,获益良多,结合Andrew Ng关于YOLO的讲解,对YOLO有了更深入的理解。源码中最重要的就是明白了三个损失函数的计算过程,分别是置信度损失、分类损失和目标框损失,涉及到了正负样本的筛选。还学习了.cfg文件配置,搭建模型的过程,以及模型前向传播时的细节。接下来就是复习Andrew Karpathy大神的zero-to-hero系列了,YOLO源码中的NMS,K-means筛选anchor等,后续找个时间再补充学习。在学习YOLO源码的时候,许多通用可以迁移的套路,之前因为觉得这些都是训练过程的基本步骤,所以没有花心思去理清里面的逻辑,比如日志打印、scheduler等,不说要看清背后的源码逻辑,也应该对每一步代表什么应该知道,可以做到用当前的步骤与预测明白下一步骤该做什么,现在我就不清楚各个步骤之间的关联是什么,这也需要花时间去理清。
–2025.09.20 我最近有两个项目在进行,一个是YOLO系列的目标检测模型;另外一个是复习Andrew Karpathy大神的zero-to-hero系列,第一次看完zero-to-hero系列,我对反向传播的具体实现有了更具象化的理解,也对LLM的原理和预训练过程有了基本的了解。