机器学习-神经网络反向传播算法

反向传播算法

我们之前的线性回归和逻辑回归算法都是通过找到一个损失函数,通过某种方法最小化损失函数以不断修正参数,最后获得我们想要的模型。这基本上是机器学习的通用的流程

对于神经网络来说,我们同样要找到损失函数,最小化损失函数进而达到修正参数的目的

反向传播算法就是完成这一功能的算法

首先还是要给出损失函数
这是之前逻辑回归的损失函数,假定我们神经网络的**函数用的是sigmoid函数,后面的那项是正则化项(防止过拟合)
机器学习-神经网络反向传播算法

不同之处是对K项求和,K指的是输出单元的个数(K>2),也就是说,对每个输出单元我们都要把它求和(这里的输出单元是只有0,1组成的向量)
对正则化的式子,处理方式是对i,j,l求和,也就是对网络中所有的参数求和 (这里不包含偏置项,i都是从1开始,若包含偏置项则i从0开始)
机器学习-神经网络反向传播算法
我们的目标仍然是最小化损失函数J(θ)
同时我们也需要算出J(θ)以及每个参数对应的偏导
机器学习-神经网络反向传播算法

接下来我们先初始化参数,然后用正向传播算出网络中每个节点
如下图
机器学习-神经网络反向传播算法
然后我们用反向传播(backpropagation)算法
首先需要明确几个定义
加入我们又4层(layer)
δ初始化为0
机器学习-神经网络反向传播算法
对于输出层的每个节点,我们用下面的公式计算误差
即δ=正向传播得到的值-真实值
机器学习-神经网络反向传播算法

然后我们再计算前几层的误差项
这里的g丿是求导
点乘就是求内积
这里的δ表示向量
机器学习-神经网络反向传播算法
然后从1-m(m表示数据总数)迭代,△是大写的δ
我们不断更新△的值
机器学习-神经网络反向传播算法

同样,每层的向量误差△可以这样表示:
机器学习-神经网络反向传播算法

最后我们可以通过这些误差项算得D
这些D项就是J(θ)的偏导数(这里不作证明)
机器学习-神经网络反向传播算法

深入理解

δ实际上就是cost(i)关于zj(l)的导数
机器学习-神经网络反向传播算法
机器学习-神经网络反向传播算法

我们再来看看前向传播
每个节点得到的值经过sigmoid函数之后由z得到a,最后得到最终结果
机器学习-神经网络反向传播算法
反向传播其实跟正向传播一样,我们先算的最后一层的误差δ4
然后根据绿线的权重算得δ2(3)= 绿线的权重 × δ1(4)
同理δ2(2)= 粉色权重 × δ1(3)+红色权重 × δ2(3)
看到没有,就是和正向传播一样,只要知道最后一层的误差值就可以往前推了
机器学习-神经网络反向传播算法

梯度检测ε

梯度检测实际上就是对某个点求导,用导数的定义人工求导,ε就是一个趋于无穷小的数,这里我们取10^-4就行了。当然,人工计算导数的目的就是和我们求得偏导进行比较,如果相差不大的话表示我们的计算过程是没有问题的
机器学习-神经网络反向传播算法

机器学习-神经网络反向传播算法
总结一下:

1.随机初始化参数
2. 前向传播算出每个节点的值
3. 计算损失函数J(θ)
4. 进行反向传播计算J(θ)中每个θ的偏导
5. 用梯度检测计算导数和之前求得导数进行比较,并停用梯度检测
6. 用梯度下降等优化算法来最小化J(θ) (这个函数可能只能求到局部最优解,但结果一般还不错)