BPNN
BPNN被认为是最常用的预测方法,BPNN模型的一般结构如下图所示,它由输入层、隐层和输出层三层组成,其中隐层在输入层和输出层之间传递着重要的信息。
BPNN总是由一个或多个隐藏层组成,从而允许网络对复杂功能进行建模。它主要由两个过程组成:正向信息传播和误差反向传播。这三层之间的数学关系可以表示如下:
输入层到隐层:
隐层到输出层:
其中:ym和yj分别表示输入层和隐藏层的输入;yt表示点t的预测值;μjm和λoj表示输出层和隐藏层的网络权重;μj和λo是隐藏层和输出层的阈值;n和I是输入层和隐藏层的节点数;fI和fo分别表示隐藏层和输出层的激活函数。在大多数情况下,通常使用逻辑函数和双曲线函数作为隐含层激活函数fI,而经常使用线性函数作为输出层激活函数fo。
前向传播
先讲前向传播,输入a[l-1],输出是a[l],缓存为z[l];从实现的角度来说我们可以缓存下w[l]和ܾb[l],这样更容易在不同的环节中调用函数。
前向传播的步骤可以写成:
向量化实现过程可以写成:
前向传播需要输入A[0]也就是X来初始化;初始化的是第一层的输入值。a[0]对应于一个训练样本的输入特征,而A[0]对应于一整个训练样本的输入特征,所以这就是这条链的第 一个前向函数的输入,重复这个步骤就可以从左到右计算前向传播。
反向传播
输入为da[l],输出为da[l-1],dw[l],db[l]
反向传播的步骤可以写成:
式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向函数。
向量化实现过程可以写成:
总结
第一层你可能有一个 ReLU 激活函数,第二层为另一个 ReLU 激活函数,第三层可能是 sigmoid 函数(如果你做二分类的话),输出值用来计算损失;这样你就可以向后迭代进行反向传播求导来求݀dw[3],db[3],db[2],dw[1],db[1]。在计算的时候,缓存 会把z[1],z[2],z[3]传递过来,然后回传da[2],da[1],可以用来计算݀da[0],但我们不会使用它, 这里讲述了一个三层网络的前向和反向传播,还有一个细节没讲就是前向递归——用输入数据来初始化,那么反向递归(使用 Logistic 回归做二分类)——对A[l]求导。
参考
[1] : https://mooc.study.163.com/learn/2001281002?tid=2403023003&trace_c_p_k2=cba2f3cdbf824d1a82adad4a5b87cbb5#/learn/content?type=detail&id=2403362520&cid=2403380428
[2] : Xuefan Dong, Ying Lian, Yijun Liu . Small and multi-peak nonlinear time series forecasting using a hybrid back propagation neural network [J].Information Sciences 424 (2018) 39–54