有关全连接神经网络的定义与C++实现

      不久之前参加了华为的调参大赛,虽然惨败而归,但是也学到了很多东西,也实现了很多算法,比如LSTM和单纯性,我把实现放在之后的博客中。下面介绍下深度学习的基础——全连接神经网络(Full Connected Network)。

1. 神经单元   

    神经元是一种感知器,神经网络由许多感知器组成,组成神经网络的几种主要单元包括简单感知器、线性感知器和sigmoid感知器等,下面介绍下简单感知器。

有关全连接神经网络的定义与C++实现

    感知器以一个实数向量作为输入,计算各个输入元素的线性组合,然后把结果输入一个符号函数(或者阶跃函数)其中每一个wi是一个实数,叫做权值(weight),用来决定输入xi对感知器的贡献率,符号函数:

有关全连接神经网络的定义与C++实现

  可以把感知器看作是n维空间中的超平面决策面,对超平面一侧的实例输出1,对于另一侧的实例输出-1,决策面方程为W*X=0,事实上有些样例集合不能被任一超平面分割,而那些可以被分割的称为可分样例集合(linearly separable)。单独的感知器只能表示些布尔函数和一些可简单二分的集合,真正强大的地方是大量感知器单元组成的多层网络。

2. 全连通神经网络

    由若干神经元按如下方式连接组成的网络叫做全连通网络,该网络可分为几层,最左侧一层叫做输入层(input layer),中间层叫做隐层(hidden layer),最右一层叫做输出层(output layer)。

有关全连接神经网络的定义与C++实现

    输入层所有元素与下一隐层每一个元素分别组成一个神经元(与上面对应),然后隐层所有元素与下一隐层每一个元素分别组成一个神经元,如此递归下去;隐层可以有多个,输入输出层各只有一个;全连接层一般用于分类,而且层数过多的话学习速度会很慢。

    其中红框部分表示代码中的一层(rnFullConnectedLayer类),训练使用反向传播算法BP。

代码在这里rnFullConnectedNetwork