前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【AI 大模型】GPT 大模型训练架构 ( Transformer 架构 | 编码器和解码器 | 输入序列的位置编码 | 自注意力机制编码流程 | Transformer 训练代码示例 )

【AI 大模型】GPT 大模型训练架构 ( Transformer 架构 | 编码器和解码器 | 输入序列的位置编码 | 自注意力机制编码流程 | Transformer 训练代码示例 )

作者头像
韩曙亮
发布2024-06-28 10:13:10
710
发布2024-06-28 10:13:10
举报
文章目录

  • 一、GPT 大模型训练架构 - Transformer 架构
    • 1、Transformer 架构
    • 2、Transformer 架构的编码器和解码器
    • 3、输入序列的位置编码
    • 4、自注意力机制编码流程
    • 5、OpenAI 开源的训练 GPT 大模型的 Transformer 代码
    • 6、Transformer 代码示例

一、GPT 大模型训练架构 - Transformer 架构


1、Transformer 架构

Transformer 架构 是 Google 设计的 , 当前最流行的 GPT 大模型 都使用的该架构 , 最著名的就是 OpenAI 的 ChatGPT 大模型 ;

Transformer 架构 是一种用于 处理序列数据 的深度学习模型架构 , 主要用于解决 自然语言处理 NLP 领域中的序列建模任务 ;

2、Transformer 架构的编码器和解码器

Transformer 架构 由 编码器 和 解码器 两部分组成 , 每个部分都包含 多层堆叠的 自注意力机制 和 前馈神经网络 ;

  • 编码器 : 负责 将 输入序列 转换为一系列 向量表示 ;
    • 自注意力机制 : 计算输入序列中每个位置与其他所有位置的相关性 , 来捕捉序列中的依赖关系 ;
    • 前馈神经网络 : 每层包含一个前馈神经网络 , 组成了两层全连接网络 , 用于进一步转换自注意力机制的输出 ;
  • 解码器 : 根据 向量表示 生成 输出序列 ;
    • 掩码自注意力机制 : 在计算 注意力权重 时添加一个掩码 , 使得当前位置只能关注到它之前的输入 , 确保当前位置的输出只依赖于之前的输入 ;

3、输入序列的位置编码

自注意力机制 允许 训练的大模型 在一个 输入序列 中的 各个位置 之间 建立 全局依赖关系 ;

使用 位置编码 来为 输入序列 中的 每个位置 标记 位置信息 , 位置编码 将 位置信息 编码成一个 固定维度 的向量 , 这样 训练的模型 可以区分不同位置的 词语 ;

在计算每个位置的表示时 , 同时 考虑到 序列中所有其他位置的信息 , 这对于捕捉 长距离依赖 特别有效 ;

4、自注意力机制编码流程

自注意力机制 训练 / 编码 流程 :

  • 首先 , 计算 输入序列 中 每个位置的 查询 Query 、 键 Key 、 值 Value 的 向量 ;
  • 然后 , 计算 查询向量 与所有 键向量 的点积 , 同时应用 softmax 函数 得到每个位置的 注意力 权重 ;
  • 最后 , 根据这些 注意力权重 对 值向量 进行 加权求和 , 得到 每个位置 的 输出向量 ;

5、OpenAI 开源的训练 GPT 大模型的 Transformer 代码

下面是 OpenAI 开源的训练 GPT 大模型的 Transformer 代码 :

在 GPT 领域 , 代码并不是难点 , 难点是 数据的处理 和 算力 , 训练 GPT 大模型的代码量很少 ;

6、Transformer 代码示例

GPT 大模型训练 的 Transformer 代码 : 具体的 GPT 大模型训练流程 , 可参考代码中的注释 ;

代码语言:javascript
复制
# 导入需要的库  
import os  
import time  
import math  
import json  
import joblib  
import random  
import argparse  
import numpy as np  
import tensorflow as tf  
  
# 导入一些工具函数和模块  
from tqdm import tqdm  # 进度条  
from functools import partial  # 高阶函数工具  
from sklearn.utils import shuffle  # 打乱数据  
from sklearn.metrics import accuracy_score  # 计算准确率  
  
# 从自定义模块中导入函数和类  
from opt import adam, warmup_cosine, warmup_linear, warmup_constant  # 优化器和学习率调度器  
from datasets import rocstories  # 数据集加载函数  
from analysis import rocstories as rocstories_analysis  # 数据分析函数  
from text_utils import TextEncoder  # 文本编码工具  
from utils import encode_dataset, flatten, iter_data, find_trainable_variables, convert_gradient_to_tensor, shape_list, ResultLogger, assign_to_gpu, average_grads, make_path  # 一些实用函数  
  
