为什么softmax函数需要减去一个max值

背景:在softmax函数对vector值进行计算,转换为[0, 1]区间的概率值的时候,往往会先对vector中每个元素减去一个max(vector)值。本文主要记录下对神经网络学习中,关于softmax函数计算的track背后的原因。


  1. Softmax函数介绍
    首先来看一下softmax函数的公式:


    可以看到,softmax函数对vector处理的主要目的就是将vector的所有value处理到[0, 1]之间的类概率值。那么,为什么叫softmax呢?根据CS224n的说法,主要是因为softmax函数的效果是能够让vector中最大的数被取到的概率非常大,同时又不至于像max函数那么极端使得取到其他数的概率为0,所以叫softmax。

     

  2. 为什么要减去max
    那么为什么要对每一个x减去一个max值呢?从需求上来说,如果x的值没有限制的情况下,当x线性增长,e指数函数下的x就呈现指数增长,一个较大的x(比如1000)就会导致程序的数值溢出,导致程序error。所以需求上来说,如果能够将所有的x数值控制在0及0以下,则不会出现这样的情况,这也是为什么不用min而采用max的原因。

  3. 数学上如何保证正确性?
    正确性的关键就是要证明:softmax(x)=softmax(x+c)


    上面就是简单的数学推导过程,不难发现,对任意常数c来说,都不会影响softmax的结果。所以只要把常数c设置为-max就可以实现上面的优化效果。


------------------------------------------------
原文:https://www.jianshu.com/p/afa0ac6b7201
 

<think>嗯,用户刚刚问完Transformer里的自注意力机制,现在又接着问softmax函数。看来他在学习Transformer的过程中,对里面的各个组件产生了兴趣,想要逐个击破。 首先,我需要确认用户对softmax的理解程度。可能他在看自注意力机制的时候,看到公式里有softmax,所以想知道这是干什么的。用户可能已经有一些机器学习的基础,比如知道分类问题,但不确定是否了解概率分布和归一化的概念。 接下来,我应该从最基础的定义开始解释softmax,确保用户能跟上。比如,先说明它是一种数学函数,把实数向量转换成概率分布。然后举一个具体的例子,比如输入是[2.0, 1.0, 0.1],输出是概率,这样用户能直观理解。 然后,要强调softmax的关键作用:归一化和指数放大。这部分需要解释为什么用指数,比如指数函数能放大较大的,让大的更大,小的更小,这样概率差异更明显。同时,归一化确保所有输出之和为1,符合概率的定义。 接下来,可能需要讲解数学公式,分步骤拆解。比如,计算每个元素的指数,再求和,然后每个元素除以总和。这时候需要注意使用LaTeX公式,按照用户之前的系统级指令,行内公式用$...$,独立公式用$$...$$,并且单独成段。例如,给出具体的计算步骤,如输入向量、指数计算、归一化后的结果。 然后,应用场景部分很重要,用户可能想知道为什么在自注意力机制里要用softmax。这里需要联系之前的自注意力机制,说明在计算注意力权重时,softmax将得分转化为概率分布,决定每个位置的重要性。同时,还可以提到其他应用,比如多分类中的概率输出,这样用户能举一反三。 特性分析部分需要解释可微性,因为这是优化模型的关键,梯度下降需要可导的函数。温度系数也是一个重要点,用户可能在调整模型时遇到温度参数,这里可以说明温度如何影响输出的平滑程度,比如温度低时更尖锐,高时更平缓。 可能用户会有疑问,为什么不用其他函数比如简单的归一化?这时候需要比较softmax和其他方法的区别,比如指数函数的放大效应,以及梯度特性。不过用户可能没直接问这个问题,但提前解释可以预防他的疑惑。 最后,注意事项部分要提醒数稳定性问题,比如指数可能溢出,解决方法比如减去最大。这对于实际实现很重要,用户如果自己写代码可能会遇到,提前说明能帮助他避免错误。 整个过程中,要保持结构清晰,分点列出,让用户逐步理解。同时,结合之前的问题,将softmax和自注意力机制联系起来,巩固他的知识体系。需要确保用词准确但不过于学术化,适合中文解释,避免术语堆砌。 检查是否有遗漏的点,比如公式是否正确,是否符合LaTeX格式,有没有中文标点错误。确认回答覆盖了定义、作用、计算步骤、应用场景、特性、注意事项,这样用户能全面理解softmax函数。</think>以下是对softmax函数的详细分步解释: $$ \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} \quad (i=1,2,...,n) $$ ### 一、基本定义 1. **数学本质** 将任意实数向量$\mathbf{z} = [z_1,z_2,...,z_n]$转换为概率分布向量$\mathbf{p} = [p_1,p_2,...,p_n]$,满足: - $0 \leq p_i \leq 1$ - $\sum_{i=1}^n p_i = 1$ 2. **核心作用** - **归一化**:将无界实数映射到(0,1)区间 - **相对差异放大**:通过指数运算凸显最大 ### 二、计算过程演示 以输入向量$\mathbf{z} = [2.0, 1.0, 0.1]$为例: 1. **指数计算** $e^{2.0}≈7.389$, $e^{1.0}≈2.718$, $e^{0.1}≈1.105$ 2. **求和归一化** 分母$S = 7.389+2.718+1.105≈11.212$ 输出概率: $p_1≈7.389/11.212≈0.659$ $p_2≈2.718/11.212≈0.242$ $p_3≈1.105/11.212≈0.099$ ### 三、关键特性解析 $$ \begin{aligned} \text{性质1} &\quad \frac{\partial p_i}{\partial z_j} = p_i(\delta_{ij}-p_j) \\ \text{性质2} &\quad \arg\max(\mathbf{z}) = \arg\max(\text{softmax}(\mathbf{z})) \end{aligned} $$ 1. **梯度特性** - 当$i=j$时梯度为$p_i(1-p_j)$ - 当$i≠j$时梯度为$-p_ip_j$ - 这一特性使得在反向传播时梯度与概率直接关联 2. **保序性** 输入元素的相对大小关系在输出概率中完全保留: $$ z_i > z_j \Leftrightarrow p_i > p_j $$ ### 四、在神经网络中的应用 ||输入|输出|作用| |---|---|---|---| |多分类|Logits向量|类别概率|替代sigmoid处理多类别| |注意力机制|相似度得分|注意力权重|如Transformer中的$\alpha_{ij}$计算| |概率校准|模型原始输出|校准后概率|提升预测可信度| **Transformer应用示例**: 在自注意力机制中,计算查询向量$q_i$与键向量$k_j$的点积后: $$ \text{Attention Weight} = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) $$ 此步骤将原始相似度转换为概率分布,确定每个位置的关注强度 ### 五、变体与改进 1. **温度缩放(Temperature Scaling)** 引入温度参数$\tau$: $$ \text{softmax}(z_i/\tau) = \frac{e^{z_i/\tau}}{\sum_j e^{z_j/\tau}} $$ - $\tau→0$:趋向one-hot分布 - $\tau→+\infty$:趋向均匀分布 2. **稀疏softmax** 添加稀疏约束项,促使输出接近稀疏分布,常用于需要明确选择少量元素的任务 ### 六、数稳定性实践 为避免指数运算溢出,实际实现时采用如下稳定形式: $$ \text{softmax}(z_i) = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^n e^{z_j - \max(\mathbf{z})}} $$ 该方法通过减去最大保证指数运算结果在合理范围内,同时不改变最终概率分布 通过这种设计,softmax成为连接模型原始输出与概率解释的关键桥梁,在深度学习模型中具有不可替代的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值