深度学习及其参数更新时梯度的求解
1. 神经网络
机器学习中提到的神经网络是指神经网络学习,是机器学习与神经网络这两个学科领域的交叉部分。神经网络的定义有很多种,这里说下自己的理解:神经网络是基于大量简单模型“连接”搭建起来的学习模型,而这个简单模型就是神经元模型。在生物体内,神经元与神经元之间通过突触进行信号传递,且神经元在传递信号时,需要上一神经元的刺激信号超过阈值才能使当前神经元产生激活信号。如果按超过阈值为1,低于阈值为0(不触发信号)这种机制来看,这个和计算机中的高低电平概念很像。如此说来,生物大脑,计算机,神经网络都有相似之处,通过最基础的元件大量组合,从而产生智能。
1.1 神经元模型
最经典的神经元模型就是M-P神经元模型,这个模型接收n个其他神经元传递而来的信号,而这些信号按照一定权重进行连接,收到信号的总和会与阈值进行比较(减去阈值),然后再通过激活函数处理,产生本神经元的输出。
一个神经元有多少参数呢?一般来说,神经元存储着所有输入的权重信息,和一个本身的偏置信息,如果有n个输入,则其参数为n+1,但这里有个问题,就是后面训练时,好像我们不对偏置进行优化,在线性回归时我们也碰到这个问题,即偏置不优化对最后结果没有影响。那么对于神经网络来说,偏置是否也是不需要优化的呢?这个大家可以去查一些相关资料,目前我了解的是,有些神经网络确实不需要偏置这一项。
1.2 感知机与多层网络
感知机由两层神经元组成,一层输入,一层输出。这里输入貌似直接给数值,没有啥特殊的。输出层则是一个M-P神经元,像M-P这样的神经元,也称为“阈值逻辑单元”,感知机只有一层功能神经元。感知机能实现逻辑操作与,或,非运算,这一点又让我想起了计算机。
感知机其实只有一层网络,学习能力有限,而在输出层与输入层之间添加神经元,这些神经元称为隐藏层或者隐含层,隐藏层神经元和输出层都是具有激活函数的功能神经元。
多层前馈神经网络指包含隐藏层,每层神经元与下一层神经元全互连,神经元之间不存在同层连接与跨层连接,这种神经网络结构就是多层前馈神经网络。一般来说,神经网络学习到的模型,蕴含在连接权重和阈值之中(所以有些神经网络是需要训练阈值的)。
2. 反向传播
2.1 误差逆传播算法-BP
至今最成功的神经网络训练算法就是误差逆传播算法,目前大多算法都是使用BP算法进行训练的,而目前会说BP网络,其实就是指使用BP算法训练的多层前馈神经网络
2.2 向前传播与向后传播
- 求导的链式法则
首先需要知道链式法则,因为在求代价函数关于每层权重的偏导时会经过中间函数(中间神经元),会用到以下Case2的案例,而在分解代价函数关于权重的偏导时,会用到Case1.
- 代价函数关于权重偏导的分解
关于每层权重的导数可以分解为两部分:
其中向前传播部分在有输入数据时就可以全部算出来,由输入层数据一层层向输出层计算。而向后传递部分则需要由输出层数据向输出层传递。
- 向前传播
个人理解,这里向前传播是说根据输入层数据,依次往前计算,确定每层神经元中关于权重的偏导,毕竟这个偏导就等于输入。
- 向后传播
向后传播主要计算z值经过激活函数后,代价函数关于前面z的偏导。
如果后面一层是输出层,那么其中代价函数关于前一层的两个z值是可以直接求出的。如果不是输出层,那么这里的值也可以通过输出层那里的值一步步计算出来。
参考
西瓜书-周志华