softmax简单代码实现(浅谈交叉熵和反向传播)

softmax激活函数: , (x属于分类 j的概率)

用在多分类问题,输出的结果为和为 1的多个概率值

(该图为2分类, 代码是3分类, 原理都一样)

x: 输入数据,  w: 权重值,  a: 激活函数的缩写,即softmax激活函数

一:定义输入数据,这里使用了python语言和numpy包

维度[1, 5]

这里用最简单的线性模型:

二:随机生成五行三列的权重值

维度[5, 3]

三:定义 softmax函数并调用算出 3个概率值:

3个分类的概率值

得出三个概率值,概率之和为 1.

四:查看分类结果:

索引为2,因为是从0开始的,所以类别 3.


交叉熵 cross entropy: 这个就是 softmax对应的损失函数 loss function

这里 y是真实值比如 [1, 0, 0], 属于类别1,ai就是我们通过 softmax算出的概率值了

因为 y2, y3 都等于 0,所以结果就是 -ln(a1). 交叉熵越小越好


反向传播:

简单说下,假设我们求 w1的梯度,即 i=1,j又是什么呢,因为 softmax激活函数中,w1既可以出现在分子,也可以出现在分母,所以要分两种情况讨论,得出两种结果并不复杂,之后再用梯度下降更新即可,推导过程网上有很多,有兴趣可以自己上网找.

你可能感兴趣的:(softmax简单代码实现(浅谈交叉熵和反向传播))