之前讲解逻辑回归模型之初就提到学透逻辑回归,有利于学习人工神经网络。因为BP神经网络的核心数学原理与逻辑回归模型一样,是梯度下降。

【阅读前提】:理解梯度下降的基本原理。如果需要补课,请参考《》。

【阅读提示】:本文从代码实现的视角推导BP算法的整个过程,请耐心读完本文,对理解深度学习有莫大帮助。

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

图1 本文在传统ANN专题中所处的章节位置

本文将从以下4个章节详细描述BP神经网络的数学模型及算法原理。

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

图2 三层BP网络

一、神经网络的数学标识

1、数学符号习惯

二层神经网络是最简单的BP网络结构,即1个隐藏层,1个输出层。实际BP网络可以有多个隐藏层。隐藏层越多,网络深度越深。为了简化公式推导过程,以如图2所示的3层BP网络为例,假设网络只有单个样本的输入来推导BP网络的梯度下降公式,之后再泛化到针对含有多个隐藏层的BP网络,有多个样本输入的情况。

建模前,统一数学符号习惯:

2、每层符号表示

为方便公式表示,假设当前只有1个样本,以下章节在根据特征x计算z与

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

暂时将上标

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

去除。到第四章多样本向量化时矩阵相乘的前提条件,再恢复上标

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

3、梯度下降总述

梯度下降算法的核心:每次迭代,需要为BP神经网络的每一层权值W[l]、偏置b[l],沿梯度下降方向计算其更新值W[l] := W[l]–

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

×dW[l]、b[l] := b[l] –

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

× db[l],l = 1, 2, … , L。权值与偏置经过多次迭代更新后,在某个取值上,代价函数J(w,b)最小,此时BP网络学会了从输入特征x到输出y之间的映射关系。

这个算法的关键是计算

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

。整个算法主要分为两大步骤:前向传播计算,反向传播计算。

前向传播负责根据输入特征,计算出预测值,及代价函数。计算公式如(1)~(4)所示,按照箭头从左到右一步一步计算。

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

【注】激活函数g(z)在公式中写成g [l](z[l])格式,是因为神经网络的每一层的激活函数可以是不一样的。

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

反向传播负责对代价函数求导,计算每一层权值(包括偏置)的微分。计算公式如(5)~(8)所示,按照箭头从右到左一步一步计算。

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

二、前向传播向量化

1、每层前向向量化

本节推导前向传播过程的向量化过程。去除上标

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

的单个样本表示为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

其中,

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

其中,

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

其中,

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

2、前向传播规律

我们在计算神经网络的层数时,输入层是不算入总层数内的,但是如果把输入层当作是神经网络的第0层,将输入特征x当作是第0层的激活输出,即

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

,则公式(9)可以改写成

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

【注】:输入层被当作神经网络的第0层,第0层是没有权值W[0]和偏置b[0]的。

仔细观察每一层激活单元的2步工作:线性求和z[l],计算激活值a[l],能够发现以下三条规律:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

1.1节数学符号习惯中,定义n[l]为第l层的隐藏单元数,结合图2,z[l]的秩为n[l]×1。

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

的秩与z[l]一样,为n[l]×1。

三、反向传播向量化

1、每层反向向量化

本节推导反向传播过程的向量化过程。目标是计算出每层的

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

因为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,在这个关系中z[3]是自变量,所以:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

公式(18)、(19)的公共部分(用蓝底标识)正好是dz[3],即

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

,所以:

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

将(20)、(21)代入到公式(18),(22)、(20)代入到公式(19),则:

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

因为

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

,在这个关系中,将

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

当作自变量。而

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,在这个关系中,z[2]是自变量,所以:

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

公式(25)、(26)的公共部分(用绿底标识)正好是dz[2],即

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

,所以:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

将(27)、(28)代入到公式(25),(27)、(29)代入到公式(26),则:

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

,在这个关系中,将

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

当作自变量。而

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

,在这个关系中,z[1]是自变量,所以

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

公式(32)、(33)的公共部分(用紫底标识)正好是dz[1],即

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

,将输入层看成是BP网络的第0层,则

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

。替换x后,

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,则公式(32)、(33)最终为:

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

