CS231n:最优化笔记

最优化Optimization

最优化是寻找能使得损失函数值最小化的参数W的过程。
策略#1:一个差劲的初始方案:随机搜索
策略#2:随机本地搜索
策略#3:跟随梯度

(比较简单不再赘述)

梯度计算

梯度公式
在这里插入图片描述

1. 数值梯度法(慢and简单,不适合大规模数据)
根据上面的公式计算梯度。
举个例子实际应用,例如计算权重空间某些随机点上CIFAR-10的损失函数的梯度。
先计算一个随机权重向量的梯度,梯度告诉了我们损失函数在每个维度上的斜率,于是规定不同步长后,更新权重向量的位置,重新计算损失函数。

 # 查看不同步长的效果
for step_size_log in [-10, -9, -8, -7, -6, -5,-4,-3,-2,-1]:
  step_size = 10 ** step_size_log
  W_new = W - step_size * df # 权重空间中的新位置
  loss_new = CIFAR10_loss_fun(W_new)
  print 'for step size %f new loss: %f' % (step_size, loss_new)

步长:梯度指明了函数在哪个方向是变化率最大的,但是没有指明在这个方向上应该走多远。

2. 分析梯度法(快and易错)
在实际操作时常常将分析梯度法的结果和数值梯度法的结果作比较,以此来检查其实现的正确性,这个步骤叫做梯度检查
在这里插入图片描述
在这里插入图片描述
其中是一个示性函数,如果括号中的条件为真,那么函数值为1,如果为假,则函数值为0。在代码实现的时候比较简单:只需要计算没有满足边界值的分类的数量(因此对损失函数产生了贡献),然后乘以Xi就是梯度了。

梯度下降

概念:程序重复地计算损失函数的梯度然后对参数进行更新

# 普通的梯度下降

while True:
  weights_grad = evaluate_gradient(loss_fun, data, weights)
  weights += - step_size * weights_grad # 进行梯度更新

小批量数据梯度下降(Mini-batch gradient descent):

随机梯度下降(Stochastic Gradient Descent 简称SGD)
(没细讲)

笔记参考来源:https://zhuanlan.zhihu.com/p/21930884

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值