我用C从头构建了一个深度学习库,可以训练语言模型 [P]
摘要
我用C从头构建了一个深度学习库,支持张量操作、自动求导和神经网络模块,并用它训练了一个基于莎士比亚数据的小型语言模型。
我的目标是从零开始训练一个语言模型(SLM),因此不允许使用任何机器学习库。所以我收集了实现所需的一切:从张量操作(视图、运算、分配)到自动求导(一个有向无环图,保留导致某个输出张量的先前操作和输入,这也让我们能够应用反向传播,所以我还要实现偏导数函数以计算每个权重的梯度),再到神经网络模块(组织权重/激活、损失函数、优化器——实现了SGD和AdamW),以及解码器部分(层归一化、多头注意力、前馈网络)。此外,我还实现了基于AVX2的快速矩阵乘法来加速运算。
利用这个库,我成功训练了一个仅有200万参数的小型语言模型。它是一个4层解码器,使用了tiny_shakespear数据集,我认为结果还不错。由于无法在帖子中上传图片,我会直接粘贴输出:
Corpus: 743500 bytes (669150 train, 74350 validation)
TinyLM: L=4 C=192 H=6 T=128 V=256, 1902976 parameters (1.903M)
Training: steps=0 batch=1 lr=0.0003 checkpoint=tiny_lm.chk (resumed)
validation_loss=0.02989
--- generation ---
hello to the name of action. Soft you now! The fair Ophelia! Nymph, in thy orisons be all my sins remember'd. To be, or not to be, that is the question: Whether 'tis nobler in the mind to suffer the slings and arrows of of outrageous fortune, or to take arms against a sea of troubles and by opposing end them.
查看仓库:https://github.com/nisbenz/TensorLib
总的来说,这是一个很酷的项目,我学到了很多关于PyTorch或ggml等框架核心机制的知识。
相似文章
自己从零写扩散语言模型比我想的简单多了[P]
开发者分享了一个极简的750万参数扩散语言模型,用莎士比亚文本从头训练,并开源代码供学习。
从零开始在8GB显存上训练LLM。我开心
构建了一个仓库,用于在8GB显存上从零训练一个微型语言模型(25M参数),支持MTP,但指出mHC和BitNet的局限性。
我以独立研究项目的形式,从零开始开发了一个拥有2.7亿参数的语言模型
一个从零开始在英文维基百科上训练、并经过指令微调以用于对话式AI的2.7亿参数语言模型,作为独立研究项目开发。
CS336:从零开始的语言建模
斯坦福大学提供一门综合课程CS336,学生将从零开始构建语言模型,涵盖数据收集、Transformer构建、训练和评估。
@KirkDBorne: "如何构建并微调小型语言模型:面向初学者、研究人员和非程序员的逐步指南…
一份关于构建和微调小型语言模型的逐步指南,专为初学者、研究人员和非程序员设计,包含动手实践示例和Colab笔记本。