Softmax 回归模型

分类问题,即

时,激活值

其中:

  • ,参数为:
  • 激活函数

如上图损失图像可知: 越小,损失越大。若 非常接近 1,那么损失接近 0

所以这会促使算法让 尽可能大,尽可能接近 1

举例:手写数字识别

通过神经网络,识别手写数字 0~9

TensorFlow 实现

稀疏分类交叉熵函数:稀疏是指每个数字只是这些类别中的一个

改进实现

在计算机中计算数值可能出现舍入误差

如使用两种不同方式计算:

x1 = 2.0 / 10000
print(f"{x1:.18f}")
# 0.000200000000000000
 
X2 = 1+(1/10000) - (1-1/10000)
print(f"{x2:.18f}")
# 0.000199999999999978

因为计算机用来存储每个数字的内存是有限的,这种数字在此处称为浮点数

逻辑回归:

事实证明,若你允许 TensorFlow 无需将 作为中间项计算,而是直接代入损失函数,而不分步计算。那么 TensorFlow 就能重新排列这个式子中的各项,并想出一种计算这个损失函数的更精确数值方法

但这样做会使得代码可读性下降,对于逻辑回归舍入误差较小,所以两种方法都可以

但在 softmax 中数值舍入误差可能会更严重:

如果其中一个 非常小,那么 的负小数次幂会变得极小;或者如果其中一个 非常大,那么 的负小数次幂会变得极大

通过重新排列各项,TensorFlow 能够避免一些极小或极大的数,进而为损失函数算出更精确的结果

这样修改之后,因为模型最后一层使用线性函数,而不是 softmax,所以模型输出的值不再是 ,而是 ,所以要获取最终输出,还需要再包一层 softmax:

逻辑回归同理:

多标签分类问题

之前学的多分类(multicause Classification)问题,输出标签 可以是多个类别中的任意一个;而多标签分类(Multi-labeI Classification)问题,输出标签 可以是多个类别中的任意几个

例如:自动驾驶或驾驶辅助系统,给模型一张汽车前方景象的图片,模型需要输出是否有车、是否有人……

如何构建一个用于多标签分类的神经网络?

一种做法是把这当作三个完全独立的机器学习问题;但还有第二种方法,也就是训练一个神经网络同时检测汽车、公交车和行人