1 ChatGPT 原理剖析
ChatGPT 的社会化:
- 学会文字接龙
- 人类引导文字接龙方向
- 模仿人类喜好
- 用增强式学习向模拟老师学习
1.1 预训练(Pre-train)
ChatGPT 真正在做的事情本质上是文字接龙,将其看成一个函数 \(f(x)\),其中的 \(x\) 自变量可以是用户输入的一个语句,得到的函数就是接下来会回答的每一种答案的概率。每次产生答案的过程是从这样一个分布中进行随机取样。
ChatGPT 的输入还会包括同一则对话中的历史记录,这样就实现了和上文的联系。
做文字接龙的模型就是语言模型。
ChatGPT 背后的关键技术:预训练(Pre-train)或称自监督式学习(Self-supervised Learning)、基石模型(Foundation Model)。
ChatGPT,Chat:聊天,G:Generative,P:Pre-trained,T:Transformer
监督式学习:人类提供大量的成对的资料,让机器自己寻找函数 \(f\)。监督式学习所提供的资料较为有限,ChatGPT 所使用的技术可以无痛制造成对资料。
![[Pasted image 20240208172915.png]]
预训练:在多种语言上做预训练后,只要教某一个语言的某一个任务(finetune过程),就可以自动学会其他语言的同样任务。
增强式学习(Reinforcement Learning, RL):简而言之是人类告诉机器给出的答案是好还是不好。(较为节省人力,且适用于人类都不知晓答案的时候)
1.2 ChatGPT 带来的研究问题
- 如何提出需求,对 ChatGPT 进行“催眠”(学术界叫做 Prompting),
- 对于模型的调整(会不会因为某一个调整,然后导致其他的更多问题,),这个研究题目就是叫做Neural Editing。
- 检测 AI 生成的物件。如何用模型侦测一段文字是不是 AI 生成的。
- 安全性问题。清空 ChatGPT 的记录,研究题目“Machine Unlearning”。
1.3 和 ChatGPT 玩文字冒险游戏
将文字游戏的一个开始文本输入到 ChatGPT 中,然后将 ChatGPT 生成的文字冒险游戏叙述输入到 Midjourney 中再生成游戏插图。(很有意思的一个游戏过程)
2 Regression(回归问题)
知乎 # 机器学习-回归问题(Regression)
举例应用:
- 预测股票市场
- 自动驾驶
- 视频推荐系统
- 课堂提及:预测宝可梦的战斗力 CP 值(Combat Power),假如说我们研究的问题是需要计算一只宝可梦在进化后的 CP 值,我们现在的已知量是当前宝可梦的一些数据。
解决该回归问题的步骤:
- 构建模型(也就是得到一组函数 \(f(当前数据x_i)=y\))
线性模型(lLinear model):\(y=b+\sum w_i x_i\),其中的取出的 \(x_i\) 叫做 feature,\(w_i\) 叫做 weight,\(b\) 叫做 bias。 - 计算 Goodness of Function。
我们有了实际的十个用于训练的宝可梦数据 \(\{ (x^i, \hat{y}^i)\}\)
需要定义一个损失函数(Loss Function) \(L\),损失函数的输入为一个函数,输出为当前输入函数的好坏值(坏的值),\(L(f)=L(w, b)\)。损失函数有多种类型,课程以其中一种为例,\(L(f)=\sum (\hat{y}^n-(b+w\cdot x^n_{cp}))^2\),也就是估测误差的平方和。 - Best Function
找到损失函数最小的一个函数 \(f^*\),\(f^*=arg \ min_f L(f)\),如果是以上面那一个为损失函数的话,那么可以用线性代数进行求解。
另外一种办法叫做梯度下降(Gradient Descent),适用于任何可微分的损失函数:
假设我们现在考虑的是 \(L(w)\) 的损失函数,首先随机选取一个 \(w_0\) 作为当前 \(w\),然后计算其在 \(w_0\) 处的微分值 \(\frac{dL}{dw}|_{w=w_0}\),如果当前这个微分值是负数,那么就需要增加当前 \(w\),反之同理。其中的改变量为 \(\eta \cdot \frac{dL}{dw}|_{w=w_0}\),其中这个参数 \(\eta\) 叫做 learning rate。梯度下降就是进行这样的一个迭代过程。如果是多元问题,那么就用偏微分来求解。
对于多元函数来说是需要考虑极值和最值的区别的,如果是线性的损失函数,那么是不需要考虑的,因为损失函数的图像是一个凸包。
简单来说,其实就是构建一个带参的模型函数去拟合给定的数据集,然后有一个类似于范数一样的函数 \(L\)(损失函数)来评估,可以用梯度下降或者数理计算的方式来得到参数的最佳值。(模型可能会出现过拟合的情况)
Regularization:修改损失函数为 \(L(f)=\sum (\hat{y}^n-(b+w\cdot x^n_{cp}))^2 + \lambda \sum (w_i)^2\),当后面这个越接近 0,这个函数是越平滑的,函数对输入的改变越不敏感,可以一定程度上防止干扰。 那么就需要考虑这个函数的平滑程度。