从零实现深度学习框架——Softmax回归简介
Posted 愤怒的可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零实现深度学习框架——Softmax回归简介相关的知识,希望对你有一定的参考价值。
引言
本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。
要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽量不适用外部完备的框架前提下,实现我们想要的模型。本系列文章的宗旨就是通过这样的过程,让大家切实掌握深度学习底层实现,而不是仅做一个调包侠。
本系列文章首发于微信公众号:JavaNLP
逻辑回归只能处理二分类问题,但是很多时候我们遇到的是多分类问题。此时就需要用到多元逻辑回归(multinomial logistic regression),也称为Softmax回归。本文就来了解下Softmax回归。
Softmax回归
在softmax回归中,我们希望为每个样本从 K K K个类别中标记一个类别,假设只有一个类别是正确的。
我们使用下面的表示:每个输入 x x x对应的输出 y y y是一个长度为 K K K的向量。如果类 c c c是正确的类别,我们设 y c = 1 y_c=1 yc=1,然后设置 y y y向量中所有其他元素为 0 0 0。即 y c = 1 y_c=1 yc=1同时 y j = 0 ∀ j ≠ c y_j =0 \\quad\\forall j \\neq c yj=0∀j=c,这种叫作独热向量(ont-hot vector)。分类器需要输出一个估计向量 y ^ \\hat y y^。对于每个类 k k k, y ^ k \\hat y_k y^k的值就是分类器对于概率 p ( y k = 1 ∣ x ) p(y_k = 1|x) p(yk=1∣x)的估计。
Softmax回归中使用Sigmoid函数的推广版——Softmax函数,来计算 p ( y k = 1 ∣ x ) p(y_k=1|x) p(yk=1∣x)。
输入一个向量 z = [ z 1 , z 2 , ⋯ , z K ] z=[z_1,z_2,\\cdots,z_K] z=[z1,z2,⋯,zK],其中元素可以是任意值,映射它为一个概率分布,即每个元素的值被映射到 ( 0 , 1 ) (0,1) (0,1)之间,同时所有映射值总和为 1 1 1。
对于维度为
K
K
K的向量
z
z
z,softmax定义为:
softmax
(
z
i
)
=
exp
(
z
i
)
∑
j
=
1
K
exp
(
z
j
)
1
≤
i
≤
K
(1)
\\textsoftmax(z_i) = \\frac\\exp(z_i)\\sum_j=1^K \\exp(z_j) \\quad 1 \\leq i \\leq K \\tag1
softmax(zi)=∑j=1Kexp(zj)exp(zi)1≤i≤K(1)
输入向量
z
z
z经过softmax后得到向量:
softmax
(
z
)
=
[
exp
(
z
1
)
∑
i
=
1
K
exp
(
z
i
)
,
exp
(
z
2
)
∑
i
=
1
K
exp
(
z
i
)
,
⋯
,
exp
(
z
K
)
∑
i
=
1
K
exp
(
z
i
)
]
(2)
\\textsoftmax(z) = \\left[ \\frac\\exp(z_1)\\sum_i=1^K \\exp(z_i), \\frac\\exp(z_2)\\sum_i=1^K \\exp(z_i),\\cdots, \\frac\\exp(z_K)\\sum_i=1^K \\exp(z_i)\\right] \\tag2
softmax(z)=[∑i=1Kexp(zi)exp(z1),∑i=1Kexp(zi)exp(z2),⋯,∑i=1Kexp(zi)exp(zK)](2)
该向量内所有元素总和为
1
1
1,分母
∑
i
=
1
K
exp
(
z
i
)
\\sum_i=1^K \\exp(z_i)
∑i=1Kexp(zi)用于将所有的值标准化成概率。
应用Softmax
类似逻辑回归,输入是一个权重向量
w
w
w和一个输入向量
x
x
x之间的点积,加上偏差
b
b
b。但不同的是,这里我们要为每个类提供独立的权重向量
w
k
w_k
wk和偏差
b
k
b_k
bk。这样,我们的每个输出类
y
^
k
\\hat y_k
y^k的概率可以计算为:
p
(
y
k
=
1
∣
x
)
=
exp
(
w
k
⋅
x
+
b
k
)
∑
j
=
1
K
exp
(
w
j
⋅
x
+
b
j
)
(3)
p(y_k=1|x) = \\frac\\exp(w_k \\cdot x + b_k)\\sum_j=1^K \\exp(w_j \\cdot x + b_j) \\tag3
p(yk=1∣x)=∑j=1Kexp(wj⋅x+bj)exp(wk⋅x+bk)(3)
上图是公式 ( 3 ) (3) (3)的可视化,Softmax有 K K K个权重和偏差(上图没有体现出来)。
公式 ( 3 ) (3) (3)形式看起来似乎会分别计算每个输出。相反,更常见的做法是通过向量化利用GPU来更有效地计算。我们将通过将 K K K个权向量的集合表示为权矩阵 W W W和偏差向量 b b b。 W W W的第以上是关于从零实现深度学习框架——Softmax回归简介的主要内容,如果未能解决你的问题,请参考以下文章
深度学习:《100天一起学习PyTorch》第五天:从0到1实现Softmax回归(含源码)
《动手学深度学习》线性回归从零开始(linear-regression-scratch)