先打个广告哈。我自己做的公众号【拇指笔记】,每天写写我自己学习中记下的笔记,劳烦各位大神关注一下~
1.softmax回归
这一部分分为softmax回归模型的概念、图像分类数据集的概念、softmax回归模型的实现和softmax回归模型基于pytorch框架的实现四部分。
对于离散值预测问题,我们可以使用诸如softmax回归这样的分类模型。softmax回归模型有多个输出单元。本章以softmax回归模型为例,介绍神经网络中的分类模型。
1.1分类问题
例如一个简单的图像分类问题,输入图形高和宽都为2像素,且色彩为灰度(灰度图像的像素值可以用一个标量来表示)。我们将图像的四个像素值记为x1,x2,x3,x4。假设训练数据集中图像的真实标签为狗 猫和鸡,这些标签分别对应着离散值y1,y2,y3。
我们通常使用离散值来表示类别,例如y1=1,y2=2,y3=3。一张图像的标签为1、2和3的数值中的一个,对于这种问题,我们一般使用更加适合离散输出的模型来解决分类问题。
1.2softmax回归模型
softmax回归模型一样将输入特征与权重做线性叠加。于线性回归的主要区别为softmax回归的输出值个数等于标签里的类别数。
在上面的例子中,每个图像又四个像素,对应着每个图象有四个特征值(x),有三种可能的动物类别,对应着三个离散值标签(o)。所以包含12个权重(w)和3个偏差(b)
o
1
=
w
11
x
1
+
w
21
x
2
+
w
31
x
3
+
w
41
x
4
+
b
1
,
o
2
=
w
12
x
1
+
w
22
x
2
+
w
32
x
3
+
w
42
x
4
+
b
2
,
o
3
=
w
13
x
1
+
w
23
x
2
+
w
33
x
3
+
w
43
x
4
+
b
3
,
w
下
标
命
名
规
则
:
不
同
列
代
表
不
同
输
出
类
型
,
不
同
行
代
表
不
同
像
素
点
。
列
数
代
表
真
实
输
出
的
类
别
数
;
行
数
代
表
特
征
数
。
o_1=w_{11}x_1+w_{21}x_2+w_{31}x_3+w_{41}x_4+b_1, \\o_2=w_{12}x_1+w_{22}x_2+w_{32}x_3+w_{42}x_4+b_2, \\o_3=w_{13}x_1+w_{23}x_2+w_{33}x_3+w_{43}x_4+b_3, \\w下标命名规则: \\不同列代表不同输出类型,不同行代表不同像素点。 \\列数代表真实输出的类别数;行数代表特征数。
o1=w11x1+w21x2+w31x3+w41x4+b1,o2=w12x1+w22x2+w32x3+w42x4+b2,o3=w13x1+w23x2+w33x3+w43x4+b3,w下标命名规则:不同列代表不同输出类型,不同行代表不同像素点。列数代表真实输出的类别数;行数代表特征数。
softmax回归也是一个单层神经网络,每个输出o的计算都要依赖所有的输入x,所以softmax回归的输出层也是一个全连接层。
通常将输出值 oi 作为预测类别 i 的置信度,并将值最大的输出所对应的类作为预测输出即
a
r
g
i
m
a
x
o
i
arg_imaxo_i
argimaxoi
例如o1,o2,o3分别为0.1,10,0.1由于o2最大,那么预测类别为2。
但这种方法有两个问题
-
输出层的输出值的范围不确定,难以只管判断这些值的意义
如:三个值为0.1,10,0.1时,10代表很置信;但当三个值为1000,10,1000时,10又代表不置信。
-
由于真实标签也是离散值,这些离散值于不确定范围的输出值之间的误差难以衡量。
softmax运算符解决了以上两个问题。它通过下式将输出值转化为值为正且和为1的概率分布。
y
1
^
,
y
2
^
,
y
3
^
=
s
o
f
t
m
a
x
(
o
1
,
o
2
,
o
3
)
\hat{y_1},\hat{y_2},\hat{y_3}=softmax(o_1,o_2,o_3)
y1^,y2^,y3^=softmax(o1,o2,o3)
其中
y
1
^
=
e
x
p
(
0
1
)
∑
i
=
1
3
e
x
p
(
x
i
)
,
y
2
^
=
e
x
p
(
0
2
)
∑
i
=
1
3
e
x
p
(
x
i
)
,
y
3
^
=
e
x
p
(
0
3
)
∑
i
=
1
3
e
x
p
(
x
i
)
\hat{y_1}=\frac{exp(0_1)}{\sum_{i=1}^3exp(xi)},\ \ \hat{y_2}=\frac{exp(0_2)}{\sum_{i=1}^3exp(xi)},\ \ \hat{y_3}=\frac{exp(0_3)}{\sum_{i=1}^3exp(xi)}
y1^=∑i=13exp(xi)exp(01), y2^=∑i=13exp(xi)exp(02), y3^=∑i=13exp(xi)exp(03)
可以看出在上式中
y
1
^
+
y
2
^
+
y
3
^
=
1
且
0
≤
y
1
^
,
y
2
^
,
y
3
^
≤
1
\hat{y_1}+\hat{y_2}+\hat{y_3}=1 \\且0\leq\hat{y_1},\hat{y_2},\hat{y_3}\leq1
y1^+y2^+y3^=1且0≤y1^,y2^,y3^≤1
基于上两式可知,y1,y2,y3是合法的概率分布。例如:y2=0.8那么不管y1,y3是多少,我们都知道为第二个类别的概率为80%
由于
a
r
g
i
m
a
x
o
i
=
a
r
g
i
m
a
x
y
i
^
arg_imaxo_i = arg_imax\hat{y_i}
argimaxoi=argimaxyi^
可以知道,softmax运算不改变预测类别输出。
1.3单样本分类的矢量计算表达式
为了提高运算效率,采用矢量计算。以上面的图像分类问题为例权重和偏差参数的矢量表达式为
W
=
{
w
11
w
12
w
13
w
21
w
22
w
23
w
31
w
32
w
33
w
41
w
42
w
43
}
,
b
=
[
b
1
b
2
b
3
]
W = \left\{ \begin{matrix} w_{11}\ w_{12} \ w_{13} \\w_{21}\ w_{22} \ w_{23} \\w_{31}\ w_{32} \ w_{33} \\w_{41}\ w_{42} \ w_{43} \end{matrix} \right\} ,\ \ b=[b_1 \ b_2\ b_3]
W=⎩⎪⎪⎨⎪⎪⎧w11 w12 w13w21 w22 w23w31 w32 w33w41 w42 w43⎭⎪⎪⎬⎪⎪⎫, b=[b1 b2 b3]
设高和宽分别为2个像素的图像样本 i 的特征为
x
(
i
)
=
[
x
1
(
i
)
x
2
(
i
)
x
3
(
i
)
x
4
(
i
)
]
x^{(i)}=[x^{(i)}_1 \ x^{(i)}_2 \ x^{(i)}_3 \ x^{(i)}_4]
x(i)=[x1(i) x2(i) x3(i) x4(i)]
输出层输出为
o
i
=
[
o
1
i
o
2
i
o
3
i
]
o^{i} = [o_1^{i} \ o_2^{i} \ o_3^{i}]
oi=[o1i o2i o3i]
预测的概率分布为
y
^
(
i
)
=
[
y
^
1
(
i
)
y
^
2
(
i
)
y
^
3
(
i
)
]
\hat{y}^{(i)}=[\hat{y}^{(i)}_1 \ \hat{y}^{(i)}_2 \ \hat{y}^{(i)}_3]
y^(i)=[y^1(i) y^2(i) y^3(i)]
最终得到softmax回归对样本 i 分类的矢量计算表达式为
o
(
i
)
=
x
(
i
)
W
+
b
y
^
(
i
)
=
s
o
f
t
m
a
x
(
o
(
i
)
)
o^{(i)}=x^{(i)}W+b \\ \hat{y}^{(i)}=softmax(o^{(i)})
o(i)=x(i)W+by^(i)=softmax(o(i))
对于给定的小批量样本,存在
O
=
X
W
+
b
Y
^
=
s
o
f
t
m
a
x
(
O
)
O = XW+b \\\hat{Y}=softmax(O)
O=XW+bY^=softmax(O)
1.4交叉熵损失函数
使用softmax运算后可以更方便地于离散标签计算误差。真实标签同样可以变换为一个合法的概率分布,即:对于一个样本(一个图像),它的真实类别为y_i,我们就令y_i为1,其余为0。如图像为猫(第二个),则它的y = [0 1 0 ]。这样就可以使\hat{y}更接近y。
在图像分类问题中,想要预测结果正确并不需要让预测概率与标签概率相等(不同动作 颜色的猫),我们只需要让真实类别对应的概率大于其他类别的概率即可,因此不必使用线性回归模型中的平方损失函数。
我们使用交叉熵函数来计算损失。
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
∑
j
=
1
q
y
j
(
i
)
l
o
g
y
^
j
(
i
)
H(y^{(i)},\hat{y}^{(i)})=-\sum_{j=1}^q y_j^{(i)}log\ \hat{y}^{(i)}_j
H(y(i),y^(i))=−j=1∑qyj(i)log y^j(i)
这个式子中,
y
j
(
i
)
y^{(i)} _j
yj(i) 是真实标签概率中的为1的那个元素,而
y
^
j
(
i
)
\hat{y}^{(i)}_j
y^j(i) 是预测得到的类别概率中与之对应的那个元素。
由于在
y
(
i
)
y^{(i)}
y(i)中只有一个标签,因此在
y
(
i
)
y^{(i)}
y(i)中,除了
y
j
(
i
)
y^{(i) }_j
yj(i) 外,其余元素都为0,于是得到上式的简化方程
H
(
y
(
i
)
,
y
^
(
i
)
)
=
−
l
o
g
y
^
j
(
i
)
H(y^{(i)},\hat{y}^{(i)}) =- log\ \hat{y}^{(i)}_j
H(y(i),y^(i))=−log y^j(i)
也就是说交叉熵函数只与预测到的概率数有关,只要预测得到的值够大,就可以确保分类结果的正确性。
对于整体样本而言,交叉熵损失函数定义为
l
(
θ
)
=
1
n
∑
i
=
1
n
H
(
y
(
i
)
,
y
^
(
i
)
)
l(\theta) =\frac{1}{n} \sum_{i=1}^n H(y^{(i)},\hat{y}^{(i)})
l(θ)=n1i=1∑nH(y(i),y^(i))
其中\theta代表模型参数,如果每个样本都只有一个标签,则上式可以简化为
l
(
θ
)
=
−
1
n
∑
i
=
1
n
l
o
g
y
^
j
(
i
)
l(\theta) =-\frac{1}{n} \sum_{i=1}^nlog\ \hat{y}^{(i)}_j
l(θ)=−n1i=1∑nlog y^j(i)
最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。
1.5小结
在训练号softmax回归模型后,给定任意样本特征(图像),就可以预测每个输出类别的概率。 把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。
我们使用准确率来评价模型的表现,准确率等于正确预测数量与总预测数量之比。
- softmax回归适用于分类问题。它使用softmax运算输出类别的概率分布。
- softmax回归是一个单层神经网络,输出个数等于分类问题中的类别个数。
- 交叉熵适合衡量两个概率分布的差异。
在学习Python一年中,收集了很多Python学习资料,在这里整理一下,分享给各位!
Python入门、数据分析、爬虫、运维、机器学习方面的学习资料