1. softmax回归是分类问题

  回归(Regression)是用于预测某个值为“多少”的问题,如房屋的价格、患者住院的天数等。

  分类(Classification)不是问“多少”,而是问“哪一个”,用于预测某个事物属于哪个类别,如该电子邮件是否是垃圾邮件、该图像是猫还是狗、该用户接下来最有可能看哪部电影等。

  分类问题也有些许差别:(1)我们只对样本的硬性类别感兴趣,即属于哪个类别;(2)我们希望得到软性类别,即每个类别的概率是多少。这两者的界限往往很模糊,我们通常使用软性类别的模型来进行硬性分类。这也是softmax模型的原理。

2. 如何表示分类问题——独热编码(one-hot encoding)

  我们需要在分类问题中表示类别(标签)。最直接的想法是选择 $y\in \left\{1,2,3 \right\}$ ,其中的整数分别代表每个类别,如果类别之间有一些自然顺序,比如 $\left\{\text{婴儿},\text{儿童},\text{青少年},\text{年青人},\text{中年人},\text{老年人}\right\}$ ,那么将这个问题转变为回归问题并保留这种格式是有意义的。

  但是,一般的分类问题并不与类别之间的自然顺序有关。对此,我们使用一种简单的表示方法:独热编码(one-hot encoding)。独热编码是一个向量,它的分量和类别数目一样多,类别对应的分类设置为 $1$ ,其他所有分量设置为 $0$ 。

  例如,一个图像分类问题,输入图像是一个 $2\times 2$ 的灰度图像,可以用一个标量表示每个像素值,每个图像对应四个特征 $x_{1},x_{2},x_{3},x_{4}$ 。输入图像被分类为“猫”、“狗”、“鸡”,那么标签 $y$ 就是一个三维向量,其中 $\left(1,0,0\right)$ 对应于“猫”, $\left(0,1,0\right)$ 对应于“狗”,$\left(0,0,1\right)$ 对应于“鸡”:

$$y\in\left\{\left(1,0,0\right),\left(0,1,0\right),\left(0,0,1\right)\right\}$$

3. 网络结构

  为了获得所有可能类别的概率,我们需要一个多输出的模型,每个类别对应一个输出。为了实现线性模型的分类,我们需要和输出一样多的仿射函数,每个输出对应于自己的仿射函数。

  在我们提出的例子中,由于我们有 $4$ 个特征和 $3$ 个可能的输出类别,我们将需要 $12$ 个标量来表示权重( $w$ ), $3$ 个标量来表示偏置( $b$ )。下面根据输入特征来计算三个预测:$o_{1},o_{2},o_{3}$  。

$$o_{1} = w_{11}x_{1} + w_{12}x_{2} + w_{13}x_{3} + w_{14}x_{4} + b_{1}$$

$$o_{2} = w_{21}x_{1} + w_{22}x_{2} + w_{23}x_{3} + w_{24}x_{4} + b_{2}$$

$$o_{3} = w_{31}x_{1} + w_{32}x_{2} + w_{33}x_{3} + w_{34}x_{4} + b_{3}$$

  由于计算每个输出 $o_{1},o_{2},o_{3}$ 取决于输入的 $x_{1},x_{2},x_{3},x_{4}$ ,所以softmax回归的输出层也是全连接层。

  我们使用线性代数符号简洁地表达模型,模型的向量形式为:

$$\textbf o = \textbf W \textbf x + \textbf b$$

  其中, $\textbf o \in \mathbb R^{3}$ , $\textbf W \in \mathbb R^{3 \times 4}$ , $\textbf x \in \mathbb R^{4}$ , $\textbf b \in \mathbb R^{3}$ ,权重 $\textbf W$ 为一个 $3 \times 4$ 的矩阵,对于给定数据样本的特征 $\textbf x$ ,我们的输出 $\textbf o$ 是由权重与输入特征进行矩阵-向量乘法再加上偏置 $\textbf b$ 得到的。

