1. ML System 的三大要素
- 假设模型:模型如何被参数化,如何构建从输入到输出的映射关系
- 损失函数:用来衡量一个假设在任务上表现好不好,其值越小代表表现越好
- 优化方法:寻找能让损失最小化的参数的过程
2. Softmax 回归
考虑一个多分类问题,数据集满足:
x(i)∈Rn,y(i)∈{1,…,k},i=1,…,m.
- n :输入数据集的维度,表示输入集的特征
- k :标签类别数,亦即输出空间的维度
- m:训练样本数
2.1 Linear Hypothesis Function
线性分类器首先将输入向量映射为每个类别的一个分数(logit),再通过 Softmax 将这些分数转换为类别概率。其中
hθ:Rn→Rk.
我们一般按照 batch 形式分批处理数据,将样本按行堆叠为如下的矩阵。其中,按行看,每一行为一份样本的数据;按列看,每列代表一种输入特征。下式将整个训练集表示为矩阵形式:
X∈Rm×n,y∈{1,…,k}m.
针对 hθ:Rn→Rk 这样的变换,其标准矩阵表示为 Ak×n 。不过我们一般选择把模型参数存为 θ∈Rn×k ,具体如下式,其中每一列是第 j 个类别的参数向量。这样存储使得 batch 处理时比较方便。
θ=∣θ1∣∣θ2∣⋯∣θk∣∈Rn×k
于是
- 对于单样本 x(sample),其预测为 hθ(x)=θTx。
- 对于一批样本 X∈Rb×n (batch),其预测为 hθ(X)=Xθ。
2.2 Loss Function
对于多分类问题,损失函数比较直接的做法是统计分类错误的情况,即
ℓerr(h(x),y)={01if argmaxihi(x)=y,otherwise.
它对于评估是有用的,但作为一个优化目标却很糟糕,因为它不可微。因此此处的做法是使用交叉熵损失。
借助 softmax 函数,可以将其我们前述线性分类器得到的打分转化为概率,做到多分类归一化(关于下列形式的由来,可参见CS229广义线性回归模型中的相关推导):
zi=p(label=i)=∑j=1kexp(hj(x))exp(hi(x))
那么,单个样本对于正确类别 𝑦 的交叉熵损失为:
ℓce(h(x),y)=−logp(label=y)=−hy(x)+logj=1∑kexp(hj(x))
上式的 log-sum-exp 形式简化了原式中的 softmax 计算。
2.3 Optimization
优化的目标就是让平均训练损失降到最低。我们需要在所有可能的参数 θ 中,找到一组参数,使训练集上的平均损失最小:
θminm1i=1∑mℓ(hθ(x(i)),y(i))
对于 softmax 回归,即
θminm1i=1∑mℓce(θTx(i),y(i))
此优化问题可以借助梯度下降法以解决,可参见此处。
接下来演示 softmax 回归下处理优化问题时的梯度计算。
在单样本情形下,设 z=θTx,p=softmax(z),其中 x∈Rn,θ∈Rn×k,p∈Rk,那么有
ℓ(x,y)=−logpy=−log∑j=1kezjezy=−zy+logj=1∑kezj.
交叉熵损失关于某个得分分量 zj 的导数为
∂zj∂ℓ=∂zj∂(−zy+logr=1∑kezr)=−1(j=y)+∑r=1kezrezj=pj−1(j=y).
那么转换为向量形式(使用 one-hot 向量表示真实标签 ey,由于 z,p∈Rk×1,所以 ey 跟它们形状相同,也是列向量),得到:
∇zℓ=p−ey
但是我们所求的应该是交叉熵损失对参数 θ 的导数,这应该如何得出呢?
2.3.1 矩阵微分求解
θ=∣θ1∣∣θ2∣⋯∣θk∣∈Rn×k
将 θ 视为 k 个列向量组成的矩阵,这样可以避免直接处理向量对矩阵求导。
那么,第 j 个得分为:
zj=θjTx
而参数 θj 只直接影响对应的 zj,得到 ∂θj∂zj=x 。
于是利用链式法则,可以得到:
∂θj∂ℓ=∂zj∂ℓ∂θj∂zj=(pj−1(j=y))x=(pj−ey,j)x.
因此整个参数矩阵的梯度可以写成
∇θℓ=[∂θ1∂ℓ∂θ2∂ℓ⋯∂θk∂ℓ]=[(p1−ey,1)x(p2−ey,2)x⋯(pk−ey,k)x]=x[p1−ey,1p2−ey,2⋯pk−ey,k]=x(p−ey)T.
2.3.2 快速链式法则
我们可以按标量链式法则得到组成部分,再根据我们知道最终梯度必须和 θ 一样是 n×k,人为调整转置和乘法顺序。
于是有
∇θℓce(θTx,y)→∂(θTx)∂ℓce∂θ∂(θTx)=(p−ey)⋅x调整乘法顺序与转置x(p−ey)T.
对于 batch,有 L=B1∑i=1Bℓi ,那么
∇θL→∂(Xθ)∂L∂θ∂(Xθ)=B1(P−Y)⋅X调整乘法顺序与转置B1XT(P−Y).
参考
- https://ickma2311.github.io/ML/DLSys/cmu-dlsys-lecture-2-ml-refresher-softmax-regression.html