DJL-Java开发者动手学深度学习之使用Softmax进行分类

分类

在之前的文章中,我们介绍了线性回归的基本概念 DJL-Java开发者动手学深度学习之线性回归,并使用高层API实两简单线性回归模型 DJL-Java动手学深度学习之线性回归实现,有预测结果。
回归可以用来预测不少的问题,如我们之前讲的,预测房价、股票、球赛的胜负次数。同时,我们有时遇到的问题并不是预测问题,而是一个分类问题。比如:

  • 今天中午午饭吃什么?
  • 某个邮件,是否属于垃圾邮件?
  • 某个图片,是喵星人还是汪星人?
  • 某个人接下来最可能看哪种类型的电影?
  • 某个人在特定时间段内,最喜欢购买哪种商品?

通常,机器学习可以通过分类来描述两种微妙差别的问题:

  • 我们只对样本类别感兴趣,既哪种类别。
  • 我们希望通过对样本类型进行分析,找出每种类别出现的概率。
    而往往,这两者的界限很模糊。其中的原因可能是:即使我们只关于分类问题,我们依然要使用分类的概率。

分类问题

我们从一个简单的图片分类问题开始讲起 。假如每次给定一个图片,我们可以用一个标量来表求每一个像素,那么每个图片对应的特征可以表求为 { x 1 , x 2 , x 3 , . . . , x n } {x_1,x_2,x_3,…,x_n}{x 1 ​,x 2 ​,x 3 ​,…,x n ​} 。另外,我们假设每个图片属于喵星人和汪星人的一种。
接下来,我们就可以选择如何用标签进行表求。我们有两个明显的选择:最直接的想法是选择( y ∈ { 1 , 2 } ) (y \in {1, 2} )(y ∈{1 ,2 }), 其中整数分别代表 { 狗 , 猫 } {狗, 猫}{狗,猫}。 这是在计算机上存储此类信息的有效方法。 如果类别间有一些自然顺序, 比如说我们试图预测 { 小 学 , 中 学 , 初 中 , 高 中 , 大 学 } {小学,中学,初中,高中,大学 }{小学,中学,初中,高中,大学}, 那么将这个问题转变为回归问题,并且保留这种格式是有意义的。

幸运的是,一般的分类问题并不与类别之间的自然顺序有关。 统计学家很早以前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。 独热编码是一个向量,它的分量和类别一样多。 类别对应的分量设置为1,其他所有分量设置为0。 在我们的例子中,标签( y ) (y)(y )将是一个二维向量, 其中( 1 , 0 , 0 ) (1, 0, 0)(1 ,0 ,0 )对应于”猫”、( 0 , 1 , 0 ) (0, 1, 0)(0 ,1 ,0 )对应于”狗”,( 0 , 0 , 1 ) (0, 0, 1)(0 ,0 ,1 )对应于”猪”:
y ∈ { ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) } y \in {(1, 0, 0), (0, 1, 0),(0, 0, 1)}y ∈{(1 ,0 ,0 ),(0 ,1 ,0 ),(0 ,0 ,1 )}

网络结构

为了估计所有可能类别的条件概率,我们需要一个有多个输出项的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的函数。 每个输出对应于一种类型。 在我们的例子中,由于我们有4个特征和3个可能的输出类别, 参考我们之前讲的线程回归,我们可以写出如下预测公式。

f ( x ) = x 1 w 1 + x 2 w 2 + x 3 w 3 + x 4 w 4 + b f(x) = x_1w_1+x_2w_2+x_3w_3+x_4w_4+b f (x )=x 1 ​w 1 ​+x 2 ​w 2 ​+x 3 ​w 3 ​+x 4 ​w 4 ​+b

我们可以用神经网络图来描述这个计算过程。与线性回归一样,softmax回归也是一个单层神经网络。

DJL-Java开发者动手学深度学习之使用Softmax进行分类

为了更简洁地表达模型,我们仍然使用线性代数符号。 通过向量形式表达为( y = W x + b ) (\mathbf{y} = \mathbf{W} \mathbf{x} + \mathbf{b})(y =W x +b ), 这是一种更适合数学和编写代码的形式。 由此,我们已经将所有权重放到一个( 3 × 4 ) (3 \times 4)(3 ×4 )矩阵中。 对于给定数据样本的特征( x ) (\mathbf{x})(x ), 我们的输出是由权重与输入特征进行矩阵向量乘法再加上偏置( b ) (\mathbf{b})(b )得到的。

; 损失函数

接下来,我们需要一个损失函数来度量预测的效果。 我们将使用最大似然估计,这与在线性回归 DJL-Java动手学深度学习之线性回归实现 中的方法相同。
假定一个向量y ^ \hat{\mathbf{y}}y ^​,我们可以将其视为”任意输入 x ^ \hat{\mathbf{x}}x ^的每个类的条件概率”。比如y ^ 1 = P ( 猫 ∣ x ) \hat{y}_1 =P( 猫 \mid \mathbf{x})y ^​1 ​=P (猫∣x )。
我们可以将估计值与实际值进行比较:

P ( Y ∣ X ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ) P(\mathbf{Y} \mid \mathbf{X}) = \prod_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)})P (Y ∣X )=i =1 ∏n ​P (y (i )∣x (i ))

根据最大似然估计,我们最大化( P ( Y ∣ X ) ) (P(\mathbf{Y} \mid \mathbf{X}))(P (Y ∣X )),相当于最小化负对数似然:

− log ⁡ P ( Y ∣ X ) = ∑ i = 1 n − log ⁡ P ( y ( i ) ∣ x ( i ) ) = ∑ i = 1 n l ( y ( i ) , y ^ ( i ) ) -\log P(\mathbf{Y} \mid \mathbf{X}) = \sum_{i=1}^n -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) = \sum_{i=1}^n l(\mathbf{y}^{(i)}, \hat{\mathbf{y}}^{(i)})−lo g P (Y ∣X )=i =1 ∑n ​−lo g P (y (i )∣x (i ))=i =1 ∑n ​l (y (i ),y ^​(i ))

其中,对于任何标签( y ) (\mathbf{y})(y )和模型预测( y ^ ) (\hat{\mathbf{y}})(y ^​),损失函数为:

l ( y , y ^ ) = − ∑ j = 1 q y j log ⁡ y ^ j l(\mathbf{y}, \hat{\mathbf{y}}) = – \sum_{j=1}^q y_j \log \hat{y}_j l (y ,y ^​)=−j =1 ∑q ​y j ​lo g y ^​j ​
通常我们将上面公式称为交叉熵损失(cross-entropy loss)。

模型预测和评估

在训练softmax回归模型后,给出任何样本特征输入,我们可以预测每个输出类别的概率。通常我们使用预测概率最高的类别作为输出类别。

关注公众号,我们后续给出Softmax的代码实现。

DJL-Java开发者动手学深度学习之使用Softmax进行分类

Original: https://blog.csdn.net/xxcnb/article/details/122017491
Author: ousinka
Title: DJL-Java开发者动手学深度学习之使用Softmax进行分类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/664866/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球