损失函数 梯度 优化

损失函数 梯度 优化

上次看到了损失函数究竟是什么样子的,这次我们就来看看如何针对损失函数进行优化。首先按照CS231n课程的内容,我们导入了一个情境,在一个山地区域中我们想要到达地势最低点,那该怎么办。

第一种想法

就像吃鸡游戏一样,我在随机地点降落无数次,找到这一批随机地点中最低的,把它当作最小值。首先,这个的耗时实际取决于你降落的次数;其次,这玩意儿真的效果不好,而且不难看出,这种想法带来的结果有点辣鸡。

第二种想法

有高等数学基础的筒子举手了!“我们可以随机空投到一个点,然后从这个点出发,不断的往梯度的反方向出发,这样一定能带来一个极小值!”也就是说,往山地的倾斜程度最大的方向走。众宾皆欢,至少这样走,我们确实有方向感了。事实也的确证明,这个想法产生的结果应该是不错的。

现在我们回忆一下损失函数部分所学的知识,在计算机视觉中,针对同一样本,假设使得L=0的合理的权值矩阵或者说权值向量是W,那能满足L=0的权值矩阵其实是不唯一的,比如W,2W,3W,……它们的L应该是一样的,都是0。

那么就让我们按第二种想法算一算吧!

数值梯度 Numerical Gradient

比如我有一个CIFAR-10,也就是有60000张32*32的三通道图片。那向量规模应该是3072,我们每次给它们中的一个权值一个小小的增量。(这个增量称为学习率,之后还会再解释)
然后求算前后L的变化量,从而就可以算出在这个权重的方向上L的有限差分逼近,它与偏导数相似,各方向组合起来就是梯度向量了。那我们每求算更新一次实际上是非常耗时间的,因此这样的方法不可行。此外,你还需要注意到这里的有限差分逼近产生的向量并不是真正的梯度,它只是梯度的一个近似值,所以精确度并不佳。
上述方法求出的梯度称为数值梯度。

解析梯度 Analytic Gradient

那么为了让速度和精确度提高,我们寻求其它的求解梯度的方案。我们可以使用微积分已有的公式直接求偏导数,然后代入自变量即可,这样一方面可以十分的精确,另一方面用这个公式可以对数据slicing,速度会有显著提升。
利用微积分法则求解出的梯度称为解析梯度。
Gradient Check
一般情况下,如果你对自己的微积分学不是很自信的话,还可以选取一小批数据,利用数值梯度进行检验,这样可以在相对少的时间检验解析梯度产生的公式是否正确。
在这里插入图片描述

Vanilla Gradient Descent

直接利用所有的图片进行训练的这个方案叫做普通梯度下降法,不过它好像没有VGD的简称,百度后发现搜索结果有点奇怪。然后大致的代码框架比较精简:

# Vanilla Gradient Descent
while True:
	weights_grad = evaluate_gradient(loss_fun, data, weights)
	weights += -step_size * weights_grad
Stochastic Gradient Descent (SGD)

像CIFAR-10里面的图片有60000张,这个数量其实还好。但是如果有1E8的图片数量,要迭代所有的测试集从而更新一次W,这就确实有点耗时间了,那么为了更快速的求解它们对应的合适的权重矩阵W,如何改用梯度下降法是本节要解决的问题。

耗时的原因在每次这个算法被迭代的图片太多了,因此,我们使用随机梯度下降(SGD,有这个简称)。我们在N个训练集中,选取一个minibatch,它的规模取决于你的要求,一般是2的整数次幂,32/64/128/256为常见大小,每次迭代中随机选取一小部分训练样本,可以有效减小时间耗量,也可将其看作是对真实数值期望的蒙特卡洛估计。

# Vanilla Minibatch Gradient Descent
while True:
	data_batch = sample_training_data(data, 256)
	weights_grad = evaluate_gradient(loss_fun, data_batch, weights)
	weights += -step_size * weights_grad
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值