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

pytorch中一个tensor经过多次softmax会有什么变化?

在 PyTorch 中,一个 Tensor 经过多次 softmax 操作时,其值会逐渐趋向于某种分布,但并不会无限变化。以下是具体的行为与原因分析:


1. Softmax 的作用:

Softmax 将输入张量的值转换为一个概率分布,满足以下特性:

  • 输出的值范围在 (0,1)(0, 1)(0,1) 之间。
  • 所有输出值的和为 1。

公式如下:

softmax(x_i) = \frac{exp(x_i)}{\sum_{j=1}^{n} exp(x_j)}

2. 多次 softmax 的影响:

如果对一个 Tensor TTT 反复进行 softmax 操作,每次的结果都会受到数值分布的影响:

(a) 初始影响:

经过第一次 softmax 后,数值被归一化为概率分布。此时,数值的绝对大小会被压缩,差距较大的值会得到显著的强化,而差距较小的值会趋于均匀。

(b) 多次 softmax 的收敛性:
  • 逐渐趋于极值: 如果某些值在初始分布中较大,经过多次 softmax 后,它们的相对比例会越来越大,而较小的值会进一步被压缩为接近零。

    最终,分布可能会接近 one-hot 分布,即一个值接近 1,其余值接近 0。

  • 概率收敛: 因为 softmax 操作本身是对数值的指数运算,它会逐步放大数值之间的差距。经过多次迭代后,较大的值会占据主要比例,小的值会被排挤。

3. 实验举例:

用 PyTorch 验证:

import torch
import torch.nn.functional as F

# 初始 Tensor
t = torch.tensor([1.0, 2.0, 3.0])
print("初始 Tensor:", t)

# 连续执行 softmax
for i in range(10):
    t = F.softmax(t, dim=0)
    print(f"第 {i+1} 次 softmax 结果:", t)

可能的输出:

初始 Tensor: tensor([1., 2., 3.])
第 1 次 softmax 结果: tensor([0.0900, 0.2447, 0.6652])
第 2 次 softmax 结果: tensor([0.2535, 0.2959, 0.4506])
第 3 次 softmax 结果: tensor([0.3066, 0.3199, 0.3734])
第 4 次 softmax 结果: tensor([0.3244, 0.3288, 0.3468])
第 5 次 softmax 结果: tensor([0.3304, 0.3318, 0.3378])
第 6 次 softmax 结果: tensor([0.3323, 0.3328, 0.3348])
第 7 次 softmax 结果: tensor([0.3330, 0.3332, 0.3338])
第 8 次 softmax 结果: tensor([0.3332, 0.3333, 0.3335])
第 9 次 softmax 结果: tensor([0.3333, 0.3333, 0.3334])
第 10 次 softmax 结果: tensor([0.3333, 0.3333, 0.3334])

可以观察到:

  • 第一次 softmax 后,较大的值会显著变大。
  • 随着 softmax 次数增加,分布逐渐趋于极端,一个值接近 1,其余值接近 0。

4. 实际应用中的注意事项:

多次 softmax 通常不是一个常见的操作,原因如下:

  • 每次 softmax 都会重新归一化数据,使得梯度的分布和数值信息被多次放大或压缩,可能导致数值不稳定。
  • 在深度学习中,softmax 通常用于最终层输出或单次归一化,而不反复迭代。

如果需要理解 Tensor 的概率分布随层变化的影响,更适合通过其他手段,比如对 logits 或中间层输出直接操作,而不是反复 softmax。


http://www.kler.cn/a/418827.html

相关文章:

  • Mybatis:CRUD数据操作之单个条件(动态SQL)
  • 进程的知识
  • 11、PyTorch中如何进行向量微分、矩阵微分与计算雅克比行列式
  • SpringBoot小知识(3):热部署知识
  • ffmpeg.js视频播放(转换)
  • 分页查询功能
  • 【Linux课程学习】:《简易版shell实现和原理》 《哪些命令可以让子进程执行,哪些命令让shell执行(内键命令)?为什么?》
  • Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型
  • 未来已来!联想推出汽车智能空间解决方案
  • PWN的简单了解
  • 逆向攻防世界CTF系列42-reverse_re3
  • 论文解读:Reward criteria impact on the performance ofreinforcement learning...
  • Hbase2.2.7集群部署
  • 阿里云CPU过载的一点思考
  • 深度学习模型: BERT(Bidirectional Encoder Representations from Transformers)详解
  • word文档ctrl+v失效的解决方法
  • Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组
  • 网络安全-网络安全审计
  • C# 2024年Visual Studio实用插件集合
  • Oracle—系统包使用
  • SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo
  • 永久停用PostgreSQL 归档功能
  • Linux——自定义简单shell
  • day05 Linux bash核心及目录命令
  • 手机卡限速丨中国移动5G变3G,网速500kb
  • 【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】