跳至主要內容

神经网络基本概念

原创Xenny约 1966 字大约 8 分钟深度学习深度学习神经网络

神经网络基本概念

  • 对于人工智能,一部分学者主张模仿人类的逻辑方式来获取知识,由此衍生出各类机器学习算法,另一部分学者主张模仿人类的神经连接来获得知识,神经网络便是由此而来。

神经元

  • 神经网络特指人工神经网络(Artificial Neural Networks),其通过模拟人类大脑的工作方式而来。大脑以大量神经元(神经细胞)为基本单位,通过神经元与神经元之间的接触产生一个神经网络。

    神经元之间的连接
    神经元之间的连接

    当大脑思考时,各个树突会收到其他神经元发出的电化学信号,当信号强度达到某个临界值时便产生新的电化学进行沿着轴突继续传递给新的神经元。也就是每个神经元都类似一个门结构,当收到足够多的信号时便继续向后传递信号。

  • 而我们的ANN便是模拟这个过程,使用ANN模拟大脑神经网络时候,只需对每个“神经元”设置它收到的输入权重,自身的阈值和激活后的输出即可。

决策过程

  • 但是上述的这样一个神经网络如何进行决策具体事件呢?这就要了解最初的输入信息了。对于人来说,耳朵、皮肤、鼻子、舌头等等器官能够感受到外部的刺激并且传输给大脑,这便是信息的最初输入,这些输入通过大脑神经网络的传递之后得出结果再将输出传送给各个部位指挥下一个动作。

    所以对于一个神经元自身是一个决策器,它将通过输入强度判断输出是否输出,同时整个网络构成了一个对具体事件的决策器来判断下一步如何进行。

  • 现在我们要想用模拟神经元,我们要在上一步的基础上用更数学的语言来定义这个决策过程。

    M-P神经元模型
    M-P神经元模型

    上图是1943年神经生理学家Warren McCulloch与数学家Walter Pitts提出的神经元的数学模型,其中x=(x1,,xn)T\boldsymbol{x} = (x_1, \dots, x_n)^T是一组输入信号,通过加权求和后得到xiwi\sum{x_i w_i},如果结果超过阈值b-b,则处于激活状态,向外输出信号,否则则处于抑制状态。

    通过对M-P模型输入信号设置不同的权重,我们可以在神经元上实现各类逻辑运算,例如对于两个输入的一个神经元定义权重都为11,阈值b=1.5-b=1.5。显然此时只有当两个输入都有信号是才能超过阈值,对外进行输出,反之则不输出,这便是一个逻辑与门。也就是说利用此我们可以使用M-P模型构造出任何的数字电路。

感知机(Perceptron)

  • 现在我们已经了解了如何模拟神经元以及神经元的工作流程,并且能够构造出一个复杂的网络处理任务。但是这依然和机器学习没什么关系,因为我们构造的模型并不能从数据中学习到什么东西,它需要你事先定义各个神经元中的参数,它只是一台计算器而已。

    真正将神经网络用于机器学习来自感知机这一概念的提出,1958年Rosenblatt提出感知机使得M-P神经元模型具备学习能力。例如对于一个二分类问题,将使用分离超平面wx+b=0\boldsymbol{w}\boldsymbol{x}+b = 0进行分类,如果wx+b>0\boldsymbol{w}\boldsymbol{x}+b>0,则预测y=1y=1,反之预测y=1y=-1,那么此时模型的学习过程在哪里呢?

    从初始值(w0,b0)(\boldsymbol{w}_0, b_0)触发,感知机将不断调整参数(w,b)(\boldsymbol{w}, b),调整的目的是使得模型的错误分类最少,也就是目标函数为最小化所有错误观测值的“错误程度”之和,即

    minw,b(iMy(i)(b+wx(i))) \min_{\boldsymbol{w},b}(-\sum_{i\in M} y^{(i)}(b+\boldsymbol{w}x^{(i)}))

    其中MM表示所有错误分类的下标集合。这里最小值依然可以使用梯度下降进行求解,同时对于线性可分的数据,感知机一定收敛。

  • 似乎看上去神经网络到此便可以了,但事实上这个模型对于不同的初始值设定,会得到不同的分离超平面(决策边界),也就是说收敛但不一定最优。同时对于线性不可分的数据,甚至不会收敛。

激活函数

  • 事实上要得到非线性的决策边界,只需要引入多层神经网络。同时在网络中使用多个非线性激活函数迭代后即可得到非线性的决策边界。激活函数的出现才使得神经网络模型变得真正可用。

    激活函数本质就是一个非线性函数,如果没有激活函数的存在,不管网络有多少层本质上都是一个线性变换,而激活函数便是引入非线性变换。同时此时神经元不再是大于阈值才往下输出,激活函数将对输入加权求和的结果进行归一化作为输出,使得输出结果更加平滑。

    输出函数
    输出函数
  • 引入这个技术之后,神经网络模型的发展得以飞跃,后续便发展出各类不同的神经网络模型,例如输入从左向右层层全部相互连接的全连接网络,如下图

    全连接网络
    全连接网络

    同时对于模型中这些夹在输入层和输出层中的神经网络我们称为隐藏层。

S形函数

  • 对于具体的激活函数,这个函数在逻辑回归我们以及遇到过了,即Sigmoid函数

    σ(z)=11+ez \sigma(z) = \frac{1}{1+e^{-z}}

    它的好处是处处连续可导,所以输出非常平滑,但是它是一个饱和函数,可能会引起梯度消失和梯度爆炸问题。

修正线性单元

  • 修正线性单元(Rectified Linear Unit)通常简记为ReLU。

    ReLU(z)=max(0,z) \mathrm{ReLU}(z) = \max(0, z)

    它是一个非常简单的函数,但却能够解决梯度消失问题。不过它也有新的问题称为“死亡ReLU问题”,会导致神经元“死亡”,即对于任意输入其输出永远是0。

泄露ReLU

  • 为了解决死亡ReLU问题提出的LReLU激活函数,定义为

    LReLU(z)={z,z0γz,z<0 \mathrm{LReLU}(z) = \begin{cases} z, & z\ge 0\\ \gamma z, & z < 0 \end{cases}

    其中γ>0\gamma >0且是一个很小的正数。

神经网络算法

  • 神经网络包含很多参数以及非线性激活函数,所以使用梯度下降算法训练时计算梯度是个问题。最常用的方法便是反向传播算法(back-propagation),BP神经网络能够模拟任意函数,这使得使用神经网络解决任何问题成为可能。

    但也正是由于其拟合能力之强,神经网络算法也非常容易导致过拟合,此时便需要引入新的技术来解决这类问题。

  • 由于本篇只作为对神经网络的基本介绍,故文中各类激活函数以及各类问题的解决方案没有详细展开,读者可以在博客中找到其他关于神经网络内容的分析介绍博文。