神经网络包含前向传播与反向传播。
1 代价函数与反向传播
1.1 代价函数
二类别分类:0 或 1,记
k=2
多类别分类:
Rk
,记
k>2
神经网络的代价函数,与逻辑回归的代价函数类似,记做
注意点:
神经网络中的
hθ(x)
的定义形式未知,或可参考
hθ(x)=g(θx)
(逻辑回归)。
1.2 反向传播算法(BP)
求解神经网络代价函数的梯度可采用梯度算法或反向传播算法。
计算神经网络代价函数的最小值,即
要求计算代价函数的值及其梯度值,即
其中,定义梯度值
1.3 反向传播直观的表达
2 反向传递实践
2.1 实现:参数展开
参数展开便于变量的存储与运算,实质是使“矩阵与向量”转换方便。
2.1.1 高级优化算法
代价函数与优化方法的形式:
Function [jval, gradient] = costFunction(theta)
…
optTheta = fminunc(@costFunction, initialThetam options)
其中 gradient∈Rn+1 , theta∈Rn+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ε,ε=10−4.
2.2.2 向量 θ
当
这种数值偏微分的近似计算方法,计算量很大,不适用于神经网络中的梯度计算。它的代码表达方式为
thetaPlus(i) = theta(i) + EPSILON;
thetaPlus(i) = theta(i) - EPSILON;
gradApprox(i) = (J(thetaPlus) – J(thetaPlus)) / (2*EPSILON);
检查 gradApprox≈DVec ,即对比数值梯度与偏导梯度,当偏导梯度近似数值梯度时,则可认为梯度的反向传递计算正确。
该方法可以作梯度验证(Gradient checking)。
2.3 随机初始化
θ
参数都初始化为 0 或者同一数,可能不利于参数学习(即求解
随机初始化是破坏对称性的一种方法,即初始化
θ(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 训练一个神经网络
- 输入单元: x(i) ,特征向量
- 隐藏单元:层数与单元个数
- 输出单元: y ,类别
例如
算法的训练步骤:
- 随机初始化 θ
- 前向传播求解
hθ(x(i)) - 计算代价函数 J(θ)
- 反向传播计算梯度 ∂∂θ(l)jkJ(θ)
- 梯度检查 ∂∂θ(l)jkJ(θ) ,采用数值计算的方法来检验(检验后,舍弃该步骤);
- 采用梯度下降法或高级的优化算法(基于反向神经网络求解梯度)
计算 minθJ(θ)
备注: J(θ) 会是一个非凸函数,但局部极小值对训练结果的影响并不是很大。
3 神经网络的应用
应用:基于图像处理的自动驾驶车辆。