另外一个复杂公式
2018-02-04 17:52
127 查看
转载至:http://blog.csdn.net/WangCaihua321/article/details/47298363
前言
关于softmax回归,有比较多的资料,本来没有必要再写一次的。下面是一些网址:
1)http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
2)http://ufldl.stanford.edu/wiki/index.php/Softmax_Regression
3)http://blog.csdn.net/acdreamers/article/details/44663305
4)http://www.cnblogs.com/fanyabo/p/4060498.html
还有很多, 不一一列出。
softmax 中的导数是怎样得到的?
为什么对网站上给出的目标函数直接求导是不对的?
为了解答这些问题,我决定写这篇文章。
注: 如果你认为我是错的,请让我知道,先谢过了。
问题提出
按定义(一般资料中的定义),softmax的似然函数为:
∏i∏kPk(xi)I(y(i)=k)∏i∏kPk(xi)I(y(i)=k)
其中 k∈{1,2,⋯,K}k∈{1,2,⋯,K}, i∈{1,2,⋯,N}i∈{1,2,⋯,N}, Pk(xi)Pk(xi) 按softmax概率定义有:
Pk(xi)=eθTkxi∑Kl=1eθTlxiPk(xi)=eθkTxi∑l=1KeθlTxi
对似然函数取负对数,求匀值,引入正则项,得到目标函数/损失函数,如下:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
这与网站上的一致,当然也是正确的。接下来是求导,如下:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)∑Kl=1eθTlxieθTjxiPj(xi)|θTjxi)xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)∑l=1KeθlTxieθjTxiPj(xi)|θjTxi)xi+λθj
其中Pj(xi)|θTjxiPj(xi)|θjTxi是Pj(xi)Pj(xi)对θTjxiθjTxi的导数,如下
Pj(xi)|θTjxi=eθTjxi∑Kl=1eθTlxi−(eθTjxi)2(∑Kl=1eθTlxi)2Pj(xi)|θjTxi=eθjTxi∑l=1KeθlTxi−(eθjTxi)2(∑l=1KeθlTxi)2
整理得,
∂J(θ)∂θj=−1N∑i(I(y(i)=j)(1−Pj(xi)))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)(1−Pj(xi)))xi+λθj
这与网站上的结果不一致。网站上的结果为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
但是从推导过程来说好像没有什么错误,于是我开始怀疑网站上的结果是否正确。UFLDL Tutorial 中介绍过梯度检验方法。我按网站上的公式写目标函数和梯度进行验证,发现网站上的是对的,我认为正确的却不对,问题出在哪呢?
重新认识 softmax
按定义(一般资料中的定义),softmax 的似然函数为:
∏i∏kPk(xi)I(y(i)=k)∏i∏kPk(xi)I(y(i)=k)
softmax 每次只能取一个值,有排它性。另一种等价定义为:
∏i∏k(eθTkXi)I(y(i)=k)∑KleθTjxi∏i∏k(eθkTXi)I(y(i)=k)∑lKeθjTxi
对应的目标函数为:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2‖θ‖22J(θ)=−1N∑i((∑kI(y(i)=k)lneθkTxi)−ln∑lKeθlTxi)+λ2‖θ‖22
对这个目标函数求导为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
事实上,对于第二种似然函数,如果考虑softmax 每次只能取一个值,有排它性,即I(y(i)=k)I(y(i)=k) 只有一个为1,其它全为0。上面的目标函数与下面这个等价:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
总之, 网站上给的结论都是正确的。
问题出在哪?
∑KleθTlxi∑lKeθlTxi 是归一化因子,与抽样无关。I(y(i)=k)I(y(i)=k) 只应影响与抽样相关的项,不应影响归一化因子∑KleθTlxi∑lKeθlTxi。所以,
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
要先变成:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2‖θ‖22J(θ)=−1N∑i((∑kI(y(i)=k)lneθkTxi)−ln∑lKeθlTxi)+λ2‖θ‖22
再计算。
前言
关于softmax回归,有比较多的资料,本来没有必要再写一次的。下面是一些网址:
1)http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
2)http://ufldl.stanford.edu/wiki/index.php/Softmax_Regression
3)http://blog.csdn.net/acdreamers/article/details/44663305
4)http://www.cnblogs.com/fanyabo/p/4060498.html
还有很多, 不一一列出。
softmax 中的导数是怎样得到的?
为什么对网站上给出的目标函数直接求导是不对的?
为了解答这些问题,我决定写这篇文章。
注: 如果你认为我是错的,请让我知道,先谢过了。
问题提出
按定义(一般资料中的定义),softmax的似然函数为:
∏i∏kPk(xi)I(y(i)=k)∏i∏kPk(xi)I(y(i)=k)
其中 k∈{1,2,⋯,K}k∈{1,2,⋯,K}, i∈{1,2,⋯,N}i∈{1,2,⋯,N}, Pk(xi)Pk(xi) 按softmax概率定义有:
Pk(xi)=eθTkxi∑Kl=1eθTlxiPk(xi)=eθkTxi∑l=1KeθlTxi
对似然函数取负对数,求匀值,引入正则项,得到目标函数/损失函数,如下:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
这与网站上的一致,当然也是正确的。接下来是求导,如下:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)∑Kl=1eθTlxieθTjxiPj(xi)|θTjxi)xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)∑l=1KeθlTxieθjTxiPj(xi)|θjTxi)xi+λθj
其中Pj(xi)|θTjxiPj(xi)|θjTxi是Pj(xi)Pj(xi)对θTjxiθjTxi的导数,如下
Pj(xi)|θTjxi=eθTjxi∑Kl=1eθTlxi−(eθTjxi)2(∑Kl=1eθTlxi)2Pj(xi)|θjTxi=eθjTxi∑l=1KeθlTxi−(eθjTxi)2(∑l=1KeθlTxi)2
整理得,
∂J(θ)∂θj=−1N∑i(I(y(i)=j)(1−Pj(xi)))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)(1−Pj(xi)))xi+λθj
这与网站上的结果不一致。网站上的结果为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
但是从推导过程来说好像没有什么错误,于是我开始怀疑网站上的结果是否正确。UFLDL Tutorial 中介绍过梯度检验方法。我按网站上的公式写目标函数和梯度进行验证,发现网站上的是对的,我认为正确的却不对,问题出在哪呢?
重新认识 softmax
按定义(一般资料中的定义),softmax 的似然函数为:
∏i∏kPk(xi)I(y(i)=k)∏i∏kPk(xi)I(y(i)=k)
softmax 每次只能取一个值,有排它性。另一种等价定义为:
∏i∏k(eθTkXi)I(y(i)=k)∑KleθTjxi∏i∏k(eθkTXi)I(y(i)=k)∑lKeθjTxi
对应的目标函数为:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2‖θ‖22J(θ)=−1N∑i((∑kI(y(i)=k)lneθkTxi)−ln∑lKeθlTxi)+λ2‖θ‖22
对这个目标函数求导为:
∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj∂J(θ)∂θj=−1N∑i(I(y(i)=j)−Pj(xi))xi+λθj
事实上,对于第二种似然函数,如果考虑softmax 每次只能取一个值,有排它性,即I(y(i)=k)I(y(i)=k) 只有一个为1,其它全为0。上面的目标函数与下面这个等价:
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
总之, 网站上给的结论都是正确的。
问题出在哪?
∑KleθTlxi∑lKeθlTxi 是归一化因子,与抽样无关。I(y(i)=k)I(y(i)=k) 只应影响与抽样相关的项,不应影响归一化因子∑KleθTlxi∑lKeθlTxi。所以,
J(θ)=−1N∑i∑k(I(y(i)=k)lneθTkxi∑Kl=1eθTlxi)+λ2‖θ‖22J(θ)=−1N∑i∑k(I(y(i)=k)lneθkTxi∑l=1KeθlTxi)+λ2‖θ‖22
要先变成:
J(θ)=−1N∑i((∑kI(y(i)=k)lneθTkxi)−ln∑lKeθTlxi)+λ2‖θ‖22J(θ)=−1N∑i((∑kI(y(i)=k)lneθkTxi)−ln∑lKeθlTxi)+λ2‖θ‖22
再计算。
相关文章推荐
- Matlab显示Latex公式 Interpreter属性使我们能在图形中显示一个较为复杂的公式
- 在Excel表格中,通过公式查询数据并在另外一个文档中保存
- 一个复杂加和公式的递归算法
- linux 同步数据到另外一个服务器
- 自己实现的一个公式表达式解析
- 从一个表向另外一个表拷贝数据
- 通达OA二次开发 工作流表单中关联查询另外一个工作流方法(源代码)
- 判断一个字符串是另外字符串的旋转字符串
- 一个程序关闭另外一个程序
- 从一个APK调用另外一个APK中的一个ACTIVITY
- 任务九:使用HTML/CSS实现一个复杂页面
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度
- 刷新页面几秒后到另外一个页面
- 如何用一个app操作另外一个app.比如微信群控那样的
- android 另外一个app
- Android 安装和启动另外一个应用
- 一条sql语句(关于将一个表里的数据汇总,更新数据库中的另外一张表的列值
- 利用openURL,在IOS应用中打开另外一个应用
- js中使用另外一个js文件的变量
- Android中的软件列表_点击启动另外一个程序