首页 > 其他分享 >大语言模型LLM-三种模型架构

大语言模型LLM-三种模型架构

时间:2023-10-22 10:46:39浏览次数:52  
标签:src 架构 模型 Attention mask encoder LLM decoder self

  • 架构:由Transformer论文衍生出来的大语言模型,主要有三种模型架构
  • 预训练目标:FLM,PLM,MLM
  • 调整:
  • 微调:

Transformer

transfomer可以并行地计算?

  transformer中encoder模块是完全并行的,而decoder不是完全并行的。

模型结构

  使用原文表达如下:the encoder maps an input sequence of symbol representations \((x_1, x_2, \cdots, x_n)\) to a sequence of continuous representations $\pmb z = (z_1, z_2, \cdots, z_n) $. Given $\pmb z $, the decoder then generates an ouput sequence \((y_1, y2, \cdots, y_m)\) of symbols one element at a time.

  因此在推理过程中,transformer网络结构中的decoder模块是自回归模式的,不能并行计算。

注: 自回归模式:之前时刻生成的,将作为当前时刻的输入(或其中一部分),并一起用来预测当前时刻的输出。如此循环直至结束

Attention机制

  使用原文表达如下:“An attention function can be described as mapping a query and set of key-value pairs to an output where query, keys, values and output are all vectors. The output is computed as a weightd sum of the values, where the weight assigned to each value is computed by compatibility function of the query with the corresponding key.”

  • query vector \(q\)
  • a set of key-value pairs, \((k_1, v_1), \cdots, (k_r,v_r)\)
  • scores of the query with the corresponding keys \(s_1, \cdots, s_r\)
  • output vector \(z=s_1v_1 + \cdots + s_rv_r\)

Self-Attention机制

直观理解

  以“The animal didn't cross the street because it was too tired”为例说明,下面图说明,是序列中每个单词都与序列中所有的单词都要计算一遍它们之间的某种相似度。而这种计算相似度量与序列中单词顺序无关,因此是可以并行的

Fig. 1

实际计算

创建querys, keys, values

  随机初始化三个矩阵\(W_Q, W_K, W_V \in \mathbb{R}^{d \times d}\)(假设矩阵维度都是这样的),也是transformer中需要训练的参数。输入序列特征表示\(x_1, x_2, \cdots, x_n\),按行摆放,就构成了输入特征\(X \in \mathbb{R}^{n \times d}\),那么就将输入的\(n\)个特征序列都转换为对应的\(n\)个query vector, \(n\)个key vector, \(n\)个value vector, 矩阵化表示这些为 $$Q=XW_Q, K=XW_K, V=XW_V$$

  这里的\(Q,K,V\)可以看成都是输入的\(n\)个特征的 不同表示,与原始的特征保持着一一对应关系,比如\(W_Q, W_K, W_V\)都是单位矩阵,那么\(Q,K,V\)就与\(X\)完全一致了。\(softmax(QK^T)\)就表示了输入的\(n\)个特征两两之间的相似性关系,而输出就是依据这个相似度量矩阵,对value vectors进行加权平均。因此序列每个位置的输出,都可以看出输入序列转换后表示的加权平均,加权系数是由当前位置特征与序列所有位置的特征相似度确定的(这里的特征都是转换后的特征),即$$z_i=softmax(\frac{QK^T}{\sqrt{d}})_i V$$

从实际计算过程也可以看出encoder是可以并行计算的。更细致的说明可以参考[1,2]

Encoder Attention层的网络结构

  一般由self-attention op, residual op, norm op, feedforward op(linear op, activation op)这几种层操作构成,其它各种模型Attention层可能实现不同,大多数是这些op组成结构及顺序不同而已,本质上没有区别。因为Transformer是Attention开山祖师,因此这里展示一下其网络结构。

注:有一段时间大家密集讨论Transformer论文与代码实现不一致。所以这个论文中网络结构示意图是一个大致介绍,具体实现还是要看实验效果。结果好才是王道。

Fig. 2

encoder-decoder Attention机制

问题1: Transformer中decoder各个层中的,的K,V来着哪里? encoder模块的最后输出,还是decoder层与coder层对应的K,V呢?
答案1:是Transformer中encoder模块最后输出

  首先,原文说明了这一点(但是decoder中的K,V不等于encoder的输出)

the encoder maps an input sequence of symbol representations \((x_1, x_2, \cdots, x_n)\) to a sequence of continuous representations $\pmb z = (z_1, z_2, \cdots, z_n) $. Given $\pmb z $, the decoder then generates an ouput sequence \((y_1, y2, \cdots, y_m)\) of symbols one element at a time.

  其次,参考https://github.com/huggingface/blog/blob/main/encoder-decoder.md图示,很清楚展示了,decoder模块中的,K,V是encoder模块输出\(Z\)经过decoder模块各个层的\(W_{K}^{l}, W_{V}^{l}\)映射得到。

image

Fig. 3

  最后,通过下面代码可以看出,在训练过程中,decoder输入包括

  • encoder的输出即src的经过encoder编码后的特征
  • target
  • src_mask
  • target_mask

因此Transformer中decoder各个层中的K,V都来着encoder模块的输出,即输入经过encoder模块编码后的特征。

点击展开 Encoder-Decoder主体结构代码

