从零构建大模型
在微信读书中打开 →大道至简,就是自己关注自己,输入序列里面每个元素都会关注和其他元素之间的关系,从而发现更深层次的语义关系。
在自注意力机制中,“自”指的是该机制通过关联单个输入序列中的不同位置来计算注意力权重的能力。
在微信读书中查看 ↗
划重点!这个是RNN的问题,也是transform架构要解决的问题,捕捉长距离的关系,以应对更加复杂的问题。
编码器-解码器RNN的一个主要限制是,在解码阶段,RNN无法直接访问编码器中的早期隐藏状态。因此,它只能依赖当前的隐藏状态,这个状态包含了所有相关信息。这可能导致上下文丢失,特别是在复杂句子中,依赖关系可能跨越较长的距离。
在微信读书中查看 ↗
将“离散”映射到“连续”的向量空间至关重要!!!“连续的向量空间” = 给每个词元 / 位置分配一个 “可微调的实数坐标”,让它们从 “孤立的 ID 标签” 变成 “能体现关联、可计算相似度、可渐变优化的语义 / 位置载体”—— 这是大模型能学习到语言规律的基础。
作为一种查找操作,PyTorch中的嵌入层用来检索与词元ID对应的向量。所得的嵌入向量为词元提供了连续的表示形式,这对于训练像大语言模型这样的深度学习模型至关重要。
在微信读书中查看 ↗
学到这我自己也尝试总结下:
1、首先需要构造一个词汇表,这个词汇表里面每个词元都有一个唯一标识词元ID,这个词汇表用来将词汇换成ID,反之亦然(encode和decode);(BPE将词汇拆解成更小词元来处理没见过的词汇)
2、通过滑动窗口的方法构建可以用来模型训练预测下一个词汇的批量数据集;
3、为了大语言模型能够处理数据集,还需要对数据进行向量嵌入,这个嵌入的向量一开始是随机的,会在后面的训练过程中更新;
4、大语言的自注意力机制无法处理位置信息,为了能够区分 I love you 和 You love I不同位置I的含义,还需要加入位置嵌入一起作为大模型的嵌入层。
图2-19 在输入处理流水线中,输入文本首先被分割为独立的词元。随后,这些词元通过词汇表转换为词元ID。这些词元ID继而被转换为嵌入向量,并添加与之大小相同的位置嵌入,最终形成用于大语言模型核心层的输入嵌入
在微信读书中查看 ↗
将复杂的现实世界抽象成计算机可以计算的数据,看似一小步,实际是跨越一大步,让虚拟照进了现实。
嵌入的本质是将离散对象(如单词、图像甚至整个文档)映射到连续向量空间中的点,其主要目的是将非数值的数据转换为神经网络可以处理的格式
在微信读书中查看 ↗