目录
- 多分类问题
- 1.什么是多分类问题
- 2.多分类问题案例
- 3.二分类与多分类的区别
- Softmax
- 1. 什么是Softmax
- 2.逻辑回归预测的计算过程
- 3. Softmax预测的计算过程
- 4.Softmax 回归与逻辑回归的关系
- 5. Softmax的损失函数
- softmax与神经网络
- 1.设置Softmax层
- 2.Softmax层的计算
- 3.softmax激活函数与其它激活函数的区别
- 4.TensorFlow实现Softmax神经网络
- softmax的代码改良
- 1.简述
- 2.数值舍入误差案例
- 3.逻辑回归的数值舍入误差
- 4.改良逻辑回归的数值舍入误差
- 5.改良softmax的数值舍入误差
- 5.具体的改良代码
- 多标签分类问题
- 1.什么是多标签分类?
- 2.多类分类和多标签分类的区别
- 3.建立多标签分类的神经网络
- 总结
多分类问题
1.什么是多分类问题
多分类问题指的是在分类任务中,输出标签y不仅仅局限于两个类别,而是存在两个以上的可能类别。
2.多分类问题案例
- 手写数字分类:仅区分手写数字0和1。
- 邮政编码识别:涉及10个可能的数字类别。
- 疾病诊断:判断病人可能患有三种或五种不同的疾病。
- 视觉缺陷检测:判断药片是否存在刮痕、变色或破损等缺陷,对药片进行不同缺陷分类。
3.二分类与多分类的区别
- 二分类问题:逻辑回归模型预测给定特征x条件下y为1的概率。
- 多分类问题:需要预测y等于1、2、3、4等多个概率。多分类算法能够在空间中学习到一个决策边界,将空间划分为多个区域。
Softmax
1. 什么是Softmax
它是一种函数,可以理解成逻辑回归模型的扩展,用于预测多分类问题,类似于sigmoid预测二分类。
2.逻辑回归预测的计算过程
首先计算z=wx+b,然后通过sigmoid函数得到a=g(z)。它意味着在给定输入特征x的情况下y=1的概率,如果y=1的概率为0.71,则y=0的概率为0.29(1-0.71)。
3. Softmax预测的计算过程
当y可以取四个可能的输出值(1234),softmax会如何操作?
(1)参数:这里的w1,w2,w3,w4和b1,b2,b3,b4是softmax回归的参数。
(2)计算公式(激活函数):分母都是一样的,从ez1加到ez4。分子是不断更换。我们可以理解成给定输入特征x的情况下,a1表示y=1的概率,a2表示y=2的概率,a3表示y=3的概率,a4表示y=4的概率。这4个概率的和也要等于1(0.30+0.20+0.15+0.35=1)。
(3)softmax的一般情况:上述的y只有4种情况即y=1,2,3,4,而一般情况下,y可以取n个值,即y=1,2,3,4…n。j的范围是1到n,aj理解为在给定输入特征x的情况下,y=j的概率。注意,a1到an的和要为1,因为概率总体和为1。
4.Softmax 回归与逻辑回归的关系
如果n为2,则softmax的计算结果和逻辑回归的计算结果相同,只是两者的参数不同。
5. Softmax的损失函数
(1)逻辑回归的损失函数:可以将1-a1简化成a2。因此当y=1时,损失函数为-loga1。如果y=0时,损失函数为-loga2。
(2)Softmax 回归的损失函数:根据真实标签y,选择对应的损失函数计算损失,例如y=2,计算-loga2,损失越接近1,表示模型预测分类的效果越好,因此算法会尽力让计算的值趋近于1。softmax的每个预测概率都在0-1之间。
softmax与神经网络
1.设置Softmax层
之前,我们使用了两类别的手写数字识别神经网络。现在,为了分类0到9的手写数字,我们需要将输出层调整为10个单元,并将其设为Softmax输出层。
2.Softmax层的计算
输出层的每个神经元使用softmax的激活函数,神经元分别输出y=1~10的概率。
3.softmax激活函数与其它激活函数的区别
对于Softmax激活函数,每个激活值(如a1)依赖于所有的Z值(Z1到Z10)。计算a1时,需要用到所有的Z值,而不是只用Z1。对于sigmoid、ReLU或线性激活函数,每个激活值是独立计算的。例如,a1只依赖于Z1,a2只依赖于Z2。
4.TensorFlow实现Softmax神经网络
(1) 定义网络结构:第一层有25个单元,激活函数为ReLU。第二层有15个单元,激活函数也为ReLU。第三层有10个输出单元,使用Softmax激活函数。
(2) 选择损失函数:使用SparseCategoricalCrossentropy函数作为损失函数,适用于多类别分类问题。它可以让每个输入样本只属于一个类别,不会一个图像即出现又2又是7的情况。
(3)训练模型:训练模型的步骤与之前类似。
softmax的代码改良
1.简述
上述TensorFlow实现Softmax神经网络的方法是正确的,但改用一种能减少舍入误差的方法,可以在 TensorFlow中更准确地进行计算。
2.数值舍入误差案例
先用数学演示两种计算方法,直接计算(option1)比通过复杂表达式(option2)计算有更少的舍入误差。
代码也证明了这点,在计算机中,(1 + 1/10000) - (1 - 1/10000) 计算的结果可能不是精确的2/10000,而是一个有误差的值。
3.逻辑回归的数值舍入误差
(1)直接使用a计算
损失函数中直接使用 a,在计算a时已经引入了舍入误差,这个过程类似计算1 + 1/10000 和 1 - 1/10000。
(2)使用展开a计算
- 直接在损失函数中使用a的原始公式1 / (1 + e^(-z)),不显式计算 a。这种方法类似于直接计算 2/10000,因为TensorFlow可以在内部优化这些计算,减少舍入误差。
4.改良逻辑回归的数值舍入误差
- 首先要将输出层修改为线性激活,然后设置from_logits=True,意思是告诉我TensorFlow输出层未经过激活函数(线性激活),使其在内部使用逻辑回归处理 logits 值(即 z),这样TensorFlow可以重新排列项来减少数值舍入误差,提高计算精度。
5.改良softmax的数值舍入误差
过程和逻辑回归的一样,只是内部使用softmax函数计算z。
5.具体的改良代码
(1)softmax
神经网络的最终输出不再是激活值a,而是线性激活z(wx+b),然后我们需要让输出z使用softmax计算,才能得到最终想要的结果。
(2)逻辑回归
同理,输出的是线性激活z,因此需要z使用sigmoid计算,得到最终结果。
多标签分类问题
1.什么是多标签分类?
每个样本可能有多个标签,每个标签表示不同的类别。例如自动驾驶系统中,针对前方的图片,可能要判断是否有车、是否有公交车、是否有行人等。这种情况下,每张图像可以同时属于多个标签,单一标签无法描述图像中所有的信息。
2.多类分类和多标签分类的区别
- 在多类分类中:目标 Y 是一个单个的数字,比如手写数字分类中的Y 可能是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 中的一个。
- 在多标签分类中:目标Y是一个由多个数字组成的向量,比如 [1, 0, 1],表示图像中有车,没有公交车,有行人。
3.建立多标签分类的神经网络
由于需要解决三个二分类问题(是否有车、是否有公交车、是否有行人),可以在输出层的这三个神经元使用 sigmoid 激活函数。因此,输出向量的3个元素将分别表示图像中是否有车、是否有公交车和是否有行人。
总结
本篇首先引入了多分类问题,然后介绍了解决多分类的算法:softmax,softmax可以理解为逻辑回归的扩展。通过对比逻辑回归,介绍了softmax的预测过程和损失函数,又将softmax引入神经网络,使我们看到了神经网络使用softmax作为输出层的预测。随后我们又引入了代码改良,通过设置输出层为线性激活,以及在编译模型时设置from_logits=True,来减小误差,增加预测的精度。最后介绍了多类分类与多标签分类。