Cost Function and BackPropagation
01.COST FUNCTION
-
一些定义:
-
神经网络的代价函数
02.反向传播算法(Backpropagation Algorithm)
- 使用该算法将会找到使得代价函数最小的theta值,可以使用梯度下降求迭代的方式,该算法可以很好的用来求迭代值.
-
定义:
-
将最后一层激活单元的值减去实际值可以得出最后一层的误差值,由最后一层误差值可以往前不断推出误差值。
具体方法:
给出训练样本{(x(1),y(1))⋯(x(m),y(m))},对于每个训练样本1-m:
初始化 a(1):=x(t)
使用前向传播计算出每一层的 a(l)for l=2,3,…,L
计算误差值: δ(L)=a(L)−y(t)(y表示实际的输出值)
-
反向计算出误差值:
另一种表达形式:
-
计算
与梯度下降类似的方式更新最优值。
03.Backpropagation Intuition
-
神经网络代价函数的计算公式:
-
一个分类的问题的代价函数计算如下:
-
误差因子可以由代价函数求导所得:
-
一张图理解反向传播算法:
首先由实际值和测量值计算出最后一层误差,然后由每一层的权值反向计算出前面一层的误差值。
Backpropagation in practice
01. 展开参数(Unrolling Parameters)
-
在神经网络的计算中,我们会用到如下几个矩阵,在实际的过程中,我们想要通过优化函数(比如fminuc())求出最佳theta时,传递进去的参数是一个长向量,就需要通过一系列变形实现。求出之后再变形回原来的样子:(D为误差,等于代价函数求导)
语法:
展开参数:
thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]
deltaVector = [ D1(:); D2(:); D3(:) ]
从向量中恢复:
Theta1 = reshape(thetaVector(1:110),10,11)
Theta2 = reshape(thetaVector(111:220),10,11)
Theta3 = reshape(thetaVector(221:231),1,11)
- 总结一下机器学习算法:
- 有了初始化参数向量
- 展开到一个向量中
-
带入优化函数去求值
02. 梯度下降算法检查(Gradient Checking)
-
梯度检查算法可以大致推测我们的反向传播算法是否按照我们所设想的那样进行。对代价函数的求导可以近似的等于以下这个公式,注意一旦检测出梯度下降算法是正确的就停止检查,否则算法会变得很慢。
03. 随机初始化(Random Initialization)
-
在神经网络中初始化权值参数如果都初始化为0,使得每次更新结果都是一样的。因此我们必须将权值参数初始化为随机且不一致的。
04. 训练一个神经网络
- 随机初始化权值
- 对于每一个输入运用前向神经网络得到hΘ(x(i))
- 计算出代价函数
- 利用反向传播算法计算出偏导数
- 利用梯度下降函数检查算法检验反向传播算法是正确的,然后梯度下降检测
-
利用梯度下降或者optimization函数最小化代价函数,计算出theta