Machine Learing by Andrew Ng (5) --神经网络学习与反向传播算法
1.引入-非线性假设
在实际的机器学习问题中,一个训练集的特征数量十分庞大,若仍采用我们先前所学习的算法将产生过多的高阶多项式,大大减缓算法的运行速度,在正则化过后易造成欠缺拟合。因此,我们需要考虑新的想法来制作复杂的非线性分类器。
Example:
在图像识别的问题中,计算机通过像素点强弱值构建的数值矩阵作为特征值运算处理,一张仅50*50的灰度图片就要产生如此多的多项式。
2.神经元与大脑
大脑的不同皮层控制着人类不同的生理功能,想象将“外接设备”连接到相应的大脑皮层上,该设备是否会习得相应的功能。
Model representation-1
神经网络分输入层,输出层和中间的隐藏层。每层间运算的数据传递都拥有着“权重”(即特征参数值),每一项关联下一层的“神经元”也被称为**项。
偏置单元的引入是为了表现运算的完整性。(之前的第一个特征X_0=1)
以下是每个参数传递的具体过程和字符表意。(以Logistic回归为例)
Model representation-2
为了实现向量化运算,我们采用z(i)来简化运算,具体如下。
3.例子与直觉理解
Example 1
实现基本的二进制逻辑运算是必不可少的功能,通过设置合适的Theta值可以达到我们的预期结果。
以下是逻辑与,或,非运算的演示。
Example 2
如何结合基础运算在神经网络中表示更复杂的运算?
XNOR表示NOT XOR(异或)。
4.多元分类(One-vs-all)
一个优秀的神经网络不仅要准确的进行分类,更要有进行多元分类的功能。
科学家们采用不同的输出向量来表示输出的含义。
5.代价函数
在这个多元分类的问题中,我们如下定义神经网络学习过程中的代价函数。
每一条运算路径产生的代价都要包含。
6.反向传播算法
δ意思是该结点的偏移程度。
最后一层即输出层的偏移程度由向前传播算法求出来的对应**值a- 训练集 的结果
剩下每层的δ计算方法,g‘(z(3))由微积分可以求解,结果为该层**值a.*(1-a),其中.*为矩阵元素直接相乘。
δ(1)不存在因为第一层为输入层不会有偏差。
以上为反向传播算法的实现过程。
首先初始化每一个“神经元”的Δ为0,然后进行前向传播运算,得出每个activation的值,再由输出层的δ值往前推算,得出每一层中每一个“神经元”的δ值(即δ_ij)。
7.梯度检测
数值梯度检测的方法如下。
采用“两点法”能较为准确的估出代价函数每一处的导数,并与在反向传播中得出的导数进行近似比对,从而判断时下反向传播的可靠性。
8.随机初始化
若将所有权值设为0,在前向传播过程中将会不断产生相同的activation,这显然不符合我们“学习”的宗旨。
Tip:初始化中的ε与求导过程中的毫无关联。