指令微调
有监督的指令微调
过程
检查安装包情况,使用的
准备数据集
instruction
input(可选)
output
数据条目整理成大模型可用的输入文本
Alpaca
Phi-3
划分数据集(85%,10%,5%)
数据组织成训练批次
预分词
补齐输入和目标(50256):不同batch不同长度,同一batch相同长度
50256替换为-100
所得结果,与只用前两个样本计算得到的损失是一样的。说明忽略了-100的这个样本。cross_entropy 默认就带有 ignore_index=-100 的设置,会自动跳过标签为 -100 的位置。留一个方便知道收尾的位置,即回答结束的时候。
数据加载器
数据移到目标设备.device()
预先固定函数的部分参数
加载预训练大语言模型(这次使用中等规模的版本gpt2-medium (355M))
from gpt_download import download_and_load_gpt2
from previous_chapters import GPTModel,l...
针对分类任务的微调
微调:在预训练模型的基础上做二次训练,把模型的能力对齐到某个明确任务或者使用场景上
本节任务:使用已有的预训练模型做邮件分类
分类微调:类别和数量是预定义好的
指令微调如下图所示:
前期流程
导包
读取数据
查看种类数量
控制数量一样多:下采样(降采样)
分类编码(0/1)
划分子集
1234567891011121314151617181920def random_split(df,train_frac,validation_frac): """ sample:随机抽样 - frac=1 表示“抽取 100% 的行”,相当于全量洗牌,随机打乱 reset_index:重新生成索引 - drop=True 表示不要把原来的索引作为一列保留下来。 """ # 下标 df=df.sample(frac=1,random_state=123).reset_index(drop=True) train_end=int(len(df)*train_...
无标签预训练
关键内容
预训练大模型的训练循环
模型评估代码,检查效果与质量
解码策略
保存和加载预训练权重
现代大模型与原先区别
不使用dropout
nn.Linear不使用bias
过程记录
训练
方便文本与token ID之间来回转换
12345678910111213141516import tiktokendef text_to_token_ids(text,tokenizer): encoded=tokenizer.encode(text,allowed_special={'<|endoftext|>'}) # 把 token id 列表转成 PyTorch 张量,形状是 [seq_len] # torch.tensor(encoded) -> 1D 张量,例如 [15496, 1234, ...] # unsqueeze(0) 在最前面增加一个 batch 维度,变成 [1, seq_len] # 这么做是因为大多数模型的输入都要求带 batch 维...
从头实现GPT模型
过程
参数含义
1234567"vocab_size": 50257, # 词汇表大小(token 总数)"context_length": 1024, # 上下文长度(一次最多处理的 token 数)"emb_dim": 768, # 嵌入维度(每个 token 向量的长度)"n_heads": 12, # 注意力头数(多头注意力的 head 数量)"n_layers": 12, # Transformer 层数(block 的数量)"drop_rate": 0.1, # Dropout 概率(训练时用于防止过拟合)"qkv_bias": False # Q/K/V 线性映射是否使用 bias(是否加偏置项)
完整GPT模型
GPT完整骨架
123456789101112131415161718192021222324252627...
大模型自学记录Day2
注意力机制
注意力机制解决的问题,对比:
RNN
按顺序逐词的方式处理文本
将输入压缩为中间状态,但容易遗忘。依赖该中间状态输入token容易丢失细节,要求不断会看完整输入(遗忘)
自注意力机制
访问全部输入状态的历史信息
回看整个输入
有选择回看(权重)
点积
计算点积:torch.dot(input_query, input_1)
对dot进行展开写:
12345678# enumerate:给每个元素自动编号res=0. # 小数形式i=0for idx, ele in enumerate(inputs[i]): res+=inputs[i][idx] * input_query[idx]res
点积与余弦相似度区别
点积:相关性的“原始分数”,关键取决于夹角(很强+很像)
a⋅b=∣a∣∣b∣cosθa⋅b=∣a∣∣b∣cosθ
a⋅b=∣a∣∣b∣cosθ
方向
长度
余弦相似度:去掉长度影响后的“纯方向相似度”(很像,语义检索常用)
cosθ=a⋅b∣a∣∣b∣\cos\theta=\frac{\mathbf...
大模型自学记录Day1
终于结束了考研,现在重新拾起我的博客,记录学习。
近几个月计划
毕业前
[ ] 大模型相关内容
[ ] 雅思
[ ] 化妆
毕业后
[ ] 课题组内容
[ ] 科研技能和知识
[ ] 学车
[ ] 做饭
LLM学习
基础阶段决定先根据:张梅山老师发布的大模型基础学习路线
特此感谢!
笔记只记录一些关键代码,方便后续回顾复盘
文本数据处理
过程
分词(encode)
**标准化:**读取文本,处理标点符号
**拆分 (Split):**使用 正则表达式将文本切分为列表
**去重与排序:**提取所有唯一的单词
**构建映射表:**词 —— ID
引入特殊上下文词元
未知单词
文档分隔符
反过来(decode)
输入文本
12345with open("the-verdict.txt", "r", encoding="utf-8") as f:# 以 UTF-8 编码打开文本文件(只读) raw_text = f.read() # 读取文件全...
写在前面
今天想着先把爬虫重新捡起来,再深入下。结果一打开,就看到12.14有4名因为非法爬取判处有期徒刑的新闻。。
只能说,接下来我要小心谨慎点了。
爬虫框架
调度器:相当于cpu,调度下面几个之间协调工作
URL管理器:带爬取URL和已爬取URL,通过内存、数据库、缓存数据库实现
网页下载器:传入URL下载网页,转为字符串。urllib
网页解析器:字符串进行解析,提取我们需要的。有:re、html.parser、beautifulsoup(可以多种)、lxml(解析xml和HTML)。html.parser、beautifulsoup、lxml都以DOM树方式进行解析。
可以测试能否爬取:
看robots.txt
网站测试
检验robots
豆瓣爬取
大部分的人启蒙应该都从豆瓣开始
在爬取之前,需要先补一下正则表达式的大坑(详见下一章),因为此次主要用正则表达式。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535...
写在前面
每月总结按理应该在每月最后一天进行,但由于某些原因,决定今日考完六级后稍作总结,以及今年最后半个月的计划。
所得成就:
广师大之星——十佳三好学生
Android算吗…
更加勇敢不怕尝试
不满意的地方:
对于既定的事情(长战线)例如:考研、软考、六级,,都没有准备好
有想法问题,应该及时沟通
制定planB,以及多思考的能力好像削弱了
情绪把控不够好
动作太慢了
计划:
准备期末考
好好地了解爬虫做一些小项目
看WIFI感知的书籍
开启背单词、听听力、积累词汇的模式
多抽时间看书,看一本深度的书去了解
14-20:计网
21-25:接口
25-30:编译原理
31-4:软工
剩下时间就查缺补漏
早上背单词,晚上听力,早上复盘晚上听的读。日常读一些英语文章。
书籍晚上看。
总结
多思考,找最优解,预备方案,想清楚再立刻行动
贵在坚持
多沟通、心情不好也别太闷
做些想做的!!
激励话语
要把自己培养成理想型,你会更加爱自己