机器学习算法的三个主要部分
- The hypothesis class: 模型结构
- loss fuction 损失函数
- An optimization method:在训练集上减小loss的方法
多分类问题
- 训练数据:x(i)∈Rn,y(i)∈1,...,kfori=1,...mx^{(i)}\in \mathbb{R}^n ,y^{(i)}\in {1,...,k} for i=1,...mx(i)∈Rn,y(i)∈1,...,kfori=1,...m
- n 是输入数据的维度,输入的每一例数据是一个n维向量
- k 是要分成的类的数量
- m 是训练集的大小,总共有m例数据
线性假设函数
假设函数 h:Rn→Rkh:\mathbb{R}^n \rightarrow\mathbb{R}^kh:Rn→Rk
其中hi(x)h_i(x)hi(x) 用来衡量划分到类 i 的可能性
一个线性的假设函数
hθ(x)=θTxh_{\theta}(x)=\theta^Txhθ(x)=θTx
参数θ∈Rn×k\theta\in\mathbb{R}^{n\times k}θ∈Rn×k
矩阵形式
X∈Rm×n=[x(1)T...x(m)T],y∈1,...,km=[y(1)...y(m)]X\in \mathbb{R}^{m\times n} = \begin{bmatrix}
x^{(1)T} \\
... \\
x^{(m)T}
\end{bmatrix}, y\in{1,...,k}^m=\begin{bmatrix}y^{(1)} \\
... \\
y^{(m)}\end{bmatrix}X∈Rm×n=x(1)T...x(m)T,y∈1,...,km=y(1)...y(m)
线性假设函数可以写成下面的形式
hθ(X)=[hθ(x(1))T...hθ(x(m))T]=[x(1)Tθ...x(1)Tθ]=Xθh_\theta(X) = \begin{bmatrix}h_{\theta}(x^{(1)})^T \\... \\h_{\theta}(x^{(m)})^T \end{bmatrix}= \begin{bmatrix}x^{(1)T}\theta \\...\\x^{(1)T} \theta\end{bmatrix} = X\thetahθ(X)=hθ(x(1))T...hθ(x(m))T=x(1)Tθ...x(1)Tθ=Xθ
损失函数1 classification error
这个损失函数,不可微,对于optimization是非常不好用的
ℓerr(h(x),y)={0,ifargmaxihi(x)=y1,otherwis\ell_{err}(h(x),y) = \left\{\begin{matrix} 0\quad ,if\quad argmax_i\quad h_i(x)=y \\ 1\quad ,otherwis \end{matrix}\right.ℓerr(h(x),y)={0,ifargmaxihi(x)=y1,otherwis
损失函数2 softmax / cross-entropy loss
zi=p(label=i)=exp(hi(x))∑j=1kexp(hj(x))⟺z=normalsize(exp(h(x)))z_i = p(label=i)=\frac{exp(h_i(x))}{\sum_{j=1}^kexp(h_j(x))} \Longleftrightarrow z = normalsize(exp(h(x)))zi=p(label=i)=∑j=1kexp(hj(x))exp(hi(x))⟺z=normalsize(exp(h(x)))
zi 表示分类为i的概率,将假设函数的输出转为概率。
softmax 或者交叉熵损失
ℓerr(h(x),y)=−logp(label=y)=−hy(x)+log∑j=1kexp(hj(x))\ell_{err}(h(x),y) =- \log p(label=y)= -h_y(x)+\log \sum_{j=1}^kexp(h_j(x))ℓerr(h(x),y)=−logp(label=y)=−hy(x)+logj=1∑kexp(hj(x))
softmax 回归优化问题
接下来的任务就是想办法减小损失函数
minθ1m∑i=1mℓ(hθ(x(i)),y(i))\min_{\theta} \frac{1}{m}\sum_{i=1}^m\ell(h_\theta(x^{(i)}),y^{(i)})θminm1i=1∑mℓ(hθ(x(i)),y(i))
如何找到θ\thetaθ来减少损失函数呢?
优化:梯度下降法
对一个输入为矩阵,输出为标量的函数 f:Rn×k→Rf:\mathbb{R}^{n\times k} \rightarrow \mathbb{R}f:Rn×k→R ,以下为梯度的定义,针对θ\thetaθ的每一个元素求偏导。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hcojNuCy-1684499011760)(null)]
梯度指示了增长最快的方向。
更新θ\thetaθ
θ:=θ−α▽θf(θ)\theta:=\theta - \alpha \triangledown_\theta f(\theta)θ:=θ−α▽θf(θ)
α\alphaα 是学习率,用来控制更新的步长
随机梯度下降
不使用所有的数据来更新参数,每次选择一个 minibatch ,针对minibatch求loss和梯度及进行更新
回到我们的问题,如何计算softmax损失函数的梯度?
h=θTx,h∈Rkh = \theta^Tx,h\in \mathbb{R}^kh=θTx,h∈Rk
eye_yey 是一个向量,只有y位置为1,其余位置为0
XT∈Rn×mX^T \in \mathbb{R}^{n\times m}XT∈Rn×m Z−Iy∈Rm×kZ -I_y \in \mathbb{R}^{m\times k}Z−Iy∈Rm×k
总的过程为
先选择一个minibatch,再更新θ\thetaθ