4. softmax运算

  这里使用的方法是,将模型的输出视为概率。

  我们希望模型的输出 $\hat{y_{j}}$ 可以视为属于类别 $j$ 的概率。然后,选择最大输出值的类别 $\mathop{\arg\max}_{j}y_{j}$ 做为我们的预测。例如,如果 $\hat{y_{1}}$ , $\hat{y_{2}}$ , $\hat{y_{3}}$ 分别为 $0.1$ , $0.8$ , $0.1$ ,那么我们预测的类别就是 $2$ ,在我们的例子中代表“狗”。

  为什么我们不可以用预测 $\textbf o$ 直接作为输出呢?一方面,这些值的总和不一定为 $1$ ;另一方面,这些值可以为负数。

  要将输出视为概率,我们必须保证模型在任何数据上的输出都是非负值且总和为 $1$ 。此外,还需要一个训练目标,来使模型能精准的估计概率。如在输出为 $0.5$ 的所有样本中,我们希望有一半实际上属于预测的类别。这个属性叫做校准(calibration)。

  我们使用softmax函数来将未归一化的预测变换为非负且总和为 $1$ ,同时模型可导。我们首先对每个未归一化的预测求幂,这样可以保证输出非负。为了保证输出总和为 $1$ ,我们再对每个求幂后的结果除以它们的总和。公式如下:

$$\hat{\textbf y} = softmax\left( \textbf o \right) \qquad\text{其中}\qquad \hat{y_{j}} = \frac{\exp{o_{j}}}{\sum_{k}\exp{o_{k}}}$$

  如上所示,对所有的 $j$ 都有 $0 \le \hat{y_{j}} \le 1$ ,因此,输出 $\hat{\textbf y}$ 可以视为一个概率分布。

  softmax运算不会改变预测 $\textbf o$ 之间的顺序,只会确定每个输出类别的概率。因此,在预测过程中,我们有:

$$\mathop{\arg\max}_{j}\hat{y_{j}} = \mathop{\arg\max}_{j}o_{j}$$

  尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。因此,softmax回归是一个线性模型。

5. softmax运算的矢量化

  假设我们读取一个批量的样本 $\textbf X$ ,每个样本有 $d$ 个特征,批量大小为 $n$ ,输出类别数量为 $q$ 。那么批量样本特征为 $\textbf X \in \mathbb{R^{n \times d}}$ ,权重为 $\textbf W \in \mathbb{R^{d \times q}}$ ,偏置为 $\textbf b \in \mathbb{R^{1 \times q}}$ ,于是,softmax回归的矢量计算表达式为:

$$\textbf O = \textbf X \textbf W + \textbf b$$

$$\hat{\textbf Y} = softmax \left( \textbf O \right)$$

  $\textbf O \in \mathbb{R^{n \times q}}$ ,$+\textbf b$ 求和使用广播,$softmax$ 运算按行进行, $\hat{\textbf Y} \in \mathbb{R^{n \times q}}$ 。

6. 损失函数——交叉熵损失(cross-entropy loss)

  在softmax回归中,我们使用交叉熵损失来衡量预测和真实值之间的区别。

  $softmax$ 函数将为归一化的输出 $\textbf o$ 映射为一个向量 $\hat{\textbf y}$ ,我们可以将其视为给定任意输入 $\textbf x$ 的每个类别的估计条件概率,假设整个数据集 $\left\{\textbf X,\textbf Y \right\}$ 具有 $n$ 个样本,其中索引为 $i$ 的样本由特征向量 $\textbf x^{\left( i \right)}$ 和独热标签向量 $\textbf y^{\left( i \right)}$ 组成。

  对于任意标签 $\textbf y$ 和模型预测 $\hat{\textbf y}$ ,我们的损失函数(交叉熵损失)为:

$$l\left( \textbf y,\hat{\textbf y}\right) = - \sum_{j=1}^{q}y_{j}\log{\hat{y}_{j}}$$

  独热标签向量 $\textbf y$ 中,只有一个分量为 $1$ 其余都为 $0$ ,于是损失函数又可以写做:

$$l\left( \textbf y,\hat{\textbf y}\right) = - \log{\hat{y}_{y}}$$

  根据softmax的定义,将损失函数展开为:

$$l\left( \textbf y,\hat{\textbf y}\right) = - \sum_{j=1}^{q} y_{j} \log{ \frac{ \exp{\left( o_{j}\right)} }{ \sum{_{k=1}^{q}\exp{\left(o_{k}\right)}} } }$$

$$= \sum^{q}_{j=1} \log{ \sum^{q}_{k=1} \exp{\left(o_{k}\right)} } - \sum^{q}_{j=1}y_{j}o_{j}$$

$$= \log{  \sum^{q}_{k=1}\exp{\left(o_{k}\right)}  } - \sum^{q}_{j=1}y_{j}o_{j}$$

  损失函数对任何预测 $o_{j}$ 求导:

