umich cv-2-2

umich,cv · 浏览次数 : 5

小编点评

**使用解析梯度算法找到最优的权重矩阵** 1. **定义损失函数**: - 使用svm或softmax函数表示样本对的损失。 - 计算每个样本的损失值。 - 累计所有样本的损失值。 2. **计算梯度函数**: - 对损失函数对权重矩阵的梯度进行求解。 - 使用解析梯度或反向传播方法。 3. **使用解析梯度下降**: - 设置学习率。 - 迭代地更新权重矩阵。 - 记录损失值或其他性能指标。 4. **使用SGD方法**: - 随机初始化权重矩阵。 - 设置迭代步骤和学习率。 - 对所有样本进行梯度下降。 5. **选择最佳权重矩阵**: - 根据损失值或其他性能指标,选择权重矩阵。 - 继续训练模型。 **解析梯度的推导** - 梯度函数: ∂L/∂W,其中 L 是损失函数,W 是权重矩阵。 -矩阵对标量求导: W' = -∂L/∂W。 - 矩阵对向量求导: W' = ∂L/∂W',其中 W' 是 W 的转置。 **其他优化方法** - SGD + Momentum:在下降快的时候抑制梯度的下降,在下降慢的时候鼓励梯度下降。 - Nesterov Momentum:在计算梯度时加入速度变量,可以抑制梯度的下降。 **注意** - 解析梯度方法对权重矩阵求导可比较复杂,通常使用矩阵对标量求导方法。 - 许多优化方法都具有超参数,需要根据实际问题设置合适的超参数值。

正文

UMICH CV Linear Classifiers

在上一篇博文中,我们讨论了利用损失函数来判断一个权重矩阵的好坏,在这节中我们将讨论如何去找到最优的权重矩阵
想象我们要下到一个峡谷的底部,我们自然会选择下降最快的斜坡,换成我们这个问题就是要求权重矩阵相对于损失函数的梯度函数,最简单的方法就是使用定义法:
img
我们也可以使用解析梯度,这里需要用到矩阵对向量,矩阵对标量求导的一些知识,在后面我们也会采用反向传播的方法,因为自己手算微积分毕竟比较容易出错,尤其是涉及到很多层神经网络的时候。
在作业assignment2 的第一个线性分类器的实现中,我们会使用两张种损失函数,分别是svm与softmax函数,需要我们使用解析梯度来计算,这里推荐两篇博文的推导过程,因为我这边基础也不是很好,需要再深入学习一下😭
svm:http://giantpandacv.com/academic/算法科普/深度学习基础/SVM Loss以及梯度推导/
softmax:https://blog.csdn.net/qq_27261889/article/details/82915598

计算得到梯度函数之后,我们就可以让loss沿着梯度的方向下降:
img
这里有三个超参数,是我们自己手动设置的,分别是权重矩阵初始化的策略,迭代步骤与学习率

但是对所有的样本都进行梯度下降,显然是非常耗时的一件事,所以我们一般采用sgd方法,也就是随机梯度下降:
img
这里又多了batch size与抽样方法两个超参数

但是SGD的缺点在于会导致梯度剧烈波动,有的地方下降很快有的地方下降很慢,同时也面临着陷入局部最优解的困境,所以出现了SGD + Momentum
img
img
加入一个速度变量这样在下降快的时候可以抑制梯度的下降,起到一个平衡作用
Momentum也有变体 Nesterov Momentum,与Momentum唯一区别就是,计算梯度的不同。Nesterov动量中,先用当前的速 v临时更新一遍参数,在用更新的临时参数计算梯度,就是一种向前看的思想:
img
img

另一类进行优化的方法采用dw的平方
Adagrad 与 Rmsprop
img
由于adagrad会导致下降的过快,因为有平方的存在,所以又提出了RMSProp,加入decay_rate来放缓下降速度

最常用的优化方法就是adam
img
注意这里要加入偏差修正项防止起始的时候误差太大

这里有一篇知乎的回答可供参考:https://www.zhihu.com/question/323747423

上面的方法都是采用一阶导数:
img
有时候我们也可以采用二阶导数
img
但是二阶导的计算可想而知的复杂,所以我们一般很少采用二阶导进行优化
最后是一些二阶导的讨论:
img
img
img

本次assignment A2 的第一个线性分类器 主要内容就是分别采用svm与softmax损失函数进行优化计算,也没有用到后面复杂的优化方法,就是最简单的学习率乘以dw,比较复杂的就是解析梯度的推导,可参考上面的两篇博文

与umich cv-2-2相似的内容: