Tookenization:文字转数字,tittoken词库大小vocab_size 100246
Positon Encoding:
每个单词的token都能包含它的位置信息;模型可以看到文字之间的距离;模型可以看懂并学习到为止编码规则
Layer normalization层归一化:就是叫数字缩放,缩放规则:1、均值为0;2、方差为1
Y = x-u /sqrt(b*b + c) + b
Softmax数字变概率:转换规则:总和为1
输入文字转成token化,也是变成矩阵+位置信息变成矩阵。
比如样本:1.小沈阳江西演唱会邀请了,2明星刀郎的歌火遍大江南北,3 2002年的第一场雪比2001年来得更 4. LLM张老师的粉丝全是正能量
- 准备QKV
准备QKV,把一堆样本扔进去,文本转化成token矩阵的表现形式,把每个文字转化成对应的token,一共是16个token,也就是叫做context lens等于16,那么每一行都代表了一个文字对应的token,列是定义叫做d_model的512,512个维度的语意学习,所以形成16x512维度矩阵,假设分4个批次,我们会经常看到所谓的transformer
矩阵相乘[4,16,512] = [batch_size,ctx_length,d_model],把样本分成3分,那么它们分别乘以Wq、Wk、Wv,它们是权重矩阵[512,512],这些参数初始的时候是随机化的值,在模型训练当中会自动调节的。X * Wq = Q [4,16,512]
- 切分多头
切分多头,把每一个Q、K、V都切成多个小份,比如对K的维度切成4份,每份就是128个,定义为d_key,矩阵为[4,4,16,128]=[batch_size,num_heads,ctx_length,d_key],实际是[ctx_length,d_key]去做相关度计算
- 注意力计算
矩阵相乘代表注意力的高低,第一步是Q和K的转型的相乘,不管V,Q*K' =[16,128],每一个头的每一批分别去相乘,得到[4,4,16,16]的矩阵
文字和文字的交叉,越大关联度越大,都是对值进行调整,没有进行scale
- 把Q*K'的值进行缩放,除于sqrt(d)
(QK’/sqrt(d))
5.Mask遮挡
一个字一个字去预测,需要把上山角的值遮挡住,变成0或者负无穷
- 把4*4=16个矩阵的数字变成百分比的概率:softmax(QK’/sqrt(d))
也都是对值进行调整,没改变矩阵形状,每一行总值=1
此步得到[16,16]矩阵,每一行每一列,分别代表了样本文字的每一个文字的token,所以这是每一个文字token对应其他token的权重关系,因为已经转化成百分比的形式
- 乘以V,得到关注度Attention = softmax(QK’/sqrt(d))
v:是每一行代表文字token,每一列代表维度,也就是有128个维度,V里面的值是最初的样本文字随机初始化的数字。
V的矩阵为[4,4,16,128],softmax(QK’/sqrt(d))的矩阵为[4,4,16,16],都是后2个数相乘,相乘等于[4,4,16,128]
Attention 中的值是每一个文字的token对应所有其他文字的百分比,比如:样本文字中的小字对应我们样本文字里其他16个文字在128维度下的关注度权重的总和,百分比值为2%;比较哪些文字的重要性最高。
- 把被切成的4个头合并(concatenate),得到[4,16,512]
- 和Wo矩阵[512,512]相乘,进行线性变换,得到[4,16,512]
12层,每一层是学习到自己的权重,存起来
更新word embedding数值以作为下一次循环的复用,每一次循环为了把权重值调整确
QKV的作用是更新初始化这些token的向量表,把它们的值调准确,在各自的语境下调的非常有意义;更新Wq Wk Wv权重值
Attention的几何逻辑:矩阵用来存放样本文字的token,每一行代表了token的文字,每一列代表想学习多少维度的这个语义信息。
假设学习率Learning Rate=0.1:
新的权重 = 旧的权重 - Learning Rate * 误差
比如经过一次transformer计算出来之后得到的误差是-0.4,旧权重值为0.90,得到新权重为0.94 = 0.90 - 0.1*(-0.4),然后通过反向传播机制再循环计算误差和新权重
误差是跟真实值的差距。
学习率可以用梯度下降原理
对比计算损失值
**损失函数:**一种衡量模型和数据吻合程度的算法,针对单个样本的。比如均方误差、平均绝对误差、均方根误差
**代价函数:**将所有损失函数的值取平均值的函数,针对所有样本的。
**Residual Connection残差连接:最早有微软提出,把我们通过一系列计算出来的值,再跟原始值进行一次相加,加完之后再走下一步,**防止梯度消失、梯度爆炸:差距拉得大,有可能造成学习速率慢。有残差连接,控制找的范围,增加寻找速度
**dropout:**神经网络随机丢弃层,随机的丢掉一些数据(防止模型过拟合),一般设为0.1,当成没算过它,让下次计算再填入这些随机被丢弃的数重新计算。这个不完全数据transformer中的,是神经网络中也有
**词嵌入向量+位置信息:**真正丢给模型计算的是这个和,input embedding,每次循环都在更新词嵌入向量(交叉熵函数训练来更新此里面的值)
**位置信息:**通过正弦和余弦,控制在-1到1之间,一直不更新
相似词的“距离”而非绝对位置,加入不同的位置信息,得出的结果不一样
transformer是基于神经网络之上的算法,看看神经网络到底是啥?默认人大脑的神经。线是Q;neural network上下文长度不能太长,记忆有限,transformer效果更好
Plaintext
举例最简单的神经网络
model = nn.Sequential(
nn.Linear(2,3), //输入层到隐藏层
nn.ReLU(),//激活函数
nn.ReLU(3,1),//隐藏层到输出层
)
模型的推理过程,是用了不改变训练出来的Wq Wk Wv权重值
好词好句
方向不对,努力白费
圆脸7分财,不富也镇宅