前向传播

 

神经网络 前向,反向传播过程

X,数据集矩阵。

每一行的元素代表了一个样例的特征值x1,x2,x3...

       共有n行,说明数据集一共n个样例

theta,参数矩阵

      行数:要生成的神经元个数

      列数:上一层的输入个数

      每一行的元素代表了对样例各个特征值的权重

 

以数据集为X(5 * 3),使用上图的网络结构为例:

输入层

     X(5 * 3)说明数据集有5个样例,每个样例有3个特征值

    针对图中的输入层a(1),是一个样例的所有特征值。

 

隐藏层1

       z2=X * theta1.T ——> (5,3) * (3,5) ——> (5,5)的矩阵

     theta1:要生成5个神经元,上一层输入个数是3,所以其结构是(5 * 3

           公式中的 theta1 * a1 是算法思想的描述,代码实现需用X * theta.T

 

神经网络 前向,反向传播过程

得到的矩阵,矩阵元素是神经元的暂时取值,后续需带入g( )

        有5列,代表5个神经元的各自暂时取值 {

  •     样例特征值乘以其各自权重之后,相加。是一个数
  •      5个神经元对特征值的权重不一样

  }

      有5行,每一行是一个样例的所有神经元的暂时取值

 

a2 = g( z2 )

      将z2矩阵中的每一个元素作为参数传入g( )函数,进行运算。

      运算后的矩阵行列数不变,矩阵中每一行是一个样例,一行中的每一个元素代表神经元的值,即a(2)1,a(2)2  ...

 

隐藏层2

       以a2矩阵的每一行作为一个样例输入,与隐藏层1类似操作,得到a3矩阵

              theta2 ——> (5,5)

 

输出层

       z4 = a3 * theta3.T ——> (5 ,5)  *  (5,4) ——> (5,4)

              theta3:要生成4个神经元(此层的神经元就是输出,4个神经元代表4种分类),上一层输入个数是5,所以其结构是(45

      

     a4 = h(x) = g(z4),运算后是一个(5,4)矩阵

           每一行一个样例,共5个样例

          每一行的4个元素,代表该样例是分类1的概率,是分类2的概率...

          若分类1的概率最大,则该样例属于分类1。使用np.argmax,返回最大值的下标n,可将a4转换成(5,1)的向量。

 

反向传播

根据前向传播的预测结果,建立代价函数J。反向传播是为了计算J的梯度,以便进行最小化操作,得到最佳的theta1、2、3矩阵。

神经网络的代价函数如下,我们的目标是求出神经网络 前向,反向传播过程求解需要用到J的梯度数据

神经网络 前向,反向传播过程

J是一个多元函数,所有的theta矩阵元素都是J的变量。其梯度是:J对每一个theta元素的偏导。如下可以证得(下图的网络结构与本例不同,具体做法有差别),偏导可以通过反向传播的误差矩阵求得。

神经网络 前向,反向传播过程

具体做法是:

神经网络 前向,反向传播过程

在本例中,可达到delta4,delta3,delta2。不对输入层做误差分析,故没有theta1。

神经网络 前向,反向传播过程神经网络 前向,反向传播过程

由此可以得到D1,D2,D3矩阵,D1、2、3降维,合并在一起,即可得到一个一维向量,即梯度grad。grad中的元素是J关于所有theta矩阵元素的偏导。

grad即是反向传播过程的输出。

 

有了代价函数J及梯度数据grad,可带入优化算法,运算得到训练后的theta1、2、3矩阵。

相关文章: