斯坦福CS231学习笔记第三讲——损失函数和优化(2)

前文回顾:

1.我们得到了一些数据集:dataset of (x,y);
2.设置一个分数函数 score function:用来给线性分类器的结果打分,以衡量相似度。
3.设置了损失函数loss function:定量的计算我们的预测结果是否如意,衡量模型通过训练习得的参数是好还是坏。
4.提到了正则化的概念:通过给损失函数增加一个惩罚项,试图在训练数据之间进行权衡,并尽量输出一个更简单的模型。
斯坦福CS231学习笔记第三讲——损失函数和优化(2)

在监督学习中,通常你想指定一些函数 f (函数结构可能非常复杂);指定一些确定的损失函数(softmax、SVM等);给定参数的任何值;一些正则化术语,如何惩罚模型的复杂度;然后你把这些东西结合在一起,并试图找到参数ω,使其能最小化最终的损失函数值。这个过程就是优化——optimization。

优化 optimization

优化的过程就好比一个人在一个山谷中,然后让这个人自行寻找路线走到谷底。随机走显然是耗时耗力的,此时就需要引入梯度的概念,利用当地地形的几何形状,凭借脚上的感觉感知当地地形地面的倾斜是朝向下山的方向,然后你朝这个方向走一步,就下降了一点,再感知,再走一步下降一点……以此类推,到达谷底。
斯坦福CS231学习笔记第三讲——损失函数和优化(2)

1.斜率和梯度

那么什么是斜率呢?学过微积分的应该都知道
斯坦福CS231学习笔记第三讲——损失函数和优化(2)
一维时,斜率就是函数的导数,假设有一个一维函数f,将x作为标量,微积分用来输出曲线的高度,我们就能计算出任何一点的斜率,如果我们向任何方向前进一步h,然后比较这一步前后函数值的差别,当步长h趋于0的时候,就能得到那一点上函数的斜率。
推广到多元函数,实际的标量x是一个向量,在多元情况下生成的导数就叫做梯度,所以梯度就是偏导数组成的向量。梯度有跟x一样的形状,梯度中的每个元素可以告诉我们相关方向上函数f的斜率,并且梯度指向函数增加最快的方向,那么负梯度就指向函数下降最快的方向。

ω是向量参数,给出当前的损失是loss 1.25,我们的目标是计算梯度dw,它是和w同纬的向量,梯度中每个元素都会告诉我们在相关方向上每移动一小步,损失变化多少。
斯坦福CS231学习笔记第三讲——损失函数和优化(2)
计算有限差分:将w的第一个元素累加一个很小的值h(如下图,h=0.0001),然后用损失函数重新计算损失值,根据微积分公式可以计算第一个元素的点的梯度

斯坦福CS231学习笔记第三讲——损失函数和优化(2)
然后以此类推,分别计算出当第二个、第三个……分别累加趋近于0的h时各元素对应的梯度斯坦福CS231学习笔记第三讲——损失函数和优化(2)
但是显然,这会耗费大量的时间去计算,当一个神经网络有成千上万个参数的时候,这种计算方式需要跟着计算成千上万次,太耗时耗力了。所以实际实践中不要去计算梯度的有限差分,否则可能需要等待上亿次计算才能得到一个梯度。

2.梯度下降

好的办法是提前计算出梯度的表达式,计算梯度。斯坦福CS231学习笔记第三讲——损失函数和优化(2)
一旦知道如何计算梯度,那么只需三行代码就可以实现一个梯度下降算法:
斯坦福CS231学习笔记第三讲——损失函数和优化(2)
首先 初始化w为随机值,whie true 计算损失和梯度,然后向梯度相反的方向更新权值
需要注意的是,梯度是指向函数的最大增加方向,梯度下降是指函数最大减小的方向。

此处有一个超参数——步长,决定在梯度下降的方向前进多少距离,这个步长也叫做学习率。是需要人为设定的一个重要的超参数。

3. SGD随机梯度下降

实际中为了节省计算,一般采用随机梯度下降,每次迭代取样本的一部分参与计算而不是全部参与计算(通常取2的N次幂 eg:64 \128 \258……)。因为如果样本非常多(比如ImageNet有130万张图片),那在计算损失函数的时候N将非常大。
斯坦福CS231学习笔记第三讲——损失函数和优化(2)

关于图片特征

直接将图片的原始像素输入线性分类器显然是不方便的,所以需要提取图片的特征,同时,不同的特征转化也能使分类器更方便的进行工作,比如将不能线性分类的特征转化为线性可分的特征形式
斯坦福CS231学习笔记第三讲——损失函数和优化(2)
所以找到正确的特征转换也很重要。

1.直方图HOG

获取每个像素值对应的光谱,把它分到柱状里,将每一个像素都映射到这些柱状里,然后计算出每一个不同柱状中像素点出现的频次。这个可以从全局上告诉我们图像中有哪些颜色
比如一只青蛙,特征向量告诉我们这一点有很多绿色分量,较少的紫色和红色分量:
斯坦福CS231学习笔记第三讲——损失函数和优化(2)
人类视觉系统中,有向边缘非常重要,而特征表示的有向梯度直方图尝试获取同样的这种人类视觉的感觉,并且测量图像中边缘的局部方向。

首先获取图像,然后将图像按八个像素区分成八份,然后在八个像素区的每一个部分计算每个像素值的主要边缘方向,把这些边缘方向量化到几个组,然后在每一个区域内计算不同的边缘方向从而得到一个直方图。
斯坦福CS231学习笔记第三讲——损失函数和优化(2)

2.词袋

斯坦福CS231学习笔记第三讲——损失函数和优化(2)