微官网和移动网站区别吗,网站建设预算表制作,网站建设知识点,如何建立优秀企业网站HuggingLLM#xff08;ChatGPT原理与应用开发#xff09;
原文链接#xff1a;HuggingLLM#xff08;ChatGPT原理与应用开发#xff09;-课程详情 | Datawhale
此处仅为学习记录和总结
1#xff1a;基础科普
1.1#xff1a;自然语言背景 图灵测试 如果一个人#x…HuggingLLMChatGPT原理与应用开发
原文链接HuggingLLMChatGPT原理与应用开发-课程详情 | Datawhale
此处仅为学习记录和总结
1基础科普
1.1自然语言背景 图灵测试 如果一个人代号C使用测试对象皆理解的语言去询问两个他不能看见的对象任意一串问题其中一个是正常思维的人代号B另一个是机器代号A。
如果经过若干询问以后C不能得出实质的区别来分辨A与B的不同则此机器A通过图灵测试。
1.2语言模型基础
Token是最小语义单位即句子由token组成 获取token的方式 英文单词被分割为子词例如
annoyingly[annoying, ##ly]##表示和前一个token直接拼接没有空格
子词可以同时兼顾词表大小和语义表示
中文被分割为字 词
字独立表示意义例如是、有
词一个以上字组成的语义单位拆开可能会丢失语义例如长城 词袋模型 bag of wordsBOW
词袋的原理
文本中的每个单词都看作是独立的忽略单词之间的顺序和语法只关注单词出现的次数每个句子可以表示为一个向量长度为词表大小向量的每个维度对应一个单词维度的值表示该单词在句子中出现的次数
词表表示法的问题
向量维度大且稀疏计算不便忽略了token之间的顺序丢失语义 词向量 word embedding / word vector
一个token表示成一定数量个的小数即词向量的维度例如
我 [0.07928, 0.37101, 0.94462, 0.87359, 0.55773, 0.13289, 0.22909, ...]
爱 [0.61048, 0.46032, 0.7194, 0.85409, 0.67275, 0.31967, 0.89993, ...]
你 [0.392, 0.13321, 0.00597, 0.74754, 0.45524, 0.23674, 0.7825, ...]词向量的维度常用200、300、768、1536等 Embedding技术 将任意文本或其他非文本符号表示成稠密向量的方法 概率语言模型 核心预测下一个token的概率
解码策略
贪心搜索greedy search只往后看一个词只考虑下一步最大概率的词集束搜索beam search一步多看几个词看最终句子生成到句号、感叹号或其他停止符号的概率。看的越多num_beams越大越不容易生成固定的文本 N-Gram语言模型 N表示每次用到的上下文token个数
N2是Bi-GramN3是Tri-Gram例如
句子人工智能让世界变得更美好
tokens人工智能/让/世界/变得/更/美好N2人工智能/让让/世界世界/变得变得/更更/美好
N3人工智能/让/世界让/世界/变得世界/变得/更变得/更/美好token的表示是离散的本质是词表中的每个单词
Gram次数除以Gram总数就是出现概率
在给定很多语料的情况下固定当前词统计下个词出现的频率例如
当前词人工智能N2时统计可能的tokens组合
1人工智能/让8次
2人工智能/是2次计算概率
1人工智能/让0.8
2人工智能/是0.2将token转变为embedding向量 输入token对应的d维向量X1 × d维
输出词表大小的N维向量Y1 × N维
计算过程假设Wd × N维是模型参数则X · W Y
例如
import torch
import torch.nn as nnrnn nn.RNN(32, 64)
input torch.randn(4, 32)
h0 torch.randn(1, 64)
# input是包含4个token每个token是32维
# h0是随机的初始化输出
output, hn rnn(input, h0)
# ouput包含4个token每个token是64维
# hn是最后一个token的输出
output.shape, hn.shape
# (torch.Size([4, 64]), torch.Size([1, 64]))# 假设词表大小N1000
wo torch.randn(64, 1000)
# 得到4×1000的概率矩阵每一行概率和为1
probs nn.Softmax(dim1)(output wo)
probs.shape, probs.sum(dim1)
# torch.Size([4, 1000]), tensor([1.0000, 1.0000, 1.0000, 1.0000], grad_fnSumBackward1)1.3ChatGPT原理基础 transformer 基于注意力机制的编码器-解码器encoder-decoder架构
编码器同时利用当前token前后的所有tokens看历史未来解码器只能利用当前token之前的所有tokens只看历史
Seq2Seqsequence to sequence架构
输入是一个文本序列输出是另一个文本序列
注意力机制
自注意力自己的每一个token和自己的每一个token的重要性权重多头注意力自己注意自己重复多次每个头注意到的信息不同根据不同权重的注意力提取特征遮盖多头注意力遮盖掉未来的所有token即只看历史
编码器更加适合非生成类任务解码器则更加适合生成类任务
编码器对应自然语言理解natural language understandingNLU 句子级别分类给定一个句子输出一个类别token级别分类给定一个句子要给其中每个token输出一个类别 解码器对应自然语言生成natural language generationNLG 文本续写生成式文本摘要机器翻译改写纠错 命名实体识别 NLU任务中的token级别分类
作用把句子中的实体人名、地名、作品等你关注的词一般是名词给提取出来
地名实体识别例如
句子中国的首都是北京
tokens每个字即中/国/的/首/都/是/北/京token对应的类别Begin/End/Others/Others/Others/Others/Begin/End深度学习模型的微调 把一个开源的预训练模型放在特定的数据集上微调让模型能够完成特定的任务 BERT bidirectional encoder representations from transformers
只使用transformer的编码器
步骤
随机把15%的token盖住其中80%用[MASK]替换10%保持不变10%随机替换为其他token利用其他没盖住的token来预测盖住位置的Token GPT generative pre-trained transformer
只使用transformer的解码器
GPT的2个特点
生成式一个Token接着一个Token生成文本预训练在大量语料上训练的语言模型
GPT的发展方向
扩大参数规模零样本 样本训练方法 零样本Zero-shot直接给模型任务输入让它输出任务结果
少样本Few-shot给模型提供一些示例然后再给出任务让它给出输出结果
单样本One-shot给模型提供一个示例然后再给出任务让它给出输出结果 温度temperature 集束搜索存在的问题
生成的内容容易重复高质量的文本和高概率并不一定相关
温度的作用
在多样性生成中基于已有的上下文随机选择下一个token温度用于控制这个选择的随机性即调整输出的概率分布温度越大输出的概率分布越平滑高概率词和低概率词的差距越小温度趋近于0则等价于贪心搜索 重复惩罚参数repetition_penalty 重复惩罚参数的作用避免生成重复的token
温度和重复惩罚参数的区别
温度的对象是词表中的所有的token重复惩罚参数的对象是“已生成”的token 在生成下个token时对之前已经生成过的tokens的分数进行平滑 基于采样的方法选择下一个token Top-K在概率降序排序的情况下选择K个词硬截断
Top-P在累计概率超过P的词里进行选择
随机采样基于已有的上下文随机选择 RLHF Reinforcement Learning from Human Feedback从人类反馈中进行强化学习
InstructGPT用强化学习的算法微调一个根据人类反馈改进的语言模型
Instruct GPT的步骤
SFTSupervised Fine-Tuning有监督微调 在有标注的数据上微调训练有标注的数据输入提示词输出相应的回复 RMReward Model奖励模型 一个提示词丢给SFT输出若干个回复人工对这些回复进行排序每次取排序后的2个结果让模型学习到好坏评价 RLReinforcement Learning强化学习 使用PPO策略进行训练 PPOProximal Policy Optimization近端策略优化避免每次太大的更新提高训练的稳定性 RM对某个回复打分后这个打分回传给模型更新参数需要考虑每个token的输出和第一步SFT输出之间的差异性防止强化学习的过度优化
强化学习在文本生成工作的难点
训练的稳定性 解决方法PPO策略和与SFT的差异衡量 奖励函数的设计 解决方法加入一些语法规则限制采用最省力法则语言具有惰性会朝着使用较少的词语表达尽可能多的语义这个方向进行演化
Instruct GPT的通用指标
有帮助真实性无害性需要解决指标之间的冲突权衡问题