论文阅读笔记AI篇 —— Transformer模型理论+实战 (四)

论文阅读笔记AI篇 —— Transformer模型理论+实战 (四)

  • 一、理论
    • 1.1 理论研读
    • 1.2 什么是AI Agent?
  • 二、实战
    • 2.1 先导知识
      • 2.1.1 tensor的创建与使用
      • 2.1.2 PyTorch的模块
        • 2.1.2.1 torch.nn.Module类的继承与使用
        • 2.1.2.2 torch.nn.Linear类
    • 2.2 Transformer代码实现

一、理论

1.1 理论研读

参考文章或视频链接
[1] 《论文阅读笔记AI篇 —— Transformer模型理论+实战 (一)》- CSDN
[2] 《论文阅读笔记AI篇 —— Transformer模型理论+实战 (二)》- CSDN
[3] 《论文阅读笔记AI篇 —— Transformer模型理论+实战 (三)》- CSDN

1.2 什么是AI Agent?

如果说钢铁侠中的J.A.R.V.I.S.(贾维斯)是一个AGI通用人工智能的话,那么现阶段的AI Agent只是做到了感知任务、规划任务、执行任务。下面这张图的这个过程,看上去和强化学习是一模一样的。

Agent结构图——参考视频[1]

参考文章或视频链接
[1]【动画科普AI Agent:大模型之后为何要卷它?】- bilibili
[2]【【卢菁老师说】Agent就是一场彻头彻尾的AI泡沫】- bilibili
[3] 《读懂AI Agent:基于大模型的人工智能代理》
[4] LLM之Agent(一):使用GPT-4开启AutoGPT Agent自动化任务完整指南

二、实战

2.1 先导知识

2.1.1 tensor的创建与使用

对于一维的tensor,它是没有形状而言的,你不能准确的称它为行向量row vector或列向量col vector,只有你明确的指定之后,它才有准确的形状。
但是,在数学中肯定是要有明确的意义的,要么n*1,要么1*n,总得有个说法,说法就是,认为是列向量n*1,见参考文章[2]

import torch
import torch.nn as nn

def test1_tensor():
    x = torch.tensor([1, 1, 1, 1])
    print("Before reshape:", x.shape)
    # x = x.reshape(4, 1)
    x = x.view(4, 1)  # 与reshape一样
    print(x)
    print("After reshape(4,1):", x.shape)
    # x = x.reshape(1, 4)
    x = x.view(1, 4)  # 与reshape一样
    print(x)
    print("After reshape(1,4):", x.shape)


if __name__ == '__main__':
    test1_tensor()

"""Console Output
Before reshape: torch.Size([4])

tensor([[1],
        [1],
        [1],
        [1]])
After reshape(4,1): torch.Size([4, 1])

tensor([[1, 1, 1, 1]])
After reshape(1,4): torch.Size([1, 4])
"""
参考文章或视频链接
[1] Introduction to PyTorch Tensors - PyTorch
[2] Is there any reason for using the word “column” in the context of one-dimensional tensor?

2.1.2 PyTorch的模块

2.1.2.1 torch.nn.Module类的继承与使用

强调一点,你自己实现的所有模块,应该都是继承了nn.Module这个Class的(这也是PyTorch官方文档所强调的),不要觉得可以去掉nn.Module的继承,继承了这个类,才会有一些便捷的方法可供调用,否则你都要自己实现一遍。

class Encoder(nn.Module): # (1)Encoder继承了nn.Module
    def __init__(self):
		# ...
    def forward(self, enc_inputs): # 你不需要显示调用该方法,因为在nn.Module.__call__里,已经默认实现了对该方法的调用
		# ...

class Decoder(nn.Module): # (2)Decoder继承了nn.Module
    def __init__(self):
		# ...
    def forward(self, dec_inputs, enc_inputs, enc_outputs): # 你不需要显示调用该方法,因为在nn.Module.__call__里,已经默认实现了对该方法的调用
		# ...
参考文章或视频链接
[1] Module — PyTorch 2.1 documentation
[2] Learning Day 22: What is nn.Module in Pytorch
[3] Why do we need to inherit from nn.Module in PyTorch? - stackoverflow
2.1.2.2 torch.nn.Linear类

