文章链接:https://arxiv.org/pdf/2412.05271
发布时间:2024.12
Copyright (c) Wang-Luning. All Rights Reserved.
在模型架构上和之前基本无变化,仍然遵从ViT-MLP-LLM的范式。主要改进点在于训练过程和数据。
stage1:MLP Warmup
在本步中,ViT和LLM都被冻结,只训练MLP Projector。训练使用ChatML风格的数据,目标仍为NTP(Next Token Prediction),该步骤能快速使得MLP学会对齐模态的能力
stage1.5:ViT Incremental Learning
本步ViT和MLP Projector都是可训练的,训练数据和loss跟上一步一样。本步骤的目的是提升vision encoder提取视觉特征的能力,使得其能提取到更综合的信息,尤其是那些数据中较少出现的特征(如多语言OCR等)。该步训好的ViT可以和不同LLM组合,而无需重新训练(使得当已有训好的vision encoder时就不用重新执行这一步了)
基于这种观察(连接不同LLM训出来的ViT提取的visual features是具有通用性的,其他LLM也能理解),文章提出一种progressive scaling strategy,来将ViT+MLP训练这一步标准化:可以先连接一个冻结的较小的LLM(如20B)来以较低成本高效训练ViT+MLP,训好后即可直接把ViT和更大模型连接(如72B),无需重复训练。这样就大幅提升了资源利用效率,可以在多个模型搭配下重复利用已训好的部分。
stage2:Full Model Instruction Tuning
包括ViT、MLP、LLM在内的全参数微调,使用高质量的多模态指令微调数据。
另外,还引入了一些训练增强手段:
Random JPEG Compression
为了避免训练时过拟合并提升模型在现实中的表现,对于训练数据采用随机的JPEG压缩(quality level: 75~100),来模拟网络图片的质量衰减,从而提升模型鲁棒性
Loss Reweighting
一般的NTP Loss(Next Token Prediction)使用token averaging策略,也即对于batch(含有多个samples)内的所有token的loss直接取平均,使得每个token对于最终loss的贡献权重是均等的。然而,这样会使得梯度更受到那些较长的samples的影响,导致模型性能下降。因此,为了避免对于较长或较短的response的bias,可以使用sample averaging策略,也即每个sample内部的tokens的loss先根据该sample的response长度做平均,然后再将各个sample的loss做平均,这样可以使得每个sample对于总loss的贡献都是均等的,无论其response长短。
下面表达式中,Li,wi表示token i的loss和权重,x代表token i所在的样本的response长度:

在InternVL 2.5的训练中,采用一种折中的square averaging,取wi=1x0.5,从而更好地平衡具有不同长度的样本的贡献(较长的样本贡献权重会比短的更大一些,但大的不那么多)