23年以NLP方向爆发的AI模型最为火热。
以开源模型为代表的LLAMA系列模型,也在开源社区掀起了热潮。如vicuña,code llama,glm ,baichun, Qwen,rwkv-4 等等。
近段时间,在开发工作闲暇之余研究了一下被语言模型广泛使用的transformer及llama的基本原理。
这篇总结就简单介绍一下transformer的基本原理吧
首先我们看一下transformer的一个逻辑结构:
transformer原论文是有6个encoder以及6个decoder组成。
encoder和decoder的结构并没有大的差异,主要的区别在于,decoder会把encoder计算的结果作为KV,而自注意力的输入计算作为Q
大致的过程:
1 输入句子通过字典转化为ids
2 ids通过tokennizer转化为一组输入向量
3 补全开始,结束及空白词表
4 加入位置编码并输入自注意力层
5 根据自注意力层的定义计算QKV矩阵
6 经过多层自注意力encoder后作为KV矩阵,传入decoder层
7 经过多层decoder后,经过线性层及soft Max等一系列操作,预测最大的token概率
这就是完整的transformer预测流程。重点在于attention层的计算逻辑及其代表的含义。
在今年火热的NLP模型中,基本都去掉了encoder结构,采用了仅仅多个decoder的模型结构。如llama的模型结构,相比传统的transformer更显简洁。后面我会结合llama2的源码,再总结下llama2的模型结构
很难用大白话准确的描述attention自注意力的意义,这里打个不太准确但略微形象的比喻:
Q代表的是该token关注的一个问题,K代表的是该token本身的一个键,V代表该token自身的值。
而这个计算公式则是自注意力得分的计算。
如果是多头注意力实际上就是把输入的token分成了几个组,分别计算QKV得到每组的Z值:
后面我们结合一个transformer的源码来看,更直观一些。
transformer的落地:
最近一直在思考目前火热的NLP模型在企业产品中的落地,这些现象级产品究竟在解决什么问题,可以解决什么问题?
1 是作为通用的系统级交互方式?显然除了GPT4接近这个目标,其他语言模型还远远不够。当然即便是gpt4也还有距离。
2 作为垂直领域搜索引擎,AI知识库?这有作用,但需求并不那么的强烈。何况需要面临AI较高的硬件成本,模型幻觉,难以确定的结果输出等一系列问题
3 工作流中的一小步骤一个辅助功能。这恐怕还是目前众多AI产品落地的唯一场景,当然基于此能做的事情也有很多
AI硬件部署成本,边缘设备生态支持,模型输出不确定性,异常结果难以预估。这不仅仅是NLP,也是众多这类产品难以解决的尴尬境地吧