神经网络的重要性质就是可以自动的从数据中学习合适的权重参数,学习权重参数的重要步骤分前向传播和反向传播:
前向传播(Forward Propagation)是在神经网络中从输入层到输出层信息传递的过程。
反向传播 (Back Propagation) 指的是计算神经网络每一层参数梯度的方法,是学习权重的核心。
接下来我们就开始看看神经网络是怎样学习的。
一、神经网络
下面看一个神经网络的图,与我们上次学的感知机有异曲同工之妙,前向传播的计算逻辑也是相同的,神经网络由输入层、中间层、输出层组成:
输入层:即输入数据
中间层:也叫隐藏层,主要是做内部计算,我们看不到
输出层:即最终输出的数据
在输入层和中间层之间,以及中间层到输出层之间的是权重,是进行了相同的计算逻辑。
二、引入激活函数
接下来我们以下图中x1和x2通过权重w1和w2计算得到s1为例,看下神经网络单个神经元的具体计算过程。
用公式来表示它们之间的关系如下所示: (该公式是由之前的感知机得来的,需要的话可以看上一篇博文)
b是偏置,用于控制神经元被激活的容易程度,w1和w2是权重,表示各个信号的重要程度,上述式子更简洁一些可以写成以下形式:
这里引入新的函数h(x),即激活函数,会将输入信号加权总和转换为输出信号。
那我们进一步改写这个公式,可以先计算加权总和,然后再用激活函数转换,公式如下:
激活函数在图中表示如下:
所以现在我们能知道激活函数的作用就是把神经元的输入转换为输出,上面例子的激活函数是阶跃函数,可以把输入转换为0/1的输出,常用的激活函数还有sigmoid、ReLU,虽然输出结果不用,但是在神经网络中的作用都是一样的。
三、神经网络前向传播的实现
通过以上例子我们可以知道神经网络单个神经元是怎样计算的,但是通常神经网络都是多神经元的,因此必须要引入矩阵实现多维数据的计算,下面就以2个输入、有3个神经元的1层隐藏层、以及2个输出的神经网络为例。
使用矩阵的话,则可以将表示为如下:
其中,
,,
其中x1表示第1个输入,w12表示第1个中间层神经元与第2个输入之间的权重,b1表示第一个神经元的偏置,a1表示第一个神经元计算的加权和,在图中表示如下:
计算完加权和之后再经过激活函数转换就可以得到中间层的输出,从中间层到输出层的计算逻辑同理,只不过根据神经网络的应用不同,可以调整使用不同的激活函数,这里就不再赘述了。
下一节我们来看下神经网络的反向传播。