【大语言模型——Day12】
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
认识NLP
什么是NLP
NLP(Natural Language Processing),即“自然语言处理”,主要研究使用计算机来处理、理解及运用人类语言的各种理论和方法,属于人工智能的一个重要研究方向。
简单来说,NLP就是如何让计算机理解人类语言。
NLP的主要研究方向
NLP是一个庞大的技术体系,研究方向主要包括机器翻译、信息检索、文档分类、问答系统、自动摘要、文本挖掘、知识图谱、语音识别、语音合成等。
相较于CNN重点应用于计算机视觉领域,RNN则更多地应用于NLP方向。
词汇表征
什么是词汇表征
在NLP中,最细粒度的表示就是词语,但是计算机并不能直接识别词语,需要将词语转化为计算机可识别的数值形式,这种对词语的转化和表征就是“词汇表征”。
词汇表征的种类
- one-hot编码
缺点:维数灾难、不能很好地获取词汇间的相似性
- 词嵌入(Word Embedding)
将词汇表中的每个单词表示为一个合理的普通向量,word2vec是典型的词嵌入技术
word2vec
word2vec介绍
word2vec是一种基于神经网络的词嵌入技术,通过训练神经网络得到一个关于输入X和输出Y之间的语言模型,获取训练好的神经网络权重,这个权重是用来对输入词汇X进行向量化表示的。
word2vec的两种模型
- CBOW模型
CBOW(Continuous Bag-of-Words Model),即“连续词袋模型”,其应用场景是根据上下文预测中间词,输入X是每个词汇的one-hot向量,输出Y为给定词汇表中每个词作为目标词的概率。
- Skip-gram模型
也称为"跳字模型",应用场景是根据中间词预测上下文词,所以输入X为任意单词,输出Y为给定词汇表中每个词作为上下文词的概率。
全连接神经网络
全连接神经网络
全连接神经网络是一种连接方式较为简单的人工神经网络结构,某一层的任意一个节点,都和上一层所有节点相连接。
感知器工作机制
感知器即单层神经网络,也即"人工神经元",是组成神经网络的最小单元
神经网络的激活函数
在神经网络中可以引入非线性激活函数,这样就可以使得神经网络可以对数据进行非线性变换,解决线性模型的表达能力不足的问题。
常见的激活函数
- Sigmoid激活函数
y = 1 1 + e − x \Large y=\frac{1}{1+e^{-x}} y=1+e−x1
- Relu激活函数
y = m a x ( 0 , x ) \Large y=max(0,x) y=max(0,x)
- tanh激活函数
y = e x − e − x e x + e − x = 1 − e − 2 x 1 + e − 2 x \Large y=\frac{e^x-e^{-x}}{e^x+e^{-x}}=\frac{1-e^{-2x}}{1+e^{-2x}} y=ex+e−xex−e−x=1+e−2x1−e−2x
- Softmax激活函数
p l = e z l ∑ j = 1 k e z j \Large p_l=\frac{e^{z_l}}{\sum_{j=1}^ke^{z_j}} pl=∑j=1kezjezl
Softmax激活函数计算的结果是各个分类的预测概率值,常用于多分类问题
神经网络的过拟合问题
神经网络因为隐藏层的存在可以实现复杂的非线性拟合功能。但随着神经网络层数加深,神经网络很容易发生过拟合现象(在训练集上表现很好,在未知的测试集上表现很差,即“泛化能力差”)。
解决神经网络过拟合问题的方法
- 正则化
与很多机器学习算法一样,可以在待优化的目标函数上添加正则化项(例如L1、L2正则),可以在一定程度减少过拟合的程度。
- Dropout(随机失活)
可以将Dropout理解为对神经网络中的每一个神经元加上一道概率流程,使得在神经网络训练时能够随机使某个神经元失效。
注意:
- 对于不同神经元个数的神经网络层,可以设置不同的失活或保留概率
- 如果担心某些层所含神经元较多或比其他层更容易发生过拟合,则可以将该层的失活概率设置得更高一些
前向传播与反向传播
前向传播
计算输出值的过程称为“前向传播”:将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止。
反向传播(Back Propagation,BP)
反向传播(BP)说白了根据根据J的公式对W和b求偏导,也就是求梯度。因为我们需要用梯度下降法来对参数进行更新,而更新就需要梯度。
总结:
前向传播得到输出,反向传播调整参数,最后以得到损失函数最小时的参数为最优学习参数。
RNN介绍
认识RNN
RNN(Recurrent Neural Network),即"循环神经网络",是在基础神经网络模型中增加了循环机制。具体的表现形式为网络会对前面的信息进行记忆并应用于当前的计算中,即当前时刻利用了上一时刻的信息,这便是“循环”的含义。
RNN的应用领域
- 语音识别
- OCR识别(optical character recognition)
- 机器翻译
- 文本分类
- 视频动作识别
- 序列标注
常见的RNN模型
LSTM
认识LSTM
LSTM是Long-Short Term Memory的缩写,中文名叫长短期记忆网络,它是RNN的改进版本。为了更好地解决“梯度爆炸”和“梯度消失”的问题,让RNN具备更强、更好的记忆,于是就出现了LSTM。
LSTM的“门结构”
LSTM的关键就是记忆细胞(在最上面的贯穿水平线上)。记忆细胞提供了记忆的功能,使得记忆信息在网络各层之间很容易保持下去。
- 遗忘门(Forget Gate)
遗忘门的作用是控制t-1时刻到t时刻时允许多少信息进入t时刻的门控设备
遗忘门的计算公式如下:
Γ
t
f
=
σ
(
w
f
[
a
t
−
1
,
x
t
]
+
b
f
)
\Large \Gamma_t^f=\sigma(w_f[a_{t-1},x_t]+b_f)
Γtf=σ(wf[at−1,xt]+bf)
其中,xt是当前时刻的输入,at-1是上一时刻隐状态的值
- 输入门(Input Gate)
输入门的作用是确定需要将多少信息存入记忆细胞中。除了计算输入门外,还需要使用tanh计算记忆细胞的候选值c't
Γ
t
i
=
σ
(
w
i
[
a
t
−
1
,
x
t
]
+
b
i
)
c
t
′
=
t
a
n
h
(
w
c
[
a
t
−
1
,
x
t
]
+
b
c
)
\Large \Gamma_t^i=\sigma(w_i[a_{t-1},x_t]+b_i) \\ \Large c'_t = tanh(w_c[a_{t-1},x_t]+b_c)
Γti=σ(wi[at−1,xt]+bi)ct′=tanh(wc[at−1,xt]+bc)
然后,就可以对当前时刻的记忆细胞进行更新了
c
t
=
Γ
t
f
c
t
−
1
+
Γ
t
i
c
t
′
\Large c_t=\Gamma_t^fc_{t-1}+\Gamma_t^ic'_t
ct=Γtfct−1+Γtict′
- 输出门(Output Gate)
输出门是用来控制t时刻状态值对外多少是可见的门控设备
输出门与t时刻隐层节点输出值得公式为:
Γ
t
o
=
σ
(
w
o
[
a
t
−
1
,
x
t
]
+
b
o
)
a
t
=
Γ
t
o
t
a
n
h
(
c
t
)
\Large \Gamma_t^o=\sigma(w_o[a_{t-1},x_t]+b_o) \\ \Large a_t=\Gamma_t^otanh(c_t)
Γto=σ(wo[at−1,xt]+bo)at=Γtotanh(ct)
Seq2Seq模型
Seq2Seq表现形式
在RNN的结构中,最常见的就是不等长的多对多结构,即输入、输出虽然都是多个,但是并不相等。这种不等长的多对多结构就是Seq2Seq(序列对序列)模型。
例如,汉译英的机器翻译时,输入的汉语句子和输出的英文句子很多时候并不是等长的,这时就可以用Seq2Seq模型了。
Encoder+Decoder
Seq2Seq由一个编码器(Encoder)和一个解码器(Decoder)构成,编码器先将输入序列转化为一个上下文向量C(理解序列),然后再用一个解码器将C转化为最终输出(生成序列)。
-
编码器(Encoder)
-
解码器(Decoder)
引入Attention模型的必要性
Seq2Seq作为一种通用的编码-解码结构,在编码器将输入编码成上下文向量C后,在解码时每一个输出Y都会不加区分地使用这个C进行解码,这样并不能有效地聚焦到输入目标上。
Seq2Seq+Attention模型
Seq2Seq引入Attention模型后,Attention模型(注意力模型)通过描述解码中某一时间步的状态值和所有编码中状态值的关联程度(即权重),计算出对当前输出更友好的上下文向量,从而对输入信息进行有选择性的学习。
y 1 = f ( C 1 ) y 2 = f ( C 2 , y 1 ) y 3 = f ( C 3 , y 1 , y 2 ) . . . \Large y_1=f(C_1) \\ \Large y_2=f(C_2,y_1) \\ \Large y_3=f(C_3,y_1,y_2) \\ ... y1=f(C1)y2=f(C2,y1)y3=f(C3,y1,y2)...
大模型的预训练与微调
预训练
预训练(Pre-training)是语言模型学习的初始阶段。在预训练期间,模型会接触到大量未标记的文本数据,例如书籍、文章和网站。在大量未标记文本数据上训练语言模型。比如说在包含数百万本书、文章和网站的数据集上预训练像 GPT-3 这样的语言模型。预训练目标是捕获文本语料库中存在的底层模式、结构和语义知识。
预训练(Pre-training)是指在目标任务之前,使用大规模数据集和无监督学习的方法对模型进行初始训练。在预训练阶段,模型通过学习输入数据的内部表示来获取知识和特征,以便在后续的具体任务上进行微调或迁移学习。
预训练通常是在无标签数据上进行的,这意味着训练数据不带有人工标注的目标输出。这种无监督的学习过程使得模型可以从大规模数据中提取有用的特征和模式,而无需人工标注的标签信息。
预训练的主要目的是通过大规模无监督学习来为模型提供初始的参数和表示。通常采用的方法是自编码器(autoencoder)或生成对抗网络(generative adversarial network, GAN)等。这些方法可以通过最大化数据的重构误差或通过生成与真实数据相似的样本来学习有效的特征表示。
预训练的主要特点:
- 无监督学习:预训练通常是一个无监督学习过程,模型在没有明确指导或标签的情况下从未标记的文本数据中学习。
- Masked Language Modeling:模型经过训练以预测句子中缺失或屏蔽的单词,学习上下文关系并捕获语言模式。
- Transformer 架构:预训练通常采用基于 Transformer 的架构,因为这种架构擅长捕获远程依赖关系和上下文信息。
总的来说,预训练是一种利用大规模无监督学习的方法,通过学习数据的内部表示来为模型提供初始参数和特征表示,为后续的具体任务提供更好的初始状态,从而提高模型的性能和泛化能力。
微调
微调(Fine-Tuning)是在特定任务或领域上进一步训练大型语言模型(LLM)的过程。这可以通过使用预训练的LLM作为起点,然后在特定任务或领域的标记数据集上训练它来完成。微调可以通过调整模型的权重来更好地拟合数据,从而提高LLM在特定任务或领域上的性能。
微调(Fine-tuning)是指在预训练(Pre-training)阶段之后,使用特定任务的有标签数据对模型进行进一步的训练和调整参数,以使其在目标任务上获得更好的性能。
在微调过程中,预训练得到的模型参数作为初始状态,然后在特定任务的有标签数据上进行训练。通常,只有少量的有标签数据可用于微调,这使得模型能够更好地适应目标任务的特定要求。
微调的关键是调整预训练模型的参数,以使其更好地适应目标任务的特定领域或数据分布。这个过程通常包括以下几个步骤:
- 冻结部分参数:为了保持预训练模型的初始表示能力,通常会冻结部分参数,特别是底层的参数,使其在微调过程中保持不变。这样可以避免较大的参数更新,防止过度调整模型的初始表示。
- 更新顶层参数:针对目标任务的特定要求,通常会添加一个或多个新的层,这些层称为顶层(top layers)。这些顶层将与预训练模型连接,并根据目标任务的标签数据进行训练。在微调过程中,主要是更新这些顶层参数,以使其适应目标任务的特定输出。
- 调整参数:在微调过程中,通过反向传播算法和优化方法(如随机梯度下降),根据目标任务的损失函数来调整模型的参数。由于预训练模型已经通过大规模无监督学习进行了初始化,微调过程通常只需要较少的训练数据和较少的迭代次数。
微调的目标是将预训练模型的泛化能力与目标任务的特定要求相结合,从而获得更好的性能。通过使用预训练模型的特征表示和参数初始化,微调可以加快模型在目标任务上的收敛速度,并提供更好的泛化能力。