# 定义激活函数  
def gelu(x):  
    # GELU激活函数  
    return 0.5*x*(1+tf.tanh(math.sqrt(2/math.pi)*(x+0.044715*tf.pow(x, 3))))  
  
def swish(x):  
    # Swish激活函数  
    return x*tf.nn.sigmoid(x)  
  
# 定义优化器、激活函数和学习率调度器的字典  
opt_fns = {'adam':adam}  
act_fns = {'relu':tf.nn.relu, 'swish':swish, 'gelu':gelu}  
lr_schedules = {'warmup_cosine':warmup_cosine, 'warmup_linear':warmup_linear, 'warmup_constant':warmup_constant}  
  
# 标准化函数  
def _norm(x, g=None, b=None, e=1e-5, axis=[1]):  
    # ...(函数内部实现省略)  
  
def norm(x, scope, axis=[-1]):  
    # ...(函数内部实现省略)  
  
# Dropout函数  
def dropout(x, pdrop, train):  
    # ...(函数内部实现省略)  
  
# 注意力权重掩码函数  
def mask_attn_weights(w):  
    # ...(函数内部实现省略)  
  
# 注意力机制函数  
def _attn(q, k, v, train=False, scale=False):  
    # ...(函数内部实现省略)  
  
# 分割和合并状态函数  
def split_states(x, n):  
    # ...(函数内部实现省略)  
  
def merge_states(x):  
    # ...(函数内部实现省略)  
  
# 分割和合并头函数  
def split_heads(x, n, k=False):  
    # ...(函数内部实现省略)  
  
def merge_heads(x):  
    # ...(函数内部实现省略)  
  
# 一维卷积函数  
def conv1d(x, scope, nf, rf, w_init=tf.random_normal_initializer(stddev=0.02), b_init=tf.constant_initializer(0), pad='VALID', train=False):  
    # ...(函数内部实现省略)  
  
# 注意力块函数  
def attn(x, scope, n_state, n_head, train=False, scale=False):  
    # ...(函数内部实现省略)  
  
# 多层感知机函数  
def mlp(x, scope, n_state, train=False):  
    # ...(函数内部实现省略)  
  
# Transformer块函数  
def block(x, scope, train=False, scale=False):  
    # ...(函数内部实现省略)  
  
# 嵌入函数  
def embed(X, we):  
    # ...(函数内部实现省略)  
  
# 分类函数  
def clf(x, ny, w_init=tf.random_normal_initializer(stddev=0.02), b_init=tf.constant_initializer(0), train=False):  
    # ...(函数内部实现省略)  
  
# 主模型函数  
def model(X, M, Y, train=False, reuse=False):  
    # ...(函数内部实现省略)  
  
# 多GPU训练函数  
def mgpu_train(*xs):  
    # ...(函数内部实现省略)  
  
# 多GPU预测函数  
def mgpu_predict(*xs):  
    # ...(函数内部实现省略)  
  
# 数据转换函数  
def transform_roc(X1, X2, X3):  
    # ...(函数内部实现省略)  
  
# 迭代应用函数(用于训练和验证)  
def iter_apply(Xs, Ms, Ys):  
    # ...(函数内部实现省略)  
  
# 迭代预测函数  
def iter_predict(Xs, Ms):  
    # ...(函数内部实现省略)  
  
# 保存模型参数函数  
def save(path):  
    # ...(函数内部实现省略)  
  
# 记录日志函数  
def log():  
    # ...(函数内部实现省略)  
  
# 主函数(命令行参数解析和模型训练/预测)  
if __name__ == '__main__':  
    # ...(参数解析和模型初始化省略)  
  
    # 训练循环  
    for i in range(n_iter):  
        # ...(训练迭代和日志记录省略)  
  
    # 提交预测  
    if submit:  
        # ...(加载最佳参数,进行预测和分析省略)  
  
# 一些辅助函数和变量定义(如argmax,pred_fns,filenames等)  
# ...(省略)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、GPT 大模型训练架构 - Transformer 架构
    • 1、Transformer 架构
      • 2、Transformer 架构的编码器和解码器
        • 3、输入序列的位置编码
          • 4、自注意力机制编码流程
            • 5、OpenAI 开源的训练 GPT 大模型的 Transformer 代码
              • 6、Transformer 代码示例
              相关产品与服务
              NLP 服务
              NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档