时间:2019/3/27
内容:优化
课时8:优化
注意:
- x可能是整个向量
- 梯度是偏导数组成的向量,它和x的形状一样,它指向函数增长最快的方向;负梯度指向函数下降最快的方向
- 任意方向的斜率等于这一点上梯度和该点单位方向向量的点积
在计算机上计算梯度的一个简单方法是有限差分法
迭代计算所有W维度,一直重复下去直到计算完dW。这种方法是数值梯度法,过程非常慢。实际上,我们会使用另一种分析梯度法,提前计算出梯度的表达式
调试策略:使用数值梯度作为单元测试来确保解析梯度是正确的
梯度下降算法
注意:
- 先初始化W为随机值,当为真时,我们计算损失和梯度,然后向梯度相反的方向更新权重值。向梯度减小的方向前进,最后网络将会收敛。
- 步长/学习率告诉我们每次计算梯度时在那个方向前进多少距离
- 训练网络时,学习率是第一个要检查的超参数,模型大小、需要多少正则化等要排在其后
- 基本思想是梯度下降(每一步都试图走下坡),利用每一步的梯度决定下一步的方向,有不同的更新策略决定如何使用梯度信息
随机梯度下降
之前我们定义了一种loss function计算分类器在训练样本中的每一步表现的有多糟糕,设定数据集的总误差是整个训练集误差的平均值。但N可能会非常大,计算lloss时的成本会非常高。因为梯度是一个线性运算符,当计算表达式的梯度时,误差函数的梯度值每个单项误差梯度值的总和,每一次更新W都会迭代整个训练数据集。
在实际操作中往往使用随机梯度下降法,它并非计算整个训练集的误差和梯度值,而是在每一次迭代中选取一小部分训练样本成为minibatch(常取2的次幂)
注意:为真时,随机取一些minibatch数据,评估minibatch的误差值和梯度,然后更新各个参数
demo: http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/
图像特征
之前讲的是将我们的原始像素取出直接传入线性分类器,但这种方式的表现并不好。当神经网络大规模运用之前常用的策略是:首先计算图片的各种feature representation,然后将不同的特征向量合到一起得到图像的特征表述,它将作为输入源传入线性分类器。下图解释了这么做的原因:
feature representation的例子是颜色直方图。获取每个像素值对应的光谱 ,计算对应光谱对应像素的频次
神经网络普遍使用之前,常用的特征向量是方向梯度直方图,方法:获取图像后,将图像按八个像素区分为八份,然后在八个像素区的每一个部分计算像素值的主要边缘部分,把这些边缘方向量化到几个组,然后在每一个域内计算不同的边缘方向从而得到一个直方图
另一个特征表示的例子是词袋
要定义自己的视觉单词字典。首先获得图像。从这些图像中进行消的随机块的采样,然后采用K均值(K means)等方法将它们聚合成簇(clusters),从而得到不同的簇中心,这些簇中心可能代表了图像中视觉单词(码本)的不同类型。之后可以用码本给图像编码
- 上述提到的具体原理细节还没完全弄懂+_+
总结
-
5-10年前的技术:
图像分类通道。计算图像different feature representations,例如词袋或方向梯度的直方图将整个特征连接在一起喂进线性分类器的特征提取器。提取了特征之后,固定特征提取器,使得它在训练过程中不会被更新,而在训练过程中,仅仅当working on top of features的时候更新线性分类器 -
还需查阅特征提取器相关内容+_+
-
神经网络
与上述的差别在于,并非提前记录特征,而是直接从数据中学习特征。将获取的像素值输入卷积神经网络,经过多层计算最终得到一些数据驱动的feature representation,然后在整个网络中训练所有的权重而不是最上层线性分类器的权重