无题
Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!)
在实战中,⼤多数情况下都不需要从0开始训练模型,⽽是使⽤“⼤⼚”或者其他研究者开源的已经训练好的⼤模型。
在各种⼤模型开源库中,最具代表性的就是Hugging Face。Hugging Face是⼀家专注于NLP领域的AI公司,开发了⼀个名为Transformers的开源库,该开源库拥有许多预训练后的深度学习模型,如BERT、GPT-2、T5等。Hugging Face的Transformers开源库使研究⼈员和开发⼈员能够更轻松地使⽤这些模型进⾏各种NLP任务,例如⽂本分类、问答、⽂本⽣成等。这个库也提供了简洁、⾼效的API,有助于快速实现⾃然语⾔处理应⽤。
从Hugging Face下载⼀个GPT-2并微调成ChatGPT,需要遵循的步骤如下。
1.安装Hugging Face Transformers库
1pip install transformers
2.载入预训练GPT-2模型和分词器
1234567891011121314import torch # 导⼊torchfrom transfor ...
无题
从零到一:如何训练简版生成式GPT模型,快速实现创意写作
一、从零到一:你的第一个GPT诞生记
震撼对比:使用相同训练数据(全唐诗30万首)
传统RNN生成:“春风吹又生,花落知多少”(模板化)
简版GPT生成:“墨染江南烟雨楼,一蓑孤舟任水流。青山不语斜阳暮,白鹭惊飞入画轴”(创意性)
二、自回归机制
⾃回归模型(Autoregressive Model)是⽣成式模型的⼀种特例,它预测的新⽬标值是基于前⾯若⼲个已⽣成值的。⾃回归模型在时间序列分析、语⾳信号处理、⾃然语⾔处理等领域有⼴泛应⽤。在序列⽣成问题中,⾃回归模型特别重要,⽐如在机器翻译、⽂本⽣成、语⾳合成等任务中,Transformer的解码器、GPT等模型就是基于⾃回归原理的。
⽤⾃回归机制来逐词⽣成翻译结果。
还是使⽤同样的中英翻译数据集,还是使⽤Transformer模型,这⾥我们只是加⼀个⽤贪婪搜索进⾏⽣成式解码的函数,然后在测试过程中调⽤这个函数重新测试。
之前的数据见:Transformer:GPT背后的造脑工程全解析(含手搓过程)-CSDN博客
2.1定义贪婪解码器函数
1234567891011121 ...
无题
Transformer:GPT背后的"造脑工程"全解析(含手搓过程)
Transformer 是人工智能领域的革命性架构,通过自注意力机制让模型像人类一样"全局理解"上下文关系。它摒弃传统循环结构,采用并行计算实现高效训练,配合位置编码破解序列的时空密码,在机器翻译、文本生成等任务中实现质的飞跃。GPT、BERT等顶尖模型均基于Transformer,其多头注意力设计如同给AI装上"多核大脑",可同时捕捉词语间的语法、语义、指代等多维关系,成为通向通用人工智能的重要基石。
一、从"人工智障"到"智能涌现":Transformer的降维打击
震撼对比实验:
使用相同训练数据(维基百科+图书语料)
RNN模型:“巴黎是法国的首都,位于__” → “塞纳河畔”(正确率68%)
Transformer:“巴黎是法国的首都,位于__” → “北部法兰西岛大区”(正确率92%)
传统模型三大痛点:
梯度消失:长距离依赖难以捕捉(如"虽然…但是…"结构)
计算低效:无法并行 ...
无题
注意力机制:让AI拥有"黄金七秒记忆"的魔法–(自注意力)
⾃注意⼒就是⾃⼰对⾃⼰的注意,它允许模型在同⼀序列中的不同位置之间建⽴依赖关系。⽤我们刚才讲过的最简单的注意⼒来理解,如果我们把x2替换为x1⾃身,那么我们其实就实现了x1每⼀个位置对⾃身其他序列的所有位置的加权和。
如下:
12345678910import torchimport torch.nn.functional as F# 一个形状为 (batch_size, seq_len, feature_dim) 的张量 xx = torch.randn(2, 3, 4)# 计算原始权重,形状为 (batch_size, seq_len, seq_len)raw_weights = torch.bmm(x, x.transpose(1, 2))# 对原始权重进行 softmax 归一化,形状为 (batch_size, seq_len, seq_len)attn_weights = F.softmax(raw_weights, dim=2)# 计算加权和,形状为 (batch_size, seq_len, ...
无题
注意力机制:让AI拥有"黄金七秒记忆"的魔法–(注意力机制中的Q、K、V)
在注意⼒机制中,查询(Query)、键(Key)和值(Value)是三个关键部分。
■ 查询(Query):是指当前需要处理的信息。模型根据查询向量在输⼊序列中查找相关信息。
■ 键(Key):是指来⾃输⼊序列的⼀组表示。它们⽤于根据查询向量计算注意⼒权重。注意⼒权重反映了不同位置的输⼊数据与查询的相关性。
■ 值(Value):是指来⾃输⼊序列的⼀组表示。它们⽤于根据注意⼒权重计算加权和,得到最终的注意⼒输出向量,其包含了与查询最相关的输⼊信息。
用下面栗子打一个比方:
1234567891011import torch # 导入 torchimport torch.nn.functional as F # 导入 nn.functional# 1. 创建两个张量 x1 和 x2x1 = torch.randn(2, 3, 4) # 形状 (batch_size, seq_len1, feature_dim)x2 = torch.randn(2, 5, 4) # 形状 (batch_size ...
无题
注意力机制:让AI拥有"黄金七秒记忆"的魔法–(缩放点积注意力)
一、 缩放点积注意力
缩放点积注意⼒(Scaled Dot-Product Attention)和点积注意⼒(Dot-Product Attention)之间的主要区别在于:缩放点积注意⼒在计算注意⼒权重之前,会将点积结果也就是原始权重除以⼀个缩放因⼦,得到缩放后的原始权重。通常,这个缩放因⼦是输⼊特征维度的平⽅根。
为什么要使⽤缩放因⼦呢?在深度学习模型中,点积的值可能会变得⾮常⼤,尤其是当特征维度较⼤时。当点积值特别⼤时,softmax函数可能会在⼀个⾮常陡峭的区域内运⾏,导致梯度变得⾮常⼩,也可能会导致训练过程中梯度消失。通过使⽤缩放因⼦,可以确保softmax函数在⼀个较为平缓的区域内⼯作,从⽽减轻梯度消失问题,提⾼模型的稳定性。
如上图,相比于点积注意力,多了第三步:将原始权重(得分)除以缩放因子。
1234567891011121314import torch # 导入 torchimport torch.nn.functional as F # 导入 nn.functional# 1. ...
无题
注意力机制:让AI拥有"黄金七秒记忆"的魔法–(点积注意力)
注意⼒机制对于初学者来说有点难理解,我们⼀点⼀点地讲。现在先暂时忘记编码器、解码器、隐藏层和序列到序列这些概念。想象我们有两个张量x1和x2,我们希望⽤注意⼒机制把它俩给衔接起来,让x1看⼀看,x2有哪些特别值得关注的地⽅。
具体来说,要得到x1对x2的点积注意⼒,我们可以按照以下步骤进⾏操作。
(1)创建两个形状分别为(batch_size, seq_len1, feature_dim)和(batch_size, seq_len2, feature_dim)的张量x1和x2。
(2)将x1中的每个元素和x2中的每个元素进⾏点积,得到形状为 (batch_size, seq_len1, seq_len2)的原始权重raw_weights。
(3)⽤softmax函数对原始权重进⾏归⼀化,得到归⼀化后的注意⼒权重attn_weights(注意⼒权重的值在0和1之间,且每⼀⾏的和为1),形状仍为 (batch_size, seq_len1, seq_len2)。
(4)⽤注意⼒权重attn_weights对x ...
无题
循环神经网络:给AI装上"记忆芯片"
RNN的核⼼思想是利⽤“循环”的机制,将⽹络的输出反馈到输⼊,这使得它能够==在处理数据时保留前⾯的信息==,从⽽捕获序列中的⻓距离依赖关系,在处理序列数据,如⽂本、语⾳和时间序列时具有明显的优势。
在每一次的输入处理中都会把之前已经提问过的问题通过与权重相乘到新的节点。
结合前⼀时间步的隐藏层状态$h_{(t-1)}$,计算当前时间步的隐藏层状态$h_t$(即上图中的h)。这通常通过⼀个激活函数(如tanh函数)实现。计算公式如下(其中,$W_{hh}$是隐藏层90到隐藏层的权重矩阵,$W_{xh}$是输⼊到隐藏层的权重矩阵)
$$
h_t = tanh(W_{hh} * h_{(t-1)} + W_{xh} * x_t + b_h)
$$
(3)基于当前时间步的隐藏层状态$h_t$,计算输出层$y_t$(RNN在时间步t的输出)。通常通过⼀个线性变换和激活函数实现。计算公式如下:
$$
y_t = softmax(W_{hy} * h_t + b_y)
$$
==RNN采⽤BPTT算法进⾏训练==。
与普通反向传播不同,B ...
无题
Seq2Seq:让机器学会"同声传译"的魔法架构
一、当AI遇上国际会议:传统模型的三大困境
震撼案例:2016年某国际峰会,机器翻译出现致命错误:
原文:“The agreement is not legally binding” 错误翻译:“协议没有装订书皮” 正确翻译:“该协议不具备法律约束力”
这个真实事故背后暴露了传统模型的三大局限:
长度桎梏:定长输入 vs 动态议程
语境丢失:逐词翻译导致语义断裂
歧义困境:无法处理一词多义(如"apple"指水果公司)
Seq2Seq架构:编码器-解码器架构
1.1构建实验语料库和词汇表
123456789101112131415161718192021222324252627282930# 构建语料库,每行包含中文、英文(解码器输入)和翻译成英文后的目标输出 3 个句子sentences = [ ['咖哥 喜欢 小冰', '<sos> KaGe likes XiaoBing', 'KaGe likes XiaoBing ...
无题
图解Word2Vec:如何让AI真正“读懂”人类语言?
一、从"文字游戏"到"语义地图":词向量革命
“国王 - 男人 + 女人 = 女王”
这个震撼NLP界的经典公式,揭开了词向量的神秘面纱
传统文本处理就像让AI玩"文字连连看":机械统计词频、匹配固定规则。这种处理方式最大的痛点是什么?看看这个例子:
病例报告
患者:“医生,我最近总是心慌、手抖、容易饿”
传统AI诊断:发现"心"出现3次,"手"出现2次 → 重点检查心血管系统
实际诊断:甲状腺功能亢进
这个真实的医疗AI误诊案例,暴露了传统文本处理的致命缺陷——只见树木不见森林。而词向量的诞生,让AI第一次拥有了理解词语深层含义的能力。
二、Word2Vec的魔法原理(附代码实战)
2.1 从"填空题"到"完形填空":两大核心模型
CBOW模型:像做填空题
输入:四周的词语(如"猫 会 __ 老鼠")
输出:预测中间词(“抓”)
Skip-Gram模型:像完形填 ...