0x05softmax

文章讨论了分类问题与回归的区别,强调在分类中如何利用softmax函数将输出转化为概率,并通过交叉熵损失函数来评估模型与真实值的差异。softmax函数用于将特征向量转换为概率分布,而交叉熵损失函数用于衡量模型预测概率与实际类别之间的区别。
摘要由CSDN通过智能技术生成

分类问题

回归是估计一个连续值

分类是预测一个离散类别

在这里插入图片描述

与回归的图相比,多出来的输出相当于也是一个连续的值,只不过是一个概率,来确定这个当前这个样本可能是什么类别的数据

本质上,也是直观上,当得到一个预测值最大的那个类别概率那么这个样本是这个概率的可能性也肯定是最大的,我们也就可以形象的认为这个样本在当前他所属的特征下他应该是属于预测出来可能性最大的样本。

要将我们的输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。

softmax就是我们常用的一个函数

softmax

y ^ = s o f t m a x ( o ) 其中 y ^ j = exp ⁡ ( o j ) ∑ k exp ⁡ ( o k ) \hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)} y^=softmax(o)其中y^j=kexp(ok)exp(oj)

k代表是每个类别,同样也可以认为一共有k个类别

同样的,定义这个模型我们也需要衡量他与真实值的差距,也就是定义损失函数

交叉熵损失

交叉熵常用来衡量两个概率的区别
H ( p , q ) = ∑ j − p i log ⁡ ( q i ) H(p,q) = \sum_j - p_i \log (q_i) H(p,q)=jpilog(qi)
我们把他应用到softmax里作为损失
l ( y , y ^ ) = − ∑ i y i log ⁡ y i ^ = − log ⁡ y y ^ l(y, \hat{y}) = -\sum_i y_i \log \hat{y_i}=-\log \hat{y_y} l(y,y^)=iyilogyi^=logyy^
除了y真实的类别以外,其他的 y i y_i yi取值都是0,所以可得最右边的式子

简易实现

在实现softmax操作时,博客忽然引出一段代码来回顾了一下softmax的实现,让很多弹幕还有我很懵,仔细想了一下,应该是这样:

def softmax(X):
    X_exp = torch.exp(X)
    partition = X_exp.sum(1, keepdim=True)
    return X_exp / partition  # 这里应用了广播机制

回想一下,实现softmax由三个步骤组成:

  1. 对每个项求幂(使用exp);
  2. 对每一行求和(小批量中每个样本是一行),得到每个样本的规范化常数;
  3. 将每一行除以其规范化常数,确保结果的和为1。

在查看代码之前,我们回顾一下这个表达式:
s o f t m a x ( X ) i j = exp ⁡ ( X i j ) ∑ k exp ⁡ ( X i k ) . \mathrm{softmax}(\mathbf{X})_{ij} = \frac{\exp(\mathbf{X}_{ij})}{\sum_k \exp(\mathbf{X}_{ik})}. softmax(X)ij=kexp(Xik)exp(Xij).

这里开始回顾的时候有点突然,没想明白这个X代表的是什么。一开始想的是代表训练数据构成的矩阵X,也就是一行为一个样本,每一列都是训练数据的特征。按照这个定义去看notebook中和ppt给出的公式感觉不是很对,因为你对每一个特征求一次softmax没有什么意义。其实这个X代指的是每一行是一个样本,每一列是根据这个样本的每个特征算出来的 o j o_j oj,也就是一开始提到的 o o o的计算方法;每一列代表这个训练问题所要求解的种类。这样就可以解释的清楚了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值