一文详解神经网络与激活函数的基本原理

2020 年 12 月 28 日 PaperWeekly


©PaperWeekly 原创 · 作者|王东伟

单位|致趣百川

研究方向|深度学习


本文介绍神经网络(Neural Network)及激活函数(Activation Function)的基本原理。

考虑以下分类问题:

▲ 图1


显然,该分类问题具有非线性的决策边界。如果不增加特征,采用线性核的 SVM(以下简称线性 SVM)和逻辑回归都无法拟合,因为它们只能得到形如 的线性边界。
一个可行的办法是增加高次方项作为特征输入,比如以 作为线性 SVM 或逻辑回归输入,可以拟合形如 的决策边界(实际上它可以拟合圆或椭圆),对于图 1 所示的例子这可能是不错的模型。

然而,在实际案例中我们通常都无法猜到决策边界的“形状”,一是因为样本的特征数量很大导致无法可视化,二是其可能的特征组合很多。

对于上述非线性模型拟合的问题,我们之前介绍了采用核函数的 SVM,本文将介绍更通用的方法——神经网络。

考虑以下矩阵运算:

即:



可以看到   的每个元素都是   的线性变换。一般地,对于权重矩阵  、输入向量  、偏置向量  ,可以得到 x 的线性变换 

这里我们用   表示 k 行 n 列的矩阵, 表示 n 维向量。由于一些传统的原因,当我们说 n 维向量,一般指 n 维列向量,即 n 行 1 列的矩阵。
我们可以对 x 作多次线性变换得到最终的输出 y,如:

其中,我们用上标来区分不同变换的参数。
用图形表示为(假设向量 的维数分别是 2,3,2,1)。

▲ 图2


上述连续变换我们称之为 3 层神经网络模型,它有 2 个隐藏层(hidden layer)、1 个输出层(output layer),并且输入 x 有两个特征,注意输入层不计入层数。一般地,如果输入 x 经过 L 次连续变换得到输出 y,那么该变换对应的神经网络模型有 L 层,并且具有 L-1 个隐藏层。
如图 1,隐藏层 1 有 3 个神经元(注意不包括偏置项),其中 可以视为关于 x 的函数,我们也称之为神经元(neuron)或单元(unit),它接收上一层发出的信号 x,进行运算后将结果信号传递到下一层与其连接的神经元。如果某一层的任意神经元都分别连接到上一层的所有神经元,则该层称为全连接层(full connected layer,FC)。
作为个人的建议,你可以把一个层理解为一次变换(或映射),其输出将作为下一层(如果有的话)的输入。事实上,关于层的定义,我不认为我完全清楚,但是我通常会用矩阵运算或函数来看待神经网络的问题,所以如果你理解了原理,这些名词其实不重要。

关于神经网络的同义名词。由于部分人不喜欢神经网络与人脑机制的类比,所以他们更倾向于将神经元称为单元,此外,神经网络也被称为多层感知机(multilayer perceptron)。说实话我也不喜欢,但是为了尽可能减少信息差,本文将采用使用率更高的名词。

现在,我们来分析如何用神经网络模型解决本文开篇的非线性分类问题。
仔细分析可以发现,x 经过多次线性变换的结果仍然是关于 x 的线性变换,显然,为了拟合非线性的模型我们需要加一些“非线性的运算”。具体的操作如下:



其中,