【深度学习基础】系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记。
1.线性分类
如果我们使用一个线性分类器去进行图像分类该怎么做呢?假设现在我们有一张 2 × 2 × 1 2\times2\times1 2×2×1的图像(即图像大小为 2 × 2 2\times 2 2×2,通道数为1),像素值见下:
[ 56 231 24 2 ] \begin{bmatrix} 56 & 231 \\ 24 & 2 \\ \end{bmatrix} [56242312]
此时我们构建一个线性分类器去判断该幅图像属于哪一种类别:
用一张图表示就是:
此时增加一下难度,如果我们的训练数据是 64 × 64 × 3 64\times 64 \times 3 64×64×3的RGB图像呢?同理,这时我们的 x \mathbf x x就是一个 12288 × 1 12288\times 1 12288×1的向量( 64 × 64 × 3 = 12288 64\times 64 \times 3=12288 64×64×3=12288):
那么模型的参数是怎么来的呢?可以通过最小化损失\代价函数(线性模型通常选择“均方误差”作为损失\代价函数,详见【机器学习基础】第六课)来估计 w , b \mathbf w,\mathbf b w,b的值。
2.softmax分类器
如果使用线性模型进行分类的话,得到的是一个具体的数值,并不直观。我们更希望可以直接得到某一样本属于各个类别的概率。
对于二分类任务来说,我们可以采用对数几率回归来输出样本属于正类的概率。
那么对于多分类该怎么办呢?答案就是softmax分类器。
在对数几率回归中,我们使用sigmoid函数使得输出限制在0~1之间,即样本属于正类的概率。类似的,在多分类任务中,我们使用softmax函数使得输出限制在0~1之间,并且每个样本属于各个类别的概率相加刚好为1(❗️sigmoid就是极端情况(类别数为2)下的softmax)。
softmax函数又称归一化指数函数,它能将一个含任意实数的K维向量 z \mathbf z z“压缩”到另一个K维实向量 σ ( z ) \sigma (\mathbf z) σ(z)中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。该函数的形式通常按下面的式子给出:
σ ( z ) j = e z j ∑ k = 1 K e z k \sigma (\mathbf z)_j=\frac{e^{z_j}}{\sum^K_{k=1}e^{z_k}} σ(z)j=∑k=1Kezkezj
在多分类任务中,softmax函数的输入是从K个不同的线性函数得到的结果(即 x T w \mathbf x^T \mathbf w xTw),而样本向量 x \mathbf x x属于第j个类别的概率为:
P ( y = j ∣ x ) = e x T w j ∑ k = 1 K e x T w k P(y=j \mid \mathbf x)=\frac{e^{\mathbf x^T \mathbf w_j}}{\sum^K_{k=1}e^{\mathbf x^T \mathbf w_k}} P(y=j∣x)=∑k=1KexTwkexTwj
例如:
2.1.hardmax分类器
与softmax相对应的是hardmax,hardmax会将最大的值置为1,其他置为0。
例如有:
[ 5 2 − 1 3 ] \begin{bmatrix} 5 \\ 2 \\ -1 \\ 3 \end{bmatrix} 52−13
softmax将其转换为:
[ 0.842 0.042 0.002 0.114 ] \begin{bmatrix} 0.842 \\ 0.042 \\ 0.002 \\ 0.114 \end{bmatrix} 0.8420.0420.0020.114
而hardmax会将其转换为:
[ 1 0 0 0 ] \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} 1000
显然,softmax的转换更为温和。
3.交叉熵损失函数
在对数几率回归一文中,我们采用最大似然法进行参数估计,其中式(3.8)其实就是交叉熵损失函数的应用。
以softmax分类器为例,利用交叉熵损失函数,对softmax求得概率取-ln,最后相加即可得到最后的总损失:
对于单个样本来说,其交叉熵损失值为:
- 二分类情况下:
-
l
o
s
s
=
−
[
y
⋅
log
(
p
)
+
(
1
−
y
)
⋅
log
(
1
−
p
)
]
loss=-[y\cdot \log(p)+(1-y)\cdot \log(1-p)]
loss=−[y⋅log(p)+(1−y)⋅log(1−p)]
- y为样本的标记,正类为1,负类为0
- p表示样本预测为正的概率
-
l
o
s
s
=
−
[
y
⋅
log
(
p
)
+
(
1
−
y
)
⋅
log
(
1
−
p
)
]
loss=-[y\cdot \log(p)+(1-y)\cdot \log(1-p)]
loss=−[y⋅log(p)+(1−y)⋅log(1−p)]
- 多分类情况下:
-
l
o
s
s
=
−
∑
c
=
1
M
y
c
log
(
p
c
)
loss=-\sum_{c=1}^M y_c \log(p_c)
loss=−∑c=1Myclog(pc)
- M为类别的数量
- y c y_c yc等于0或1,如果预测出的类别和样本标记相同就是1,否则是0
- p c p_c pc为样本属于类别c的概率
-
l
o
s
s
=
−
∑
c
=
1
M
y
c
log
(
p
c
)
loss=-\sum_{c=1}^M y_c \log(p_c)
loss=−∑c=1Myclog(pc)
将训练集中所有样本的loss值加起来便可得到最终的总loss。
例如一个三分类问题,假设训练集中共有3个样本,通过softmax分类器我们得到了3个样本分别属于三个类别的概率:
采用交叉熵损失函数,求得该参数下的softmax分类器的总loss:
t o t a l _ l o s s = − [ 0 × log 0.3 + 0 × log 0.3 + 1 × log 0.4 ] − [ 0 × log 0.3 + 1 × log 0.4 + 0 × log 0.3 ] − [ 1 × log 0.1 + 0 × log 0.2 + 0 × log 0.7 ] = 0.397 + 0.397 + 1 = 1.8 \begin{align} total\_loss & = -[0\times \log 0.3+0\times \log 0.3 +1\times \log 0.4] \\ & -[0\times \log 0.3 +1\times \log 0.4 +0\times \log 0.3] \\ & -[1\times \log 0.1 + 0\times \log 0.2 +0\times \log 0.7] \\ & = 0.397+0.397+1 \\ & =1.8 \end{align} total_loss=−[0×log0.3+0×log0.3+1×log0.4]−[0×log0.3+1×log0.4+0×log0.3]−[1×log0.1+0×log0.2+0×log0.7]=0.397+0.397+1=1.8
然后可以通过优化分类器参数来降低总loss(例如可通过梯度下降法或牛顿法求得loss最小时所对应的模型参数)。
4.参考资料
想要获取最新文章推送或者私聊谈人生,请关注我的个人微信公众号:⬇️x-jeff的AI工坊⬇️
个人博客网站:https://shichaoxin.com
GitHub:https://github.com/x-jeff