关于Linear层有一点问题,就是它的权重矩阵,nn.Linear(4,3)中的4表示输入特征的维度,3表示输出特征的维度,按理来说是一个4 * 3的矩阵才对,但是输出结果偏不,这是因为常规的线性运算是写成这样的(假设维度已知), o u t = W 3 ∗ 4 i n 4 ∗ 1 + b 3 ∗ 1 out = W_{3*4}in_{4*1} + b_{3*1} out=W34in41+b31,但网络层以从左至右的视角看去, i n in in W W W矩阵的左边,写成这样的形式 o u t = ( i n 1 ∗ 4 W 3 ∗ 4 T ) T + b 3 ∗ 1 = ( i n 1 ∗ 4 W 4 ∗ 3 ) T + b 3 ∗ 1 out = (in_{1*4}W_{3*4}^T)^T + b_{3*1} = (in_{1*4}W_{4*3})^T + b_{3*1} out=(in14W34T)T+b31=(in14W43)T+b31就很自然的模拟了这个视角,这样就能解释为什么输出的shape是反过来的。

在这里插入图片描述

请看参考文章[1]。

import torch
import torch.nn as nn

def test2_Linear_weight():
    linear_layer = nn.Linear(4,3)
    print(linear_layer.shape)  # torch.Size([3, 4])
if __name__ == '__main__':
    test2_Linear_weight()
参考文章或视频链接
[1] Why does PyTorch’s Linear layer store the weight in shape (out, in) and transpose it in the forward pass? - stackoverflow

2.2 Transformer代码实现

请看参考文章[1]与[4],我认为写的足够详细,也足够易懂,有些torch.transpose()的操作不太好从字面上读懂,就debug看看,无非就是高维矩阵的转置,和二维矩阵的转置也没本质区别。

参考文章或视频链接
本文代码来源:[1] 《Transformer 代码详解(Pytorch版)》- CSDN
[2] 【Transformer代码实现】- bilibili
重点观看此视频:[3] [重置版]从零实现transfomer模型 || 理解ChatGPT基石 || pytorch- bilibili
这篇写的也不错,可以重点阅读:[4] 《Transformer原理与代码实现》- CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/336844.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

一、本文介绍 本文给大家带来的改进机制是华为移动端模型Ghostnetv1,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。GhostNet的关键思想在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的…

一、用户管理中心——前端初始化

一、Ant Design Pro初始化 1.创建空文件夹 2.打开Ant Design Pro官网 3.打开终端进行初始化 在终端输入npm i ant-design/pro-cli -g 在终端输入pro create myapp 选择umi3 选择simple 项目创建成功后,在文件夹中出现myapp 4.安装依赖 使用vscode打开项目 …

Java学习笔记(八)——Lambda表达式

文章目录 Lambda表达式Lambda表达式的省略写法Lambda练习练习1练习2 算法题算法题1 斐波那契数列算法题2 猴子吃桃子算法题3 爬楼梯 Lambda表达式 Lambda表达式是JDK8开始的一种新语法形式。 基本作用:简化函数式接口的匿名内部类的写法。 注意: Lam…

lambda

文章目录 lambda 概述lambda的演变过程lambda 表达式的基本格式案例:调用接口里面的方法几种方式 lambda省略写法案例一:抽象方法一个参数抽象方法两个参数 啦么大 使用的注意事项啦么大 与 匿名内部类 lambda 概述 函数式编程思想 面向对象思想在乎的是…

Java 面向对象02 封装 (黑马)

人画圆:画圆这个方法应该定义在园这个类里面。 人关门:是人给了门一个作用力,然后门自己关上了门,所以关门的方法是在门的类里面 封装对象的好处: 调用Java自带的方法举例实现: 在测试类中,对其…

PDshell16逆向PostgreSQL 工程显示字段comment备注

现状:当刚逆向成功的表结构是没有原来表结构中的,comment备注如下 然后pd逆向工程的sql已经返回了这个备注的含义 解决方案: 1、设置显示注释列 tools——Display Preferences…如下 勾选-按照下面得方式勾选这三个 复制这里的VBS脚本&a…

触摸屏监控双速电动机-确定地址分配

I/O地址分配 当选择了PLC之后,首先需要确定的是系统中各I/O点的绝对地址。在某些PLC 中1/O绝对地址的分配方式共有固定地址型、自动分配型、用户定义型3种。实际所使用的方式取决于所采用的PLC的CPU型号、编程软件、软件版本、编程人员的选择等因素。 本任务输入信…

