Seikaijyu's picture
Update README.md
b210c21 verified
metadata
license: mit
language:
  - zh
datasets:
  - Seikaijyu/DCoT

说明

此微调仅用于测试思维链,即CoT(Chain-of-Thought)的效果,而我在理解CoT时认为CoT的重点在于思维发散,所以我对CoT语料做了一些改进,我把这种改进后的CoT称为DCoT(Divergent-Chain-of-Thought)即发散性思维链。

此微调也用于测试这一改进,在进行state tuning微调之前我其实尝试过lora微调,但是指令遵循却不尽人意,语料和模型的契合度太高,初始loss就很低,导致可能模型学不到格式这一点,所以我最后决定使用state tuning这一peft方法进行微调,同时这也是保证RWKV模型对格式进行遵循的最好方法之一,并且它能保证模型不会因为微调而遗忘(因为不会微调模型本身权重)。

PS: state tuning ≈ prompt tuning, prefex tuning

微调配置

微调使用autodl上租赁的单卡A40 48G。

配置项
说明
语料(已开源) 使用5904条基于Gemini-1.5-Pro蒸馏出的单轮DCoT语料,经过人工正则批量筛洗,每条语料的长度在2000-4820token之间,大部分回答集中在2000token以上。
此数据集只包含了一些chat提问,如:
“Java是什么?”
“老鼠喜欢吃奶酪吗?”
这样的问题,不包含数学,格式,角色扮演等prompt。
peft state tuning
quant 使用int8量化微调
micro batch size 4
gradient accumulation 2,以保证微批次和梯度累计相乘最少达到8,增强模型微调效果
loss mask 启用
lr state tuning微调标准值:1-0.01
finetune epoch 2
finished loss 0.549287

结论

微调DCoT(或者CoT)可以用于展示其思考过程以得知模型理解什么,不理解什么,同时,一定程度上可以增强模型能力,但是如果模型本身就没有在预训练中包含的内容,这样的思考只会让你看到奇怪的中间过程

当然,我也测试过热门问题,如:“9.8和9.11哪个大?”这样的问题在RWKV的过程表示中则显得更加奇怪,甚至有时不会回答大或者小。 这基本归咎于RWKV6-v2.1数据集的数学知识很少,除了和训练语料有关系,和词表也有关系,在RWKV6的词表中,从0-99的数字都有一个对应的词元,这显然会让模型分不清0-99之间的区别,以及如“1122”这样的数字和其它如“119”的区别,这样的词表和语料问题共同导致了RWKV6的数学能力低下的发生。

如图: image/png

image/png

image/png

另外,模型的最终回答似乎并不一定会遵守之前的思考过程,可能会在最终回复时回复完全不同的内容,这点在使用prompt让Gemini-1.5-pro,GPT4o,gemma2-27B,Claude3.5Sonnet等闭源或者开源大模型进行思考时也会出现,个人认为这是因为模型只思考一次,在回答时发现之前的思考只考虑了回答提问的因素,与自身道德,回复逻辑不够相符,所以完全不依赖思考过程,重新回答了一遍,在此情况下,以上思考完全作废。 但是,因为我对CoT进行了调整,主要目的从分步执行转变为了思维发散,所以我认为可以通过多次发散思维并进行多步CoT得到多个思考过程,让模型进行路由选择可以极大幅度降低此问题的触发概率,而缺点则是会极大程度降低输出速度。

运行方式

本地运行:RWKV-Runner

服务器部署:ai00

附展示回答图

image/png

image/png