$$\frac{\partial l\left( \textbf y,\hat{\textbf y}\right)}{\partial o_{j}} = \frac{\exp{o_{j}}}{\sum^{q}_{k=1}\exp{o_{k}}} - y_{i} = softmax\left(\textbf o \right)_{j} - y_{j}$$

  由上式知,导数是我们模型得到的概率与实际之间的差异。

本文为学习笔记,学习内容来自李沐 https://zh-v2.d2l.ai/

【深度学习】softmax回归——原理、one-hot编码、结构和运算、交叉熵损失的更多相关文章

  1. 5 TensorFlow实战Google深度学习框架一书中的错误两处(交叉熵定义有误)

    第一处: 书中62页定义的交叉熵函数定义有误,虽然这个所谓交叉熵的数值能够减少,但是是不能提升预测性能的,因为定义就错了. 我已经将预测过程可视化,直接将交叉熵改为我的,或者用原书的,就可以看到预测结 ...

  2. UFLDL深度学习笔记 (五)自编码线性解码器

    UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...

  3. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  4. 机器学习(2):Softmax回归原理及其实现

    Softmax回归用于处理多分类问题,是Logistic回归的一种推广.这两种回归都是用回归的思想处理分类问题.这样做的一个优点就是输出的判断为概率值,便于直观理解和决策.下面我们介绍它的原理和实现. ...

  5. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  6. Hebye 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  7. Softmax 回归原理介绍

    考虑一个多分类问题,即预测变量y可以取k个离散值中的任何一个.比如一个邮件分类系统将邮件分为私人邮件,工作邮件和垃圾邮件.由于y仍然是一个离散值,只是相对于二分类的逻辑回归多了一些类别.下面将根据多项 ...

  8. 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)

    1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')  # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...

  9. 动手学深度学习5-softmax回归

    softmax回归 softmax 回归模型 单样本分类的矢量计算表达式 小批量样本分类的矢量计算表达式 交叉熵损失函数 模型预测以及评价 小结 softmax回归 前几节介绍的是线性回归模型适用于输 ...

随机推荐

  1. Java File常见用法

    一.构造方法 File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例. File(String pathname) 通过将给定的路径名字符 ...

  2. 图解Java 垃圾回收机制

    摘要: Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区.关于对象 ...

  3. Flink Streaming状态处理(Working with State)

    参考来源: https://www.jianshu.com/p/6ed0ef5e2b74 https://blog.csdn.net/Fenggms/article/details/102855159 ...

  4. 打印菱形图案(PTA)

    打印菱形图案 本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 标题输入格式 输入在一行中给出一个正的奇数n. 输出格式 输出由n行星号"*"组 ...

  5. springboot系列总结(二)---springboot的常用注解

    上一篇文章我们简单讲了一下@SpringBootApplication这个注解,申明让spring boot自动给程序进行必要的配置,他是一个组合注解,包含了@ComponentScan.@Confi ...

  6. Red Hat Enterprise Linux 7.2修改主机名(hostname)

    Red Hat Enterprise Linux 7.2在安装的时候,会默认生成主机名:localhost. 那么如何修改成自己想要的自己名? //格式为:用户名@主机名 比如: [root@loca ...

  7. Docker 学习目录

    docker 概述 docker是什么 使用最广泛的肉开源容器引擎 其他如rocket,containerd,pouch等容器引擎 一种系统级虚拟化技术 传统的kvm xen,exsi,vmware ...

  8. go语言调用everything的SDK接口

    介绍 官方SDK地址 本项目会将官方dll编译到可执行程序中,运行时无需考虑dll问题. 根据官方介绍,使用SDK前需要运行everything程序. 执行go build -tag ASCII时编译 ...

  9. 20210501 序列,熟练剖分(tree),建造游乐园(play)

    考场 \(65+5+0\),并列 rk2 最高分 \(55+10+10\) T1:等比数列可以写作 \(q^kx\),发现 \(q\le1000\) 且有一档分为 \(a_i\le100\),想到 \ ...

  10. Nginx rewrite跳转 location匹配

    目录: 一.常用的Nginx 正则表达式 二.location 三.rewrite 一.常用的Nginx 正则表达式 1 ^ :匹配输入字符串的起始位置 2 $ :匹配输入字符串的结束位置 3 * : ...