做网站如何快速推广一款产品,关于seo网站优化公司,深圳网站设计 建设元,洪梅镇网站建设知乎#xff1a;lym 链接#xff1a;https://zhuanlan.zhihu.com/p/890327005 如果可以用prompt解决#xff0c;尽量用prompt解决#xff0c;因为训练#xff08;精调#xff09;的模型往往通用能力会下降#xff0c;训练和长期部署成本都比较高#xff0c;这个成本也包… 知乎lym 链接https://zhuanlan.zhihu.com/p/890327005 如果可以用prompt解决尽量用prompt解决因为训练精调的模型往往通用能力会下降训练和长期部署成本都比较高这个成本也包括时间成本。
基于prompt确实不行情况包括格式输出不稳定、格式输出基本不对、任务不完全会、任务完全不会等情况难度逐渐加大选择上SFT微调。
业务场景基本用不到强化学习强化解决的是最后一公里的问题可以理解为有两种非常接近的输出这两种输出都非常接近目标输出此时已经解决了90%的问题强化学习会对相同的输入打压其中一种不希望的输出同时增强另一种更接近目标的希望的输出从DPO loss就可以看出。强化是用来应对细微输出差异的并且业务场景优先用DPODPO只需要pair对数据更好构造。PPO的reward model几乎没有开源的需要的数据更多超参也更多除非是逻辑或代码场景在文本场景中DPO效果是足够的。
业务数据质量最重要数据量也不能少越难的任务数据量越多
数据内容要尽量和期望输出一致这个一致既包括内容也包括格式。不要期望垃圾数据能训练出好的VLM模型不要寄希望于dalle3那种recaptioning依靠泛化能力变换格式的玩法太高级了我还把我不住。可以用 手工标注数据GPT改写(甚至可以是Vision版本) 生成质量尽可能高的业务数据。改写用的GPT原本没有解决对应任务的能力也不要怕在改写的prompt模板让它参考人工标注就行。
数据量如果模型会该类任务但仅是输出格式不稳定比如json少个括号文本输出少个\n什么的几十到上百条业务数据就够了不用考虑通用数据一般普通业务需要千条业务数据类似数据在VLM模型预训练的训练集出现过但模型对于该任务处于会与不会区间需要少量通用数据10:11份通用。如果特别难的taskVLM模型根本没见过比如文生图生成数据输出的文本也和输入图之间的关系需要重学那需要1-2w条业务数据通用数据5:1。
训练轮次我训练的task就特别难4B左右的模型甚至训练10个epoch测试集的loss还在下降。但是一般7B模型训5个epoch70B模型训练2个epoch就会开始过拟合了。下面是比较正常的收敛曲线。 当然还有些肯定不正确的曲线 数据难度可以用PPL衡量也可以看训练集上测试的效果。
多个类型数据先各自训练看效果确保各自没有问题再去混合。
训练流程 收集清洗改写增强广业务数据同一个问题可以除了文本对话还可以改写成选择判断有帮助而且这些形式更容易做评测方便确认效果。 磨刀不误砍柴工找一个小的VLM模型2B~7B按照默认微调参数对纯业务数据集上进行训练设置较高的lr1e-5和较长的epoch10轮。训练好的模型在训练集上先测试对用什么训练用什么测。在训练集上进行测试是非常重要的它可以一定程度排除数据集质量的问题也不用担心过拟合的问题同时也能确保框架底层没什么问题。别管数据质量多垃圾别管在测试集泛化性有多差在训练集上都应该有较好的学习效果。如果你的业务数据有多种形式也可以在这个阶段进行配比的消融。 确保在训练集上没问题再结合validation集上的曲线应该可以大致确认训练轮次epoch、业务数据配比、学习率、batch_size、文本长度、moe专家数量、并行配置tp pp dp等绝大部分超参。
PS在VLM训练中无论是预训练、对齐还是精调用的都是SFT loss没有Pretrain loss。学界可能比较喜欢用lora但工业届全量调的更多这俩区别不是很大lora dim设置成128/256scaling设置成64dim的05倍也能学很多东西。
如果只是输出格式不满意、不稳定那么调LLM就够。如果全新的知识那么vit和LLM以及二者间的中间层都放开比较好。参数量的大头在LLM中但如果图片业务数据和预训练数据差异较大vit放开也很重要。上vit冻住下vit放开vit解冻后明显收敛更稳定。我的任务比较难肯定就是全放开训练了。 往里面加入通用数据来维护原有通用能力在业务垂域没搞明白前一般先别考虑通用数据否则变量太多把握不住。配比从10:1开始不行可以试试5:1。通用数据包括两种一种是caption一种是instruct数据。caption数据的question基本都是”详细描述图中有什么“它在VLM预训练中是用来做一阶段的。Instruct数据的question就比较多样了比如”图中叉子右边的茶杯是什么颜色的“它一般对应预训练的二阶段微调。VLM这两个阶段虽然一阶段叫训练二阶段叫对齐但是loss形式是一样的超参可能也只有学习率的差异越往后学习率越小。全用instruct数据问题也不大但instruct数据可能信息量可能不如caption对图片描述那么丰富也更难收集一些。
caption的数据我翻译了些sharegpt4o的整理好了 https://huggingface.co/datasets/LYM2024/share_gpt4o_zh?row0 instruct数据用的ALLAVA-4V的量太大了翻译的还没整理好。 https://huggingface.co/datasets/FreedomIntelligence/ALLaVA-4V 这俩我是1:1用的没做严格消融。英文数据去llamafactory找就行中文大部分得自己动手翻译。通用 数据也可以大量用英文融合一点自己翻译的中文效果也不会太差的。
然后我发现个特别有意思的现象我的业务数据是diffusion生成的图片上面这些数据是自然图片业务数据的通用能力几乎没有被维护。解决方案 用现有VLM对业务数据作captioning因为caption的question与图无关直接取sharegpt40的就行。直接生成大量业务图片的通用数据。 用LCM的SSD或SDXL模型做Img2Img把正prompt置空guidance_scale置0最好negative输出的embedding取torch.zerosstrength强度设置0.025。用无引导生成生成有diffusion特征的图片。 训练可以分多个阶段前面用质量差一点的大量数据后面用质量高的小批量数据提升最终效果。两阶段question的词汇可以作下隔离即这两批数据的question最好有点小差异后续推理测试只用高质量数据的question。实测高质量数据的需求大会大大降低。 我个人觉得精调这种任务如果数据量大在7B小模型和72B大模型上在业务垂域上效果差异并不大因为我们一般更关心业务和垂域的性能而非要成为全面的通才。 数据质量高可以训练久一些数据质量差训练短一些可以保留更好的泛化性。我们的数据比较短训练10epoch的话输出就非常短往往不带主语。训练6epoch就会带一些所以不是validation loss下降就是好事它可能同时对应着通用loss的上升稍微遇到些长尾问题性能就会崩溃式下降。训练太短也不行容易学不会至少要保证训练5epoch看看整体的结果。 知乎lym 链接https://zhuanlan.zhihu.com/p/890327005 如果可以用prompt解决尽量用prompt解决因为训练精调的模型往往通用能力会下降训练和长期部署成本都比较高这个成本也包括时间成本。
基于prompt确实不行情况包括格式输出不稳定、格式输出基本不对、任务不完全会、任务完全不会等情况难度逐渐加大选择上SFT微调。
业务场景基本用不到强化学习强化解决的是最后一公里的问题可以理解为有两种非常接近的输出这两种输出都非常接近目标输出此时已经解决了90%的问题强化学习会对相同的输入打压其中一种不希望的输出同时增强另一种更接近目标的希望的输出从DPO loss就可以看出。强化是用来应对细微输出差异的并且业务场景优先用DPODPO只需要pair对数据更好构造。PPO的reward model几乎没有开源的需要的数据更多超参也更多除非是逻辑或代码场景在文本场景中DPO效果是足够的。
业务数据质量最重要数据量也不能少越难的任务数据量越多
数据内容要尽量和期望输出一致这个一致既包括内容也包括格式。不要期望垃圾数据能训练出好的VLM模型不要寄希望于dalle3那种recaptioning依靠泛化能力变换格式的玩法太高级了我还把我不住。可以用 手工标注数据GPT改写(甚至可以是Vision版本) 生成质量尽可能高的业务数据。改写用的GPT原本没有解决对应任务的能力也不要怕在改写的prompt模板让它参考人工标注就行。
数据量如果模型会该类任务但仅是输出格式不稳定比如json少个括号文本输出少个\n什么的几十到上百条业务数据就够了不用考虑通用数据一般普通业务需要千条业务数据类似数据在VLM模型预训练的训练集出现过但模型对于该任务处于会与不会区间需要少量通用数据10:11份通用。如果特别难的taskVLM模型根本没见过比如文生图生成数据输出的文本也和输入图之间的关系需要重学那需要1-2w条业务数据通用数据5:1。
训练轮次我训练的task就特别难4B左右的模型甚至训练10个epoch测试集的loss还在下降。但是一般7B模型训5个epoch70B模型训练2个epoch就会开始过拟合了。下面是比较正常的收敛曲线。 当然还有些肯定不正确的曲线 数据难度可以用PPL衡量也可以看训练集上测试的效果。
多个类型数据先各自训练看效果确保各自没有问题再去混合。
训练流程 收集清洗改写增强广业务数据同一个问题可以除了文本对话还可以改写成选择判断有帮助而且这些形式更容易做评测方便确认效果。 磨刀不误砍柴工找一个小的VLM模型2B~7B按照默认微调参数对纯业务数据集上进行训练设置较高的lr1e-5和较长的epoch10轮。训练好的模型在训练集上先测试对用什么训练用什么测。在训练集上进行测试是非常重要的它可以一定程度排除数据集质量的问题也不用担心过拟合的问题同时也能确保框架底层没什么问题。别管数据质量多垃圾别管在测试集泛化性有多差在训练集上都应该有较好的学习效果。如果你的业务数据有多种形式也可以在这个阶段进行配比的消融。 确保在训练集上没问题再结合validation集上的曲线应该可以大致确认训练轮次epoch、业务数据配比、学习率、batch_size、文本长度、moe专家数量、并行配置tp pp dp等绝大部分超参。
PS在VLM训练中无论是预训练、对齐还是精调用的都是SFT loss没有Pretrain loss。学界可能比较喜欢用lora但工业届全量调的更多这俩区别不是很大lora dim设置成128/256scaling设置成64dim的05倍也能学很多东西。
如果只是输出格式不满意、不稳定那么调LLM就够。如果全新的知识那么vit和LLM以及二者间的中间层都放开比较好。参数量的大头在LLM中但如果图片业务数据和预训练数据差异较大vit放开也很重要。上vit冻住下vit放开vit解冻后明显收敛更稳定。我的任务比较难肯定就是全放开训练了。 往里面加入通用数据来维护原有通用能力在业务垂域没搞明白前一般先别考虑通用数据否则变量太多把握不住。配比从10:1开始不行可以试试5:1。通用数据包括两种一种是caption一种是instruct数据。caption数据的question基本都是”详细描述图中有什么“它在VLM预训练中是用来做一阶段的。Instruct数据的question就比较多样了比如”图中叉子右边的茶杯是什么颜色的“它一般对应预训练的二阶段微调。VLM这两个阶段虽然一阶段叫训练二阶段叫对齐但是loss形式是一样的超参可能也只有学习率的差异越往后学习率越小。全用instruct数据问题也不大但instruct数据可能信息量可能不如caption对图片描述那么丰富也更难收集一些。
caption的数据我翻译了些sharegpt4o的整理好了 https://huggingface.co/datasets/LYM2024/share_gpt4o_zh?row0 instruct数据用的ALLAVA-4V的量太大了翻译的还没整理好。 https://huggingface.co/datasets/FreedomIntelligence/ALLaVA-4V 这俩我是1:1用的没做严格消融。英文数据去llamafactory找就行中文大部分得自己动手翻译。通用 数据也可以大量用英文融合一点自己翻译的中文效果也不会太差的。
然后我发现个特别有意思的现象我的业务数据是diffusion生成的图片上面这些数据是自然图片业务数据的通用能力几乎没有被维护。解决方案 用现有VLM对业务数据作captioning因为caption的question与图无关直接取sharegpt40的就行。直接生成大量业务图片的通用数据。 用LCM的SSD或SDXL模型做Img2Img把正prompt置空guidance_scale置0最好negative输出的embedding取torch.zerosstrength强度设置0.025。用无引导生成生成有diffusion特征的图片。 训练可以分多个阶段前面用质量差一点的大量数据后面用质量高的小批量数据提升最终效果。两阶段question的词汇可以作下隔离即这两批数据的question最好有点小差异后续推理测试只用高质量数据的question。实测高质量数据的需求大会大大降低。 我个人觉得精调这种任务如果数据量大在7B小模型和72B大模型上在业务垂域上效果差异并不大因为我们一般更关心业务和垂域的性能而非要成为全面的通才。 数据质量高可以训练久一些数据质量差训练短一些可以保留更好的泛化性。我们的数据比较短训练10epoch的话输出就非常短往往不带主语。训练6epoch就会带一些所以不是validation loss下降就是好事它可能同时对应着通用loss的上升稍微遇到些长尾问题性能就会崩溃式下降。训练太短也不行容易学不会至少要保证训练5epoch看看整体的结果。