【PyTorch][chapter 26][李宏毅深度学习][attention-1]

前言:

          attention 在自然语言处理,声音处理里面是一个很重要的技巧.

   attention 要解决的是输入的向量长度不定.

  

   根据输入输出的不同,分为三种场景:

        输入N个向量,输出N个向量,这是本章的重点

        输入N个向量,输出向量不定

        输入N个向量, 输出M个向量


目录:

  1.     相关方案
  2.    self-attention
  3.    code实现


一   相关方案

    1.1  全连接网络

      输入: N个向量

      模型: N个全连接网络,每个FC模型对应一个向量

       输出: N个向量

       缺点:

       是当前向量无法获得其他向量的信息

    

   1.2 问题

       输入: N个向量

       模型: N个全连接网络,每个全连接网络,输入N个向量.

       输出:  N个向量

       缺点:

                    向量的个数定义Windows窗口.如果窗口特别大,计算量特别大。

如果windows 窗口特别小,无法采集到整个Input sequence Labeling 

     

    需要开的窗口特别大


二 self-attention

     3.1   模型架构

      

      输入   N个向量

       输出:  N 个向量

      模型: Self-attention

  3.2  主要流程

    

   1.1 计算相关系数\alpha

        两个向量的相似度有很多表达方式,例如余弦

   attention 是通过self-attention 来计算,比如要计算a^1,a^2之间的相似度

   

   q^1=a^1W_Q

  k^2=a^wW_k

  \alpha_{1,2}=q^1 \odot k^2

其中:W_Q,W_k 是代表query,key 矩阵通过训练出来的

Query:查询向量,表示要关注或检索的目标

Key:    键向量,表示要与查询向量进行匹配或比较的源

      还有种Additive 结构

2.2   通过相关系数 \alpha,计算attention-score

            同理依次算出来跟其它向量之间的相似度

       

      对相似度矩阵,通过softmax 归一化后,得到attention-score.

     

    attention-score,本质上是代表权重系数

2.3  根据attention-score , 重新计算向量

      Value:值向量,表示要根据查询向量和键向量的匹配程度来加权求和的信息

      v^1=a^1W_v 

     通过attention-score 加权求和得到b^1


三  代码

  • Query:查询向量,表示要关注或检索的目标 W_{Q}
  • Key:键向量,表示要与查询向量进行匹配或比较的源W_K
  • Value:值向量,表示要根据查询向量和键向量的匹配程度来加权求和的信息W_V
# -*- coding: utf-8 -*-
"""
Created on Tue Jul  9 21:15:05 2024@author: cxf
"""# -*- coding: utf-8 -*-
"""
Created on Thu Jul  4 10:37:27 2024@author: chengxf2
"""import torch
import torch.nn.functional as F
import torch.nn as nnclass Attention(nn.Module):def __init__(self, in_features,query_features,out_features):super(Attention, self).__init__()self.QUERY = nn.Linear(in_features,  query_features)self.KEY  =  nn.Linear(in_features,  query_features)self.VALUE = nn.Linear(in_features,  out_features)def forward(self,inputs):Q = self.QUERY(inputs)K = self.KEY(inputs)     V = self.VALUE(inputs)#计算attentiond_k= Q.shape[-1]alpha = torch.matmul(Q, K.T)/d_k**0.5attention_score =F.softmax(alpha,dim=1)print("\n attention_score:",attention_score)out = torch.matmul(attention_score, V)row_index =1row_sum = torch.sum(attention_score[row_index,:])print("\n row_sum ",row_sum)return outseq_len =5
in_features = 7
query_features =4
out_features = 3X = torch.randn((seq_len, in_features))
net =Attention(in_features, query_features, out_features)out = net(X)

参考:

Transformer终于有拿得出手得教程了! 台大李宏毅自注意力机制和Transformer详解!通俗易懂,草履虫都学的会!_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】29网课交单平台 SQL注入

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台,用于帮助学生完成网络课程的学习任务。这个平台提供了包括…

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM时间序列预测,Transformer-LSTM&#xf…

第五次作业(多表联合查询)

