03.最优化-求梯度

  • 损失函数可视化
  • 最优化
    • 有限差值法求梯度
    • 微分法求梯度:softmax为损失函数时推导

前面介绍了两部分:
1. 评分函数:将原始图像像素映射为分类评分值
2. 损失函数:根据评分函数和训练集图像数据实际分类的一致性,衡量某个具体参数集的质量好坏。
那么寻找到能使损失函数值最小化的参数的过程就是最优化 Optimization。

损失函数可视化

损失函数L可以看作是权重W的函数,在CIFAR-10中一个分类器的权重矩阵大小是[10,3073],即 L(W1,W2,....,W10) L ( W 1 , W 2 , . . . . , W 10 ) ,对其中某一个分类器 Wi W i 有3073个参数,想要得到 L L 关于 W i 的可视化很难。
但是方法还是有的,随机生成一个权重矩阵W,并沿着此方向计算损失值, L(W+αW1) L ( W + α W 1 )

具体参考这里!
还有这样一篇paper!

总而言之,就是将高维空间压缩到二维, Wi[1,3073] W i [ 1 , 3073 ] 转换到 [1,1] [ 1 , 1 ] 然后在此基础上,画出loss关于它的值。
如果是压缩到三维,就是[1,3073]->[1,2],那么完整的loss就是这个形状的3073/2*10维的版本。

最优化Optimization

在数学上我们已经知道loss下降最快的方向就是梯度方向(gradient)。

有限差值法计算梯度

公式: df(x)dx=limh0f(x+h)f(x)h d f ( x ) d x = lim h → 0 f ( x + h ) − f ( x ) h
下面代码是一个输入为函数f和向量x,计算f的梯度的通用函数,它返回函数f在点x处的梯度:

def eval_numerical_gradient(f, x):
  """  
  一个f在x处的数值梯度法的简单实现
  - f是只有一个参数的函数
  - x是计算梯度的点
  """ 

  fx = f(x) # 在原点计算函数值
  grad = np.zeros(x.shape)   ##
  h = 0.00001

  # 对x中所有的索引进行迭代
  it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
  while not it.finished:

    # 计算x+h处的函数值
    ix = it.multi_index
    old_value = x[ix]
    x[ix] = old_value + h # 增加h
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值