64注意力机制 10章
自主性提示: 我想。。。、看想看的东西
非自主提示:随意一看 、看环境中现眼的东西
环境的东西就是键和值 我想要是查询
#@save def show_heatmaps(matrices, xlabel, ylabel, titles=None, figsize=(2.5, 2.5),cmap='Reds'):"""显示矩阵热图"""d2l.use_svg_display()num_rows, num_cols = matrices.shape[0], matrices.shape[1]fig, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize,sharex=True, sharey=True, squeeze=False)for i, (row_axes, row_matrices) in enumerate(zip(axes, matrices)):for j, (ax, matrix) in enumerate(zip(row_axes, row_matrices)):pcm = ax.imshow(matrix.detach().numpy(), cmap=cmap)if i == num_rows - 1:ax.set_xlabel(xlabel)if j == 0:ax.set_ylabel(ylabel)if titles:ax.set_title(titles[j])fig.colorbar(pcm, ax=axes, shrink=0.6);
attention_weights = torch.eye(10).reshape((1, 1, 10, 10)) show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')
上面没讲哇。。。。
n_train = 50 # 训练样本数 x_train, _ = torch.sort(torch.rand(n_train) * 5) # 排序后的训练样本 0-5之间随机生成50个数字 然后排序 def f(x):return 2 * torch.sin(x) + x**0.8y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,)) # 训练样本的输出 真实函数加上噪音 噪音是0均值 0.5方差 高斯 x_test = torch.arange(0, 5, 0.1) # 测试样本 0-5之间按0.1均匀的东西 y_truth = f(x_test) # 测试样本的真实输出 n_test = len(x_test) # 测试样本数 n_test50、画图函数
def plot_kernel_reg(y_hat):d2l.plot(x_test, [y_truth, y_hat], 'x', 'y', legend=['Truth', 'Pred'],xlim=[0, 5], ylim=[-1, 5])d2l.plt.plot(x_train, y_train, 'o', alpha=0.5);
# X_repeat的形状:(n_test,n_train), # 每一行都包含着相同的测试输入(例如:同样的查询) X_repeat = x_test.repeat_interleave(n_train).reshape((-1, n_train)) repeat 吧1234变成1111 222 333 444 n_train控制重复次数 # x_train包含着键。attention_weights的形状:(n_test,n_train), # 每一行都包含着要在给定的每个查询的值(y_train)之间分配的注意力权重 attention_weights = nn.functional.softmax(-(X_repeat - x_train)**2 / 2, dim=1) # y_hat的每个元素都是值的加权平均值,其中的权重是注意力权重 y_hat = torch.matmul(attention_weights, y_train) 按权重预测 plot_kernel_reg(y_hat)
最上角
最深
应该就是距离最近 所以权重最大 然后最右下角也是这样
weights = torch.ones((2, 10)) * 0.1 values = torch.arange(20.0).reshape((2, 10)) torch.bmm(weights.unsqueeze(1), values.unsqueeze(-1))tensor([[[ 4.5000]],[[14.5000]]])
class NWKernelRegression(nn.Module):def __init__(self, **kwargs):super().__init__(**kwargs)self.w = nn.Parameter(torch.rand((1,), requires_grad=True))def forward(self, queries, keys, values):# queries和attention_weights的形状为(查询个数,“键-值”对个数)queries = queries.repeat_interleave(keys.shape[1]).reshape((-1, keys.shape[1]))self.attention_weights = nn.functional.softmax(-((queries - keys) * self.w)**2 / 2, dim=1)# values的形状为(查询个数,“键-值”对个数)return torch.bmm(self.attention_weights.unsqueeze(1),values.unsqueeze(-1)).reshape(-1)
# X_tile的形状:(n_train,n_train),每一行都包含着相同的训练输入 X_tile = x_train.repeat((n_train, 1)) # Y_tile的形状:(n_train,n_train),每一行都包含着相同的训练输出 Y_tile = y_train.repeat((n_train, 1)) # keys的形状:('n_train','n_train'-1) keys = X_tile[(1 - torch.eye(n_train)).type(torch.bool)].reshape((n_train, -1)) # values的形状:('n_train','n_train'-1) values = Y_tile[(1 - torch.eye(n_train)).type(torch.bool)].reshape((n_train, -1))net = NWKernelRegression() loss = nn.MSELoss(reduction='none') trainer = torch.optim.SGD(net.parameters(), lr=0.5) animator = d2l.Animator(xlabel='epoch', ylabel='loss', xlim=[1, 5])for epoch in range(5):trainer.zero_grad()l = loss(net(x_train, keys, values), y_train)l.sum().backward()trainer.step()print(f'epoch {epoch + 1}, loss {float(l.sum()):.6f}')animator.add(epoch + 1, float(l.sum()))
# keys的形状:(n_test,n_train),每一行包含着相同的训练输入(例如,相同的键) keys = x_train.repeat((n_test, 1)) # value的形状:(n_test,n_train) values = y_train.repeat((n_test, 1)) y_hat = net(x_test, keys, values).unsqueeze(1).detach() plot_kernel_reg(y_hat)
d2l.show_heatmaps(net.attention_weights.unsqueeze(0).unsqueeze(0),xlabel='Sorted training inputs',ylabel='Sorted testing inputs')
都没咋讲。。。。
Pytorch 注意力机制_哇咔咔负负得正的博客-CSDN博客环境使用 Kaggle 里免费建立的 Notebook教程使用李沐老师的 动手学深度学习 网站和 视频讲解小技巧:当遇到函数看不懂的时候可以按 查看函数详解。不随意线索(无意识注意):想读书:随意线索(有意识地注意)非参就是不学习参数。1exp(−2u2)那么:f(x)=∑i=1nexp(−12(x−xi)2)∑j=1nexp(−12(x−xj)2)yi=∑i=1nsoftmax(−12(x−xi)2)yi\begin{aligned}f(x) &=\sum_{i=1}^{n} \https://blog.csdn.net/qq_39906884/article/details/125245275?spm=1001.2014.3001.5502
query和keys做注意力分数函数 然后丢到softmax 变成注意力权重 对每个map做加权和做输出
65 注意力分数【动手学深度学习v2】_哔哩哔哩_bilibili动手学深度学习 v2 - 从零开始介绍深度学习算法和代码实现课程主页:https://courses.d2l.ai/zh-v2/教材:https://zh-v2.d2l.ai/, 视频播放量 54299、弹幕量 410、点赞数 920、投硬币枚数 771、收藏人数 312、转发人数 45, 视频作者 跟李沐学AI, 作者简介 ,相关视频:66 使用注意力机制的seq2seq【动手学深度学习v2】,人工智能研究生现状,在线激情讲解transformer&Attention注意力机制(上),【Transformer模型】曼妙动画轻松学,形象比喻贼好记,华智冰的真身和AI同步,用自己训练的AI玩王者荣耀,GAN论文逐段精读【论文精读】,【原来如此】深度学习中注意力机制(attention)的真实由来,PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】,手推transformerhttps://www.bilibili.com/video/BV1Tb4y167rb?p=3&spm_id_from=pageDriver&vd_source=eba877d881f216d635d2dfec9dc10379
10.3. 注意力评分函数 — 动手学深度学习 2.0.0-beta0 documentationhttps://zh.d2l.ai/chapter_attention-mechanisms/attention-scoring-functions.htmlPytorch 注意力分数_哇咔咔负负得正的博客-CSDN博客环境使用 Kaggle 里免费建立的 Notebook教程使用李沐老师的 动手学深度学习 网站和 视频讲解小技巧:当遇到函数看不懂的时候可以按 查看函数详解。注意力汇聚(Pooling)表达式:f(x)=∑iα(x,xi)yi=∑i=1nsoftmax(−12(x−xi)2)yif(x) = \sum_i{\alpha(x, x_i)y_i} = \sum_{i=1}^{n}softmax(-\frac{1}{2}(x-x_i)^2)y_if(x)=i∑α(x,xi)yi=i=1∑nsoftmahttps://blog.csdn.net/qq_39906884/article/details/125248680?spm=1001.2014.3001.5502
3. Q&A
Q:mask_softmax 是啥意思?
A:有时候一个句子不够长,假如说一个句子 4 个单词,输入格式要求 10 个单词,那么需要填充 6 个无意义的词,然后用 mask_softmax 告诉 Query 计算的时候不需要考虑后 6 个词。
这块没有学习
64注意力机制 10章相关推荐
- 注意力机制--转载自我的学生隆兴写的博客
原文链接为:https://a-egoist.com/posts/a44b8419/,学生自己搭建的博客,点赞! 1 Attention 1.1 什么是 Attention 灵长类动物的视觉系统中的视 ...
- 小目标检测3_注意力机制_Self-Attention
主要参考: (强推)李宏毅2021/2022春机器学习课程 P38.39 李沐老师:64 注意力机制[动手学深度学习v2] 手把手带你Yolov5 (v6.1)添加注意力机制(一)(并附上30多种顶会 ...
- 文献阅读-融合注意力机制的 IETM 细粒度跨模态检索算法
引用格式:翟一琛,顾佼佼,宗富强,姜文志.融合注意力机制的 IETM 细粒度跨模态 检索算法[J/OL].系统工程与电子技术. https://kns.cnki.net/kcms/detail/11. ...
- 第8章 注意力机制与外部记忆
系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无 ...
- 《Android开发艺术探索》读书笔记 (10) 第10章 Android的消息机制
第10章 Android的消息机制 10.1 Android消息机制概述 (1)Android的消息机制主要是指Handler的运行机制,其底层需要MessageQueue和Looper的支撑.Mes ...
- 文献阅读笔记10——ECA注意力机制
0 写在前面 第一部分内容更针对于精度的提升,第二部分就需要找到一些方法针对速度的提升. 1 ECA注意力机制 天津大学在2020CVPR发表的一篇文章 1.1 Abstract+Conclusion ...
- 第8章、注意力机制与外部记忆
神经网络中可以存储的信息量称为网络容量(Network Capacity).一般来讲,利用一组神经元来存储信息时,其存储容量和神经元的数量以及网络的复杂度成正比.要存储的信息越多,神经元数量就要越多或 ...
- CVPR 2022 | 华南理工提出VISTA:双跨视角空间注意力机制实现3D目标检测SOTA,即插即用...
来源:机器之心 本文提出了 VISTA,一种新颖的即插即用多视角融合策略,用于准确的 3D 对象检测.为了使 VISTA 能够关注特定目标而不是一般点,研究者提出限制学习的注意力权重的方差.将分类和回 ...
- 【动手学深度学习】(task123)注意力机制剖析
note 将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作. 当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数.当它们的长度相同时,使用缩放的& ...
最新文章
- CF498C Array and Operations(数论 + 最大流)
- 详解.NET中容易混淆的委托与接口
- PAT (Basic Level) 1034 有理数四则运算(模拟)
- ImageView一例
- AC自动机-HDU2222-模板题
- [GO]无缓冲通道(unbuffered channel)
- spark学习——(二)spark基础环境配置-linux(1)
- pixmap和label设置图片自适应大小
- 全开源JAVA支付系统/jeepay聚合支付四方支付系统
- xjoi 1543 我自闭了
- 海量数据挖掘之中移动流量运营系统
- 【LWIP】(补充)STM32H743(M7内核)CubeMX配置LWIP并ping通
- C# 超市满减打折优惠
- 智能制造的生产运营管理
- 第二十二章 opengl之高级OpenGL(几何着色器)
- 大型在线实时应用解决方案
- LOJ 6485 LJJ学多项式
- 推荐一个下载神器(官网资料下载必备)
- 皖西学院计算机专业男女比例,2018全国高校男女比例排行榜出炉!哪所大学最难找对象?...
- 十一小长假来临,智能安防监控如何成为民众安全的“守护者”?