机器学习中max(x)和argmax(x)的区别

max(x)和argmax(x)都是取最大值的意思。但是,两者的意思是不一样的。

比如: max ⁡ i p ( i ∣ j ) \mathop {\max }\limits_i p(i|j) imaxp(ij)中指的是当i取得特定值时 p ( i ∣ j ) p(i|j) p(ij)取得最大值。
arg ⁡ max ⁡ i p ( i ∣ j ) \mathop {\arg \max }\limits_i p(i|j) iargmaxp(ij)指的是当 p ( i ∣ j ) p(i|j) p(ij)取得最大值时对应i的值。
### Soft Argmax 的概念 Soft Argmax 是一种用于机器学习中的操作,旨在平滑化 argmax 函数的结果。传统 argmax 返回的是具有最高分数的位置索引,而 soft argmax 则返回一个概率分布,该分布在最大值处有较高的权重,并通过温度参数控制输出的概率分布的锐度。 软化后的 argmax 可以表示如下: \[ s_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} \] 其中 \( z_i \) 表示输入张量中第 i 个位置上的数值, 而 T 控制着输出分布的集中程度[Temperature parameter]。当T趋近于0时,soft argmax的行为接近硬argmax;随着T增大,则得到更均匀化的输出[^1]。 ### 实现方法 下面是一个简单的 Python 实现例子,展示了如何利用 PyTorch 来计算 soft argmax: ```python import torch import torch.nn.functional as F def soft_argmax(x, beta=1e2): """Compute the soft-argmax over last dimension.""" # Apply softmax with temperature scaling on input tensor 'x' weights = F.softmax(beta * x, dim=-1) # Create index array corresponding to each element's position along final axis indices = torch.arange(start=0, end=x.shape[-1], dtype=torch.float32).to(x.device) # Weighted sum of positions gives us our result return (weights @ indices).unsqueeze(-1) # Example usage: input_tensor = torch.tensor([[0., 1., 2.]]) output = soft_argmax(input_tensor) print(output.item()) # Should print value close to 2 since it has highest score. ``` 此函数接受任意形状的张量作为输入,在最后一个维度上执行 soft argmax 运算并返回相同大小的新张量,其元素代表对应位置的重要性得分。这里还引入了一个超参 `beta` ,用来调整最终输出向量的尖锐度——较大的 β 值会使结果更加集中在峰值附近[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值