梯度下降法与反向传播
2017-11-09 20:16
639 查看
梯度下降法与反向传播
主要内容:梯度下降法
最优化
梯度下降
反向传播
梯度与偏导
链式法则
直观理解
Sigmoid 例子
1. 梯度下降(Gradient descent)
初始权重不要都置为0,可用高斯分布。 随机初始化的目的是使对称失效。如果所有权重初始化为相同初始值,那么所有的隐藏层单元最终会得到与输入值相关的、相同的函数。import numpy as np W = np.random.randn(m,n) * 0.001 # 正态分布随机数
在多维变量函数中,函数在某一点的切线的斜率(存在多个,如三维中所有切线组成一个切面)就是方向导数;梯度是一个矢量,其方向上的方向导数最大,其大小正好就是此最大方向导数。
数值梯度:由导数的定义来求解梯度,再迭代更新。特点是不容易出错,但是计算复杂,速度慢。
grad=f(x+h)−f(x)h
解析梯度:由损失函数计算对应的偏导解析式,再由解析式迭代计算梯度。 特点是计算速度很快,但是容易出错。
∂f∂x
梯度下降迭代:
# 很多神经网络库的核心迭代代码 while True: weights_grad = evaluate_gradient(loss_fun,data,weights) weights += - step_size * weights_grad # 梯度下降更新权重参数
梯度检查\检测:可以选取部分样例先计算解析梯度和数值梯度,对比较结果和校正,然后采取解析梯度大胆进行解析计算,这个过程就叫做梯度检查。
Mini-Bacth: 对整个训练数据集的样本都算一篇损失函数,以完成参数的迭代是一件非常耗时的事情。通常的做法是采样出一个子集在其上计算梯度。
while True: data_batch = sample_training_data(data,256) # 抽样256个样本作为一个batch weights_grad = evaluate_gradient(loss_fun,data_batch,weights) weights += - step_size * weights_grad # 更新权重参数
2. 反向传播(Backpropagation)
链式法则:若函数 u=ψ(t) , v=ϕ(t) 在点 t可导, z=f(u,v) ,有∂z∂t=∂z∂u∂u∂t+∂z∂v∂v∂t
Sigmoid 函数:
f(x)=11+e−x
其导数:
f′(x)=f(x)(1−f(x))
2.1 神经网络推导
前向传播
如图所示,是一个神经网络模型,每个圆圈代表一个神经元,标上 “+1” 的圆圈是偏置点(bias)。用 nl 表示神经网络的层数,此图中 nl=3 ,将第 l 层记为 Ll ,有L1为输入层(input layer), Lnl为输出层(output layer),其他层为隐藏层(hidden layer)。
神经网络的训练参数为 (W,b) ,此处有 (W,b)=(W(1),b(1),W(2),b(2)) , 其中 W(l)ij 表示第 l 层第 j单元与第 l+1 单元之间的联结参数。本图中有 W(1)∈R3×3 , W(2)∈R3×3 。
我们用 z(l)i 表示第 l 层第 i单元输入加权和(包括偏置单元),比如
z(2)i=∑j=1nW(1)ij+b(1)i
更一般的有
z(l)i=∑j=1nW(l−1)ija(l−1)j+b(l−1)i,l≥2
用 a(l)i 表示第 l 层第 i单元的激活值(输出值)。 当 l=1 时,有 a(1)i=xi ,对所有a(l)i 有
a(l)i=f(z(l)i)=f(∑j=1nW(l−1)ija(l−1)j+b(l−1)i),l≥2
神经网络用 hW,b(x) 来计算输出结果。本图中的计算如下:
这里如果将 a、z、f(⋅) 向量化处理,即
f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
则上面的推导可以简化为
更一般的,有
上面的计算步骤叫做神经网络的前向传播 。
反向传播
设有一个包含 m 个样例的固定样本集 {(x(1),y(1)),⋯,(x(m),y(m))} 。使用批量梯度下降法(Batch Gradient Descent) 来求解神经网络。具体地,单个样例 (x,y) ,其代价函数为J(W,b;x,y)=12||hW,b(x)−y||2
那么整体的代价函数为:
J(W,b)=[1m∑i=1mJ(W,b;x(i),y(i))]+λ2∑l=1nl−1∑i=1sl∑j=1sl+1(W(l)ji)2=[1m∑i=1m(12||hW,b(x)−y||2)]+λ2∑l=1nl−1∑i=1sl∑j=1sl+1(W(l)ji)2
上面的 J(W,b) 定义中第一项是均方差项,第二项是一个正则化项,目的是减小权重的幅度,防止过拟合。
权重衰减参数 λ 用于控制公式中两项的相对重要性。
我们的目标是针对参数 W 和 b 求最小的代价 J(W,b) 。要求解神经网络,首先需使用上文提到的随机初始化方法对参数初始化,然后利用梯度下降法迭代求解。
梯度下降法 中每次迭代都按照如下公式对 W 和 b 进行更新:
W(l)ijb(l)i=W(l)ij−α∂∂W(l)ijJ(W,b)=b(l)i−α∂∂b(l)iJ(W,b)
其中 α 是学习速率,关键步骤是计算偏导数。下面使用反向传播算法来计算偏导数。
未完待续。。。。
相关文章推荐
- 梯度下降法与反向传播
- bp网络反向传播梯度下降修改权值
- PyTorch: 梯度下降及反向传播
- 神经网络之梯度下降与反向传播(上)
- 神经网络之梯度下降与反向传播(下)
- BP神经网络,BP推导过程,反向传播算法,误差反向传播,梯度下降,权值阈值更新推导,隐含层权重更新公式
- 反向传播与梯度下降的基本概念
- 梯度下降法和误差反向传播推导
- 梯度下降法与反向传播
- 梯度下降与反向传播详解
- 神经网络之梯度下降法和反向传播BP
- 【深度学习】梯度下降和反向传播
- 三、梯度下降与反向传播(含过程推导及证明)
- Python神经网络代码实现流程(三):反向传播与梯度下降
- 深度学习第三次课-梯度下降与反向传播
- 梯度下降和反向传播
- AI大事件 | Geoffrey Hinton决定抛弃反向传播_预期策略梯度算法
- AI大事件 | Geoffrey Hinton决定抛弃反向传播,预期策略梯度算法
- CNN中的梯度的求法和反向传播过程
- 【深度学习技术】python 反向传播求梯度