积水成渊之softmax函数
导引
对于二分类问题,除了可以使用单个输出节点表示(输入为x的条件下)事件A发生的概率 P ( A ∣ x ) P(A|x) P(A∣x)外,还可以是分别预测 P ( A ∣ x ) P(A|x) P(A∣x)和 P ( A ‾ ∣ x ) P(\overline A|x) P(A∣x),A是 A ‾ \overline A A的对立事件,满足约束: P ( A ∣ x ) + P ( A ‾ ∣ x ) = 1 P(A|x)+P(\overline A|x)=1 P(A∣x)+P(A∣x)=1。
这样,一个输出节点变成了两个输出节点,两个节点输出的二分类比单节点输出的二分类多了一个约束条件,这个约束条件将输出节点的输出值变成了一个概率分布。
简单来说,各个输出节点代表一个事件发生的可能性,这个输出值范围为[0,1];并且约束各个输出节点的输出值的和为1。
而且将“求得输入条件下某个事件发生的可能性”变成了“求得输入条件下所有事件发生的可能性”。
当然,我们可以将输出为两个节点的二分类推广成用于n个输出 节点的n分类问题,而这样将各个输出节点的输出值范围映射到[0, 1],并且约束各个输出节点的输出值的和为1的函数,就是Softmax函数,不对!Softmax函数就是这样的函数!
什么是Softmax函数?
Softmax从字面上来说,可以分成soft和max两个部分。
- max故名思议就是最大值的意思。
- Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。
很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。
hardmax是只求出数据中最大的值,这往往不合情理。
比如在某些情况下,我们需要得到不止一种可能的可能性,这时候hardmax显然不能胜任,而这就引出了softmax。
Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
简单来说就是求最大值,但这个过程是软(soft)的,它是为其他结果留有余地的,仍会给较小数值Xi分配一个概率,而不会为0(不会直接舍弃掉)。
公式 S o f t m a x ( x i ) = e x i ∑ j = 1 n e x j Softmax(x_i)=\frac{e^{x_i}}{\sum_{j=1}^{n}e^{x_j}} Softmax(xi)=∑j=1nexjexi
其中,
x
i
x_i
xi为第i个节点的输出值,n为输出节点的个数,即分类的类别个数。
通过Softmax函数就可以对多分类的输出值进行归一化,转换为范围在[0, 1]且和为1的概率分布。
Softmax函数使用了指数进行归一化,它能够将差距大的数值距离拉的更大,但又不会将输出值小的概率直接赋为0。