当前位置: 首页 > news >正文

softmax

为什么要用softmax?

  1. 避免过大的注意力分数导致优化不稳定

  1. 在计算自注意力时,点积或者其它某些score function(例如加法或其他类型的相似性计算)可能会产生非常大的数值。例如,如果计算得到的 attention scores 是 [10000, 200, 1],那么 10000 这个数值就几乎主导了整个计算,这意味着相应的 value 对应的权重会非常大,而其他部分的贡献会变得微不足道。接下来,当这些值被用来计算加权和时,最终的结果会极端依赖于极大的分数,其他分数对输出的影响会被压缩得非常小。

更重要的是,如果在训练过程中这些大分数参与反向传播计算,它们的梯度可能会变得非常大,导致梯度爆炸,优化过程变得不稳定。反过来,如果某些分数特别小(如1或0),在梯度反向传播时可能导致梯度消失,从而无法有效更新参数。通过使用 Softmax,我们可以将这些分数归一化到一个概率分布,确保它们的数值范围适中,从而避免了过大或过小的数值导致梯度爆炸或消失的问题。

  1. 保证注意力分数非负

  1. Softmax的另一个重要功能是将所有的注意力分数转换为非负数。没有Softmax时,计算出的分数可能会包含负数,进而引发一些潜在问题。例如,如果某些特征的注意力分数为负,进行加权求和时可能会导致整体加权结果的方向出现不必要的偏差。自注意力的设计初衷是将每个位置的注意力加权求和,而负的注意力分数可能会导致某些位置的表示“被抑制”,这种设计与“加权求和”的直观理解不一致。

使用Softmax可以确保所有的注意力分数都是正数,并且它们加起来总和为1,这保证了每个元素对最终输出的贡献是可控的。Softmax还可以将较小的注意力分数压缩接近零,而较大的注意力分数则会被放大,确保最终加权求和时,较重要的特征能够得到更多的关注,而较不重要的特征则不会产生过大的影响。

可以不用softmax吗?

transformer中,query得到的q向量,key得到的k向量,相似度计算结果为一个$$n\times n $$的矩阵,softmax要遍历这个矩阵的每一行,对每一行分别进行softmax,而每一行的softmax计算又要对n个元素进行迭代,整体时间复杂度为$$O(n^2) $$,因此有一些方法和变种研究提出了如何减少计算复杂度或者用不同的方法替代 Softmax。

理论上是可以去掉 Softmax 的,但会带来以下问题:

  • 不归一化:去掉 Softmax 后,Attention scores 就不再是一个标准化的概率分布,可能会导致某些位置对输出的影响过大或过小,最终导致注意力不稳定。Softmax 的作用是平衡不同位置的贡献,使得每个位置对输出的影响在一个合理范围内。

  • 梯度问题:Softmax 除了进行归一化外,还通过对数映射进行梯度调整。如果没有 Softmax,直接使用大的注意力分数可能会引起 梯度爆炸梯度消失,影响模型训练。

  • 解释性:Softmax 将计算的分数转化为概率,这使得模型的解释性较好。如果去掉了 Softmax,虽然在理论上可以加快计算,但可能牺牲了模型的解释性。

 

http://www.dtcms.com/a/270845.html

相关文章:

  • GitHub 趋势日报 (2025年07月08日)
  • SQLZoo 练习与测试答案汇总(复杂题有最优解与其他解法分析、解题技巧)
  • 分类预测 | Matlab基于KPCA-ISSA-SVM和ISSA-SVM和SSA-SVM和SVM多模型分类预测对比
  • 打造自己的组件库(二)CSS工程化方案
  • Tensorflow的安装记录
  • 一天一道Sql题(day04)
  • 开源链动2+1模式与AI智能名片融合下的S2B2C商城小程序源码:重构大零售时代新生态
  • 华为静态路由配置
  • linux正向配置dns解析
  • 事件驱动架构
  • 汽车工业制造领域与数字孪生技术的关联性研究​
  • UI前端大数据处理性能评估与优化:基于负载测试的数据处理能力分析
  • 利用Wisdom SSH高效搭建CI/CD工作流
  • python Gui界面小白入门学习
  • # Shell 编程:从入门到实践
  • Android 系统默认代码,如何屏蔽相册分享功能
  • Android 组件内核
  • Go语言高级面试必考:切片(slice)你真的掌握了吗?
  • 设计模式(行为型)-责任链模式
  • golang条件编译:Build constraints
  • bash 判断 /opt/wslibs-cuda11.8 是否为软连接, 如果是,获取连接目的目录并自动创建
  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(2)对框架加入业务逻辑层
  • 金融时间序列机器学习训练前的数据格式验证系统设计与实现
  • React对于流式数据和非流式数据的处理和优化
  • 【实战】Dify从0到100进阶--知识库相关模型原理
  • 【编程史】IDE 是谁发明的?从 punch cards 到 VS Code
  • 【Python基础】变量、运算与内存管理全解析
  • Vue的watch和React的useEffect
  • 第4章:实战项目一 打造你的第一个AI知识库问答机器人 (RAG)
  • SQL Server 2008R2 到 2012 数据库迁移完整指南