softmax层的使用

什么是softmax

在分类任务中,我们通过一个模型得到的输出向量 v e c = ( v 1 , v 2 , ⋯   , v n ) vec=(v_1, v_2, \cdots, v_n) vec=(v1,v2,,vn),往往不是一个概率分布,即 ∑ i = 1 n v i ≠ 1 \sum_{i=1}^nv_i \neq1 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}})_{i=1}^n distribution=(j=1nexpvjexpvi)i=1n
这个时候distribution向量显然满足概率分布的条件。

为什么这么做

我认为其中一个原因在于,指数函数是增长非常快的函数,而我们想让一个“主元素”的概率尽可能突出出来。这种设计就让我们可以将主要的概率都集中在原始数据较大的分量上,换句话说,通过softmax,我们拉大了分量之间的差距。

好处

直观
在单分类的时候能够直接锁定倾向的类别

缺点

在进行模型训练的时候,特别是分类数量特别大的情形(比如200个类别),由于模型参数最开始是随机设置的,概率会集中在随机的类别上。同时,由定义可知,当某个分量的softmax值趋近0的时候,其梯度也趋于0,导致难以更新参数。

建议

在分类数量小的时候可以在分类层最后添加一个softmax,但是比较多的时候最好别加。另外,由于缺点所述,很多情况下在模型尾部加上一个softmax可能会减缓模型的训练速度。

猜你喜欢

转载自blog.csdn.net/Petersburg/article/details/126618654