LLM基础--正则化,激活函数、位置编码、tokenizer
LLM基础--正则化,激活函数、位置编码、tokenizer
介绍在LLM中使用的正则化等操作以及基本原理。
同步更新:https://www.mubu.com/doc/l5NKGsTB1C
一、正则化
有助于减少模型的过拟合,提高模型的泛化能力,并加速训练过程
1、Layer Norm
2、Batch Norm
3、RMS Norm
二、激活函数
1、ReLU
2、Leaky RELU
3、Tanh
4、ELU
5、SwiGLU
三、位置编码
用于在输入序列中标记每个单词或标记的位置,这有助于模型理解输入序列中各个部分的位置关系,从而更好地捕捉序列中的长距离依赖关系。一般而言就是计算得到位置编码之后将其与input embedding进行相加得到结果。
1、Absolute Positon Embedding
2、Relative Position Embedding
3、RoPE
旋转编码RoPE可以有效地保持位置信息的相对关系,即相邻位置的编码之间有一定的相似性,而远离位置的编码之间有一定的差异性。这样可以增强模型对位置信息的感知和利用。这一点是其他绝对位置编码方式(如正弦位置编码、学习的位置编码等)所不具备的,因为它们只能表示绝对位置,而不能表示相对位置。
旋转编码RoPE可以通过旋转矩阵来实现位置编码的外推,即可以通过旋转矩阵来生成超过预训练长度的位置编码。这样可以提高模型的泛化能力和鲁棒性。这一点是其他固定位置编码方式(如正弦位置编码、固定相对位置编码等)所不具备的,因为它们只能表示预训练长度内的位置,而不能表示超过预训练长度的位置。
旋转编码RoPE可以与线性注意力机制兼容,即不需要额外的计算或参数来实现相对位置编码。这样可以降低模型的计算复杂度和内存消耗。这一点是其他混合位置编码方式(如Transformer-XL、XLNet等)所不具备的,因为它们需要额外的计算或参数来实现相对位置编码
通过计算内积来对位置信息进行表示:\(<f_q(x_m,m), f_k(x_n, n)>=g(x_m, x_n, m-n)\) 以二维例子为例,如在计算query时:\(f_q(x_m,n)=(W_qx_m)e^{im \theta}\) 那么对于\(f_q\)可以表示为:\(\left(\begin{array}{cc}{\cos m\theta}&{-\sin m\theta)}\\{\sin m\theta}&{\cos m\theta}\\\end{array}\right)\left(\begin{array}{cc}{W_{q}^{(1,1)}}&{W_{q}^{(1,2)}}\\{W_{q}^{(2,1)}}&{W_{q}^{(2,2)}}\\\end{array}\right)\left(\begin{array}{c}{x_{m}^{(1)}}\\{x_{m}^{(2)}}\\\end{array}\right) =\left(\begin{array}{cc}{\cos m\theta}&{-\sin m\theta}\\{\sin m\theta}&{\cos m\theta}\\\end{array}\right)\left(\begin{array}{c}{q_{m}^{(1)}}\\{q_{m}^{(2)}}\\\end{array}\right)\)这样一来也就是说对于最初的query乘一个旋转矩阵。