论文阅读笔记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 nndef 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.Moduledef __init__(self):# ...def forward(self, enc_inputs): # 你不需要显示调用该方法,因为在nn.Module.__call__里,已经默认实现了对该方法的调用# ...class Decoder(nn.Module): # (2)Decoder继承了nn.Moduledef __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 nndef 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.mzph.cn/news/636546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s源码阅读:Informer源码解析

写在之前 Kubernetes的Informer机制是一种用于监控资源对象变化的机制。它提供了一种简化开发者编写控制器的方式,允许控制器能够及时感知并响应 Kubernetes 集群中资源对象的变化。Informer通过与Kubernetes API服务器进行交互,通过监听API服务器上资源…

Idea 开发环境不断切换git代码分支导致冲掉别人代码

问题分析 使用git reflog查看执行命令,以下是发生事故的切换和提交动作 46f72622e1 HEAD{41}: commit: feat: 【Sales - 6.3】小程序端不登录也可以录入客户线索 c5e7d9f6e1 HEAD{42}: fetch origin feature/20240102_Sales6.3_xingang:feature/20240102_Sales6.3…

零基础小白刚刚入门Python的注意点总结~

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

代码随想录算法训练营Day24 | 122.买卖股票的最佳时期、55.跳跃游戏、45.跳跃游戏||

LeetCode 122 买卖股票的最佳时期 本题思路&#xff1a;记录每天的利润值&#xff0c;第一天的为 0 &#xff0c;第二天的当天的减去前一天的。然后遍历相加为正的利润值。最后得到的结果就是最大利润。 class Solution {public int maxProfit(int[] prices) {int res 0;for(…

使用Nginx和Fancyindex组合搭建文件下载站点详细教程

目录 简介 TIPS 1.下载Nginx 2. 安装Fancyindex和Nginx-Fancyindex-Theme模块 2.1 安装编译工具和依赖 2.2 下载Fancyindex和Nginx-Fancyindex-Theme 2.3 编译Nginx并包括Fancyindex 3. 配置Nginx 4.体验 4.1light主题 4.2dark主题 后记 简介 当使用Nginx和Fancyinde…

Unity3D学习之Unity基础

文章目录 1. 第一部分&#xff1a;MONO中的重要内容2. 延时函数2.1 什么是延时函数2.2 延时函数的使用2.2.1 延时重复函数2.2.2 取消延迟函数2.2.3 判断是否有延迟函数开启2.2.4 延迟函数和依附对象的关系 3 协同程序3.1 Unity中的多线程3.2 协同程序3.3 协程的使用3.3.1 关闭协…

第三课:GPT

文章目录 第三课&#xff1a;GPT1、学习总结&#xff1a;GPT出现的原因GPT的方法原理目前存在的问题无监督的预训练优化目标模型结构 监督微调课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、课程反馈&#xff1a;5、使用MindSpore昇思的体验和反馈&…

【Spring源码分析】扫描并注册BeanDefinition逻辑

扫描并注册BeanDefinition逻辑 一、ClassPathBeanDefinitionScanner 扫描源码分析doScan 扫描的具体逻辑findCandidateComponents 方法解析generateBeanName 方法解析checkCandidate 方法解析 二、总结 阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的…

SpringBoot项目中简单使用虚拟机Redis

目录 步骤大致如下&#xff1a; 一.在pom文件中加入redis依赖 二.在虚拟机上打开我们下载好的Redis。开启服务器端并获取虚拟机ip地址 三.在项目配置。 四&#xff1a;使用redis 测试 redis是一个以键值对存储的NoSQL。被数百万开发人员用作缓存、矢量数据库、文档数据库、…

AcWing 68:0到n-1中缺失的数字 ← 二分

【题目来源】https://www.acwing.com/problem/content/64/【题目描述】 一个长度为 n−1 的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围 0 到 n−1 之内。 在范围 0 到 n−1 的 n 个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。【…

vivado 定义板文件板

定义板文件板 &#xff1c;board&#xff1e;标记是板文件的根。它包括识别基本信息的属性关于董事会。 <board schema_version"2.1" vendor"xilinx.com" name"kc705" display_name"Kintex-7 KC705 Evaluation Platform" url&qu…

用C语言实现简单的三子棋游戏

目录 1 -> 模块简介 2 -> test.c 3 -> game.c 4 -> game.h 1 -> 模块简介 test.c:测试游戏逻辑 game.c: 函数的实现 game.h:函数的声明 2 -> test.c #define _CRT_SECURE_NO_WARNINGS 1#include "game.h";void menu() {printf("****…

Harmony Ble蓝牙App(四)描述符

Harmony Ble蓝牙App&#xff08;四&#xff09;描述符 前言正文一、优化二、描述① 概念② 描述提供者③ 显示描述符 三、源码 前言 上一篇中了解了特性和属性&#xff0c;同时显示设备蓝牙服务下的特性和属性&#xff0c;本文中就需要来使用这些特性和属性来完成一些功能。 正…

FaFu--练习复盘--1

1、输出图形及二维数组应用 1.1.输出图形 描述 编写程序打印n行如下图形&#xff0c;其中1≤n≤500。 输入用例 7 输出用例 具体实现 #include"stdio.h" int main(){int n,i,j;scanf("%d",&n);for(i 1; i< n;…

软考系分之计算机网络通信方向、同步和交换

文章目录 1、概述2、通信方向和同步3、交换方式4、总结 1、概述 本篇依旧是一图概括主要考察的知识点&#xff0c;包括通信方向&#xff08;单工、半双工、全双工&#xff09;&#xff0c;同步方式和数据交换等。 2、通信方向和同步 通信方向&#xff08;单工、半双工、全双工…

【react】创建react项目+项目结构

使用create-react-app快速搭建开发环境 create-react-app是一个快速创建React开发环境的工具&#xff0c;底层由Webpack构建&#xff0c;封装了配置细节 npx create-react-app react_hm执行命令后开始创建 创建好执行cd react_hm npm start 当看到webpack compiled successfu…

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构 ##关于window mysql主从搭建简单教程 传送门 window mysql5.7 搭建主从同步环境-CSDN博客 ##父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project…

傲空间私有部署Windows指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。 Docker Desktop for Windows…

领略指针之妙

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

MySQL主从集群

MySQL主从集群 主从模式、集群模式&#xff0c;都是在一个项目中使用多个mysql节点进行存储和读取数据。 当单机模式部署&#xff0c;不满足安全性、高可用、高并发等需求的时候&#xff0c;就需要考虑主从模式或者集群模式部署。 什么是主从模式&#xff1f; 主从模式&…