UFLDL之softmax回归
UFLDL之softmax回归
参考资料:UFLDL教程及tornadomeet的博客
个人代码:github地址
主成份分析与白化
softmax回归算法简介
softmax回归是一种监督学习算法,该模型是logistic回归模型在多分类问题上的推广。多分类问题中,类标签 y 可以取两个以上的值(如手写数字识别0~9共10个种类的数字)。
假设共有 k 个类,对于给定的测试输入x,softmax回归输出一个k 维的向量(向量元素和为1),向量每个元素对应了每个类别的概率。
softmax回归的数学表达
softmax的假设、代价函数与导数
softamx的假设形式为:
h_\theta(x^{(i)}) =
\left[
\begin{matrix}
p(y^{(i)} = 1 | x^{(i)}; \theta) \\
p(y^{(i)} = 2 | x^{(i)}; \theta) \\
\vdots \\
p(y^{(i)} = k | x^{(i)}; \theta)
\end{matrix}
\right]
=
\frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }
\left[
\begin{matrix}
e^{ \theta_1^T x^{(i)} } \\
e^{ \theta_2^T x^{(i)} } \\
\vdots \\
e^{ \theta_k^T x^{(i)} } \\
\end{matrix}
\right]
其中,\theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1}是模型的参数。矩阵前的公共项是为了对概率分布进行归一化,使得所有概率之和为1。
规定1\{\cdot\}为示性函数,满足:1\{值为真的表达式\} = 1,考虑正则项,则其代价函数为:
J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }} \right] + \frac{\lambda}{2} \sum_{i=1}^k \sum_{j=0}^n \theta_{ij}^2
其中第一项可以认为是logistic回归代价函数的推广。由上述公式,可以得到利用梯度下降算法时候,导数表达式为:
\nabla_{\theta_j} J(\theta) = - \frac{1}{m} \sum_{i=1}^{m}{ \left[ x^{(i)} \left( 1\{ y^{(i)} = j\} - p(y^{(i)} = j | x^{(i)}; \theta) \right) \right]} + \lambda*\theta_j
参数冗余问题
由于指数函数的存在,softmax回归有一个冗余数据集,查看下式:
p(y^{(i)} = j | x^{(i)} ; \theta) = \frac{e^{(\theta_j-\psi)^T x^{(i)}}}{\sum_{l=1}^k e^{ (\theta_l-\psi)^T x^{(i)}}} = \frac{e^{\theta_j^T x^{(i)}} e^{-\psi^Tx^{(i)}}}{\sum_{l=1}^k e^{\theta_l^T x^{(i)}} e^{-\psi^Tx^{(i)}}} = \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}}}
可见,从\theta_j中减去\psi不会影响函数的预测结果,这说明softmax回归模型存在冗余参数集。正则项可以帮助解决这一问题,另外,可以使\theta_j的每个元素减去\theta_j值当中的最大元素,从而限定最大项必须为零。
softmax和logistic对比
在Coursera公开课笔记中,提到logistic回归可以通过建立 k 个独立的二元分类器来解决多分类问题。softmax回归的特点在于:一是模型更加简化,二是 k 维向量的和为1,这说明了softmax各个类别是互斥的。
因此对于多分类问题,若问题的各个类别之间有交叉关系,则要使用logistic建立多个二元分类器而不是使用softmax。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