原创,转载请注明出处。
(常规字母代表标量,粗体字母代表向量,大写粗体字母代表矩阵)
这里假设你已经知道了神经网络的基本概念,并且最好看过BP算法。
可能你没有看懂,或者你跟我一样被各种公式搞晕了。尤其是学过的线性代数跟微积分知识也忘记得差不多的人,对复杂的数学公式跟符号非常不敏感的人,特别适合看这个。
希望在看完这篇文章后,能够帮助你弄懂BP算法的具体流程,以及BP算法的数学推导过程。能够对于任何给定的神经网络结构,求出对应的BP算法的训练公式。最好是能够理解到能写出代码的程度。
一、神经网络数学描述
假设给定一个神经网络,如何用数学语言来描述它?
我们来举个简单的例子,它包含一个输入层,2个隐含层,1个输出层。
(注意,本文的神经网络,是没有偏置项(bias)的,因为偏置项可以通过给每层加入一个恒为1的输入来消除掉,因此有偏置可以等价转换成没有偏置的问题。具体怎么消除类似于我之前在逻辑回归 里面讲的方法)神经网络结构
从图中可以看出,我们的输入是一个二维的向量
,输出是一个数值。
我们说的层具体指代的是图中的哪一个部分呢?
我随手画了4个方框,代表从左到右依次是:输入层,隐含层1,隐含层2,输出层。
二、输入,输出和激活函数
取隐含层1。先说这一层的输入和输出,对于这一层的每个神经元,都有一个对应的输入值,以及一个对应的输出值,它们都是一个标量,假设对于第
层(图里面画错了应该是l,请把图中的
脑补成
):
我们可以将多个标量值变成一个向量值,定义:
,
,
激活函数可以全部都选择sigmoid函数,但是也有每个神经元选用不一样的激活函数的情况,在这里为了更加通用,假设
用的是不同的激活函数。
在应用了激活函数以后,就能把
转换成
,它们的关系是:
因此,我们可以知道
层输出跟输出的关系,记作等式1:
三、权重
权重的值实际上就是层与层之间的连线,举个例子:
权重的作用,可以认为是对于上一层的输出向量
做线性组合,在
层中,有几个神经元,就对应于对输出向量
做几次线性组合。
比如
就代表点1连到点3的权值,我们可以把
层所有的权值写成一个权值矩阵
,比如上面的图对应的权值矩阵就长这样:
我们来看这个矩阵的含义:
上图中,
中的每一行代表着对右输出值的一次线性组合,对应于
层的一个神经元。因此矩阵有多少行,就代表着这一层有多少个神经元。