NTU ML2023Spring Part1(合集)
License: CC BY-NC-SA 4.0
闲话
本文为 Part 1 的合集。或者算是自己的备忘录?
由于视频源在 youtube 上,为避免网络不稳定导致观看体验下降,我用 yt-dlp
提前下载视频到本地看。
yt-dlp --output "%(playlist)s/%(playlist_index)s. %(title)s.%(ext)s" --embed-subs --add-metadata --merge-output-format mp4 "https://www.youtube.com/playlist?list=PLJV_el3uVTsOePyfmkfivYZ7Rqr2nMk3W" --cookies-from-browser firefox
但是好像在手机上只有 mpv
可以看到字幕。
下面是目录。
ChatGPT 是什么
GPT: generative pretrained transformer.
GPT 其实是一个从一段文字到下一个文字概率分布的函数。
监督式学习:有一系列 input/output,机器自己学习里面的规律。
网络上每一段文字都可以教机器做文字接龙。
ChatGPT 之前的 GPT,例如 GPT 与 GPT-2,也可以回答问题。
GPT-3 的资料根据人类 finetune 就变成了 ChatGPT。
大概分以下步骤:pre-train -> fine-tune -> reinforcement learning(只要评价好/坏即可)
预训练的作用:在多种语言上预训练后,只要教某个语言的某个任务,自动学会其他语言的同样任务。
如何精准提出需求:对 ChatGPT 进行催眠(prompting).
neural editing:让局部的调整不影响整体。例如「最近一次 IOI rk1 的队伍」
machine unlearning:对 LLM 施遗忘咒,让它不要学一些隐私信息。
用 ChatGPT 和 Midjourney 玩文字冒险游戏
chatgpt 生成文字提示,midjourney 生成插图。
LHY 上课现场演示了玩两局游戏的过程。
机器学习基本原理
- 回归regression:输出的是
int
- 分类classification:输出的是
enum
structured learning:生成有结构的东西(视频,句子)。又叫 generative learning.
找出 ChatGPT 使用的函数取决于想要做的应用。
候选函数的集合:Model(如 CNN, RNN, Transformer)
评价函数好坏的标准:Loss
supervised learning 可以给出比较准确的 loss,semi-supervised learning 可以给出大概评价。
找出一个初始函数后,用 optimization algorithm 对其进行优化以降低 loss。
生成式学习的两种策略
生成有结构的东西:以 token 为单位。
中文的 token 就是「字」,英文的 token 是 word piece。
例如:unbreakable = un + break + able.
图片的 token 就是像素。
策略一:各个击破(AutoRegressive model)
策略二:一次到位(Non-autoregressive model)
图片生成常用一次到位(前后文没什么关联度),文字常用各个击破(前后文要有联系)
语音:结合了两个策略的优点。先用各个击破产生中间产物(向量),它决定了大方向;再一次到位。
也有一种改进方案是「N 次到位」,先产生大概再填细节。
能使用工具的 AI:New Bing, WebGPT, Toolformer
能够使用工具的 AI
LHY 演示了 new bing 用网络搜索的能力。
LLM 做出「搜索」这个决定也是由 token 决定的。例如 [SEARCH], some, thing, [END]
。
那么怎么训练 LLM 来使用搜索引擎呢?还是人来示范。
为了减少人的工作量,可以用另一个语言模型产生资料。
对大型语言模型的不同期待
To finetune or to prompt, that's the question.
- 期待一:成为专才(finetune)
- 优点:在特定领域可以胜过通才
- 期待二:成为通才(prompt)
- 优点:可以快速开发新功能
对预训练模型加插件——Adapter(例如加一个 layer)
微调时只调 Adapter,这样就可以用(通用的语言模型+特定的 adapter)完成特定任务了。有点像 docker 的思想?
In-context Learning:在对话中学习。类似高考英语听力的「衬衫的价格是九磅十五便士」例题。对于比较大规模的模型有一些效果。
chain of thought(CoT) Prompting:让 AI 展示它的思维链,但不是通过 system message 而是通过在例题的答案里加解题过程得到结果。对于 zero-shot-CoT 就是在提问上加一句话 Let's think step by step
.
大模型+大资料=神奇结果?
emergent ability:随 model scale 的增加,accuracy 会先缓慢增长后突然增长。
可以理解为:「因为计算错误而喜提
分」与「因为什么都不会而喜提 分」之间有差别但无法发现,「得到满分」之后却认为它顿悟了。
在固定的运算资源下,我们应该选大模型小资料还是小模型大资料?答案是中模型中资料。见这里。
但 Gopher 采取的策略不一样,于是 Chinchilla(同样的算力,更小的模型)与 Gopher 来了一次 PK. 结果是 Chinchilla 基本获胜。
KNN LM:将输入转成向量,从训练资料中选几个与之最接近(K-最近邻问题)的拿出来做 softmax. 然后依据此对传统的 classification 做加权平均. 然而它在算 distance 时太花时间,导致应用范围有限。
图像生成
想要生成一张图像,不能直接使用「一步到位」,否则可能生成的图片变成好几张不同的图片缝合在一起。为了解决这个问题,可以先用正态分布获得一个向量,这个向量(和输入的 prompt 一起)决定了生成的图像。
但是我们怎么知道一个向量对应哪张图片呢?可以输入图片然后转换成向量(encoder),向量再转回图片(decoder),最后比较前后图片的差异。
diffusion
先 sample 出一张随机图片,然后 denoise 去除噪音,重复多次。可以理解为打码的逆过程。
The sculpture is already complete within the marble block,before I start my work. It is already there, I just have to chisel away the superfluous material. - Michelangelo
Denoise 模组内部其实是通过输入的图片和 denoise 次数来预测 noise,然后在图片上减去 noise.
要训练 noise predictor 也简单,只要把一张图片(和 desciption)不断加 noise 就能得到训练数据。
stable diffusion
一般由三个部分组成:text encoder(解读 prompt 含义), generation model(生成大概), decoder(生成成品)。
评估生成图像的质量:Fréchet inception distance(FID). 要先有一个训练好的 CNN。
diffusion model 背后的数学原理
一些基本概念
- forward process:向图片里加噪音
- reverse process:向图片里减噪音。
和想象中不同,训练时的噪音不是一点点加进去的。实际上是先决定一个
maximum likelihood estimation:度量两个 distribution 的接近程度. 等价于 minimize KL divergence.
(咕咕咕)
(这部分本来就是 optional,等自己做到 diffusion model 的时候再说吧)
如何炼出丐版 ChatGPT
前置:你首先得要有好一点的硬件。所以其实也不算很丐。
为什么要搭自己的 ChatGPT?
- 避免敏感数据被 OpenAI 拿去训练
- 解除一些限制
思路:以 ChatGPT 为标准答案来 finetune 自己的模型。
ChatGPT 可以自我反省
ChatGPT 给出答案后,让它再检查一遍就有可能得到正确答案。
让两个语言模型对话:一个给出答案,另一个挑毛病。这样也可以提升答案的质量。
用语言模型来解释语言模型
让 GPT-2 读一大段文字,然后记录下读每个词时某个神经元的输出,让 GPT-4 来解释。
给出解释后,还可以让 GPT-4 扮演神经元取代 GPT-2 的神经元。
frugalGPT
frugal:节俭
简单来说就是减少使用 chatgpt 的花费。
-
prompt adaptation(缩短输入)
在 in-context learning 中,可以把问题合并(原来是 Q1 A1 Q2 -> A2 和 Q1 A1 Q3 -> A3;现在是 Q1 A1 Q2 Q3 -> A2 A3),这样就省去了 Q1 A1 的重复。
-
completion cache
问过的问题可以存起来,以后遇到类似的就直接调用数据库的信息。
-
LLM cascade
拿简单的问题问弱(便宜)的模型,难的问题问强(贵)的模型。
具体做起来就是拿到一个问题先去问弱的模型,然后给另外一个 LLM 让它判分。如果分数超过一定值就采用这个答案,否则去问更强的模型并重复这一过程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2024-01-27 在 Lenovo 里交换 Fn 和 Ctrl 键
2023-01-27 为什么pollard rho算法要用x^2+c生成随机序列
2023-01-27 二叉堆模板