DL01-6: 单层神经网络
本主题内容包含:
- 理解单层多感知器神经网络(不含隐藏层)。
- 实现单层神经网络分类(矩阵)。
多感知器实际就是单个感知器的集合,训练时对一个样本,所有感知器都同时得到训练(因为同时更新所有感知器的权重)。
注意:本文显式使用了标量乘积与向量内积
1、分类特征表示
一般的分类是简单的二类分类,要么是A类与是B类,可以用标量0与1表示,是A类就是0,是B类就是1。
分类也可以使用向量表示 与,是A类就是,是B类就是
向量的分类表示有多个好处:
( 1 ) 可以扩展为n类样本分类
( 2 ) 分类方式更加简单。比如:第i类样本的样本期望向量可以表示为。向量的第n个特征数据对应着对应分类的特征值,只要某位置上特征值最大(第位置上的值0.812最大),我们就可以认为该输出的向量表示样本是对应位置的表示的分类(属于第类)。
神经网络的输出向量的每个特征值对应一个感知器。下面我们使用多个感知器构成单层神经网络。
2、单层神经网络表示
单层多感知器神经网络图示如下:> 单层多感知器神经网络其中数据表示如下:
- 输入数据向量: (矩阵表示为:)
- 输出数据向量: (矩阵表示为:)
- 权重矩阵:
(是输入特征数据长度,数输出特征数据长度)
(权重的每一行对应着一个感知器的权重,m行就意味着m个感知器)
3、单层神经网络训练算法
单层神经网络训练依据是基于如下目标:
就是找到一组感知器的权重,使得这组感知器的输出与期望输出之间的误差最小。
第一步:初始化一个随机权重矩阵(用来训练);
第二步:输入特征数据计算每个感知器(个感知器)的输出,每个感知器的权重对应权重矩阵中的一行,多个感知的输出就是输出向量
第三步:计算感知器输出向量与样本期望输出之间的误差。
第四步:根据计算的误差,计算权重矩阵的更新梯度。
第五步:用更新梯度,更新权重矩阵。
第六步:然后从第二步反复执行,直到训练结束(训练次数根据经验自由确定)
4、单层神经网络中的计算公式表示
在上面描述的训练过程中,有两个主要的计算公式:
- 感知器输出计算。
- 权重的更新计算(核心是计算更新梯度)。
其中权重梯度的计算有两个依据:
- 误差的度量标准:损失函数的定义;
- 误差最小:损失函数极小值计算。
根据这两个依据,我们可以列出单层神经网络的计算公式如下:
单层多感知器的计算输出公式:
:输入特征数据,使用行向量表示.
:表示加权求和的偏置项。
如果考虑激活函数,则计算输出公式为:
单层多感知器的权重计算公式:
:表示第个感知器
:表示学习率,用来控制训练速度。
:表示更新梯度(因为误差最小,是梯度下降,所以梯度更新是减去(-)梯度),梯度使用损失函数的导数,表示如下:
使用链式偏导数公式,损失函数可以表示为输出的函数,则可以把梯度展开:
上述公式中是激活函数的输出,可以表示为,其中,则上述公式可以继续展开如下:
上述公式中的计算项说明:
:就是损失函数的导数;:激活函数的导数;
:加权求和的导数;
如果损失函数采用误差平方和函数(N是样本个数),其导数为:,如果采用随机梯度,则取当前样本,而不是所有样本,则可以表示如下:
若果激活函数采用恒等函数,其导数为:
加权求和的导数为:则梯度可以表示为:
或者(随机误差损失函数):
可以根据上面的推导过程很容易得到偏置项梯度为
或者
今后不采用其他激活函数与损失函数,这个公式尽管复杂点,但计算原理都是一样。
更进一步,我们可以对展开的公式进行分析,把与输入特征数据无关的部分剥离出来:
可以单独把上式括号中的项记为,称为误差项:
把误差项剥离出来,可以在今后多层神经网络中,对误差项进行传递,计算每一层的权重更新梯度。
5、向量求导的理解
因为标量与向量的求导是有区别的,但是当向量求导中的运算与标量一样的时候,向量求导与标量求导是没有差异的(传统标量的运算公式与规律大部分都可以平行移植到向量的运算中)。
但是内积的求导是区别于传统的标量运算的,是向量运算中独有的运算定义,下面我们从细节上推导下面公式:
标量对向量求导公式:
其中:
6、单层多感知器神经网络的向量表示
可以把上面多个感知器的梯度使用向量公式表达:
其中:
后面我们使用向量与tensorflow两种方式来实现单层神经网络。