
一、基础介绍
在学习神经网络时,知道了神经网络是一个多层的结构。它的优势在于可以利用反向传播的方式对整体的网络参数进行调优。这才更象人类学习的过程,不断摸索着完善并最终达到学会的目的。但是,要想明白什么是反向传播,就得先明白什么是前向传播。
二、前向传播
所谓前向传播,就是人们熟知的数据流。即从输入到处理到结果的这么一个数据处理的流程。只不过换到神经网络后,中间的处理,就是N层的网络。它是神经网络最基础也是最常见的预测推理过程。也最符合人们的朴素的认知过程。毕竟人们从小接触的事务处理都是这样进行的。
前向传播不管过多少层,每一层的处理一般为分两种情况:
- 线性处理即线性加权求和
- 非线性激活即引入激活函数处理复杂情况
也就是说,线性机制用来处理线性的变化(维度、组合及空间等),而非线性机制负责处理前者变化的复杂度扩展和模拟。
三、反向传播
有了前向传播,再来描述反向传播,就很好理解了。前向传播是负责的正向数据处理,而反向传播就是反着方向进行数据处理呗。
反向传播,为神经网络提供了一种高效的训练方式,是现代深度学习的一个非常重要的概念。大家都知道,无论是人还是AI在学习过程中,总不能一蹴而就。在AI的前向传播中,无论是线性变化还是引入激活函数,都无法保证数据结果的必然准确性。它很可能存在着误差,这时候,就可以引入一个损失函数,计算相关的误差并将结果返回到输入用来更新网络中的各个权重和偏置等参数。这个过程就是反向传播。
这其中一个重要的问题就是权重和偏置的梯度计算。然后再根据相关的公式,使用优化器对权重和偏置进行更新了。当然,在实际的神经网络中,隐藏层一般会有多层,所以需要从输出层反向逐层的计算损失函数对每个参数的梯度,最后利用优化器对相关权重和偏置进行更新,从而达到尽可能的减小误差逼近真实结果。
反向传播其实就是微积分中链式法则(链式求导)。反向传播的优势在于效率高。但它存在着梯度消失或梯度爆炸以及局部最优和鞍点的问题。这都需要开发者慎重处理。
四、分析
可以这样理解,前向传播计算网络输出和损失;反向传播以输出层结果为基础,逐层计算梯度并存储中间结果;而最后的参数更新基于梯度下降优化神经网络模型。一般分为以下几步:
利用损失函数计算损失
通过前向传播得到预测输出然后使用损失函数来衡量预测输出与真实标签误差并得到标题损失值。反向传递误差
从输出层开始,反向对每层计算损失函数输出的梯度,并利用链式法则逐层前后传递。对于输出层是损失函数对输出层激活值求导;对于隐藏层是后一层传递回的误差与连接这两层的权重矩阵相乘,再乘以丁丑激活函数的层数得到。以此推进所有隐藏层。梯度计算
在获取每一层的误差后,就可以计算相关的权重和偏置的梯度了。权重的梯度等于前一层的激活值与丁丑反向传递回的误差项的乘积;而偏置梯度则等于丁丑反向传递回来的误差项。更新参数
最后,使用计算出的梯度和一个优化算法(优化器)来更新神经网络中的所有的权重和偏置
不过在实际的开发框架中,都存在着自动完成复杂的链式求导的过程即自动微分,这也是框架存在的意义么,把一些复杂的重复的工作体贴的给做好,开发者只要使用即可。
五、总结
专业的数学公式推演,推荐大家去看专业的资料和书籍。这里只是为大家提供一个相关的入门的知识普及,不需要大家掌握相关的数学知识。特别对于一些头疼于高数的同学们,就更是如此了。
夜雨聆风