1.编解码
外国人来到中国,是如何知晓“梨”的中文?
相同的词,上下文应该都是相关的,又因为是计算机,所以需要将语义关系码进行数字化,这些数字需要体现出语义关系。
1.编解码的两个标准
编解码的两个标准包括
:1.数字化;2.表达数字化后的数值之间的语义关系。
分词器和独热编码one-hot的问题:
分词器
:将数值映射到一维空间中,太过密集,容易出现语义冲突。只利用了长度,没有把维度利用起来。one-hot
:维度太高,比如苹果香蕉华为,独热编码的维度和token数相关,因此这里维度为3,100,010,001,用向量表示的话,发现发现token之间内积为0,空间维度太高,忽略token之间的长度问题,导致他们分布过于均匀,没有利用长度表达语义之间的关系。
那么如何解决以上两种极端情况呢?
-
要么将一维进行放缩为高维,要么将高维进行压缩。【压缩数据肯定比解压要更简单】
-
所以我们对独热编码进行降维。这里就设计矩阵和空间变换的基础了,我们可以利用向量和矩阵相乘,将向量(向量中的每个元素你可以视作一个数据点)投射到一个新的空间中,本质是对原始的向量进行了一个Linear变换(依旧是一个点对点的关系)。
一次函数(也就是线性函数),那么变量和函数值就是一个一一对应的关系,而二次函数身为非线性函数就无法保证点和点的关系。
所以说矩阵相乘能够很好的进行空间变换并保证数据与数据之间的关系。
2.神经网络基础
神经网络的数学表达式本质也是一堆矩阵运算。
sigmoid(WTX+B):本质上就是一个非线性变换,除了将原来的数据点投射到新的空间外,还能通过偏置B学习到现实世界的误差(即一种噪音),从而能够很好的拟合现实世界的数据分布。
比如猫狗分类,如果我们将原空间里面的每个数据都视作一个点的话,那么照片的分类结果就相当于投射到了新的空间,如果只需要分辨猫和狗两种状态的话,那么新空间也就只有两个点,即多对一的关系。而神经网络的作用本就是实现原空间的非线性变换,使所有能够代表猫的数据投射到一个点上,能够代表狗的数据投射到一个点上。
为什么增加更多的神经元就有更强的能力?
神经元越多,我们就能将原有数据映射到一个更高的维度的中,即便在更高的维度中,一定能找到一个超平面将数据进行分类。
为什么隐藏层越多,神经元数越少?
我们可以将隐藏层理解为:它是对上一层原始数据进行抽象。
再细致一点来说,隐藏层数可以代表他对数据进行抽象的程度,如下图的数字分类(隐藏层数越高,抽象程度越高):
3.回答为什么要进行编码解码
编码: 先将文本编成独热码one-hot,然后进行降维,这个过程相当于将输入的一句话根据语义映射到一个潜空间中,把高维对象投射到潜空间,即为Embedding,而将高维映射到低维的矩阵即叫做嵌入矩阵。这个过程叫做词嵌入。
潜空间到底代表什么?
潜空间本身就代表一个语义空间,如下图所示,每个向量代表一个title,而在图片中,潜空间每个向量即为一个通道,而一个文本的含义也就是潜空间上所有语义叠加在一起。
而潜空间与中文手册实验最大区别就是:潜空间是连续的,而中文手册不是,哪怕遇到之前没有学习过的情况,仍然能够在潜空间中找到对应的对象,而中文手册更像是一个K-V,这是无穷尽的。
4.如何找到将真实语言中的token投入到潜空间的方法?
即找到能够将token进行降维的嵌入矩阵——Word2Vec.
Word2Vec的作用:类似于编词典给Token用。
Word2Vec的主要方法:CBOW
核心思想就是根据上下文语义信息推断出缺失tokend的语义,类似于高中物理,根据力的分力得到合力。它的目的并不是完形填空帮助你找到缺失词的具体内容,而是像词典一样帮你找到近似语义。
因此,你可以发现,根据Word2Vec训练出来的潜空间里面的词向量对应的词意,不依赖于作者的主观意图,是一种客观表达,跟语境相关。
5.注意力
对词和词组合后的语义理解,就是靠的注意力机制。
注意力机制需要搞定的就是:识别出因为上下文关联而对词典中原本客观的语义,进行调整的幅度
Q和KT之间的内积运算主要体现的是它们之间相互的关系,每一个词向量都要和其他的词向量进行相乘得到关系。然后进行softmax得到概率分布,即得到语义之间的相互关系
为什么要用两个剧中Q*KT相乘呢?
如果用一个矩阵进行相乘的话就是一个线性运算,输入的数据X到输出数据A是一个线性变化,只能表示线性关系。
而两个句子相乘,看起来就像一个二次型,更像是一种高维版本,有着更强的表达能力,给模型注意力机制加一些非线性要素。
为什么不能用矩阵跟自己转置相乘呢(如下图B所示)?
首先语义可以分为两部分
:
把主观语义分为设定语义和表达语义,并存不同的思想,但又可以基于一套客观语义所表达出来。
- 设定语义:提前设置好了语境背景,为后面表达设定基础。
- 表达语义:根据上下文语义填写挖空。
- 在不同的设定语义之下,表达的思想不同,而又可以基于一套客观语义表现出来。
如果设定语义和表达语义有差异的话,会通过反向传播算法,利用WQ和WK进行点积缩小差距。
6.自注意力机制
自注意力机制都是从原有材料里面总结出来的,且Q、K、V的生成都是来自相同的数据。因此自注意力机制需要先了解设定语义,根据设定语义理解表达语义。
7.交叉注意力机制
像是身边有参考资料,省略掉了理解设定语义的过程,但是只能在表达语义中学习知识,交叉注意力适合校准,因此适用于翻译任务。
8.Transformer中的训练和推理流程
1.训练:
比如好久不见
和long time no see
,分别输入到编码器和解码器,然后按照Transformer的流程,直到红圈地方有一个交叉注意力进行互相匹配,最后得到一个损失函数,即得到二者词向量之间的差异。然后通过损失函数得到的损失值进行反向传播去修改模型的参数,最后使编码器和解码器在潜空间的词向量的词义是能够对应起来的。
2.推理:
把输入翻译成词向量,再把词向量翻译成对应目标的语言可以吗?
答案是肯定不行的,因为中英文的token并不一一对应。
那么翻译问题是如何解决的呢?
Transformer在解码器中采用了RNN的策略。编码器不变,依旧将输入编码得到潜空间里的词向量。在解码器部分,需要输入一个代表开始的特殊符号,然后经过交叉注意力进行计算得到一个结果,然后将这个结果
经过升维和SoftMax结果计算后会将词汇表中的所有Token计算一个概率数值,然后选择概率最大的那个作为结果,这个结果代表下一个Token为什么。
然后下一次解码器的流程就会将以前的输出作为一个新的输入,经过交叉注意力得到新的结果。
9.位置编码
如果没有位置编码,所有的Token就会被Transformer并行计算了,所以我们要保证词向量的位置顺序。
- 通过矩阵乘法增加位置信息。【影响偏大,增加位置信息相当于加了一层结构】
- 通过偏置B增加位置信息。
我们可以加一个矩阵,该矩阵可以体现出词向量的相互顺序。这里的具体工作是:将一个自然数集映射到与词向量维度相同的连续空间中。然后与词向量矩阵进行相加。
如何把自然数映射到连续空间中?
傅里叶级数:
我们将函数看作向量,然后相加。
思路
:通过痕迹还原出案发过程和作案动机来。【侦探:通过作案动机思考作案背景对作案痕迹进行推导】
绝对位置编码和相对位置编码的区别:
- 绝对位置编码是对数据进行修改,数据本身进行增强。
- 相对位置编码,会更多考虑到一个词向量和另一个词向量的相对位置。