参考视频:LayerNorm和Softmax概念
那我们第三部分的概念,也就是概念的最后一部分
关于LayerNorm和Softmax的概念、以及最后文字是怎么预测出来的
我们先来看一下这个layer normalization,简称layer norm层归一化。我觉得叫数字缩放,更容易理解一些。尤其对初学者,层归一化太抽象了。其实它在做的事情,就是对数字进行缩放。
具体来说,比如我们有这一组数字,那么它分别代表什么呢?形象一点说,它是我们的训练数字的token。比如说“小沈阳邀”,它的token分别是22、5、6、8,就通过一系列计算,可能变大了一些。那么layer normalization在做的事情,就是把这些数字缩小一些,缩在这个正负一附近的范围之内。同时,还要保持它们之间的相对大小关系。比如说22是最大的,5是最小的。
那么缩放规则,就是第一个要均值为0,第二个方差为1。什么意思呢?就是缩放完后,这些所有的数字加起来,它们的平均值等于0。所以你看,有正数有负数,它们相加的平均值等于0。然后,第二个方差为1,这个看起来挺复杂,咱们不用管它。具体来说,就是所有每一个值减去它们的平均值之后,再开一个平方根的意思。有一个数学公式,这个公式就是所谓的layer normalization的公式,那么X,就代表了这每一个值,它要减去均值,然后除以根号下它的方差。这个公式,其实我们不用去记。大语言模型的训练里面,如果用Pytorch这样的框架,那就是一行代码的事儿,就这个 nn.layernorm(bias=True) 就可以直接完成这一个部分的操作。
那么主要展开讲的,有两部分,其实它里面蕴含了两个可以训练的参数,分别是贝塔和伽马。那这两个东西,也是不需要我们去调的,是我们的大语言模型会自动去更新的这个参数的。
那么这个代表了什么意思呢?其实就是在我们做这个数字缩的时候,除了我们用这个公式之外,它还有两个这个值可以去学习。那么一个呢,是这个公式乘以的一个系数伽马,另外一个,是加上一个偏置项bias,这是个偏置项,用来调节我们这些数,这些偏值项都是很小的数字。当然有的模型训练里面,也不加这个偏置项,有的也不会去乘这个伽马系数。所以,我们现在不用管它。如果说在我们不加偏执项的时候,就把这个bias设置为false,加的话,就给它设置为true就可以了。
我们需要懂的就是这一层的目的,是把文字的数字做一个缩放。这个缩放,可以在很多地方都会插入进去。比如,我们进行了一系列运算之后,文字变大了,那我们就要给它做一次layernorm,把它文字再变小些就可以。
下一个,是关于Softmax,Softmax其实更简单,它就是把数字变概率,这个Softmax主要是用在最后一步,就是我们输出预测文字的部分。同样看例子,那我们有一系列这些计算结果,那么这些数字,就是我们通过注意力机制所计算出来的权重,每一个字有不同的权重,我们现在要做的是在这些权重里面选概率最高的(权重最高的)那个值作为下一个输出预测的结果。那么这样选的话,看的不是很直观,更直观的方式就是把它们转换成百分比,就比较直观了。明显“请”字百分比最高。我们刚才的训练样本是“小沈阳邀”,所以下一个字预测的是“请”,所以“请”字的百分比最高。
那如何将我们的权重数字转化成百分比呢?也有一个Softmax公式。同理,不用看公式,一个torch.softmax() 的函数,就可以直接把我们所有的数字转换成我们的百分比了。那百分比的意思也就是说,我们所有的数字的总和加起来等于1,即百分之百。所以每一个单独的数字,就是在百分之百的区间当中的各自的占比。公式的话,是这样的,如果说把这一行的数字分别转换成百分比的话,那我们就用一个分子和分母。分母,是所有可能出现元素的总和,然后分子,是每一个元素,这样就能计算出来一个百分比的。那么E叫做自然常数E,也就是E的3.01次方加上E的0.09次方,再加上每一个数的次方作为分母。分子,就是分别当前的这个E的3.01次方。这样除出来的结果,就是它的百分比。也就是torch.softmax() 函数就能完成的。我们知道它底层逻辑就可以了。
重新回到这个transformer的结构图里来,我们看Softmax是在所有的运算之后,最后一步用到这个Softmax。也就是说,前一步,是我们预测出来的概率词,那么它是一个我们所有样本的词典,长度的一个非常大的映射的一个向量,或者叫矩阵。那么如果说我们词典是1万个字,那么这个就是有1万个数字权重的这样的一个矩阵。然后,我们把这所有的数字权重通过softmax转换成百分比,那么挑出来百分比最高那个词就是我们预测的文字了。那Softmax主要用处在这儿。但大家看,在多头注意力机制里面还有一个Softmax。同理,它的作用就是把我们之前计算的结果转换成百分比,然后应用到另一个结果里面去。
那这一部分,我们会在即将进入的transformer的架构讲解里面去接触它。