深度学习基础:为什么神经网络需要多层和非线性?
深度学习基础:为什么神经网络需要多层和非线性?
深度学习的核心在于通过多层非线性变换对高复杂性数据进行建模。神经网络作为实现这一目标的主要工具,其多层结构和非线性激活函数是关键所在。本文将深入探讨为什么神经网络需要解决多层和非线性问题。
1. 线性模型的局限性
在线性模型中,模型的输出为输入的加权和。假设一个模型的输出y和输入xi满足以下关系,那么这个模型就是一个线性模型。
$$
y=\sum_{i} w_{i} x_{i}+b
$$
其中$w_{i}, b \in R$为模型参数。被称之为线性模型是因为当模型的输入只有一个的时候,x和y形成了二维坐标系上的一条直线。类似地,当模型有n个输入时,x和y形成了n+1维空间中的一个平面。而一个线性模型中通过输入得到输出的函数被称之为一个线性变换。上面的公式就是一个线性变换。线性模型的最大特点是任意线性模型的组合仍然还是线性模型。
因为线性模型就能解决线性可分问题,而在深度学习面对的问题至少是无法通过直线(或者高维空间的平面)划分的。在现实世界中,绝大部分的问题都是无法线性分割的。
2. 激活函数实现去线性化
如果将每一个神经元(也就是神经网络中的节点)的输出通过一个非线性函数,那么整个神经网络的模型就不再是线性了。这个非线性函数就是激活函数。下图显示了加入激活函数和偏置项之后的神经元结构。
以下公式给出了神经网络结构加上激活函数和偏置项后的前向传播算法的数学定义:
\begin{aligned}
& A_{1}=\left[a_{11}, a_{12}, a_{13}\right]=f\left(x W^{(1)}+b\right) \
=& f\left(\left[x_{1}, x_{2}\right]\right)\left(\begin{array}{l}
W_{1,1}^{(1)} \
W_{1,2}^{(1)} \
W_{2,1}^{(1)} W_{1,2}^{(1)} \
W_{2,3}^{(1)}
\end{array}\left[\left[b_{1}, b_{2}, b_{3}\right]\right)\right.\
=& f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}, W_{1,2}^{(1)} x_{1}+W_{2,2}^{(1)} x_{2}+b_{2}, W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right) \
=& {\left[f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}\right), f\left(W_{1,2}^{(1)} x_{1}+W_{2}^{(1)} x_{2}+b_{2}\right), f\left(W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right)\right] }
\end{aligned}
相比于之前新的公式中增加了偏置项(bias),偏置项是神经网络中非常常用的一种结构。第二个改变就是每个节点的取值不再是单纯的加权和。每个节点的输出在加权和的基础上还做了一个非线性变换。下图展示了几种常用的非线性激活函数的的函数图像。
$$
f(x)=\max (x, 0) \
f(x)=\frac{1}{1+e^{-x}} \
f(x)=\frac{1-e^{-2 x}}{1+e^{-2 x}}
$$
这些激活函数的函数图像都不是一条直线。所以通过这些激活函数。每一个节点不再是线性变换,于是整个神经网络也就不再是线性的了,加入ReLU激活函数之后,神经网络的前行传播算法的计算方法为:
\begin{array}{l}
a_{11}=f\left(W_{1,1}^{(1)} x_{1}+W_{2,1}^{(1)} x_{2}+b_{1}\right) \
a_{12}=f\left(W_{1,2}^{(1)} x_{1}+W_{2,2}^{(1)} x_{2}+b_{2}\right) \
a_{11}=f\left(W_{1,3}^{(1)} x_{1}+W_{2,3}^{(1)} x_{2}+b_{3}\right)
\end{array}
输出层的公式为:
$$
Y=f\left(W_{1,1}^{(2)} a_{1,1}+W_{2,1}^{(2)} a_{1,2}+W_{3,1}^{(2)} a_{1,3}+b_{1}^{(2)}\right)
$$
目前tensorflow提供了7中不同的非线性激活函数,tf.nn.relu、tf.sigmoid和tf.tanh是其中比较常用的几个。当然,tensorflow也支持使用自己定义的激活函数。
3. 多层神经网络解决异或问题
在神经网络的发展历史上,一个很重要的问题就是疑惑问题。神经网络的理论模型由 Warren McCulloch和Walter Pitts在1943年首次提出,并在1958年由Frank Rosenblatt提出感知机(perceptron)模型,从数学上完成了对神经网络的精确建模。感知机可以简单地理解为单层的神经网络。感知机会将输入进行加权和,然后再通过激活函数最后得到输出。这个结构就是一个灭有隐藏层的神经网络。在上世纪60年代,神经网络作为对人类大脑的模拟算法受到了很多关注。然而到了1969年,Marvin Minsky和Seymour Papert在Perceptrons:An Introduction to Computational Geometry一书中提出感知机无法模拟异或运算。
深层神经网络实际上有组合提取特征的功能。这个特征对于解决不以提取特征向量的问题(比如图片识别、语音识别等)有很大帮助。这也是深度学习在这些问题上更加容易取得突破性进展的原因。