class EncoderDecoder(nn.Module):
    """
    A standard Encoder-Decoder architecture. Base for this and many 
    other models.
    """
    def __init__(self, encoder, decoder, src_embed, tgt_embed, generator):
        super(EncoderDecoder, self).__init__()
        self.encoder = encoder
        self.decoder = decoder
        self.src_embed = src_embed
        self.tgt_embed = tgt_embed
        self.generator = generator
        
    def forward(self, src, tgt, src_mask, tgt_mask):
        "Take in and process masked src and target sequences."
        return self.decode(self.encode(src, src_mask), src_mask,
                            tgt, tgt_mask)
    
    def encode(self, src, src_mask):
        return self.encoder(self.src_embed(src), src_mask)
    
    def decode(self, memory, src_mask, tgt, tgt_mask):
        return self.decoder(self.tgt_embed(tgt), memory, src_mask, tgt_mask)

问题2:这个与之前的Attention不同之处是什么?
答案2:encoder中的Attention是self-attiention,放到中-英翻译任务中,是中文词这种同一种符号之间的Attention,而decoder层中的encoder-decoder Attention则是中文符号与英文符号之间的Attention,有一点“跨域”的味道。

问题3:Encoder-Decoder mask?

论文主要在Decoder模块提到了对Attention操作时,要Mask,之所以这样,是由于推理过程是自回归模式的,当前生成token是无法与之后生成的token建立联系的。而训练过程这个decoder完整输出是知道的,为了在训练过程中,阻止位置靠前的token与靠后的token建立联系,影响模型训练参数的更新,从而导致训练与推理不一致。于是引入了Mask。

参考 https://ifwind.github.io/2021/08/17/Transformer相关——(7)Mask机制/#xlnet中的mask

问题4:decoder模块,训练和推理有什么不同吗?

Encoder-Only

  • bert

Encoder-Decoder

  • T5
  • GLM

Decoder-Only

  • GPT 系列
  • LLaMA

参考

http://jalammar.github.io/illustrated-transformer/

http://nlp.seas.harvard.edu/2018/04/03/attention.html

https://zhuanlan.zhihu.com/p/368592551

https://zhuanlan.zhihu.com/p/625184011

https://www.zhihu.com/question/588325646/answers/updated

https://blog.csdn.net/u012193416/article/details/130789895

https://xueqiu.com/6979880213/249596910

https://zhuanlan.zhihu.com/p/621192550

标签:src,架构,模型,Attention,mask,encoder,LLM,decoder,self
From: https://www.cnblogs.com/wolfling/p/17780028.html

相关文章

  • 使用TensorRT-LLM进行高性能推理
    LLM的火爆之后,英伟达(NVIDIA)也发布了其相关的推理加速引擎TensorRT-LLM。TensorRT是nvidia家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。而TensorRT-LLM是在TensorRT基础上针对大模型进一步优化的加速推理......
  • umich cv-4-2 经典卷积网络架构
    这节课中主要讨论了卷积神经网络的发展历史以及几种经典结构是如何构建的卷积网络经典结构AlexNetVGGGoogleNetResidualNetworkAlexNet在2012年的时候,Alexnet神经网络提出,这时网络的架构比如说各个层之间要如何排列组合,使用多少卷积层池化层,每个层又如何设置超参数其......
  • Elasticsearch的架构
    1.3Elasticsearch的架构Gateway层es用来存储索引文件的一个文件系统且它支持很多类型,例如:本地磁盘、共享存储(做snapshot的时候需要用到)、hadoop的hdfs分布式存储、亚马逊的S3。它的主要职责是用来对数据进行长持久化以及整个集群重启之后可以通过gateway重新恢复数据。Distributed......
  • 云原生架构实战02 Kubernetes实战入门
    一、Kubernetes是什么?kubernetes具有以下特性:服务发现和负载均衡Kubernetes可以使用DNS名称或自己的IP地址公开容器,如果进入容器的流量很大,Kubernetes可以负载均衡并分配网络流量,从而使部署稳定。存储编排Kubernetes允许你自动挂载你选择的存储系统,例如本地存储、公共云提......
  • MySQL多主模型实战
    MySQLAB解决了数据备份的问题,但是当A由于某些原因宕机后,WEB服务器就没有办法在往数据库写或者读写了。线上业务中断了,完了,出事故了。这该怎么办呢?本节课主要给大家讲解如果处理因为MySQL主服务器宕机造成的业务中断问题,保障MySQL业务高可用。一、实验拓扑图二、架构原理1、M......
  • 数仓架构图 sdm odm
       https://www.cnblogs.com/zourui4271/p/14139002.html数据总线数据仓库作为数据管理核心,必须拥有统一标准的数据输入接口与数据输出通道,才能保证数据输入输出的稳定性。但是数据输入输出会造成数据仓库的资源损耗,尤其是IO与网络,所以建设数据总线系统可把数据输入输......
  • 接入层高可用架构设计:EdgeOne实战
    1. 背景接触多家客户后,发现大家的接入层架构大都如下图所示,WAF/DDoS组件客户要么选其中之一,要么都不选或自荐。CLB后面挂CVM,CVM上面部署Nginx或者Kong等组件。从这个架构图可以看出,客户有考虑高可用,但仅关注自己的组件层面,没有关注外部基础设施(如DNS)、政策法规的影响、运营商......
  • 《架构师之路:软件架构之美》第六七章读书笔记
    6.1软件架构有助于交付高质量的产品软件架构是关于结构和愿景的,不思考软件架构(以及“大局”)会导致团队经常遭遇一些常见问题。你的软件系统有良好定义的结构吗?团队里每个人都以一致的方式实现特性吗?代码库的质量水平一致吗?对于如何构建软件,团队有共同的愿景吗?团队里每个人都......
  • Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
    全文下载链接:http://tecdat.cn/?p=20678最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的任务在本文中,我将解释如何将 ......
  • 扩散模型简介
    Smiling&Weeping ----在每一条靠近幸福的路上我的勇气都是暴雨里一苇求生的渔船我不再一心等人来搭救如今的我失足也从......