"微调"这个词我误解了挺久。
听上去像是要把模型回炉重造一遍,拿几万条数据、烧几天显卡,出来一个全新的东西。所以每次有人跟我说"我们微调了一下",我脑子里都是机房和电费。
后来自己要做一个很小的改动:让模型回答我们站的问题时,固定用某种口吻,别动不动就"当然可以!很高兴为您解答"。就这点事,我翻文档翻到了 LoRA。
它的做法跟我想的完全不一样。原来那个模型一个字都不改,原封不动放着;旁边额外挂一小块参数,只训练这一小块。用的时候两块一起生效,不用的时候把小块摘掉,模型还是原来那个。
那一小块能有多小?常见的是几 MB 到几十 MB。原模型动辄好几个 GB。差着两三个数量级。
我喜欢拿便利贴比这个:书不用重印,在某一页贴张纸条,写"这段按这么说",翻到这页的人会看见纸条,撕掉书还是那本书。
当然这个比喻也不太准。便利贴是贴给看书的人看的,LoRA 那块东西是混进计算里去的;而且它影响的不一定是"某一页",可能是一片。我讲给别人听的时候补过好几次,补到后来就不太想用这个比喻了,但一时又找不到更顺口的。
PEFT 是这类办法的统称,意思是"只动一小部分参数",LoRA 是其中最常用的一种。名字记不住无所谓,知道有"不全训"这条路就行。
对我们那种需求,它合适得有点好笑:不用准备海量数据,几百条示例差不多;不用专门租卡,一张消费级的卡跑个把小时;训坏了把那小块删掉重来,原模型一点没伤。要是按我原先理解的"回炉重造",这点口吻上的小事根本不值得做。
有个坑顺带记一下:换基础模型之后,原来那块小块不能直接拿来用,得重新弄。我第一次升级完直接挂上去,回答变得莫名其妙,查了半天才想起这茬。
发在 VidDown 技术博客,偶尔也写点自己没完全弄明白的东西。
其实我也不确定上面这么讲严不严谨,尤其"便利贴"那部分。反正我自己是这么把它记住的。