一、定义
多分类问题:目标值 y 可以取两个以上的值。
二、softmax
softmax 回归算法是 Logistic 回归算法的推广:适用于多分类问题
1. 逻辑回归
Logistic regression:两个可能的输出值
z = w*x + b
a_1 = g(z) = \frac{1}{1+e^{-z}} = P(y=1|x)
a_2 = 1 - g(z) = P(y=0|x)
loss = -y loga_{1} - (1-y)loga_{2}
J(w,b) = average loss
2. Softmax 回归
(1) 以四个可能的输出值为例
(y = 1,2,3,4)
a_{1} + a_{2} + a_{3} + a_{4} = 1
(2) 一般公式
Softmax regression:N 个可能的输出值
z_{j} = w_{j} x + b_{j} j = 1, ..., N
a_{j} = \frac{e^{Z_{j}}}{\sum_{k=1}^Ne^{Z_{k}}}
a_{1} + a_{2} + ... + a_{N} = 1
(3) 成本函数
三、在神经网络中使用 softmax
1. 将 softmax 作为输出层 (以识别手写数字为例)
2. 使用 Tensorflow 的代码实现
e.g. MNIST with softmax
# specify the model f(x) =? import tensorflow as tf from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense model = Sequential (l Dense (units=25, activation='relu') Dense (units=15, activation='relu') Dense (units=10, activation=' softmax') )] # specify loss and cost L(f(x),y) from tensorflow.keras.losses import SparseCategoricalCrossentropy model.compile(loss = SparseCategoricalCrossentropy()) # 稀疏范畴交叉熵函数 # Train on data to minimize J(w,b) model.fit(X, Y, epochs=100)
【注】该 tensorflow 实现的代码了解即可,推荐使用的代码请见后。
3. 改进后的代码
改进后的代码数字误差减小
import tensorflow as tf from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense # model model = Sequential([ # model Dense (units=25, activation='relu') Dense (units=15, activation='relu') Dense (units=10, activation='linear')]) # loss from tensorflow.keras.losses import SparseCategoricalCrossentropy model.compile (...,loss=SparseCategoricalCrossentropy(from_logits=True)) model.fit(X, Y, epochs=100) # fit logits = model(X) # predict f_x = tf.nn.softmax(logits) # 获取输出值,通过logistic函数进行映射
四、多标签分类问题
与图像相关、可能有多个标签。
e.g.
解决方法
-
将其视为三个完全独立的机器学习问题 —— 不合理
- 训练一个三输出的神经网络