SoftMax 回归 · 深度学习 01

关键字深度学习SoftMax 回归矢量计算表达式参数学习PyTorch

摘要 —— 自本篇文档开始,我将撰写名为“深度学习”的专题文章。和网络上现有的文章相比,我更加注重于深度学习背后的数学原理。本文作为开篇,详细探讨了 softmax 回归的模型结构与参数学习方法。

Softmax 回归是最简单的神经网络模型,输入数据经过线性组合后,直接通过 softmax 运算得到一个数据分布作为输出。Softmax 回归是 logistic 回归从二类拓展到多类的结果(将 logistic 函数换成 softmax 运算)。

模型定义

接下来的向量指列向量

设标签 $c \in {1, ..., C }$,对于样本 $(\vec{x}, y)$,softmax 回归预测样本标签为 \( c \) 的概率为 $$ p(y=c|\vec{x}) = \textrm{softmax} (\vec{w}_c^\top \vec{x}) = \frac{\exp (\vec{w}_c^\top \vec{x})}{\sum_{c'=1}^C \exp (\vec{w}_{c'}^\top \vec{x})} \in [0, 1], $$

因此 softmax 回归的预测结果为 $$ \hat{y} =\operatorname{argmax}_{c=1}^C p(y=c|\vec{x}) = \operatorname{argmax}_{c=1}^C \vec{w}_c^\top \vec{x}. $$ 本质上,softmax 回归是一个单层神经网络,输出层为 softmax 层,是一个概率分布。

单样本的矢量计算表达式

为了更方便地定义 torch tensor,接下来的向量为行向量

设 $d$ 为样本特征个数且 $\vec{x} \in \mathbb{R}^{1 \times d}$,$W \in \mathbb{R}^{d \times C}$ 为待学习的权重,$\vec{b} \in \mathbb{R}^{1 \times C}$ 为偏置,则对于样本 $(\vec{x}^{(i)}, y^{(i)})$,softmax 回归的矢量计算表达式为 $$ \hat{\vec{y}}^{(i)} = \textrm{softmax} (\vec{x}^{(i)} W + \vec{b}), $$ 其中 \(\hat{\vec{y}}^{(i)} \in \mathbb{R}^{C} \) 的各个元素反应了 softmax 回归预测各标签的概率。

多样本的矢量计算表达式

为了更方便地定义 torch tensor,假设 $\vec{b}$ 为行向量

令 $X \in \mathbb{R}^{n \times d}$ 是 $n$ 个样本的特征矩阵,则 $$ \hat{Y} = \textrm{softmax} (XW+\vec{b}). $$ PyTorch 会自动对 $\vec{b}$ 进行广播(将 $\vec{b}$ 转变为 $(\underbrace{\vec{b};...;\vec{b}}_{n \text{ elements}}) \in \mathbb{R}^{n \times C}$)。

参数学习

采用交叉熵损失函数,只关心正确类别的预测概率: $$ l (W, \vec{b}) = - \frac{1}{N} \sum_{n=1}^N \sum_{c=1}^C y_c^{(n)} \log \hat{y}_c^{(n)}. $$

# 交叉熵的 PyTorch 实现(此处不计算 batch 上的平均值)
def cross_entropy(y_hat, y):
    return -torch.log(y_hat.gather(1, y.view(-1, 1)))

根据该损失函数,参数 $W$ 和 $\vec{b}$ 的更新公式为 $$ W_{t+1} \leftarrow W_t + \alpha \bigg( \frac{1}{|\mathcal{B}|} \sum_{n \in \mathcal{B}} \vec{x}^{(n)} \Big(\vec{y}^{(n)} - \hat{\vec{y}}^{(n)}_{W_t}\Big)^\top \bigg) $$

$$ b_{t+1} \leftarrow b_t + \alpha \bigg( \frac{1}{|\mathcal{B}|} \sum_{n \in \mathcal{B}} \Big(\vec{y}^{(n)} - \hat{\vec{y}}^{(n)}_{b_t}\Big) \bigg), $$ 其中 $\vec{y}^{(n)}$ 是一个 one-hot 向量,仅有 true label 位置对应的元素为 1

推导过程

