梁博,有个问题,大模型行业经常听到一个术语SFT,而且我发现还挺乱的,能不能解释下。
答:SFT,这个就是指令微调,分为广义SFT和狭义SFT。广义SFT就是大模型通过预训练后,要提高其指令跟随,回答一些特定问题的能力,需要经过的阶段,这类数据都是各式各样的,不限定领域,长的样子大概是这样的:
P: “从这段文章中提取作者和出版年份。”
R: “作者是 [XXX],出版年份是 [YYY]。”
P: “什么是区块链?用五年级学生能听懂的方式解释。”
R: “想象一个公共账本...”
通常具备回答简洁,结果正确,因此这个阶段的数据质量要求较高,多样性也要高。一般都需要深度处理。不是知乎,Quora这种提问回答对数据直接拿来用。
第二个就是狭义SFT,这个是在一些特定领域的垂直大模型,为了具备回答垂直领域的问题,经过的一个“特训”,一般数据长的是这个样子的。
P: “患者,男,35岁,持续低烧三天,伴有干咳,白细胞计数 11.0×10⁹/L。请给出前三个鉴别诊断。”
R: “1. 支原体肺炎。 2. 流行性感冒。 3. 急性支气管炎。
P: “患者,女,35岁,持续胡言乱语,手脚抽搐。请给出前三个鉴别诊断。”
R: “1. 精神障碍。 2. 缺氧。 3. 惊恐。
SFT的过程,一般采用PEFT技术思路(例如:Low-Rank Adaptation),预训练的参数W 整体不动,只是学习一个小矩阵W*,最终微调结果是W+W*。这样可以针对比如法律学习一个 W*,医疗学习一个W*,最后想怎么组合都行,不会损坏预训练的结果。
以上是我的理解,仅供参考,我也不专业,最好还是请教专业人士,谢谢。