cs231n 课程笔记 学习笔记#002

最优化

原文:http://cs231n.github.io/optimization-1/python

参考翻译:https://zhuanlan.zhihu.com/p/21360434?refer=intelligentunitgit

最优化是寻找能使得损失函数值最小化的参数W的过程。github

与随机搜索和随机本地搜索相比,显然跟随梯度是最好的策略。web

梯度计算

两种方法:数值梯度法(较慢但实现简单),分析梯度法(计算迅速结果准确)网络

数值梯度法:

公式:svg

\displaystyle\frac{df(x)}{dx}=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}

代码:模块化

def eval_numerical_gradient(f, x):
    ''' - f 是只有一个参数的函数 - x 是计算梯度的点 '''
    fx = f(x)
    grad = np.zeros(x.shape)
    h = 0.00001

    it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
    while not it.finished:
        ix = it.multi_index
        old_value = x[ix]
        x[ix] = old_value + h
        fxh = f(x) # compute f(x+h)
        x[ix] = old_value # 存到前一个值中(重要)

        grad[ix] = (fxh - fx) / h
        it.iternext()

       return grad

实际中用中心差值公式[f(x+h)-f(x-h)]/2h效果较好。函数

分析梯度法

用SVM的损失函数为例:优化

L_i=\displaystyle\sum_{j\not =y_i}[max(0,w^T_jx_i-w^T_{y_i}x_i+\Delta)]

w_{y_i}进行微分获得:spa

\displaystyle\nabla_{w_{y_i}}L_i=-(\sum_{j\not=y_i}1(w^T_jx_i-w^T_{y_i}x_i+\Delta>0))x_i

公式看起来复杂,其实代码实现时只须要计算没有知足边界值的分类的数量,而后乘以xi就是梯度了。

对于j\not =y_i的梯度是:

\displaystyle\nabla_{w_j}L_i=1(w^T_jx_i-w^T_{y_i}x_i+\Delta>0)x_i

梯度降低

程序重复计算梯度并对参数进行更新。

小批量数据梯度降低

训练数据可能达到百万级量级,若是计算整个训练集来得到一个参数的更新就太浪费了,一个经常使用方法是计算训练集中的小批量数据。

若是每一个批量中只有1个数据样本,则被称为随机梯度降低Stochastic Gradient Descent, 简称SGD。可是相对少见,有时用来指代小批量数据梯度降低。小批量数据的大小是一个超参数,通常使用2的指数(32,64, 256),由于运算会更快。

反向传播

原文:http://cs231n.github.io/optimization-2/

参考翻译:https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

核心问题:给定函数f(x),计算函数关于x的梯度。

在神经网络中的f对应损失函数,输入x包含训练数据和神经网络权重。

理解梯度

函数关于每一个变量的导数指明了整个表达式对于该变量的敏感程度。

梯度实际上还是一个向量。

利用链式法则可计算复合函数的梯度。

理解反向传播

反向传播是一个局部过程。整个计算过程当中,每一个门单元会获得一些输入并当即计算两个东西:本身的输出值和这个输出值关于输入的局部梯度。完成这两件事是彻底独立的,不须要知道计算线路中的其它细节。在反向传播时,才根据链式法则计算整个网络的输出关于这个门的各个输入值的梯度。

对下面这个简单例子来讲:这里写图片描述

首先赋给x,y,z绿色的值。而后加法门计算输出q(3),并分别计算输出q关于x和y的梯度(都是1)。接着乘法门计算输出f的值,f关于q的梯度(z=-4),关于z的梯度(q=3)。而后反向传播,f关于x的梯度为f关于q的梯度乘以q关于x的梯度(-4*1=-4),关于y的梯度同理。

模块化:能够把sigmoid这样的函数也当作一个门

全部概念也都适用于矩阵和向量操做,记得梯度的尺寸确定和对应的变量矩阵尺寸同样(如dW和W的尺寸相同)。能够根据这一点推导梯度的表达。