新增员工表emp和部门表dept create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8; insert into dept values (101,财务), (102,销售…

入门PHP就来我这(高级)18 ~ 获取结果集

有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享 路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。 1 PDO中获取结果集 在PDO中获取结果集常用3中方法:fetch()方法、fetchAll()方法和…

两位软件工程师创业,开发出一款软件质量保证自主AI代理,融资总额超3000万美元

编译整理|TesterHome社区 来源|TechCrunch 随着生成式人工智能(generative AI)的出现,人工智能应用正在改变和重塑各行各业,并改变人们的工作方式。软件开发也不例外。 总部位于旧金山和东京的初创公司Aut…

算法学习笔记(8.2)-动态规划入门进阶

目录 问题判断: 问题求解步骤: 图例: 解析: 方法一:暴力搜索 实现代码如下所示: 解析: 方法二:记忆化搜索 代码示例: 解析: 方法三:动态规划 空间…

C++进阶:继承和多态

文章目录 ❤️继承🩷继承与友元🧡继承和静态成员💛菱形继承及菱形虚拟继承💚继承和组合 ❤️多态🩷什么是多态?🧡多态的定义以及实现💛虚函数💚虚函数的重写&#x1f499…

MySQL之基本查询(上)-表的增删查改

目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…

【深度学习基础】MacOS PyCharm连接远程服务器

目录 一、需求描述二、建立与服务器的远程连接1. 新版Pycharm的界面有什么不同?2. 创建远程连接3. 建立本地项目与远程服务器项目之间的路径映射4.设置保存自动上传文件 三、设置解释器总结 写在前面,本人用的是Macbook Pro, M3 MAX处理器&am…

opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

看视频的时候有的视频文件名贼长。想要翻看,在文件夹里根本显示不出来,缩短又会丢失一些信息,所以我写了一份Python代码,直接获取视频的名字,时长,帧率,还有分辨率写到excel里。 实际效果如下图…

uniapp父页面调用子页面 组件方法记录

文章目录 导文如何点击父页面,触发子页面函数先写一个子页面的基础内容父元素 如何点击父页面,修改子页面的值先写一个子页面的基础内容父元素 导文 如何点击父页面,触发子页面函数? 如何点击父页面,修改子页面的值&am…

Java基础语法--基本数据类型

Java基础语法–基本数据类型 Java是一种静态类型语言,这意味着每个变量在使用前都必须声明其数据类型。Java提供了多种基本数据类型,用于存储整数、浮点数、字符和布尔值等。以下是Java中的基本数据类型及其特点: 1. 整型(Integ…

offer题目33:判断是否是二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如,输入数组{5,7,6,9,11,10,8},则返回true,,因为这个整数是下图二叉搜索树…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

C基础day7

一、思维导图 二、课后练习 1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include<myhead.h> #define M 20 int main(int argc, const char *argv[]) {int sum_a0,sum_b0,sum_c0,sum_d0;char str[M];printf("please en…

使用redis进行短信登录验证(验证码打印在控制台)

使用redis进行短信登录验证 一、流程1. 总体流程图2. 流程文字讲解&#xff1a;3.代码3.1 UserServiceImpl&#xff1a;&#xff08;难点&#xff09;3.2 拦截器LoginInterceptor&#xff1a;3.3 拦截器配置类&#xff1a; 4 功能实现&#xff0c;成功存入redis &#xff08;黑…

HTML5+CSS3小实例:响应式漫画网格布局

实例:响应式漫画网格布局 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sc…

Windows11配置WSL2支持代理上网

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装WSL2分发版二、配置步骤三、测试总结 前言 说起来本来这个功能我也不需要的&#xff0c;只是最近突然有个需求就顺便研究了下&#xff0c;WSL2默认的网…

Docker-compse的应用

1 docker-compose # 使用了docker 面临一个比较大的问题&#xff0c;如果一个djagno项目&#xff0c;使用mysql&#xff0c;redis&#xff0c;不要一次性把所有服务都放到一个容器中&#xff0c;每个服务一个容器&#xff0c;批量的管理多个容器&#xff0c;比较难以操作&…