【深度学习】transformer中softmax为什么要scaled

论文中解释是:向量的点积结果会很大,将softmax函数push到梯度很小的区域,scaled会缓解这种现象。怎么理解将sotfmax函数push到梯度很小区域?还有为什么scaled是维度的根号,不是其他的数?

答案:q,k向量点积后的结果数量级变大,经历过softmax函数的归一化之后,后续反向传播的过程中梯度会很小,造成梯度消失。进行scaled能够缓解这种情况。

Multi-head Attention为什么要做scaled - 卷王李狗蛋的文章 - 知乎

目录

为什么会梯度消失的原因?

在self-attention中为什么要除以?

为什么要假设为均值为0,方差为1?

为什么在其他 softmax 的应用场景,不需要做 scaled?

为什么在分类层(最后一层),使用非 scaled 的 softmax?

注意力机制的softmax溢出怎么解决?


为什么会梯度消失的原因?

数量级对softmax得到的分布影响非常大。在数量级较大时,softmax将几乎全部的概率分布都分配给了最大值对应的标签。

点积后的结果数量级大会导致反向传播梯度变小。造成梯度消失,参数更新困难。

当输入g(x)函数的logits的数量级很大时,g(x)输出的是一个非常接近one-hot的向量[0,0,...1,...0,0]。

在self-attention中为什么要除以\sqrt{d_k}

方差越大也就说明,点积的数量级越大(以越大的概率取大值)。那么一个自然的做法就是把方差稳定到1,做法是将点积除以\sqrt{d_k}将方差控制为1,也就有效地控制了前面提到的梯度消失的问题

为什么要假设为均值为0,方差为1?

浅谈Transformer的初始化、参数化与标准化 - 科学空间|Scientific Spaces

在一般的教程中,推导初始化方法的思想是尽量让输入输出具有同样的均值和方差,通常会假设输入是均值为0、方差为1的随机向量,然后试图让输出的均值为0、方差为1。

初始化自然是随机采样的的,所以这里先介绍一下常用的采样分布。一般情况下,我们都是从指定均值和方差的随机分布中进行采样来初始化。其中常用的随机分布有三个:正态分布(Normal)、均匀分布(Uniform)和截尾正态分布(Truncated Normal)。

核心是让输入输出具有同样的均值和方差,保持相同的数据分布。挑正态分布可能因为常见,均值为0、方差为1。因为简单?

为什么在其他 softmax 的应用场景,不需要做 scaled?

transformer中的attention为什么scaled? - 小莲子的回答 - 知乎

为什么在分类层(最后一层),使用非 scaled 的 softmax?

因为木有两个随机变量相乘的情况,所以不存在点积后的结果数量级大会导致反向传播梯度变小!

注意力机制的softmax溢出怎么解决?

原文链接

transformer中的attention为什么scaled? - TniL的回答 - 知乎

transformer中的attention为什么scaled? - 小莲子的回答 - 知乎

浅谈Transformer的初始化、参数化与标准化 - 科学空间|Scientific Spaces

### Transformer模型中Softmax的作用 在Transformer架构中,Softmax函数主要应用于注意力机制以及最终的分类任务。以下是其具体作用及其与Softmax回归的关系: #### 1. 注意力机制中的Softmax Transformer的核心在于自注意力机制(Self-Attention),其中Softmax用于计算注意力权重。通过将查询(Query)、键(Key)和值(Value)矩阵相乘并缩放后,Softmax被用来规范化这些分数为概率分布[^2]。 ```python import torch import torch.nn.functional as F def scaled_dot_product_attention(query, key, value): scores = torch.matmul(query, key.transpose(-2, -1)) / torch.sqrt(torch.tensor(key.size(-1), dtype=torch.float)) attention_weights = F.softmax(scores, dim=-1) # 应用Softmax得到注意力权重 output = torch.matmul(attention_weights, value) return output, attention_weights ``` 这里的`F.softmax(scores, dim=-1)`确保了每个位置上的得分都被映射到0至1之间,并且所有位置的概率加起来等于1。这一步对于分配重要性权重至关重要,使得模型能够聚焦于最相关的部分[^3]。 #### 2. 输出层中的SoftmaxTransformer的最后一层,通常会有一个全连接网络(Fully Connected Layer),它负责将隐藏状态映射到目标词汇表大小的维度上。随后,Softmax再次发挥作用,将这个高维向量转化为各个词对应的概率分布[^1]。 ```python logits = linear_layer(hidden_states) # 线性变换后的未归一化预测 probabilities = F.softmax(logits, dim=-1) # 转换为概率分布 ``` 此过程类似于传统的Softmax回归,在多类分类问题中提供了一个清晰的概率解释框架。不同之处在于,Transformer利用复杂的编码器-解码器结构生成更丰富的特征表示作为输入给Softmax。 #### 3. 防止梯度消失现象 当输入过大时,Softmax可能会导致输出接近极端值(即趋近于0或1),从而引起梯度消失问题。为了避免这种情况影响训练效果,实践中常采用一些技巧来稳定数值范围,比如减去最大值后再做指数运算等预处理操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值