背景
假设有这样一个监督学习训练集,如下图所示:
如果使用逻辑回归的方法,我们的预测函数可能包含很多的非线性项,在只有两个特征的情况下,逻辑回归所训练出的预测函数也许可以表现得很好。
如果问题中的特征项非常多的时候,预测函数将会变得非常复杂。假设有100个特征,而且函数中只包含二次项,那样的话预测函数中将会出现大约5000个二次项。不仅如此,如果算上三次项、四次项等,预测函数的特征空间将急剧膨胀。而且当参数很多时,也可能出现过拟合的现象。
在许多机器学习问题中,特征数量是非常大的,例如计算机视觉中的算法,一张图片可能有成千上万个像素点,预测函数中的特征数量可能是几百万几千万,这是无法想象的。神经网络可以很好的解决这一问题。
人脑中的神经网络
人脑中的神经网络是由很多个神经元组成,它们之间相互连接,相互传递信号,一个简单的例子如下图所示:
其中绿色的圆圈代表神经元中的细胞核,用于对输入的信号进行计算,而Dendrite代表树突,用于接收来自其他神经元的信息。Axon代表轴突,是神经元的输出通道,可以给与它连接的其他神经元传递信息。神经元的工作过程就是由树突接收输入信号,在细胞核中经过一系列的计算,并将计算结果通过轴突传递出去。
计算机中的神经网络
在计算机中,神经网络被模拟成一组神经元,也就是将多个上述的逻辑单元连接起来。如下图所示:
可以看出,中间三个黄色圆圈都要进行一系列的计算,并作为输入变量传递给最后的黄色圆圈,进行最后的计算并输出。在神经网络中,第一层蓝色圆圈为输入层,用来输入特征;最后一层黄色圆圈为输出层,用来输出预测的最终结果。输出层和输出层以外的其他所有层都被称为隐藏层。
在神经网络中, 表示第j 层第i 个激活项,激活项指的就是该结点使用sigmoid激活函数计算输入变量后输出的值。 表示第j 层的参数矩阵,表示从第j 层到第j+1 层的映射关系。以上图为例,整个神经网络的计算过程为:
就表示从第一层到第二层的计算关系,是一个3x4的矩阵。一般来说,如果第j 层拥有 个单元,而第j+1 层拥有 个单元,那么 的维度就是 × (1+)。+1是因为有偏置项的存在,这里的θ可以称为参数,也可以称为模型的权重。
现在我们将这个计算过程向量化,首先将g函数中所要计算的项,也就是下图中的式子:
将这部分分别定义为、、 ,那么 就可以表示为: ,从而得到 。然后为第二层添加偏置项 ,这样又可以推导出第三层上的 ,最后得到 。这个过程也称为前向传播。
对于上述的这个简单的神经网络来说,如果我们盖住左边的一部分,剩下的部分看起来就非常像一个逻辑回归,也就是说用左边三个黄色圆圈来输入变量,中间的圆圈来进行预测。此时这个神经网络的计算过程就非常简单了:
这实际上就是逻辑回归,但这里输入的特征并不是原始的输入变量x1,x2,x3,而是原始输入变量经过隐藏层计算后输出的特征a1,a2,a3。而且这个隐藏层的计算过程是我们可以控制的,这样一来,我们就可以通过修改参数矩阵 来为隐藏层输出许多有趣和复杂的特征,并可能因此而得到更好的预测函数。总的来说,在神经网络中,输入变量在经过隐藏层的计算时,会变换成其他完全不同的特征,而这些特征又做为后一层的输入来完成进一步的变换,最后到达输出层,得到一个非常好的预测函数,而这就是前向传播的工作原理。