神经网络的学习 机器学习基础(4)

来源:互联网 发布:php gtk 还有人维护吗 编辑:程序博客网 时间:2024/05/24 04:30

神经网络包含前向传播与反向传播。

1 代价函数与反向传播

1.1 代价函数

二类别分类:0 或 1,记 k=2
多类别分类: Rk,记 k>2

神经网络示意图

神经网络的代价函数,与逻辑回归的代价函数类似,记做

神经网络代价函数

注意点:
神经网络中的 hθ(x) 的定义形式未知,或可参考 hθ(x)=g(θx)(逻辑回归)。

1.2 反向传播算法(BP)

求解神经网络代价函数的梯度可采用梯度算法或反向传播算法。
计算神经网络代价函数的最小值,即

min J(θ)

要求计算代价函数的值及其梯度值,即
J(θ)θ(l)ijJ(θ)

其中,定义梯度值
D(l)ij=θ(l)ijJ(θ)

反向传播算法

1.3 反向传播直观的表达

前向与反向传播

2 反向传递实践

2.1 实现:参数展开

参数展开便于变量的存储与运算,实质是使“矩阵与向量”转换方便。

2.1.1 高级优化算法

代价函数与优化方法的形式:

Function [jval, gradient] = costFunction(theta)…optTheta = fminunc(@costFunction, initialThetam options)

其中 gradientRn+1thetaRn+1

神经网络模型(L=4),

θ(1),θ(2),θ(3)matrices(Theta1,Theta2,Theta3)

D(1),D(2),D(3)matrices(D1,D2,D3)

2.1.2 例子

S1=10,S2=10,S3=1

θ(1)R10×11,θ(2)R10×11,θ(3)R1×11

这里写图片描述

2.2 梯度检验

神经网络BP的梯度计算相对复杂,可通过梯度检查的方法来避免梯度计算上出现的小错误,用于确认反向梯度计算是否正确。该方法仅用于测试,系统正式使用时应关闭。

2.2.1 梯度的数值计算

梯度检验

ddθJ(θ)J(θ+ε)J(θε)2ε,ε=104.

2.2.2 向量 θ

θRn,即 θ=[θ1,,θn]

θiJ(θ)J(θ1,,θi+ε,,θn)J(θ1,,θiε,,θn)2ε

这种数值偏微分的近似计算方法,计算量很大,不适用于神经网络中的梯度计算。它的代码表达方式为

thetaPlus(i) = theta(i) + EPSILON;thetaPlus(i) = theta(i) - EPSILON;gradApprox(i) = (J(thetaPlus) – J(thetaPlus)) / (2*EPSILON);

检查 gradApproxDVec,即对比数值梯度与偏导梯度,当偏导梯度近似数值梯度时,则可认为梯度的反向传递计算正确。

该方法可以作梯度验证(Gradient checking)。

2.3 随机初始化

θ 参数都初始化为 0 或者同一数,可能不利于参数学习(即求解 θ),这样的问题可以通过破坏对称性(Symmetry Breaking)来改善。
随机初始化是破坏对称性的一种方法,即初始化 θ(l)ij[ε,ε] 的任意值,其代码表达方式为

Theta1 = rand(10,11) * (2*INIT_EPSILON) – INIT_EPSILON;Theta2 = rand(1,11) * (2*INIT_EPSILON) – INIT_EPSILON;

2.4 总体回顾

2.4.1 训练一个神经网络

3层神经网络

  1. 输入单元:x(i),特征向量
  2. 隐藏单元:层数与单元个数
  3. 输出单元:y,类别

例如 y{1,2,3,,n}

y=1000n×1or0100n×1or

算法的训练步骤:

  1. 随机初始化 θ
  2. 前向传播求解 hθ(x(i))
  3. 计算代价函数 J(θ)
  4. 反向传播计算梯度 θ(l)jkJ(θ)
  5. 梯度检查 θ(l)jkJ(θ),采用数值计算的方法来检验(检验后,舍弃该步骤);
  6. 采用梯度下降法或高级的优化算法(基于反向神经网络求解梯度)
    计算 minθJ(θ)
    备注:J(θ) 会是一个非凸函数,但局部极小值对训练结果的影响并不是很大。

3 神经网络的应用

应用:基于图像处理的自动驾驶车辆。

1 0