2、反向传播规律

(1)dW[l]与db[l]的计算规律

由公式(23)、(24)、 (30)、(31) 、(35)、(36),得到规律:

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

【注】:这里

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

是矩阵,而非一个数值,两个矩阵相乘必须满足:左矩阵的列秩必须等于右矩阵的行秩。

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

2.2节前向传播规律中,各矩阵的秩满足如下规律:

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

由上述秩的规律,来检验公式(37)是否满足2个矩阵相乘,左矩阵列秩=右矩阵的行秩的条件。

而公式(37)中矩阵相乘的前提条件,等号的右边是dz[l]×a[l-1],即n[l]×1的矩阵与n[l-1]×1的矩阵相乘,左矩阵dz[l]的列秩为1,右矩阵a[l-1]的行秩为n[l-1],两者不相等,不能相乘。这2个矩阵如果要相乘,只有2种情况:

公式(37)等号的左边是dW[l],是一个n[l]×n[l-1]的矩阵。所以,希望该公式等号的右边也是一个n[l]×n[l-1]的矩阵。显然,应该选择情况一,所以公式(37)应该修正为公式(39)

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

(2)dz[l]的计算规律

公式(37)、(38)中,a[l-1]可以通过前向传播计算求得,dz[l]如何求得,有什么规律?本小节将详细推导dz[l]的计算规律。

因为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,所以

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

是第三层激活函数的导数,将其带入到公式(20),则:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

因为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,所以

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

是第二层激活函数的导数,将其带入到公式(27),则:

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

公式(42)蓝底部分就是公式(20),即dz[3]。

因为z[3] = W[3]a[2]+ b[3],则:

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

将公式(43)、(20)代入到公式(42),则:

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

上式中,将矩阵的秩写在下面,根据矩阵相乘,左矩阵列秩=右矩阵行秩序的关系,上式修正为

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

其中×是矩阵行列式相乘的符号,*是两个矩阵对应元素相乘的符号。

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

因为

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

,所以

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

是第一层激活函数的导数,将其带入到公式(34),则:

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

公式(46)绿底部分就是公式(27),即dz[2]。

因为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

,则:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

将公式(47)、(27)代入到公式(46),则:

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

同理,根据矩阵相乘,矩阵对应元素相乘的条件,上式修正为:

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

dz[l]的计算规律总结:

假设BP网络的总层数是L层,由公式(40)、(44)、(48)得到如下2条规律:

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

BP网络最后一层的dz[L],除了与最后一层激活函数有关,也与损失函数Loss有关。

四、多样本向量化

第2节、第3节是以单个样本作为BP网络的输入,推导了BP网络前向传播、反向传播的公式规律。在公式推导的过程中,为了防止与层数上标

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

混淆,暂时将样本的上标

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

去除。本章开始泛化到多个样本作为BP网络输入的情况。

1、多样本符号表示

多个样本作为BP网络的输入,则BP网络输入特征可表示为如下格式:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

其中,某个样本x(i)的特征向量为

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

,则特征矩阵x的秩是n[0]×M。n[0]是BP网络输入层(即第0层)的单元的个数。

例如:图2所示的三层神经网络,如果输入样本一共10个,则网络输入层(即第0层)的特征矩阵为

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

多个样本作为BP网络的输入,第l层隐藏层的线性输出为:

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

其中,某个样本i在第l层隐藏层的线性输出向量为

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

(i=1, 2, …, M)(l=1, 2, …, L),

则第l层隐藏层的线性输出矩阵Z[l]的秩是n[l]×M。n[l]是BP网络第l层隐藏单元的个数。

例如:图2所示的三层神经网络,如果输入样本一共10个,则网络第1层线性输出矩阵为

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

网络第2层线性输出矩阵为:

矩阵相乘的前提条件_矩阵相乘前可以做行变换吗_矩阵乘法前提条件

多个样本作为BP网络的输入,第l层隐藏层的输出为:

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

其中,某个样本i在第l层隐藏层的输出为:

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

(i=1, 2, …, M)(l=1, 2, …, L),

则第l层隐藏层的输出矩阵A[l]的秩是n[l]×M。n[l]是BP网络第l层隐藏单元的个数。

