您的位置:首页 > 理论基础 > 计算机网络

梯度下降法与反向传播

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)

其中 α 是学习速率,关键步骤是计算偏导数。下面使用反向传播算法来计算偏导数。

未完待续。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息