斯坦福深度学习课程笔记(二)

损失函数和优化

官网
ppt

1 损失函数

损失函数是用来定量地分析我们的模型预测效果有多糟糕的函数。损失函数输出值越大,代表我们的模型效果越糟糕。

损失函数的通用表示
假设我们的数据集有N个样本, { ( x i , y i ) } i = 1 N \{(x_i,y_i)\}^{N}_{i=1} {(xi,yi)}i=1N其中 x i x_i xi是样本图片, y i y_i yi是对应的整数标签;整个数据集的损失就是每个样本的损失之和。
L = 1 N ∑ i L i ( f ( x i , W ) , y i ) L = \frac{1}{N}\sum_iL_i(f(x_i,W),y_i) L=N1iLi(f(xi,W),yi)

这里介绍两种损失函数

1.1 多分类SVM损失

SVM损失的形式是这样的:
L i = ∑ j ≠ y i { 0 i f s y i ≥ s j + 1 s j + 1 − s y i e l s e = ∑ j ≠ y i m a x ( 0 , s j + 1 − s y i ) L_i = \sum_{j \ne y_i} \left\{ \begin{aligned} 0 &&if && s_{y_i} \ge s_j + 1 \\ s_j + 1 - s_{y_i} && else \\ \end{aligned} \right. = \sum_{j \ne y_i} max(0,s_j + 1 - s_{y_i} ) Li=j=yi{0sj+1syiifelsesyisj+1=j=yimax(0,sj+1syi)
这里的 + 1 +1 +1代表一个边界(margin),即正分类比误分类大的程度,其实这个是可以自由设置的,但是也要依据问题去考虑。

svm loss

也可以把SVM Loss叫做Hinge Loss,横轴是 s y i s_{y_i} syi,随着 s y i s_{y_i} syi的增大,HInge Loss是逐渐下降的,最终降为0。

在这里插入图片描述

在这个问题中,我们的 s s s就是模型跑到最后,给每个样本image的分类的一个分数值。

关于SVM Loss,有几个问题:

  • 损失的最大/最小值分别是什么?
    最小值是0,对应全部分类正确的情况;
    最大值是无穷大

  • 在初始化阶段, W W W很小,所以所有的 s ≃ 0 s \simeq 0 s0,这个时候的损失是多少?
    答案是 c − 1 c-1 c1 c c c代表分类的数量。
    L = 1 N ∑ i = 1 N ∑ j ≠ y i m a x ( 0 , s j + 1 − s y i ) = 1 N ∑ i = 1 N ∑ j ≠ y i m a x ( 0 , 1 ) = 1 N ∑ i = 1 N ∑ j ≠ y i 1 = 1 N ∑ i = 1 N c − 1 = N ( c − 1 ) N L = \frac{1}{N} \sum_{i=1}^N\sum_{j \ne y_i} max(0,s_j + 1 - s_{y_i} ) = \frac{1}{N} \sum_{i=1}^N \sum_{j \ne y_i} max(0,1) = \\ \frac{1}{N} \sum_{i=1}^N \sum_{j \ne y_i} 1 = \frac{1}{N} \sum_{i=1}^Nc-1 = \frac{N(c-1)}{N} L=N1i=1Nj=yimax(0,sj+1syi)=N1i=1Nj=yimax(0,1)=N1i=1Nj=yi1=N1i=1Nc1=NN(c1),就是 c − 1 c-1 c1

  • 如果包含 j = y i j = y_i j=yi的情况,所有损失的和应该是多少呢?
    损失的和应该会加上 1 1 1

  • 如果我们使用平均值而非求和,损失会有怎样的变化呢?
    没什么变化,只是缩放而已

  • 如果我们使用 m a x ( 0 , s j + 1 − s y i ) 2 max(0,s_j + 1 - s_{y_i} )^2 max(0,sj+1syi)2,会有什么变化呢?
    这就形成了一个新的损失函数。

  • 如果我们找到了一个 W W W,使得损失为0,那么损失是惟一的吗?
    不是, 2 W 2W 2W也能令损失为0。

既然 W W W 2 W 2W 2W都能使损失降为0,那么我们应该选哪个 W W W呢?

这里我们引入正则
正则化
正则项存在的意义,一般是防止过拟合。因为即使我们把损失调到最低,也只是使得模型尽可能地去拟合训练集,但是我们的目标是让模型尽可能拟合测试集。所以过拟合是不好的,我们可以通过增加一个 R ( W ) R(W) R(W)正则惩罚项,使得模型尽可能地简单。
简单的正则化的例子有L1正则、L2正则;更复杂的有Dropout,批正则,随机深度、fractional pooling。

1.2 softmax损失(多项Logistic回归)

softmax的主要思想是将分类分数的值转化为概率值。
s14

首先是对分数取 e e e的指数,然后归一化;得到概率值。然后对概率值取对数再取负值。

关于softmax也有几个问题:

  • softmax的损失的最小值/最大值分别是?
    最小值为0,最大值是无穷大
  • 最开始的时候, s s s值是大致相等的,损失是多少呢?
    结果是 l o g ( C ) log(C) log(C)
    可以做一个简单的推导,如上图,cat,frog,car有三个类,某一个图像三个类的得分都是 s s s,再取指数,每个类的得分是 e s e^s es,再归一化,每个类的得分是 1 C \frac{1}{C} C1,再取 l o g log log加负数,就是 − l o g ( 1 C ) = − ( l o g 1 − l o g C ) = l o g ( C ) -log(\frac{1}{C}) = -(log1 - logC) = log(C) log(C1)=(log1logC)=log(C)

2 优化

优化就是寻找使损失函数最小的那个超参数,这里就是找最优的 W W W
最直观的想法是随机优化方法

#best Loss 是正无穷
bestLoss = float('inf')
for num in range(100):
	W = np.random.randn(10,3073)*0.0001 #得到随机的W
	Loss = L(x_train,y_train,W) #计算在整个数据集上的loss
	if loss <bestLoss:
		bestLoss = loss
		bestW= W
	

随机方法是一个没有办法的办法。

英语时间
slope:斜率,坡度
derivative:导数
gradient: 梯度

优化的一个经典想法是使用梯度
s15

一维,也就是当只有一个自变量 x x x时,如下图,这里斜率的计算其实就是ABC这个三角形的 t a n tan tan 值。
s16

多维时,梯度就是,各个维度的导数组成的向量。

各个方向的斜率,就是各个方向的梯度点乘方向单位向量。

s17

如上图,是使用数值梯度计算法计算梯度。在每次迭代,都要对 W W W的每个维度根据图中公式计算一遍数值。

这种方法是简单的,但是他有两个缺点

  • 太慢,每次迭代都要对每个维度算一遍,如果有1000+维度,100次迭代,计算的成本一下就上去了。
  • 不够精确。

感谢牛顿和莱布尼兹,让我们可以使用微积分工具来计算梯度。和numerical gradient相对应,这种计算梯度的方式叫analytical gradient

分析梯度是准确的,快速的,但是易于出错的。

在实践中,使用分析梯度计算,使用数值梯度进行结果检查。这个叫做gradient check

s18

当样本量 N N N很大时,计算损失函数的和还是很耗计算量的。因此产生了一种随机梯度下降(sgd)。每次迭代都从数据集中选取一小撮样本,计算损失函数,执行梯度下降算法。这个一小撮样本叫做minibatch,它的数值一般为2的指数次方,32、64、128、256等等。

3 图像特征

在深度学习还没有兴起之前,直接使用像素值作为图像特征丢进模型里的效果是很差的。所以在丢进模型之前,会进行一步特征选择。

s19

老师介绍的特征选择方法有这几种

  • 颜色直方图,将每个像素值对应到一个色块中,这种不同的色块就会包含不同数量的像素点,可以形成一个直方图。比如“青蛙”这张图片,绿色色块的像素点就很多
  • 定向梯度直方图
  • 词袋。这个是从nlp中获得的灵感。

在这里插入图片描述

但是,深度学习的出现给我们提供了另一种进行特征选择的方式。使用模型帮助我们选择更合适的特征。

s20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值