transformer中的attention为什么scaled?
链接:https://www.zhihu.com/question/339723385
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
论文中解释是:向量的点积结果会很大,将softmax函数push到梯度很小的区域,scaled会缓解这种现象。怎么理解将sotfmax函数push到梯度很小区域?还有为什么scaled是维度的根号,不是其他的数?
作者:TniL
https://www.zhihu.com/question/339723385/answer/782509914
1. 为什么比较大的输入会使得softmax的梯度变得很小?
对于一个输入向量 ,softmax函数将其映射/归一化到一个分布
。在这个过程中,softmax先用一个自然底数
将输入中的元素间差距先“拉大”,然后归一化为一个分布。假设某个输入
中最大的的元素下标是
,如果输入的数量级变大(每个元素都很大),那么
会非常接近1。
我们可以用一个小例子来看看 的数量级对输入最大元素对应的预测概率
的影响。假定输入
),我们来看不同量级的
产生的
有什么区别。
时,
;
时,
;
时,
(计算机精度限制)。
我们不妨把 在不同取值下,对应的的
全部绘制出来。代码如下:
得到的图如下所示:
可以看到,数量级对softmax得到的分布影响非常大。在数量级较大时,softmax将几乎全部的概率分布都分配给了最大值对应的标签。
然后我们来看softmax的梯度。不妨简记softmax函数为 ,softmax得到的分布向量
对输入
的梯度为:
把这个矩阵展开:
根据前面的讨论,当输入 的元素均较大时,softmax会把大部分概率分布分配给最大的元素,假设我们的输入数量级很大,最大的元素是
,那么就将产生一个接近one-hot的向量
,此时上面的矩阵变为如下形式:
也就是说,在输入的数量级很大时,梯度消失为0,造成参数更新困难。
注:softmax的梯度可以自行推导,网络上也有很多推导可以参考。
2. 维度与点积大小的关系是怎么样的,为什么使用维度的根号来放缩?
针对为什么维度会影响点积的大小,在论文的脚注中其实给出了一点解释:
假设向量 和
的各个分量是互相独立的随机变量,均值是0,方差是1,那么点积
的均值是0,方差是
。这里我给出一点更详细的推导:
对 ,
和
都是随机变量,为了方便书写,不妨记
,
。这样有:
,
。
则:
这样 ,
的均值是0,方差是1,又由期望和方差的性质, 对相互独立的分量
,有
,
以及
,
所以有 的均值
,方差
。方差越大也就说明,点积的数量级越大(以越大的概率取大值)。那么一个自然的做法就是把方差稳定到1,做法是将点积除以
,这样有:
将方差控制为1,也就有效地控制了前面提到的梯度消失的问题。
作者:Towser https://www.zhihu.com/question/339723385/answer/812013477
@lintongmao写的很好。用代码做一个数值实验就很清楚了:
from scipy.special import softmax
import numpy as npdef test_gradient(dim, time_steps=50, scale=1.0):# Assume components of the query and keys are drawn from N(0, 1) independentlyq = np.random.randn(dim)ks = np.random.randn(time_steps, dim)x = np.sum(q * ks, axis=1) / scale # x.shape = (time_steps,) y = softmax(x)grad = np.diag(y) - np.outer(y, y)return np.max(np.abs(grad)) # the maximum component of gradientsNUMBER_OF_EXPERIMENTS = 5
# results of 5 random runs without scaling
print([test_gradient(100) for _ in range(NUMBER_OF_EXPERIMENTS)])
print([test_gradient(1000) for _ in range(NUMBER_OF_EXPERIMENTS)])# results of 5 random runs with scaling
print([test_gradient(100, scale=np.sqrt(100)) for _ in range(NUMBER_OF_EXPERIMENTS)])
print([test_gradient(1000, scale=np.sqrt(1000)) for _ in range(NUMBER_OF_EXPERIMENTS)])
程序输出:
不带 scaling 的两组(可以看到 dim=1000 时很容易发生梯度消失):
[0.059398546712975064, 0.2498360169388831, 0.008179271245615127, 0.16985040166173004, 0.00017518204173572194]
[0.037403200843576845, 1.8829382497642655e-11, 6.995490600791854e-06, 1.3460521586239338e-10, 5.498179689311655e-11]
带 scaling 的两组(dim=1000 时梯度流依然稳定):
[0.23435524441068933, 0.10572976561186455, 0.09711877538913292, 0.059005529454577245, 0.15737320167534957]
[0.12238213059896091, 0.09907377893252199, 0.09771834771001327, 0.08899382001739972, 0.1312868174831885]
作者:Temp https://www.zhihu.com/question/339723385/answer/1844269544
感觉可以一句话总结:如果计算softmax的元素方差太大,将会导致softmax结果稀疏,进而导致梯度稀疏
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓
transformer中的attention为什么scaled?相关推荐
- transformer中的attention为什么scaled
简单的说是为了让attention得到的权值更加均匀一点. 在数量级较大时,softmax将几乎全部的概率分布都分配给了最大值对应的标签. 详见 transformer中的attention为什么sc ...
- 【深度学习】transformer中softmax为什么要scaled
论文中解释是:向量的点积结果会很大,将softmax函数push到梯度很小的区域,scaled会缓解这种现象.怎么理解将sotfmax函数push到梯度很小区域?还有为什么scaled是维度的根号,不 ...
- [NLP]——Transformer中的attention为什么要做scale?
前言 说起Transformer的self-attention,很容易想到下面的公式: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T ...
- Transformer解读之:Transformer 中的 Attention 机制
encoder 的 attention 场景:现在要训练的内容是 I love my dog -> 我喜欢我的狗 那么在 encoder 端的输入是: I love my dog: 假设经过 e ...
- transformer 中的 attention
来源:知乎-皮特潘 地址:https://zhuanlan.zhihu.com/p/444811538 大火的transformer 本质就是: 使用attention机制的seq2seq. 所以它的 ...
- NLP中的Attention注意力机制+Transformer详解
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者: JayLou娄杰 知乎链接:https://zhuanlan.zhihu. ...
- attention机制_聊聊NLP中的Attention机制---抛砖引玉
写在前面:有一段时间没更新专栏了,哈哈,先吐槽下自己的龟速更新. Attention机制基本已成为NLP的居家旅行必备技能,同时也是我一直关注的技术点,希望本篇内容能带给大家些许思考.如有描述不对的地 ...
- transformer中attention计算方式_Reformer: 局部敏感哈希、可逆残差和分块计算带来的高效...
最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的.完整的知识结构体系, 以下是要写的文章,本文是这个系列的第九篇: Transformer:Attenti ...
- transformer中attention计算方式_Transformer在推荐模型中的应用总结
最近基于transformer的一些NLP模型很火(比如BERT,GPT-2等),因此将transformer模型引入到推荐算法中是近期的一个潮流.transformer比起传统的LSTM.GRU等模 ...
最新文章
- 关于bcp的那些事儿
- Java三大特性: 封装、继承、多态
- 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询
- 云服务器太卡,云服务器解决io过高导致的命令卡顿
- [jquery]为jQuery.ajax添加onprogress事件
- 嵌入式linux面试题库,嵌入式linux面试题解析(二)——C语言部分三
- mysql开机自启动设置
- 我佛了!用 KNN 实现验证码识别,又 Get 到一招
- 让html的text输入框只能输入数字和1个小数点
- 在Lua中“优雅”地使用Protobuf
- 大数据与云计算的关系
- [转载]人人旗下风车网产品经理的创业失败教训总结
- 【题解】10-19秀秀的森林(forest)
- Shiro认证源码解析和工作原理
- scipy.misc.imresize改为Image.resize方法
- java if中的continue_java中break和continue源码解析
- luogu P4299 首都
- Jquery选择器之可见性选择器、属性过滤选择器
- Java中字符与字节常识
- SQL 实验项目8_事务控制