CS231n lecture 3 损失函数和优化

lecture 3 损失函数和优化

文章目录

    • lecture 3 损失函数和优化
      • Multiclass SVM loss 多分类SVM损失函数
      • 正则项 Regularization
      • Softmax Classifier
      • 优化 Optimization
      • 随机梯度下降法 Stochastic Gradient Descent (SGD)

损失函数告诉我们目前的分类器的表现有多好

整个数据的损失是每组数据的损失之和的平均值

L = 1 N ∑ i = 1 N L i L=\frac{1}{N} \sum_{i=1}^{N} L_{i} L=N1i=1NLi

Multiclass SVM loss 多分类SVM损失函数

L i = ∑ j ≠ y i { 0  if  s y i ≥ s j + 1 s j − s y i + 1  otherwise  = ∑ j ≠ y i max ⁡ ( 0 , s j − s y i + 1 ) \begin{aligned} L_{i} &=\sum_{j \neq y_{i}}\left\{\begin{array}{ll}0 & \text { if } s_{y_{i}} \geq s_{j}+1 \\ s_{j}-s_{y_{i}}+1 & \text { otherwise }\end{array}\right.\\ &=\sum_{j \neq y_{i}} \max \left(0, s_{j}-s_{y_{i}}+1\right) \end{aligned} Li=j=yi{0sjsyi+1 if syisj+1 otherwise =j=yimax(0,sjsyi+1)

sj 是其他类别的分数,syi是正确的类的分数

这里的1代表一个阈值,当正确的分数比不正确的大于一个阈值时,代表本次预测的损失函数正确的的确比不正确的要表现得好。

在这里的损失函数只是代表错误造成的损失是多少,因此并不在乎sjsyi具体的值是多少。因此,无论对Li进行如何的线性移动,对结果都不会造成影响。

然后,当损失函数变为 Li = ∑j ≠ yimax (0,sjsyi+1)2 时,会发现错误会被放大,越离谱的错误会被放的越大。在合页损失函数中,我们并不关心微小的错误。使用何种损失函数代表我们关心什么类型的错误,损失函数的意义在于告诉算法出现了什么类型的错误。平方形式会对错误更关心,不论是微小的还是很大的。

正则项 Regularization

L ( W ) = 1 N ∑ i = 1 N L i ( f ( x i , W ) , y i ) + λ R ( W ) L(W)=\frac{1}{N} \sum_{i=1}^{N} L_{i}\left(f\left(x_{i}, W\right), y_{i}\right)+\lambda R(W) L(W)=N1i=1NLi(f(xi,W),yi)+λR(W)

之前的损失函数旨在告诉我们模型应该和训练数据拟合,但事实上,更应该关心的是模型应该和测试数据拟合。

为了防止出现过拟合的现象,因此要加入一个正则项防止模型过拟合(奥卡姆剃刀),相当于一种软性惩罚。λ是超参数,regularization strength
采用L2 regularization 会让W的每个维度都相对平均。

有几种简单的正则项例子
采用L2 regularization 会让W的每个维度都相对平均。

L 2  regularization:  ‾ R ( W ) = ∑ k ∑ l W k , l 2   L 1  regularization:  R ( W ) = ∑ k ∑ l ∣ W k , l ∣  Elastic net  ( L 1 + L 2 ) : R ( W ) = ∑ k ∑ l β W k , l 2 + ∣ W k , l ∣ \begin{array}{l} \underline{\mathrm{L} 2 \text { regularization: }} R(W)=\sum_{k} \sum_{l} W_{k, l}^{2} \\ \mathrm{~L} 1 \text { regularization: } R(W)=\sum_{k} \sum_{l}\left|W_{k, l}\right| \\ \text { Elastic net }(\mathrm{L} 1+\mathrm{L} 2): R(W)=\sum_{k} \sum_{l} \beta W_{k, l}^{2}+\left|W_{k, l}\right| \end{array} L2 regularization: R(W)=klWk,l2 L1 regularization: R(W)=klWk,l Elastic net (L1+L2):R(W)=klβWk,l2+Wk,l

Softmax Classifier

SVM对于Scores的使用仅仅是求出损失函数。而softmax会将分数换算成概率分布。

P ( Y = k ∣ X = x i ) = e s k ∑ j e s j P\left(Y=k \mid X=x_{i}\right)=\frac{e^{s_{k}}}{\sum_{j} e^{s_{j}}} P(Y=kX=xi)=jesjesk

L i = − log ⁡ ( e s y i ∑ j e s j ) L_{i}=-\log \left(\frac{e^{s y_{i}}}{\sum_{j} e^{s_{j}}}\right) Li=log(jesjesyi)

对于softmax损失函数,区间是0到正无穷大。

当某个分数值发生微小改动时,相对于SVM可能不会发生变化,softmax损失函数必定会发生改变。

优化 Optimization

d f ( x ) d x = lim ⁡ h → 0 f ( x + h ) − f ( x ) h \frac{d f(x)}{d x}=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} dxdf(x)=limh0hf(x+h)f(x)

对每个维度的W加入很小的步长,通过对损失函数的增量除以步长,即是数值梯度。

为了让损失函数最小化,所以要找到数值梯度最小(负数)的位置。

要求的是损失函数减少的方向,损失函数减小的方向,只和W有关。所以要找到一个合适的W让损失函数最小。

但是,使用数值梯度太慢、需要的算力太多了,因此我们可以使用微积分来解决这个问题。

d f ( x ) d x = lim ⁡ h → 0 f ( x + h ) − f ( x ) h \frac{d f(x)}{d x}=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} dxdf(x)=h0limhf(x+h)f(x)

由数学公式推导,可以明白,梯度的方向正是loss函数增大的方向,因此,loss函数减小得最快的方向,就是梯度的反方向。

因此,我们会这样来优化W

while True:  weights_grad = evaluate_gradient(loss_fun, data, weights)  weights += - step_size * weights_grad

这里的step_size是步长,又叫学习率,是一个超参数。

随机梯度下降法 Stochastic Gradient Descent (SGD)

由于在实际应用中,我们的数据量N会特别大,可能会有百万千万的数据量。如果一个一个去算梯度来优化的话,会特别慢。

因此,我们采用随机梯度下降法,使用minibatch(大概32,64,128个数据)

每次使用minibatch的数据来训练模型并优化W值

你可能感兴趣的:(CS231n,学习笔记)