Month: August 2024
-
LLM原理和技术系列内容摘要总结
NLP技术发展有较长时间的历史了,这篇文章主要介绍最新的基于Transformer网络架构的语言模型相关的最近几年的较新的技术,以下为相关的技术摘要和总结,如有问题和疑问或不正确的地方,欢迎一起讨论沟通并更新,同时欢迎读者提出改进的意见和建议,希望去做的更好。 1、基于文本数据的预处理,包括各种分词方法实现的分词器(Tokenizer),从简单的基于标点符号的分词,到复杂一些的基于词根词源处理以及一些数据的清理操作的高级分词,再进一步到基于WordPiece(主要在BERT中使用)和Byte Pair Encoding(主要在GPT中使用)的基于统计特性的面向大模型应用的词汇表构建方法,特备是后两者可以支持未登录词(OOV)的处理,而且是大语言模型常用的分词器,基于分词器就可以基于nn.Embedding(vocab_size, embedding_dim)层去构建词嵌入层(Module)以支持大模型的输入了,这种嵌入层和大模型的其他关键模块如Self Attention等一起参与参数的更新。 2、Attention is all you need. 介绍了Transformer在构建序列关系的双向上下文特性建模方便的优势,基于多头自注意力(Multi-head Attention Head)机制的编码器和(Masked Multi-head Attention Head和Multi-head Attention交叉注意力机制相结合)的解码器组成的自编码器应用结构或编码器解码器实现的seq2seq应用架构成为了NLP领域的最先进模型技术的关键技术创新和发明,为后续的BERT和GPT系列大模型创造了基础技术架构。 3、BERT为基于Transformer的自注意力机制的编码器架构,其基于两个训练任务进行的多任务训练,1为从句子中mask掉15%的token,然后从head中对应的位置进行预测出mask的原始的词汇;2为判单上下句子是否是自然连续的。BERT使用特殊词汇如“[CLS]”,“[SEP]”,”[MASK]”等以方便输入数据的表示。BERT的作用主要是提供预训练模型对语言上下文进行特征提取(embedding)将输出数据提供给下游的NLP任务如文本分类,问答系统等。 4、GPT模型为语言自回归任务,通过当前上下文预测下一个token,并不断将生成的token加入到当前上下文中继续预测后续的token的递推过程称为语言自回归任务。其网络模型为独立的Transformer的解码器结构,且和自编码器中的解码器不同的是,每一个Transformer block中只有一个Masked Multihead Attention的实现,GPT的模型的不同版本的参数量差别大,训练数据集大小差异也挺大。GPT-3模型支持的输入上下文token数目最大有2048个,embedding_dim也达到了12288,有96个Transformer block组成,参数量达到了千亿级别。 5、GPT-3.5(Instruct GPT)及以后版本,利用到了RLHF算法,即为基于人类反馈的强化学习算法,采用了PPO的两个policy network和价值网络去更新模型参数,其中policy netwrok的网络结构和GPT模型本身的一致,不同的token可以理解为不同的action,而价值网络的结构在head处加了一个线性层,输出价值标量值,策略网络和价值网络可以是共享Tranformer的基础结构,接出不同的head分别实现token预测和价值预测的任务。训练数据可以离线提前准备好,包括通过参考模型基于prompt生成的多个completion以及对应的基于reward model的打分等。 采用了基于优势函数的剪切的目标函数进行的PPO训练,其中在开源库TRL的实现中,reward为基于Reward Model的打分模型和基于Token Level的MDP建模中的参考模型(如SFT模型)和策略模型的每个token(时间点)的KL散度惩罚项作为综合的激励,因此在TRL的实现中,同时实现了基于KL散度的惩罚和基于策略更新幅度的裁剪相结合的两方面的约束。 以上内容已经做了相关的视频的录制,内容请参考引文2。 References
-
Stable Diffusion的几种支持特定场景应用的算法扩展
这些天花时间梳理了一下Latent Diffusion Models相关的文献,在线文档和相关代码,已经制作了相关PPT,录制了相关内容,这里做一下总结以备后需查阅。 1、基于矩阵低秩的适配,LoRA(Low-Rank Adaption)方式是采用低秩矩阵对模型的预训练的权重进行调整,从而实现高效的模型微调。其大体的过程可以分为:(1)、将模型关键部分的参数的residual部分进行低秩分解,将其权重矩阵分解为两个较小的低秩矩阵的乘积;(2)、微调方法:只更新低秩矩阵的参数,而不是整个模型权重矩阵,大大减少训练时需要更新的参数量;(3)矩阵重构:通过低秩矩阵的乘积来恢复原始的权重矩阵,在加载的时候将重构的矩阵参数和原先预训练的模型的参数对应的部分进行相加得到最终的模型参数; 2、Dreambooth,是一种支持某个类别(如cat,dog等)特殊的subject(如Hally dog)的丰富多样性场景生成的Latent Diffusion Model的扩展,为了克服language drift等现象,提出了用类别的preservation loss和基于unique identifier的类别下subject的联合loss训练,即保证了类别的多样性和泛化能力,也支持特定subject的丰富多样的产经生成。支持全模型微调和基于LoRA的微调。 3、Textual Inversion,基于文本嵌入模型的微调,产生一个特殊的新的需要训练的风格或特性的图片的token,扩展文本嵌入模型的embedding层的输入,多加一个token,在训练时其他的参数冻结(包括DDPM,以及VAE和Text Embedding),只更新多加的token相关的embedding转换的参数,训练的过程实现了特殊的token的embedding和风格特性图片之间的关联关系的建立。 4、ControlNet,在模型的结构上有较大的扩展,在文生图的应用场景下,提供了额外的更加个性化多样化的约束控制,如基于深度图,canny算子边缘图,语义分割图,human pose等等额外的约束,而且ControlNet本身是对Stable Diffusion模型的扩展,和Stable Diffusion模型本身独立保存,加载时和StableDiffusion模型进行融合。而且针对某个特殊的额外约束,一般时需要单独的ControlNet模型,这样各种各样的ControlNet模型就有多个,ControlNet主要由零卷积和UNet中的编码层的block组成,零卷积保证了一开始的训练和原始模型的输出保持一致,保证了训练的稳定性。由于复用了Stable Diffusion模型中UNet的编码层的相关结构,而且初始化时直接将预训练好的Stable Diffusion模型对应的参数拷贝过来作为初始化,因此ControlNet的版本要和Stable Diffusion的基础模型版本要一致以实现加载后兼容。 关于这些内容的实现实验,可以参考引文3中的代码实现细节,在diffusers库的examples目录下,这些天学习的效率进步还不错,技术的素材和内容也在不断积累和进步中,希望能保持下来后面有更多的输出,也希望能和相关的同行有更多的机会交流最新的技术进展的机会。 参考文献
-
线下的两次项目实践教学活动总结
最近有机会和一个教育科技公司有两次合作(老板是中科院其他相关所的年轻的师弟,可创业确有好几年了,这方面的经验还得向他学习),作为他们的现场实训课程老师,这里简要写点线下和线上的知识分享心得,希望今后将这些作为实践的规范去执行。有些天没有更新博客了,感谢大家之前对博客的关注,希望有些内容对读者有点作用或启发,同时欢迎大家的意见建议。后面准备制作文生图和LLM相关的系列知识技能相关内容,也希望后面能将更多更好的相关知识和技能分享给大家。 1、实验环境要在教学实践现场所用电脑上提前完成安装部署并完整验证相关实践内容,不建议在现场时间紧张有限的情况下对于没有验证过但想要去扩展的内容进行临时操作实践,可能会出现一些未知的技术问题需要去解决。而现场debug一般要多花点时间,通常是不允许的。 2、知识讲解和实践内容相互穿插配合,实验演示和学员操作联系相互穿插配合,需要根据反馈灵活的调节现场的教学实践交互过程。 3、勤于将问题和解答记录到相关文档进行总结,后面通过合适的方式分享出来。 4、准备充足的知识和实践内容,多多益善,有时候要根据受众的知识基础,或快或慢需要临时进行调整,多一些内容准备使得课程的快慢弹性更大,就有更加充分的心理准备。 5、信息技术更新迭代速度很快,虽然短时间内这些知识内容可复用,但也要不断积累更新输出新的知识分享,知识分享也要将经典核心技术和最新技术相结合,经典的技术是专业基础核心课程,受众面更广,希望对高中生大学生群体有所帮助,最新技术面向行业工作人员,希望对他们也有所帮助,在工作岗位上能够更加胜任。这样才能不断积累和进步,与时俱进,不落后于时代。