【机器学习】softmax函数总结
来源:互联网 发布:奶牛场优化养殖 编辑:程序博客网 时间:2024/05/29 16:53
原本以为softmax函数求导没啥难度的,结果自己写CNN的时候,梯度算的一直不对,查了半天才发现是因为softmax求导没求对。索性就开一篇Blog把softmax相关的都给记录一下。
softmax的定义
softmax函数如下:
其可以看成sigmoid函数在多元分布中的一个推广
至于softmax这个公式具体是怎么来的呢?
可以参照广义线性模型(GLM)里,通过多项分布化成为指数分布簇的形式,就得到了softmax
相当于softmax是对于多项分布的一个刻画。
所以softmax函数所表示的可以看成为对分类结果的概率分布。
softmax和cross-entropy损失函数
正如上面所说,softmax可以看成对概率分布的一个刻画,所以既然有概率分布,就可以用cross-entropy来定义损失函数
之前的一篇Blog里讲过cross-entropy,从两个角度来考虑,一个是相当于用预测结果的分布区编码正确的结果分布,得到的编码长度,另一个角度可以看成,度量两个分布的KL距离,将其展开去掉常数项,也能得到cross-entropy
所以损失函数可以度量成:
softmax的求导
softmax本身的求导如下:
当
当
我之前之所以算错了softmax的导数,就是因为我以为
当softmax与cross-entropy结合的时候,可以求得输出层的误差为:
所以得到了最后一层的误差值:
softmax的好处
softmax函数的好处经常和cross-entropy的好处放在一块来说。
用cross-entropy相较于平方误差 square loss function的好处,是能够减少训练缓慢的问题【也可以说是梯度消失的问题】
因为平方损失函数求导得到的误差结果为【此处假设输出层每个结果用单一的sigmoid函数来表示】:
因为其需要乘以一个sigmoid的导数,因为sigmoid导数会有梯度消失的问题,所以当结果非常好或者非常差的时候,其训练速度都会非常的缓慢【也就是说的饱和的情况】。
画出图像的话为下图:
即在一开始,随机化初始权重之后,当时分类器肯定结果很差,但是此时导数非常的小,训练起来非常的缓慢。
而符合直觉的想法是,当结果越差的时候,我们希望梯度也能够越大才可以。而cross-entropy函数能够满足这个性质。
另外在LR回归之中,如果采用平方损失函数,则损失函数是非凸的,而采用cross-entropy则结果是凸的。
另外一个softmax的好处是,其中一个结果发生了变化,整个输出的所有结果都会发生变化,对变化更加敏感
- 【机器学习】softmax函数总结
- 机器学习之softmax函数
- 机器学习中的Softmax函数
- 机器学习(5)-理解softmax的损失函数和梯度表达式的实现+编程总结
- 机器学习----Softmax回归
- 机器学习:Softmax回归
- 【机器学习】Softmax推导
- 机器学习之Softmax回归
- 【机器学习】Softmax Regression简介
- 机器学习之softmax回归
- 机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)
- 基础—机器学习—softMax regression
- 机器学习--logistic回归和softmax回归
- 机器学习 Softmax classifier (无隐含层)
- 机器学习 Softmax classifier (一个隐含层)
- 机器学习:Softmax Classifier (两个隐含层)
- 机器学习: Softmax Classifier (三个隐含层)
- 机器学习【2】(七)Softmax回归
- linux前后台切换
- [Python3.x]网络爬虫(二):异常的处理和HTTP状态码的分类
- angular--自定义服务--在多个控制器中传递参数factory+service+provider
- toggle操作
- Generics的方法参数,Set 两集合进行并、交、差
- 【机器学习】softmax函数总结
- 数组元素的访问方式—指针与下标
- JDK源码【集合框架】list
- LeetCode前3题
- 如何解决idea中XML配置文件里面的URI is not registered问题
- JqGrid 修改为application/json模式
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- |算法讨论|后缀数组 学习笔记
- linux centos基本命令