本博客是对b站上,李宏毅大模型课程的简单记录。
大模型入门到进阶,一套全解决!
第1讲:生成式AI是什么?
- ChatGPT【Chat Generative Pre-trained Transformer】每一步都是
文字接龙
,其实就是分类问题
文字接龙指的就是:人类的问题作为模型输入,模型预测下一个字是什么。下一个字有可能有100种,每个字有不同的概率,通过掷骰子来决定下一个字是啥 - 按先后顺序:预训练、微调、增强式学习(RLHF)
-
预训练:即自监督学习,模型通过大量的无标签模型自己学习
-
真正的训练【微调】:监督学习,使用带标签的数据告诉他哪些答案是正确的。
在多重语言上做预训练后,只要教某一个语言的某一个任务,模型会自动学习其他语言的同样任务。
-
增强式学习(Reinforcement Learning from Human Feedback,RLHF)
两个步骤:①使用人类的反馈
来训练一个“奖励模型”,使其能够量化输出的质量
②通过强化学习优化模型的行为,利用“奖励模型”的反馈来调整生成策略
-
第2讲:今日的生成式人工智能厉害在哪
-
Prompt engineering:prompt是给模型的指令【而上下文学习,是给模型信息】
-
训练自己的模型
第3.4.5讲:你可以训练你自己
- 上下文学习:指的是模型根据输入的上下文(即前文和当前文本信息)来生成更准确和相关的回答。上下文学习
未进行任何训练
- RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索和文本生成的模型架构
第6讲:大型语言模型修炼史 — 第一阶段- 自我学习,累积实力
- 这个过程就是预训练,自监督学习。这个过程只是学了很多资料,但不知道哪些是正确的
- GPT的各个版本
第7讲:大型语言模型修炼史 — 第二阶段_ 名师指点,发挥潜力
-
这个过程就是微调(fine-tuning),需要人工标注。
预训练的参数作为初始参数,通过人工标注数据
,对初始参数进行调整,调整后的参数和初始参数差的不太多,所以叫微调。但这个过程需要对所有的参数进行调整,负担大 -
因此有了“adaptor”的概念,它是一种结构上相对简单的神经网络模块,通常插入在预训练模型的某些层之间,在微调时只用更新这些模块即可,预训练的参数不用调整。
-
微调一开始是走训练专才的路线,现在是训练全才
-
LLaMA把预训练的模型开源了,世界直接疯狂
第8讲:大型语言模型修炼史 — 第三阶段- 参与实战,打磨技巧
- 这个阶段就是
带有人工反馈的强化学习
(Reinforcement Learning from Human Feedback,RLHF) - 人觉得好的答案,就提高出现的概率,不好的答案,就降低概率
- 微调是只问过程【只管文字接龙对不对】,不问结果;
RLHF是只问结果,不问过程 - RLHF有两个步骤:
①使用人类的反馈
来训练一个“奖励模型”,使其能够量化输出的质量
②通过强化学习优化模型的行为,利用“奖励模型”的反馈来调整生成策略 - RLAIF(带有 AI 反馈的强化学习),使用AI模型作为“奖励模型”
- RLHF和RLAIF的难点在于,如何评价模型回答的答案是好还是坏
第9讲:以大型语言模型打造的AI Agent
- AI Agent是一种能够“感知环境”、“进行决策”,“做出行动”,“完成特定目标”的智能体
- 现有常见的AI agent
第10讲:今日的语言模型是如何做文字接龙的 — 浅谈Transformer
- Transformer的大致流程
-
步骤一:把文字变成Token
-
步骤二:理解每个Token,把Token转成embedding。在transformer里有一个token和embedding对应的列表。那这个列表如何获得呢?是需要学习的。下面这个图介绍的是在语意层面,如何将token转成embedding
除了语意层面,还有位置嵌入,把语意嵌入和位置嵌入进行相加即可。注意,“位置嵌入”的对应关系,一开始是由人设定,现在也可以用学习的方法得到
-
步骤三:考虑上下文。“苹果电脑”中的苹果和“来吃苹果”中的苹果完全不一样,因此需要通过注意力机制,考虑上下文。通过attention后,会输出下一个token的概率
在transformer中考虑的是多头注意力,因为token之间的相关性不止一种
-
第11讲:大型语言模型在「想」什么呢? — 浅谈大型语言模型的可解释性"
- 对模型背后的神经网络进行分析
- 直接让模型提供解释,问他为什么输出这个答案
第12讲:浅谈评估大型语言模型能力的各种方式
- 评估大模型的性能,问他有标准答案的问题,例如选择题
但是连选择题都有问题
翻译和摘要是语义层面做比较:
大模型价格方面的差异:
第13.14讲:浅谈大型语言模型相关的安全性议题
我认为这里不重要
第15讲:为什么语言模型用文字接龙,图片生成不用像素接龙呢?
-
文字由token构成,以Llama2为例,它的词汇表中共有32k个token,用接龙的方式预测下一个token
-
图片由像素组成
-
声音由取样点构成
-
生成式人工智能的本质:文→文(token);文→图(pixel);文→声(采样点)
-
关于文→文的策略:就是文字接龙,给定一个输入,产生第一个token,然后第一个token和原本的输入合并作为新的输入,生成下一个token。接龙的方式在学术上被称为 Autoregressive Generation(自回归策略
-
)。
文字也可以用NAR的方式,首先让模型预测有多少个token,然后,不同的位置分别预测下一个token
也可以给他设置一个固定长度的token,每个位置去预测token是什么,把end之后的都丢掉
-
文→图:图片如果也用Autoregressive Generation,就会存在一个问题,生成一个1024*1024的图片,约有100万个像素点,需要逐步做100万次接龙,时间太长。因此采用Non-Autoregressive Generation的方式,NAR不依赖于先前生成,模型的目标是并行生成所有像素,但生成的质量可能会受到影响,因为每个像素的生成是独立的,位置一和位置二生成时可能是完全相反的东西,例如生成狗的图片,位置一是想生成的白狗,位置二想生成黑狗,就会造成生成的图片一团糟。
如何解决这个问题呢?- 方法一:让所有位置都脑补一样的内容,告诉模型具体的描述
具体来说就是图像生成模型,在生成图像时,是需要给定一个向量的,这个向量用于模型脑补
- 方法二:Autoregressive Generation(自回归策略)与NAR结合。先用AR策略生成一个精简版本,这个精简版本可以是人类看不懂的东西【有点像语义昂】
如何产生精简版本呢?就是通过一个encoder将图片压缩,decoder能恢复即可。16×16像素能压缩到1×1,色彩从成千上万可以压缩到1024
具体来说就是让一个模型充当encoder,这个过程是AR策略;另一个模型充当decoder,这个过程是NAR策略
- 方法三:改进NAR质量的方法,就是多次使用NAR。把生成步骤拆解成很多个阶段,每个阶段都是NAR,逐阶段生成。
方法二中的AR+NAR,AR策略生成时耗费时间很多,因此可以把encoder替换成多个阶段的NAR。现阶段常见的图像生成模型,都是这种方式
- 方法一:让所有位置都脑补一样的内容,告诉模型具体的描述
-
第16讲:可以加速所有语言模型生成速度的神奇外挂 — Speculative decoding
- 设计一个预言家预测下一个token是什么。预言家可以用NAR策略
第17讲:有关影像的生成式AI (上) — AI 如何产生图片和影片
-
影像有关的生成式AI
输入视频或者图片,生成文本等
另一种是,输入一段文本,生成一段视频或者图片【本视频专注于此】
- 以文字作为condition:Sora
- 图片生成图片
- talking head:给一张照片,给一段话,让这个人张嘴说话
- 以文字作为condition:Sora
-
原理:图片由像素组成,视频由一系列图片组成,FPS就是每秒有多少帧图。玩游戏得60FPS
图像生成说白了就是生成patch,然后生成的patch经过decoder得到图片。用的不是接龙的方式,而是NAR,一次性生成所有的patch。生成过程中虽然是NAR,并行生成,但是transformer会计算每个patch之间的关联性,但这种方式也无法保证生成的准确性
文字生视频,就是一下生成所有的patch,但有个严重的问题就是,transformer中,需要计算每个patch之间的相关性,那对于视频而言,计算量就太大了
因此,提出一种策略,对于某帧,只计算该帧内部每个patch的相似性【Spatial attention 2d】;帧之间,计算同一位置,不同帧之间的相似性【temporal attention 1d】
如何评价生成效果?把文字和生成的图片扔给clip,让clip评价好坏
第18讲:有关影像的生成式AI (下) — 快速导读经典影像生成方法
- 如何处理模型的脑补问题?让他生成一直奔跑的狗,可能会生成哈士奇,也可能会生成柴犬。解决这个问题需要给模型更多的信息,需要训练一个“资讯抽取” 模型
那么如何训练这个“资讯抽取”模型呢?
让“资讯抽取模型”和“图片生成模型”一块训练,“资讯抽取模型”抽取出来什么不重要,人可能也看不懂。但“资讯抽取模型”和“图片生成模型”有一个共同目标,输入一张图片,经过“资讯抽取模型”和“图片生成模型”后输出的图片和输入的图片越接近越好,这样就能一下子训练两个模型了。这个架构就叫做auto-encoder
-
上述介绍的是训练的时候,那在图片生成的时候具体如何操作呢?生成的时候只有decoder,decoder的输入包括两部分,一个描述,以及需要脑补的资讯。而脑补的资讯需要随机生成
-
上面介绍的这个流程其实就是VAE。一个encoder抽取出来信息,然后decoder将信息进行恢复
-
flow-based method。和VAE很像,但是这篇论文认为,decoder和encoder干的事情是相反的,因此encoder可以当成decoder的反函数。抽取出来的信息叫做noise,虽然叫这个名字,但是其中包含很多信息。
-
diffusion,该模型denoise model(也就是decoder)的输入也是noise和一个描述。通过decoder得到去噪后的图片,然后把这个图片和描述再输入到decoder中,以此类推,直到生成清晰的图片。
现阶段的研究主要集中在,如何用较少次数,恢复出清晰的图片。
那么问题来了,数据集中都是清晰的图片,如何得到这个带noise的图呢?其实就是逐步加噪声
现在Sora中用到的就是 diffusion transformer,左边的就是传统的transformer,用NAR策略,并行预测每个patch是多少;右边是 diffusion transformer,逐步预测每个patch是多少
-
VAE、flow-based、diffusion的对比