李沐《动手学深度学习》 | Softmax回归 - 分类问题

从回归到多类分类

回归:估计一个连续值

  • 单连续数值输出
  • 输出是一个自然区别R
  • 损失函数:跟真实值的区别作为损失

分类:预测一个离散类别

  • 通常多个输出
  • 输出i是预测第i类的置信度

在深度学习中,置信度通常指模型对其预测结果的确信程度

1.对类别进行编码:独热编码

说明

one-hot 独热编码用于将离散的分类标签转换为二进制向量。独热编码是一个向量,它的分量数目=类别,类别对应的分量设置为1,其他所有分量设置为0

  • 离散的分类:类别之间相互独立,不存在谁比谁大、谁比谁先、谁比谁后的关系。
  • 二进制向量:每一个分量都是二进制的,只有0、1两种取值。

目的:将独立的标签表示为相互独立的数字,并且数字之间的距离也相等

2.使用均方损失训练

3.选取使得置信度 o i o_i oi最大的i作为预测结果

y ^ = arg max ⁡ i o i \hat y = \argmax_i o_i y^=argmaxioi

角度1:对分类问题来说,并不关系预测与实际值,关心对正确类别的置信度(可能性)特别大

需要更置信(确信)的识别正确类:

正确类y的置信度 o y o_y oy要远远大于非正确类的置信度 o i o_i oi: o y − o i ≥ Δ ( y , i ) o_y - o_i \geq \Delta(y,i) oyoiΔ(y,i),其中 Δ \Delta Δ表示某个阈值 => 这里我们并不关系 o y o_y oy的具体值,而是关心 o y o_y oy o i o_i oi的差距

角度2:我们更希望输出类别的匹配概率(非负,和为1) ,也就是输入一个样本,预测每个输出类型的概率,然后使用预测概率最高的类别作为输出:采用softmax函数

y ^ = s o f t m a x ( o ) \hat y = softmax(o) y^=softmax(o),具体展开 y ^ i = e x p ( o i ) ∑ k e x p ( o k ) \hat y_i = \frac{exp(o_i)}{\sum_k exp(o_k)} y^i=kexp(ok)exp(oi)。其中,指数是不管什么值都可以让其变成非负,这个式子可以保证 y ^ i \hat y_i y^i对所有的i求和值为1。


:::tips
softmax运算将数值映射为一个概率。

:::

交叉熵损失函数

交叉熵常用来衡量两个概率的区别 H ( p , q ) = ∑ i − p i l o g ( q i ) H(p,q)=\sum_i - p_ilog(q_i) H(p,q)=ipilog(qi)

将其作为损失KaTeX parse error: \tag works only in display equations

y y y通常是一个one-hot编码向量,真实类别为1,其余为,其中 y i y_i yi是真实标签的第 i i i个类别的概率; y ^ i \hat y_i y^i是模型预测的第 i i i个类型的概率。

除了 i = k i=k i=k y k = 1 y_k=1 yk=1,其他 y i = 0 y_i=0 yi=0,所以求和式中只有 i = k i=k i=k的项不为零: l ( y , y ^ ) = − ∑ i y i l o g y ^ i = − ( y k l o g y ^ k ) + ∑ i ≠ k y i l o g y ^ i = − l o g y ^ k l(y,\hat y )=-\sum_i y_ilog\hat y_i = -(y_klog\hat y_k) + \sum_{i\neq k} y_ilog \hat y_i = -log\hat y_k l(y,y^)=iyilogy^i=(yklogy^k)+i=kyilogy^i=logy^k

所以(1)的 y ^ y \hat y_y y^y 表示该样本的真实类别 y y y 对应的预测概率 y ^ k \hat y_k y^k

为了更明确,交叉熵损失函数可以写成: l ( y , y ^ ) = − l o g y ^ t r u e c l a s s l(y,\hat y)=-log \hat y _{true class} l(y,y^)=logy^trueclass

交叉熵来衡量概率区别可以发现:我们不关心非正确类的预测值,只关心正确类的预测值

梯度下降

目标是求损失的梯度,接着朝减少损失的方向更新参数。

损失函数:$l(y,\hat y )=-\sum_i y_ilog\hat y_i $

带入softmax公式: = − ∑ i y i l o g ( e o i ∑ k = 1 q e o k ) =-\sum_i y_ilog(\frac{e^{o_i}}{\sum_{k=1}^q e^{o_k}}) =iyilog(k=1qeokeoi)

利用对数性质 l o g ( a b ) = l o g ( a ) − l o g ( b ) log(\frac{a}{b}) = log(a)-log(b) log(ba)=log(a)log(b):$=-\sum_i y_i [log(e^{o_i}) - log(\sum_{k=1}^q e^{o_k})] $

简化 l o g ( e x ) = x log(e^x)=x log(ex)=x: = ∑ i y i l o g ( ∑ k = 1 q e o k ) − ∑ i y i o i =\sum_i y_i log(\sum_{k=1}^q e^{o_k}) - \sum_i y_i o_i =iyilog(k=1qeo

### 关于Softmax回归的讲解 #### Softmax回归作为线性模型的本质 尽管`softmax`本身是一个非线性函数,但在Softmax回归中,最终输出的概率分布是由输入特征经过一次仿射变换后得到的结果所决定。因此,在本质上,Softmax回归仍属于线性模型类别[^1]。 #### 高级API下的简洁实现方式 通过利用现代深度学习框架提供的高级应用程序接口(API),可以更加简便地构建并训练一个Softmax回归模型。相较于手动编码每一个细节部分,这种方法不仅简化了开发流程,还提高了代码可读性和效率。值得注意的是,为了保障数值运算过程中的稳定性和准确性,这些库通常会内置一些优化策略和保护措施,使得开发者无需担心潜在的技术难题[^2]。 #### 实现Softmax操作的具体方法 对于给定的数据矩阵\(X\)而言,可以通过如下Python代码片段来定义一个简单的`softmax()`函数: ```python import torch def softmax(X): X_exp = torch.exp(X) partition = X_exp.sum(1, keepdim=True) # 对每一行求和,并保持维度不变以便后续除法操作 return X_exp / partition # 利用广播机制完成按元素相除 ``` 上述代码实现了将任意实数向量转换成概率形式的功能,其中每个分量代表对应类别的预测可能性大小[^3]。 #### 关于交叉熵损失函数的理解 在多分类任务场景下,常用的一种评估指标就是交叉熵损失(Cross Entropy Loss)。它衡量了真实标签与预测结果之间的差异程度;当两者完全一致时取最小值0,反之则趋向无穷大。借助PyTorch等工具包内的预设组件可以直接调用这一功能模块而不需要自行设计复杂的数学表达式[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值