1. 神经网络的数学模型
一个多层神经网络通常由L层神经元组成,分别为输入层、隐藏层、输出层。
输入层:神经网络的第一层,表示一列或多列矩阵的输入
输出层:神经网络的最后一层,表示网络最终的输出结果,通常是一列矩阵
隐藏层:神经网络的中间层,有L-2层,表示每一层神经元通过前向传播算法计算的结果矩阵
神经网络的数学模型从理论上可以学习模拟出任意的映射函数,通过不断的更新权值和偏重的值,最终搭建出一个预期系统的神经网络,从而可以对数据进行分类或者回归。
前向传播算法
前向传播算法是指依次向前计算相邻隐藏层之间的连接输出,直到模型的最终输出值,其特点是作用于相邻层的两个神经元之间的连接计算,前一层的输出是后一层神经元的输入。计算公式为:
f为激活函数
激活函数的作用是保证整个神经元模型为非线性,个人理解是一方面生活中大多数问题都是非线性的,用线性函数去处理问题达不到理想的效果。另一方面,若没有这个非线性函数,那么层与层之间仅通过w和b这个线性函数对数据进行估计,由于线性系统具有叠加性,无论模型有多少层,通过公式代入数值化简计算,最后一定会得到一个y=W*h+B的函数形式,也就等效于一层神经网络,单层神经网络是无法处理绝大数问题的。
神经网络中常用的几种非线性函数为:sigmod函数及其倒数:
双曲正切函数及其倒数:
3. 神经网络的优化过程
神经网络的优化步骤可以分为下面两个阶段:
(1)通过前向传播算法,通过矩阵乘法计算出输出值,并将真实值和输出值对比得到两者之间的差距
(2)通过反向传播算法,计算损失函数对模型中每个参数的梯度,通过梯度下降算法来更新每一个参数。至此我们可以看到反向传播算法的艺术为:反向计算出损失函数对每一层隐藏层的突触的梯度,并更新优化其上一层隐藏层的突触。使得神经网络每一次学习到的模型都变得更加聪明,最终得到所要求学习的最终模型。
通过梯度下降算法更新权值与偏重的公式为:
衰减学习率一般设置为:
其目的是在配合梯度下降优化的过程中,如果学习率设置过大,则容易导致模型过拟合;如果设置过小,会使得模型优化的速度变得很缓慢。加入衰减因子和学习次数来计算模型每次学习的学习率,这样就会使得刚开始时学习率较大,可以快速的逼近目标,随着学习次数的增加,学习率依次降低,避免过拟合的情况发生。
BP算法核心是求解代价函数C相对于权重w和偏置b的偏导,即改变参数w和b时代价函数C的变化程度,揭示改变w和b如何影响网络的整体行为。
梯度可看作该神经元训练误差的表征。即梯度大表明还没训练好,稍微扰动下神经元激励就能造成代价C的较大变化;梯度小表明训练较好,扰动神经元的激励值对代价C的改变影响微弱。
BP算法四大公式(一)
输出层误差公式(An equation for the error in the output layer)
输出层误差等于代价函数C相对于输出层第j个神经元激励后的变化程度乘以激励相对于加权输入的变化程度
BP算法公式(二)
由后层误差推导本层误差的公式(An equation for the error in terms of the error in the next layer)
知道第l+1层的误差后,通过相邻两层之间的权值矩阵w,将误差回传就能得到第l层的误差。所以该公式表达的意思为第l层的误差等于第l+1层的误差乘以它们之间的权值矩阵w再乘以第l层激励相对于加权输入的变化程度。
有了公式1和公式2,就能推算出网络每一层的误差。
BP算法公式(三)
代价函数C相对于网络中任意偏置(b)梯度(即变化率)的公式(An equation for the rate of change of the cost with respect to any bias in the network)
BP算法公式(四)
由此,得到BP算法步骤
- 输入训练样本集
- 设置激励函数,利用前向传播算法得到各层加权输入和输出
- 利用公式(一)计算输出层误差
- 利用公式(二)由后层向前计算回传误差
- 利用公式(三)(四),求取w和b的梯度,并利用梯度下降算法更新w和b
BP算法只需要一次网络前传和一次误差回传,两次复杂度相同,极大的提高了梯度计算效率。