如果说“感知机”是单个的神经元,那么“多层感知机”就是将分散的神经元,连接成了网络。
在输入层和输出层之间,再加入若干层,每层若干个神经元。
然后每一层的每个神经元,与下一层的每个神经元,都通过权重参数建立起连接……
层与层之间,完全连接。
也就是说,第i层的任意一个神经元,一定与第i+1层的任意一个神经元相连。
这就是多层感知机,简称mlp。
但仅仅简单组合在一起,还不算真正的“人工神经网络”,必须对“感知机”的基本结构,做出一定的改进。
首先,必须加入隐藏层,以增强模型的表达能力。
隐藏层可以有多层,层数越多,表达能力越强,但与此同时,也会增加模型的复杂度,导致计算量急遽增长。
其次,输出层的神经元允许拥有多个输出。
这样模型就可以灵活地应用于各种分类回归,以及其他的机器学习领域,比如降维、聚类等。
此外,还要对激活函数做出扩展……
前一篇“感知机”论文中,主要使用的是阶跃函数sign,虽然简单易用,但是处理能力有限。
因此神经网络的激活函数,一般使用其他的非线性函数。
备选的函数有很多:sigmoid函数,tanh函数,relu函数……
江寒逐一进行了分析。
通过使用多种性能各异的激活函数,可以进一步增强神经网络的表达能力。
对于二分类问题,只需要一个输出神经元就够了。
使用sigmoid作为激活函数,来输出一个0到1之间的数值,用来表示结果为1的概率。
对于多类分类问题,一般在输出层中,安排多个神经元,每个分类一个。
然后用softmax函数来预测每个分类的概率……
描述完结构之后,就可以讨论一下“多层感知机”的训练了。
首先是mlp的训练中,经典的前向传播算法。
顾名思义,前向传播就是从输入层开始,逐层计算加权和,直到算出输出值。
每调整一次参数值,就需要重头到尾重新计算一次。
这样运算量是非常大的,如果没有强大的硬件基础,根本无法支撑这种强度的训练。
好在现在已经是2012年,计算机性能已经足够强悍。
前向传播无疑是符合直觉的,缺陷就是运算量很大,训练起来效率比较差。
与“感知机”的训练相比,mlp的训练需要引入损失函数和梯度的概念。
神经网络的训练,本质上是损失函数最小化的过程。
损失函数有许多种选择,经典的方法有均方误差、交叉熵误差等,各有特性和利弊。
整个训练过程是很清晰的。
先随机初始化各层的权重和偏置,再以损失函数为指针,通过数值微分求偏导的办法,来计算各个参数的梯度。
然后沿着梯度方向,以预设的学习率,逐步调整权重和偏置,就能求得最优化的模型……
写完这些就足够了,再多的内容,可以安排在下一篇文章里。
不过,江寒想了想,觉得这篇论文的内容,还是有点过于充实。
仔细琢磨了一下,干脆将其一分为二。
多层感知机的结构和前向传播的概述部分,单独成篇。
神经网络训练中,关于激活函数和损失函数讨论的部分,再来一篇。
然后分开投稿,这样不就可以多拿1个学术点了?
反正学术点又不看
『加入书签,方便阅读』