神经流
这是一个用于绘制 Mistral 7B 中间层输出的 Python 脚本。运行脚本时,它会生成一个 512x256 的图像,表示模型每一层的输出。
概念很简单:收集每一层的输出张量,将它们归一化到 0 到 1 之间,并将这些值绘制为热图。生成的图像揭示了惊人的结构。我发现这对于在微调模型时直观检查输出非常有帮助。
在训练过程中可视化模型
以下是未经微调的原始 Mistral 7B 的可视化结果。
在小型微调数据集上故意过拟合模型会产生以下输出。问题从第 10 层左右开始,并影响后续层。
这种可视化的真正价值在于比较训练前后输出时出现的模式。通过定期可视化模型输出,可以随时间推移制作模型中间输出的动画。单个层内的故障可能会影响更高层。虽然很难解释可视化中的结构含义,但当输出分布偏离初始状态时,在视觉上很容易察觉。
https://github.com/valine/NeuralFlow/assets/14074844/1f2e50ea-d64d-4f37-a991-f968399e29bd
图像的结构
这种可视化的分辨率和结构需要额外解释。Mistral 7B 对单个标记的中间输出是 32 层中每层的 4096 维张量。4096x32 的图像不适合可视化。为解决这个问题,我将图像分成 512 个块并垂直排列。结果是一个 512x256 的图像,可以很好地显示在横向屏幕上。
其他讨论和模型
这个工具是作为独立研究项目的一部分开发的。应 r/locallama 一些用户的要求,代码已经整理并在此仓库中提供。你可以在这里找到原始讨论: r/locallama 上的帖子
最后,这里是我使用这种可视化作为指导训练的几个模型。我认为这些模型所训练的行为泛化效果非常好。
- https://huggingface.co/valine/OpenPirate
- https://huggingface.co/valine/MoreHuman
- https://huggingface.co/valine/OpenAusten
- https://huggingface.co/valine/OpenSnark
- https://huggingface.co/valine/OpenDracula
常量
在运行脚本之前,你需要更改两个文件路径:
model_folder = "/models/OpenHermes-2.5-Mistral-7B"
image_output_folder = "/home/username/Desktop/"
这很容易理解,将 model_folder 设置为 Mistral 7B 的位置,将 image_output_folder 设置为你想保存图像的路径。