线性回归+基础优化算法
线性模型
- 输入 x=[x1,x2,…,xn]T
- 线性模型有一个 n 维权重和一个标量偏差 b
- 输出 y=w1x1+w2x2+⋯+wnxn+b
向量版本:y=<w,x>+b
线性模型可以看成是单层的神经网络。
衡量预测质量
比较真实值和估计值的差距,通常使用平方损失。假设 y 是估计值,y^ 是估计值
l(y,y^)=21(y−y^)2
式子中有 1/2 是为了求导时便于消去。
训练数据
假设我们有 n 个样本,记
X=[x1,x2,…,xn]Ty=[y1,y2,…,yn]T
参数学习
- 训练损失
l(X,y,w,b)=2n1i=1∑n(yi−<xi,w>−b)2=2n1∥y−Xw−b∥2
- 最小化损失来学习参数
w∗,b∗=argw,bminl(X,y,w,b)
显式解
由于是一个简单的线性模型,损失是一个凸函数,因此有显式解
w∗=(XTX)−1Xy
基础优化算法
梯度下降
wt=wt−1−η∂wt−1∂l
l 在这里称为学习率。
小批量随机梯度下降
在实际应用中我们很少直接使用梯度下降,因为每次计算梯度时要对整个损失函数求导,而损失函数是对所有样本的平均,因此每次求梯度都要把整个样本算一次,计算量很大。因此我们可以随机采样 b 个样本来近似损失
b1i∈Ib∑l(xi,yi,w)
在 b 很大时估计较为精确,很小时没那么精确,但是计算更快。
小批量随机梯度是深度学习默认的求解算法,虽然有更好的算法,但是这种算法稳定而且简单,因此应用广泛。
QA
- Q:为什么用平方损失而不是绝对差值?
- A:使用绝对差值在原点处不容易求导,但是实际上差别不大。
- Q:线性回归损失函数是不是通常都是mse?
- 梯度下降和随机梯度下降如何找到合适的学习率?
- A:首先可以选择Adam之类对学习率不太敏感的算法,以及合理的参数初始化,学习率取个差不多0.1。
- Q:batchsize对最终结果的影响?
- A:batchsize小结果可能会更好,因为小批量随机梯度下降理论上带来了噪音,而噪音对很深的神经网络来说是件好事,这能防止神经网络走偏,得到更强的鲁棒性以及泛化性。
- Q:训练过程中,过拟合和欠拟合情况下学习率和批次应当如何调整?
- A:在正常的范围内学习率和批量大小对拟合情况影响不大,只要学习次数足够最终都会拟合。
Softmax回归+损失函数+图片分类数据集
Softmax回归
分类通常有多个输出,输出 i 是第 i 类的置信度。
从回归到多类分类——均方损失
- 首先对每一位进行有效编码。比如有一个label为 y,那么编码之后 y 变为 y
y=[y1,y2,…yn]Tyi={1,if i=y0,otherwise
- 使用均方损失训练
- 最大值为预测结果 y^=argmaxioi
从回归到多类分类——无校验比例
在计算损失的时候,可以只考虑正确类的误差,而不考虑非正确类的情况。即我们希望正确类的置信度远远大于非正确类。oy−oi≥Δ(y,i)
同时我们希望输出的结果是一个概率,因此可以把输出向量 o 做一个softmax操作,即
y^=softmax(o)y^i=∑kexp(ok)exp(oi)
这里使用指数是希望输出都为正数。
Softmax和交叉熵损失
交叉熵常用来衡量两个概率的区别 H(p,q)=∑i−pilog(qi),如果将其作为损失,则为
l(y,y^)=−i∑yilogy^i=−logy^y
可以看出这里只考虑了正确类的预测情况。
损失函数
L2 Loss
l(y,y′)=21(y−y′)2
导数是一条过原点的直线,因此当损失函数逐渐减小的时候收敛地会越来越慢。但是我们有时并不希望在比较远的时候梯度过大。
L1 Loss
l(y,y′)=∣y−y′∣
梯度永远是常数,对稳定性比较好。但是在原点处不可导,因此在优化末期可能不太稳定。
Huber’s Robust Loss
l(y,y′)={∣y−y′∣−2121(y−y′)2,if ∣y−y′∣>1,otherwise
QA
- softlabel训练策略为什么有效?
- 一般的标号是将label变成一个长为 n 的向量,其中只有正确的那一项为 1,但是这回导致不太好完全逼近,因为预测的正确项的指数要趋近于无穷大。因此softlabel将正确的类记录为 0.9,其他项平分 0.1,这样就更好逼近。这也是图片分类中常用的技巧。
- 为什么使用交叉熵而不是相对熵、互信息等其他基于信息量的度量?
- 相互熵相比交叉熵而言是对称的,这一点更好。但是计算起来更麻烦一下,而且用这两个效果差不多。