例如:图2所示的三层神经网络,如果输入样本一共10个,则网络第1层输出矩阵为

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

网络第2层的输出矩阵为

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

2、多样本BP算法

(1)多样本前向传播规律

根据2.2节前向传播规律中总结的公式(16)与(17),结合4.1节多样本符号表示,则当有多个样本输入到BP网络时,前向传播的3条规律为:

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

其中,Rank(Z[l])=n[l]×M,

Rank(W[l])= n[l]×n[l-1],

Rank(A[l-1])= n[l-1]×M,

Rank(b[l])= n[l]×1。

检查公式(54)等号左右的秩,等号右边W[l]与A[l-1]相乘结果是一个n[l]×M的矩阵;再加一个n[l]×1的列向量b[l]。

【问题】行秩相等的一个矩阵与一个列向量如何相加?

实际上,对于每个样本,在第l层隐藏层,W[l]与A[l-1]相乘后,相加的偏置b[l](i)是一个常向量,即

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

在公式(54)中,希望b[l]复制M份,然后形成n[l]×M的矩阵

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

,再与W[l]A[l-1]相乘的结果形成的矩阵,逐元素相加。相加后的结果n[l]×M,公式(54)等号两边秩相等。

上述扩展列向量b[l]的过程由的广播机制()[2]完成的。在编码时,直接按照公式(54)写计算式赋值给Z[l]是不会报错的。所以,在后续文章中,遇到类似公式(54)这样行秩相等的一个矩阵与一个列向量相加的情况,都维持原样。

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

检查公式(55)等号两边的秩,都是n[l]×M。

最后一层,即输出层的预测值

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

(2)多样本反向传播规律

根据3.2节反向传播规律中总结的公式(38)、(39)、(49)与(50),结合4.1节多样本符号表示,则当有多个样本输入到BP网络时,反向传播的4条规律为:

其中×是矩阵行列式相乘的符号,*是两个矩阵对应元素相乘的符号。公式(57)等号两边的秩相等。

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

BP网络最后一层的dZ[L],除了与最后一层激活函数有关,也与损失函数Loss有关。

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

与单个样本的公式(39)相比,为何多个样本的公式(59)需要除以M?假设

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

当输入为单个样本的特征向量时,β00的数值是由列向量中

矩阵相乘的前提条件_矩阵乘法前提条件_矩阵相乘前可以做行变换吗

中的0位元素,与行向量

矩阵相乘前可以做行变换吗_矩阵乘法前提条件_矩阵相乘的前提条件

中的0位元素相乘的结果,符合单个样本推导的公式(39)的结论。

当输入为M个样本的特征矩阵时。根据矩阵相乘原理,β00的数值是由矩阵

矩阵乘法前提条件_矩阵相乘的前提条件_矩阵相乘前可以做行变换吗

中的所有0行的元素,与矩阵

矩阵乘法前提条件_矩阵相乘前可以做行变换吗_矩阵相乘的前提条件

中对应颜色0列的元素相乘求和的结果。β00为M个数值的和,即M个样本都对β00做了贡献,M越大,β00越大,所以要对M个样本贡献的求和结果β00求平均。

所以多样本向量化结果,公式(59)等号右边需要对M求平均。

矩阵相乘前可以做行变换吗_矩阵相乘的前提条件_矩阵乘法前提条件

与单个样本的公式(38)相比,因为M个样本对偏置微分的贡献,所以需要对M求平均。np.sum(X, axis=1)是的模块 numpy的API[2],对矩阵X沿着行的维度求和。

虽然Rank(dZ[l])=n[l]×M,但是经过np.sum ()沿着行的维度求和后,Rank[np.sum(dZ[l],axis=1)] =n[l]×1。

五、结束语

至此,BP神经网的算法全部讲解完毕。

【预告】下一篇文章将介绍“BP神经网络的实现”,用代码实现一个BP网络,用代码解释本文提到的各公式。

六、参考文献

1、雪梨姐 《》

2、的官方文档:

3、吴恩达《深度学习》

对作者所写文章有兴趣,可继续关注公众号:点金要术(),或扫描下面的二维码。也欢迎读者朋友在互联网上分享你认为有帮助的文章。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注