51单片机原理及应用张毅刚版课后习题以及答案

AT89S51单片机内部集成了哪些外围功能部件 ①8位微处理器CPU ②数据存储器 128B RAM ③程序存储器 ④4个8位可编程并行I/O口 ⑤1个全双工的异步串行口 ⑥2个可编程的16位定时器/计数器 ⑦1个看门狗定时器WDT ⑧中断系统具有五个中断源 五个中断向量 ⑨特殊功能寄存器SFR 26个…

低代码技术杂谈

一、探讨低代码的定义 “Low-Code”是什么?身为技术人员听到这种技术名词,咱们第一反应就是翻看维基百科 或者其他相关技术论文,咱们想看维基百科的英文介绍: A low-code development platform (LCDP) provides a development env…

web蓝桥杯真题--11、蓝桥知识网

介绍 蓝桥为了帮助大家学习,开发了一个知识汇总网站,现在想设计一个简单美观的首页。本题请根据要求来完成一个首页布局。 准备 开始答题前,需要先打开本题的项目代码文件夹,目录结构如下: ├── css │ └──…

【JavaEE Spring】SpringBoot 配置文件

SpringBoot 配置文件 1. 配置文件的作用1.1 配置文件的说明1.2 SpringBoot 配置文件 2. 配置文件的格式特殊说明 3. properties 配置文件说明3.1 properties 基本语法3.2 读取配置文件3.3 properties 缺点分析 4. yml 配置文件说明4.1 yml 的基本语法4.2 yml 使⽤进阶4.2.1 yml…

大语言模型无代码构建知识图谱概述

2023年3月15日,ChatGPT4.0的横空出世,将人们对大语言模型的关注推到了风口浪尖。由于其在智能问答、翻译以及文本生成等工作任务上的卓越表现,业界一度出现了不再需要发展知识图谱相关技术的观点,知识图谱相关概念严重受挫。无可置…

【设计模式】文件目录管理是组合模式吗?

组合模式是什么? 组合模式是一种将对象组合成树形结构以表示"部分-整体"的层次结构的设计模式。它使得用户对单个对象和组合对象的使用具有一致性。 组合模式在什么情况下使用? 当你发现你需要在代码中实现树形数据结构,让整体-部…

无人机航迹规划(一)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

Flutter 与 Android原生 相互通信:BasicMessageChannel、MethodChannel、EventChannel

前言 本文主要讲解,使用不同的 Channel 让 Flutter 和 Android原生 进行通信,由于只是讲解两端通信,所以可视化效果不好; 不过我写了一篇专门讲解 Flutter 嵌入 Android原生View的文章 Flutter 页面嵌入 Android原生 View-CSDN…

【富文本编辑器实战】02 编写编辑器配置文件

编写编辑器配置文件 目录 编写编辑器配置文件前言项目结构分析项目配置菜单项配置语言配置总体配置 总结 前言 本篇文章主要内容是项目的配置文件的编写与讲解,包括菜单项配置、语言配置、总体配置。 项目结构分析 下图是编辑器的总体结构: 编辑器大致…

蓝桥杯真题(Python)每日练Day2

题目 题目分析 对于本题首先确定其数据结构为优先队列,即邮费最小的衣服优先寄,算法符合贪心算法。可以直接使用queue库的PriorityQueue方法实现优先队列。关于PriorityQueue的使用方法主要有: import queue q queue.Queue()# 队列 pq qu…

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app,在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中(改成中文) LA…

云轴科技ZStack位列IDC云系统软件市场教育行业TOP2

近日,全球IT市场研究和咨询公司IDC发布 《中国云系统软件市场跟踪报告2023H1》 ZStack作为产品化的云基础软件提供商 位居云系统软件市场第一梯队 市场份额位列独立云厂商*第一 增速最快 教育行业TOP2 在教育行业,云计算已成为教育行业信息化的重要基础…

十一、常用API——爬虫

目录 爬虫本地爬虫和网络爬虫贪婪爬取和非贪婪爬取正则表达式在字符串方法中的使用捕获分组和非捕获分组分组捕获分组非捕获分组 爬虫 本地爬虫和网络爬虫 有如下文本,请按照要求爬取数据。(本地爬虫) Java自从95年问世以来,经历…
最新文章