softmax层的使用
什么是softmax
在分类任务中,我们通过一个模型得到一个输出向量,
v
e
c
=
(
v
1
,
v
2
,
.
.
.
,
v
n
)
vec = (v_1,v_2,...,v_n)
vec=(v1,v2,...,vn),往往不是一个概率分布,即
∑
i
=
1
n
v
i
≠
1
\sum_{i = 1}^{n}v_i \not =1
∑i=1nvi=1, 这在我们人看就是不直观的结果,为了解决这个问题,我们利用指数函数得到新向量:
d
i
s
t
r
i
b
u
t
i
o
n
=
(
exp
v
i
∑
j
=
1
n
exp
v
j
)
i
=
1
n
distribution = (\frac{\exp{v_i}}{\sum_{j = 1}^{n}{}\exp{v_j}})^n_{i = 1}
distribution=(∑j=1nexpvjexpvi)i=1n
这时候,distrbution显然满足概率分布的条件。
为什么这么做?
其中一个原因指数函数是增长非常块的函数,想让一个主元素的概率尽可能突出出来,这种设计就让我们可以将主要的概率集中在原始数据较大的分量上,换句话说,通过softmax,我们拉大了分量之间的差距。
直观
在单分类任务的时候能够直接锁定倾向的类别。
缺点
在进行模型训练的时候,特别是分类数量特别大的情形(比如200个类别),由于模型参数最开始是随机设置的,概率会集中在随机的类别上。同时,由定义可知,当某个分量的softmax值趋近0的时候,其梯度也趋于0,导致难以更新参数。
建议
在分类数量小的时候可以在分类层最后添加一个softmax,但是比较多的时候最好别加,另外,由于缺点所述,很多情况下在模型尾部加上一个Softmax 可能会减缓模型的训练速度。
学习心得
会自己构建模型的时候,添加自己的softmax层技术,全部都将其搞定。设计自己的模型架构,全部慢慢地完成都行啦的理由与打算。