当前位置: 首页 > news >正文

CogView整体图解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、总括

二、数据集输入(token)

三、Transformer(GPT)

四、TransformerLayer

五、Self Attention

六、MLP


一、总括


二、数据集输入(token)

1、生成

由cogdata生成二进制数据集(生成token)

cogdata用法:GitHub - Sleepychord/cogdata: A light-weight data management system for large-scale pretraining

2、token

text通过SentencePiece模型生成text token;image通过一个离散化的AE(Auto-Encoder)转换为image token。

token作用在于将text和image变成尽量意义独立的小块,便于后面映射到token空间(类似于词向量的表达阿巴阿巴),而在这里对于image的意义就更大了,因为把一张大的图变成多个小块,减轻了后续网络的计算量。

3、data and label

因为是从左到右预测,比如说第一个token输入得到预测的第二个token再与目标的第二个token进行比对得到loss(所以labels比tokens延后一位)

下面的代码在pretrain_gpt2.py中(其中的labels为比对target;tokens为输入的token数据)

def get_batch(data_iterator, args, timers):#获取该batch的数据
    # Items and their type.
    keys = ['text', 'loss_mask']
    datatype = torch.int64

    # Broadcast data.
    timers('data loader').start()
    if data_iterator is not None:
        data = next(data_iterator)
    else:
        data = None
    timers('data loader').stop()

    data_b = mpu.broadcast_data(keys, data, datatype)
    # Unpack.解压数据
    tokens_ = data_b['text'].long()
    loss_mask = data_b['loss_mask'].float()#这个loss mask应该是服务于继续训练的那种吧(如果一开始训练应该为None)
    labels = tokens_[:, 1:].contiguous()#目标
    loss_mask = loss_mask[:, 1:].contiguous()
    tokens = tokens_[:, :-1].contiguous()#输入token
    #因为是从左到右预测,比如说第一个token输入得到预测的第二个token再与目标的第二个token进行比对得到loss(所以labels比tokens延后一位)
    attention_mask = None

    # Get the masks and postition ids.获得位置编码,attention mask 和 loss mask
    attention_mask, loss_mask, position_ids = get_masks_and_position_ids(
        tokens,
        loss_mask=loss_mask,
        attention_mask=attention_mask,
        args=args
        )
    # Convert转为半精度
    if args.fp16:
        attention_mask = attention_mask.half()

    return tokens, labels, loss_mask, attention_mask, position_ids

三、Transformer(GPT)

细节,代码解析等详见CogView中网络结构的总体构建_tt丫的博客-CSDN博客

​​​​​总括图上的Transformer(GPT)

word embeddings转为词向量;Transformer为主体网络结构:从左到右预测token(前一个token推出下一个token),有多个Tansformer block(layer)组成。

 该图中的Transformer又可按下面的细分(不稀疏处理)

 细节,代码解析等详见CogView中的Transformer_tt丫的博客-CSDN博客

 其中单层的TransformerLayer:见四


四、TransformerLayer

细节,代码解析等详见CogView中的单层TransformerLayer_tt丫的博客-CSDN博客

运用了两次残差结构(便于实现非常高复杂度的模型,并且有助于解决梯度消失和梯度爆炸问题),同时还运用了LayerNorm用于维稳。

其中的Self Attention:见五

其中的MLP:见六


五、Self Attention

细节,代码解析等详见CogView中的Self Attention_tt丫的博客-CSDN博客

使网络学习关注某个重要的信息点

这里加入的attention mask是为了从左到右预测而服务的(下三角)


六、MLP

细节,代码解析等详见CogView中的MLP_tt丫的博客-CSDN博客


 欢迎大家在评论区进行批评指正,谢谢~

相关文章:

  • WMI图形化查询工具
  • CogView中网络结构的总体构建
  • 25k的自动化测试面试题,原来都是这样~
  • 猿创征文|我的焚膏继晷之路
  • Linux (Ubuntu)磁盘管理与文件压缩解压(入门必看)
  • CentOS上安装Docker
  • 一文搞定IDEA中SpringBoot项目环境的热部署
  • Java运算符
  • HIS -- 医院信息管理系统业务流程
  • 【精讲】后台项目 采用vue2框架 完整版内含详细注释 1
  • UVA 10271 佳佳的筷子 Chopsticks [DP的基本运用]
  • 【计算机视觉】尺度不变特征变换(SIFT)
  • 计算机网络基础概念
  • Scala系列一:变量和数据类型
  • ROS从入门到精通3-4:urdf集成Gazebo联合仿真
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Babel配置的不完全指南
  • CAP理论的例子讲解
  • CSS实用技巧
  • happypack两次报错的问题
  • JavaScript中的对象个人分享
  • JAVA并发编程--1.基础概念
  • Java多态
  • js作用域和this的理解
  • Mocha测试初探
  • Objective-C 中关联引用的概念
  • php的插入排序,通过双层for循环
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • springboot_database项目介绍
  • V4L2视频输入框架概述
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue-router 实现分析
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 普通函数和构造函数的区别
  • 区块链将重新定义世界
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 数据可视化之 Sankey 桑基图的实现
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我建了一个叫Hello World的项目
  • #{}和${}的区别?
  • $ git push -u origin master 推送到远程库出错
  • $$$$GB2312-80区位编码表$$$$
  • (5)STL算法之复制
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (第二周)效能测试
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (算法)Travel Information Center
  • (转)Sql Server 保留几位小数的两种做法
  • (转)Windows2003安全设置/维护
  • 、写入Shellcode到注册表上线
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径