激活函数-softmax(解决多分类问题)

需要了解:激活函数

概述

softmax 激活函数 用于解决 多分类 问题

作用

如上图模型,当解决多分类问题时,需要用 softmax函数,将前一层的结果变为 概率分布

公式

对于输入:

z = [z_1,z_2,\ldots,z_n]

softmax 计算每个元素的输出:

\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}}

\text{j} = 1,2,3, \ldots ,n

解释:

  • z是线性回归的结果,即:z=wx+b

特征

  • 输出值在 (0, 1) 之间;
  • 所有输出值之 和为 1;
  • 指数特性会放大数值差异(大值更大,小值更小),适合突出“最可能的类别”。

例子

上图中 概率1 的计算方式:

注意

  • softmax要求每个样本 必须属于 某个类别,且所有可能的样本均被覆盖

  • 当只有两个类别时,与 sigmoid 相同

keras

损失函数

在keras中,对于多分类问题使用下面两个损失函数:

  • categorical_crossentropy
    目标值是one-hot独热编码的
  • sparse_categorical_crossentropy
    当目标值是顺序数字时,用此损失函数

与softmax匹配的损失函数详见:
https://www.malaoshi.top/show_1EF4La0KENhc.html

验证

先通过keras算出softmax结果,然后通过手动实现softmax计算,将两次结果比对

为了不受干扰,验证softmax运算过程,建立简单的神经网络,如下图:

按照上图建立模型,如下:

import tensorflow as tf

model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4,input_shape=(1,),activation='softmax'))

model.summary()

获取权重

w,b=model.layers[0].get_weights()
w,b

预测值,为了不受干扰,预测的是1

model.predict([1])

numpy验证

import numpy as np
# 由于初始化时,b=0,且x=1,所以真正有效的就是w
p=np.exp(w)
p
sum_p=np.sum(p)
sum_p
g=p/sum_p

原文出处:/show_1EF43MehJmCw.html