接下来针对单样本的情形分析。多样本的参数学习公式可以直接类比得到,请自行训练。 令 $\vec{z} = W^\top \vec{x} + \vec{b} \in \mathbb{R}^{C}$,则 $\hat{\vec{y}} = \textrm{softmax} (\vec{z})$, 所以 $$ \frac{\partial \hat{\vec{y}}}{\partial \vec{z}} = \textrm{diag} \Big( \textrm{softmax} (\vec{z}) \Big) - \textrm{softmax} (\vec{z}) \cdot \Big( \textrm{softmax} (\vec{z}) \Big)^\top. $$ 其次,因为 $\vec{z} = W^\top \vec{x} + \vec{b} = \Big( \vec{w}_1^\top \vec{x}, ..., \vec{w}_C^\top \vec{x} \Big)^\top + \vec{b} \in \mathbb{R}^C$, $\vec{w}_c \in \mathbb{R}^d$,所以 $\forall c = 1, ..., C$, $$ \frac{\partial \vec{z}}{\partial \vec{w}_c} \in \mathbb{R}^{d \times c} = \Big(\frac{\partial \vec{w}_1^\top \vec{x}}{\partial \vec{w}_c}, ..., \frac{\partial \vec{w}_C^\top \vec{x}}{\partial \vec{w}_c} \Big)^\top = \big(\vec{0}, ..., \underbrace{\vec{x}}_{\textrm{the }c\textrm{-th col}}, ..., \vec{0} \big) \triangleq M_c(\vec{x}). $$

因为 $l(W, \vec{b}) = - \vec{y}^\top \log \hat{\vec{y}} \in \mathbb{R}$ 且其中的 $\vec{y} \in \mathbb{R}^C$ 为 one-hot 向量,$\hat{\vec{y}} \in \mathbb{R}^C$ 是 softmax 回归的输出,所以根据链式法则有 1

\begin{aligned} \frac{\partial l(W, \vec{b}) }{\partial \vec{w}_c} &= - \frac{\partial \vec{z}}{\partial \vec{w}_c} \cdot \frac{\partial \hat{\vec{y}}}{\partial \vec{z}} \cdot \frac{\partial \log \hat{\vec{y}}}{\partial \hat{\vec{y}}} \cdot \vec{y} \\ &= - M_c(\vec{x}) \Big( \textrm{diag} \hat{\vec{y}} - \hat{\vec{y}} \cdot \hat{\vec{y}}^\top \Big) \big( \textrm{diag} \hat{\vec{y}} \big)^{-1} \cdot \vec{y} \\ &= - M_c(\vec{x}) \big( I - \hat{\vec{y}} \vec{1}^\top \big) \vec{y} \qquad \qquad \triangleright \quad \hat{\vec{y}}^\top \big( \textrm{diag} \hat{\vec{y}} \big)^{-1} = \vec{1}^\top \\ &= -M_c(\vec{x}) \big( \vec{y} - \hat{\vec{y}} \vec{1}^\top \vec{y} \big) \\ &= -M_c(\vec{x}) \big( \vec{y} - \hat{\vec{y}} \big) \qquad \qquad \triangleright \quad \vec{y}\textrm{是 one-hot 向量,所以}\vec{1}^\top \vec{y} = 1 \\ &= -\vec{x} \big( \vec{y} - \hat{\vec{y}} \big)_c \\ &= -\vec{x} \Big( \underbrace{\mathbf{1} (\vec{y}_c = 1) - \hat{\vec{y}}_c}_{\textrm{scalar}} \Big). \end{aligned}

由此可得 $$ \frac{\partial l(W, \vec{b})}{\partial W} = -\vec{x} \big( \vec{y} - \hat{\vec{y}} \big)^\top. $$

同理可得 $$ \frac{\partial l(W, \vec{b})}{\partial \vec{b}} = -\big( \vec{y} - \hat{\vec{y}} \big)^\top. $$

最后

Softmax 回归的 PyTorch 实现见本链接


  1. 关于这个推导过程,更多细节参见 需要熟练掌握的算法理论基础 的 “第二部分,15(14)”。 

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可, 转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。

您也可以通过下方按钮直接分享本页面:


发表评论

登录以发表评论

最新评论


Designed & written by Hailiang Zhao.
hliangzhao.cn. Copyright © 2021 - 2022 | 浙ICP备2021026965号-1
Manage