我用C从头构建了一个深度学习库,可以训练语言模型 [P]

Reddit r/MachineLearning 工具

摘要

我用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等框架核心机制的知识。
查看原文

相似文章

CS336:从零开始的语言建模

Hacker News Top

斯坦福大学提供一门综合课程CS336,学生将从零开始构建语言模型,涵盖数据收集、Transformer构建、训练和评估。