DL01-6: 单层神经网络

本主题内容包含:

  1. 理解单层多感知器神经网络(不含隐藏层)。
  2. 实现单层神经网络分类(矩阵)。

多感知器实际就是单个感知器的集合,训练时对一个样本,所有感知器都同时得到训练(因为同时更新所有感知器的权重)。

注意:本文显式使用了标量乘积与向量内积

1、分类特征表示

   一般的分类是简单的二类分类,要么是A类与是B类,可以用标量0与1表示,是A类就是0,是B类就是1。
   分类也可以使用向量表示 与,是A类就是,是B类就是
  向量的分类表示有多个好处:
    ( 1 ) 可以扩展为n类样本分类
    ( 2 ) 分类方式更加简单。比如:第i类样本的样本期望向量可以表示为。向量的第n个特征数据对应着对应分类的特征值,只要某位置上特征值最大(第位置上的值0.812最大),我们就可以认为该输出的向量表示样本是对应位置的表示的分类(属于第类)。

神经网络的输出向量的每个特征值对应一个感知器。下面我们使用多个感知器构成单层神经网络。

2、单层神经网络表示

单层多感知器神经网络图示如下:>
单层多感知器神经网络

  其中数据表示如下:

  1. 输入数据向量: (矩阵表示为:)
  1. 输出数据向量: (矩阵表示为:)
  1. 权重矩阵:W=\begin{bmatrix} {\omega_{00}}&{\omega_{01}}&{\dots}&{\omega_{0n}}\\ {\omega_{10}} &{\omega_{11}}&{\dots}&{\omega_{1n}}\\ {\dots}&{\dots}&{\dots}&{\dots}\\ {\omega_{m0}}&{\omega_{m1}}&{\dots}&{\omega_{mn}} \end{bmatrix}\qquad\qquad
    (是输入特征数据长度,数输出特征数据长度)
    (权重的每一行对应着一个感知器的权重,m行就意味着m个感知器)

3、单层神经网络训练算法

  单层神经网络训练依据是基于如下目标:
  就是找到一组感知器的权重,使得这组感知器的输出与期望输出之间的误差最小。

第一步:初始化一个随机权重矩阵(用来训练);
第二步:输入特征数据计算每个感知器(个感知器)的输出,每个感知器的权重对应权重矩阵中的一行,多个感知的输出就是输出向量
第三步:计算感知器输出向量与样本期望输出之间的误差。
第四步:根据计算的误差,计算权重矩阵的更新梯度。
第五步:用更新梯度,更新权重矩阵。
第六步:然后从第二步反复执行,直到训练结束(训练次数根据经验自由确定)

4、单层神经网络中的计算公式表示

在上面描述的训练过程中,有两个主要的计算公式

  1. 感知器输出计算。
  2. 权重的更新计算(核心是计算更新梯度)。

其中权重梯度的计算有两个依据:

  1. 误差的度量标准:损失函数的定义;
  2. 误差最小:损失函数极小值计算。

根据这两个依据,我们可以列出单层神经网络的计算公式如下:

单层多感知器的计算输出公式:


:输入特征数据,使用行向量表示.
:表示加权求和的偏置项。

如果考虑激活函数,则计算输出公式为:

单层多感知器的权重计算公式:


:表示第个感知器
:表示学习率,用来控制训练速度。
:表示更新梯度(因为误差最小,是梯度下降,所以梯度更新是减去(-)梯度),梯度使用损失函数的导数,表示如下:


使用链式偏导数公式,损失函数可以表示为输出的函数,则可以把梯度展开:


上述公式中是激活函数的输出,可以表示为,其中,则上述公式可以继续展开如下:

上述公式中的计算项说明:
:就是损失函数的导数;

:激活函数的导数;

:加权求和的导数;


如果损失函数采用误差平方和函数(N是样本个数),其导数为:,如果采用随机梯度,则取当前样本,而不是所有样本,则可以表示如下:

若果激活函数采用恒等函数,其导数为:
加权求和的导数为:

则梯度可以表示为:

或者(随机误差损失函数):

可以根据上面的推导过程很容易得到偏置项梯度为

或者

今后不采用其他激活函数与损失函数,这个公式尽管复杂点,但计算原理都是一样。


更进一步,我们可以对展开的公式进行分析,把与输入特征数据无关的部分剥离出来:

可以单独把上式括号中的项记为,称为误差项:

把误差项剥离出来,可以在今后多层神经网络中,对误差项进行传递,计算每一层的权重更新梯度。

5、向量求导的理解

  因为标量与向量的求导是有区别的,但是当向量求导中的运算与标量一样的时候,向量求导与标量求导是没有差异的(传统标量的运算公式与规律大部分都可以平行移植到向量的运算中)。
  但是内积的求导是区别于传统的标量运算的,是向量运算中独有的运算定义,下面我们从细节上推导下面公式:


标量对向量求导公式:
\dfrac{\partial{y_i}}{\partial{w_i}}= \begin{bmatrix} \dfrac{\partial{y_i}}{\partial{w_{i0}}}&\dfrac{\partial{y_i}}{\partial{w_{i1}}}\cdots&\dfrac{\partial{y_i}}{\partial{w_{in}}}\\ \end{bmatrix}= \begin{bmatrix} x_0&x_1&\dots&x_n\\ \end{bmatrix}
其中:


6、单层多感知器神经网络的向量表示

   可以把上面多个感知器的梯度使用向量公式表达:


其中:


后面我们使用向量与tensorflow两种方式来实现单层神经网络。

你可能感兴趣的:(DL01-6: 单层神经网络)