Softmax的理解与应用
2017-03-07 00:12
239 查看
参考:http://blog.csdn.net/supercally/article/details/54234115
http://mp.weixin.qq.com/s?__biz=MzIxODM4MjA5MA==&mid=2247484589&idx=1&sn=4c56ed90492d8ac85fc66fd42d4d998b&chksm=97ea2ec8a09da7de051f0c59f18dede5722793ffa999c8f4d01f389c368c09fb9a76a22f3366&mpshare=1&scene=1&srcid=0306UeyaUYzw85Q8B8NCiiw2#rd
Softmax在机器学习中有非常广泛的应用,但是刚刚接触机器学习的人可能对Softmax的特点以及好处并不理解,其实你了解了以后就会发现,Softmax计算简单,效果显著,非常好用。
我们先来直观看一下,Softmax究竟是什么意思
我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能
但有的时候我不想这样,因为这样会造成分值小的那个饥饿。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了
现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。所以说不是max,而是 Soft max
那各自的概率究竟是多少呢,我们下面就来具体看一下
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是
Si=ei∑jej
也就是说,是该元素的对数值,与所有元素对数值和的比值
这个定义可以说非常的直观,当然除了直观朴素好理解以外,它还有更多的优点
在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵
Li=−log(efyi∑jej)
取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小,这种定义符合我们的要求
当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是求Loss对score的偏导 (下面公式推导部分对于求偏导符号就用求导符号代替)
我们首先定义
Pyi=efyi∑jej 是选到yi的概率
Li=−log(efyi∑jej)是我们之前提到的交叉熵
那么我们求Loss对score的偏导就是
∂Li∂fyi=−ln(efyi∑jej)′
=−1∗∑jejefyi∗(efyi∑jej)′=−1∗∑jejefyi∗(1−∑j≠fyiej∑jej)′
=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗(∑jej)′
=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗efyi
=−∑j≠fyiej∑jej
=−(1−Pfyi)=Pfyi−1
最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减1,就可以了
举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 1, 5, 3 ],
那么概率分别就是[e1e1+e3+e5,e5e1+e3+e5,e3e1+e3+e5]=[0.015,0.866,0.117],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.015,0.866−1,0.117]=[0.015,−0.134,0.117],是不是很简单!!然后再根据这个进行back
propagation就可以了
===================================
总结如下:
1. 定义了从图像像素映射到不同类别的分类评分的评分函数。在本节中,评分函数是一个基于权重W和偏差b的线性函数。
2. 与kNN分类器不同,参数方法的优势在于一旦通过训练学习到了参数,就可以将训练数据丢弃了。同时该方法对于新的测试数据的预测非常快,因为只需要与权重W进行一个矩阵乘法运算。
3. 介绍了偏差技巧,让我们能够将偏差向量和权重矩阵合二为一,然后就可以只跟踪一个矩阵。
4. 定义了损失函数(介绍了SVM和Softmax线性分类器最常用的2个损失函数)。损失函数能够衡量给出的参数集与训练集数据真实类别情况之间的一致性。在损失函数的定义中可以看到,对训练集数据做出良好预测与得到一个足够低的损失值这两件事是等价的。
http://mp.weixin.qq.com/s?__biz=MzIxODM4MjA5MA==&mid=2247484589&idx=1&sn=4c56ed90492d8ac85fc66fd42d4d998b&chksm=97ea2ec8a09da7de051f0c59f18dede5722793ffa999c8f4d01f389c368c09fb9a76a22f3366&mpshare=1&scene=1&srcid=0306UeyaUYzw85Q8B8NCiiw2#rd
Softmax在机器学习中有非常广泛的应用,但是刚刚接触机器学习的人可能对Softmax的特点以及好处并不理解,其实你了解了以后就会发现,Softmax计算简单,效果显著,非常好用。
我们先来直观看一下,Softmax究竟是什么意思
我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能
但有的时候我不想这样,因为这样会造成分值小的那个饥饿。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了
现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。所以说不是max,而是 Soft max
那各自的概率究竟是多少呢,我们下面就来具体看一下
定义
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是Si=ei∑jej
也就是说,是该元素的对数值,与所有元素对数值和的比值
这个定义可以说非常的直观,当然除了直观朴素好理解以外,它还有更多的优点
1.计算与标注样本的差距
在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵Li=−log(efyi∑jej)
取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小,这种定义符合我们的要求
2.计算上非常非常的方便
当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是求Loss对score的偏导 (下面公式推导部分对于求偏导符号就用求导符号代替)我们首先定义
Pyi=efyi∑jej 是选到yi的概率
Li=−log(efyi∑jej)是我们之前提到的交叉熵
那么我们求Loss对score的偏导就是
∂Li∂fyi=−ln(efyi∑jej)′
=−1∗∑jejefyi∗(efyi∑jej)′=−1∗∑jejefyi∗(1−∑j≠fyiej∑jej)′
=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗(∑jej)′
=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗efyi
=−∑j≠fyiej∑jej
=−(1−Pfyi)=Pfyi−1
最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减1,就可以了
举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 1, 5, 3 ],
那么概率分别就是[e1e1+e3+e5,e5e1+e3+e5,e3e1+e3+e5]=[0.015,0.866,0.117],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.015,0.866−1,0.117]=[0.015,−0.134,0.117],是不是很简单!!然后再根据这个进行back
propagation就可以了
===================================
总结如下:
1. 定义了从图像像素映射到不同类别的分类评分的评分函数。在本节中,评分函数是一个基于权重W和偏差b的线性函数。
2. 与kNN分类器不同,参数方法的优势在于一旦通过训练学习到了参数,就可以将训练数据丢弃了。同时该方法对于新的测试数据的预测非常快,因为只需要与权重W进行一个矩阵乘法运算。
3. 介绍了偏差技巧,让我们能够将偏差向量和权重矩阵合二为一,然后就可以只跟踪一个矩阵。
4. 定义了损失函数(介绍了SVM和Softmax线性分类器最常用的2个损失函数)。损失函数能够衡量给出的参数集与训练集数据真实类别情况之间的一致性。在损失函数的定义中可以看到,对训练集数据做出良好预测与得到一个足够低的损失值这两件事是等价的。
相关文章推荐
- Softmax的理解与应用
- Softmax的理解与应用
- Softmax的理解与应用
- C# 泛型的小应用,不知道理解的对不对
- 理解HTTP session原理及应用
- 理解与应用LDAP服务器
- UML的硬伤?UML在系统分析、设计方面的应用理解
- WPF中MatrixTransform的理解与应用
- 我所理解的计算机(三) 之 数据库、企业应用与歌剧
- 理解HTTP session原理及应用
- 理解HTTP session原理及应用
- 理解企业应用框架
- 帮助理解可变参数的应用【转贴】
- 从NUnit中理解.NET自定义属性的应用
- 2007-12-21 对三层应用序程的初识,及个人理解.
- 【我翻译的文章】理解和应用F#中的“use”语法
- 理解企业应用框架- -
- Java事件机制理解及应用
- 应用反编译命令JavaP理解String和StringBuffer的区别
- 深入理解.net framwork中的Application domain(应用域) 概念