softmax的简单推导和python实现
2017-03-12 22:16
253 查看
首先,我们来看看对于softmax的推导过程:
我们可以对softmax算法进行数学上的推导,在推导的过程我们可以发现其过程类似于之前我们所熟悉的logitic算法,softmax相当于是logitic的一个范化。当我们推导到最后一步的时候,为了在已知输出模型的基础上找到最优的参数sigma,我们需要了解一下似然函数了。
似然函数的概念:似然函数就是我们已知输出结果的情况下,求其参数的值。它与条件概率有些相反,条件概率就是在已知一些参数的情况下得到其输出的概率。
用抛硬币的例子能够很好解释清楚似然函数的意义,已知投出的硬币正面朝上和反面朝上的概率各自是PH = 0.5,便可以知道投掷若干次后出现各种结果的可能性。比如说,投两次都是正面朝上的概率是0.25。用条件概率表示,就是:P(HH|PH = 0.5) = 0.25,其中H表示正面朝上。我们可以得到P(HH|PH = a) = a^2,为了使得似然值最大,我们会认为a = 1,因为当前我们的输出模型是两次输出都为正面向上。就是说这是在已知输出结果的情况下得到的参数,其会受到输出值的大小影响。例如 P(HHT|PH = a) = a^2(1-a),这时候就变成了Ph=0.6,在正正反的情况下得到该概率。
所以,最大似然函数的思想是,我们已知模型输出的情况下,使得参数最为合理,即可能性最大的值。
为了求得合适的参数,我们需要引进用梯度上升的方法更新参数,所以我们代码就是要得到最后一行需要更新的目标函数。
求梯度上升伪代码如下,大家可以结合推导看看:
def softmaxGradientAscent(self):
for l in range(迭代次数(经验值或可以测试得到)):
for i in range(数据的大小):
error = exp(self.dataMat[i]*self.权重)
rowsum = -error.sum(axis=1)
rowsum = rowsum.repeat(self.K, axis=1)
error = error/rowsum
error[0,self.labelMat[i,0]] += 1#求到这里已经把目标函数转化
self.weights = self.weights + self.alpha * self.dataMat[i].transpose()* error
print self.weights
我们可以对softmax算法进行数学上的推导,在推导的过程我们可以发现其过程类似于之前我们所熟悉的logitic算法,softmax相当于是logitic的一个范化。当我们推导到最后一步的时候,为了在已知输出模型的基础上找到最优的参数sigma,我们需要了解一下似然函数了。
似然函数的概念:似然函数就是我们已知输出结果的情况下,求其参数的值。它与条件概率有些相反,条件概率就是在已知一些参数的情况下得到其输出的概率。
用抛硬币的例子能够很好解释清楚似然函数的意义,已知投出的硬币正面朝上和反面朝上的概率各自是PH = 0.5,便可以知道投掷若干次后出现各种结果的可能性。比如说,投两次都是正面朝上的概率是0.25。用条件概率表示,就是:P(HH|PH = 0.5) = 0.25,其中H表示正面朝上。我们可以得到P(HH|PH = a) = a^2,为了使得似然值最大,我们会认为a = 1,因为当前我们的输出模型是两次输出都为正面向上。就是说这是在已知输出结果的情况下得到的参数,其会受到输出值的大小影响。例如 P(HHT|PH = a) = a^2(1-a),这时候就变成了Ph=0.6,在正正反的情况下得到该概率。
所以,最大似然函数的思想是,我们已知模型输出的情况下,使得参数最为合理,即可能性最大的值。
为了求得合适的参数,我们需要引进用梯度上升的方法更新参数,所以我们代码就是要得到最后一行需要更新的目标函数。
求梯度上升伪代码如下,大家可以结合推导看看:
def softmaxGradientAscent(self):
for l in range(迭代次数(经验值或可以测试得到)):
for i in range(数据的大小):
error = exp(self.dataMat[i]*self.权重)
rowsum = -error.sum(axis=1)
rowsum = rowsum.repeat(self.K, axis=1)
error = error/rowsum
error[0,self.labelMat[i,0]] += 1#求到这里已经把目标函数转化
self.weights = self.weights + self.alpha * self.dataMat[i].transpose()* error
print self.weights
相关文章推荐
- 神经网络算法推导,附python实现一个简单神经网络
- 转载:[python]有限状态机(FSM)简单实现
- [python]有限状态机(FSM)简单实现
- 用Python 实现刷钻网上抢任务,并实现一个简单的限制使用时间的功能
- python超简单实现斐波那契数列
- python学习(1)--实现简单的服务器与客户端
- Python源码剖析[15] —— 最简单的Python实现:Small Python
- Python:简单的摄像头程序实现
- python3.2实现简单文件/目录操作
- KNN的简单实现(python)
- 生成简单的Makefile文件(Python实现)
- [python]有限状态机(FSM)简单实现
- python设置检查点简单实现
- 用python实现的简单Server/Client文件传输
- python用c/s实现服务器简单管理
- python中如何简单的实现decorator模式--由django admin源码所得体会
- 最简单的Python singleton模式实现
- 用Python实现简单的遗传算法
- python实现的简单的epub2txt
- 用Python实现简单的HTTP服务器(2)--实现一个基本功能的HTTP服务器