神经网络初探 | 陈浩然的博客

神经网络初探

神经网络初探

在本文中,我将初步介绍神经网络有关的概念和推导,本文是后续深度学习的入门,仅对神经网络做初步理解,后续文章中会继续进行学习。

定义

什么是神经网络呢?这里引用Kohonen的定义:

神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。

可以看出神经网络的几个重要特点:简单的基本单元、互连、模拟生物、具有交互反应

神经网络

为什么使用神经网络?

既然已经有了线性回归、决策树等机器学习方法,为什么还要使用神经网络的方法呢?

  • 生物大脑内的神经网络即采用基本单元互联通信的模型,部分机器学习的专家相信,如果能在机器上模拟这种结构,也将部分的实现生物体的智能。
  • 在对非线性的数据进行预测时,如果使用线性回归来进行拟合,将会使用大量幂次交叉项,例如对最高三次项函数,就有$x_1^2x_2,x_1x_2^2,x_1^3,x_2^3……$,而对于含有n个特征,最高m次的数据,其项数的复杂度为O($n^m$),高昂的复杂度使得预测代价极为高昂。

由此,神经网络应运而生。

M-P神经元模型

神经网络中的基本单元被称为M-P神经元模型,如图所示:

神经网络

在生物中,一个神经元接受其他神经元传来的化学性物质,改变它的点位,如果达到该神经元的阈值,它会被激活,向其他神经元发送化学信号

在该M-P神经元中,该神经元结构其他神经元的输入信号$x_1,x_2……x_n$,由于每个神经元对它的作用大小不同,于是有不同的权重$w_1,w_2……w_n$,收到的信号总和为

​ $$X=\sum_{i=1}^{n} {w_ix_i}$$

该信号与阈值$\theta$比较,如果大于阈值,就激活,反之不激活,该比较有函数f完成,故输出信号为:

​ $$y=f(\sum_{i=1}^{n} {w_ix_i-\theta})$$

激活函数

一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出,上文中的函数f即为激活函数。

理论上而言,激活函数应该具有这样的功能:大于阈值时激活,小于阈值时不激活。故理想的激活函数如下最左所示:

神经网络

但是在实际运用中,由于需要该函数光滑可导,经常使用如图的sigmoid函数和ReLU函数。

感知机

感知器(英语:Perceptron)是Frank Rosenblatt在1957年就职于康奈尔航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类器

其模型如下,和M-P神经元模型如出一辙:

神经网络

利用单层感知机可以解决逻辑与、或、非问题,但是不能解决异或问题,因为感知机是一个线性分类器,而异或问题不可以被线性划分。

神经网络

但是利用如下的双隐层感知机可以解决异或问题。

神经网络

多层神经网络

定义

感知机是最简单的前馈神经网络,如果我们增加神经网络的层数和每层的数目,便会形成多层神经网络。

多层网络包含输入层、输出层、隐藏层,输入层用来接收外界输出,隐层和输出层对信号进行加工,最终结果由输出层神经元进行输出。

神经网络

图中第一层即为输入层,最后一层为输出层,中间为三个隐层。

前向传播算法

前向传播算法即神经网络进行识别匹配的算法,从输入信号得到输出信号,如下图,为具有两个隐层的神经网络。

神经网络

先对图中符号进行定义,$x_1,x_2,x_3$是原始输入信号,$a_{ij}$是隐层和输出层得到的输入信号,$w_{ij}$为权重,$z_{ij}$是隐层得到的进一步传播的信号,$H(x)$是激活函数,$y_1,y_2,y_3$是输出结果。

首先我们得到了原始输入信号$x_1,x_2,x_3$,通过加权和进入隐层1:

​ $$a_{2j}=\sum_{i=1}^{3} {x_iw_{ji}}$$

然后通过激活函数得到隐层1的输出

​ $$z_{ij}=H(z_{ij}-\theta_{ij})$$

重复此过程通过隐层2,得到$a_{41},a_{42},a_{43}$,即为输出层的输入信号。在前面已经说过,输出层也要对信号进行加工,所以再次通过H(x)进行处理,得到最终结果$y_1,y_2,y_3$。

输出类型

对于二分类问题而言,只需要输出为0或1即可,所以只需要有一个输出单元,就像之前的感知机。

对于多分类问题而言,可以有k个分类,则需要有k个输出单元,每个输出单元输出0或1,共同组成一个k维向量,分别代表k个类别。如下四个向量便可以别代表1、2、3、4的类别。
$$
\begin{matrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \
\end{matrix}
$$

反向传播算法

反向传播算法的数学推导较复杂,在这里不详细介绍,只大体介绍其思想:

  1. 定义神经网络输出值与实际值的误差,一般情况下有两种误差定义方法($\theta$为神经网络中的权重):

    • 均方误差:

      ​ $$J(\theta)=\frac 12 \sum_{j=1}^{l}(y_j^k-y_j^{k2})^2$$

    • 对数误差对数误差

  2. 反向传播算法的目的是使得$J(\theta)$最小,可以采用梯度下降的方法,求得使之最小的$\theta$

  3. 于是我们需要求得$J(\theta)$对于每一个参数$\theta _{ij}$的导数,然后利用梯度下降的公式对$\theta$进行迭代

  4. 但是我们无法直接求得导数,经过推导,可以发现每一层的误差导数和后一层的导数存在关系,所以可以先求得后一层的导数,然后依次向前推导,故称之为反向传播

    对数误差

    对数误差

综合流程

由上可知,一个多层神经网络的训练流程如下:

  • 随机初始化
  • 对于训练数据,利用前向传播计算出预测结果
  • 利用预测结果和训练数据的标签计算误差
  • 利用反向传播计算误差对于各个参数的导数
  • 梯度下降,并重复此过程

避免局部最小的方法

由于梯度下降可能导致神经网络陷入局部最小,而达不到全局最小值,所以在这里有以下集中方法缓解这个问题

  • 以多组不同的初始值初始化神经网络进行训练,找出其中最好的结果作为最终参数
  • 使用模拟退火技术,有一定概率接受更差的结果,且接受的概率随时间推移而降低
  • 使用随机梯度下降法

深度学习

实际上,科学家已经证明

只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂的连续函数。

但后来人们发现:

参数越多的模型复杂多越高,容量越大,这意味着它可以完成更复杂的学习任务。而增大网络深度有时比增多单隐层参数个数更有效。

随着云计算、大数据的到来,深度学习开始流行。

典型的深度学习就是很深层的神经网络,在后面的章节会进一步介绍。

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读


本文结束啦感谢您的阅读
生活不易,求打赏
0%