前面介绍了线性神经网络,但是线性模型是有可能出错的,因为线性模型意味着是单调假设,但是现实中往往很复杂。例如,我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说,温度越高风险越大。 然而,对体温低于37摄氏度的人来说,温度越高风险就越低。
所以在深度神经网络中,我们使用观测数据来联合学习隐藏层表示和应用于该表示的线性预测器,以此来克服线性模型的限制
1 隐藏层
隐藏层(Hidden Layer)是人工神经网络(ANN)中介于输入层和输出层之间的层。隐藏层由多个神经元组成,这些神经元对输入进行加权求和,并通过激活函数进行非线性变换,可以让模型学习到更复杂的特征和模式
1.1 在网络中加入隐藏层
最简单的方法是将许多全连接层堆叠在一起。 每一层都输出到上面的层,直到生成最后的输出。 我们可以把前 L − 1 L-1 L−1 层看作表示,把最后一层看作线性预测器。 这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。下图是一个多层感知机:
这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。
注意,这两个层都是全连接的。每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。
1.2 从线性到非线性
假设用矩阵 X X X 来表示 n n n 个样本的小批量,每个样本具有 d d d 个输入特征。
对于具有 h h h 个隐藏单元的单隐藏层感知机,我们用 H H H 表示隐藏层的输出,在数学中, H H H 也被称为隐藏层变量。因为隐藏层和输出层是全连接的,所以我们有隐藏层权重 W ( 1 ) W^{(1)} W(1) 和隐藏层偏置 b ( 1 ) b^{(1)} b(1),和输出层权重 W ( 2 ) W^{(2)} W(2) 和输出层偏置 b ( 2 ) b^{(2)} b(2) ,所以我们的多层感知机的输出 O O O可以用以下表示:
但是该模型依然没有实现非线性变化,因为隐藏单元是由输入的仿射函数给出,输出又是由隐藏单元的仿射函数给出,仿射函数的仿射函数,还是仿射函数,不包含非线性变化。
所以为了解决这一问题, 我们在在仿射变换之后对每个隐藏单元应用非线性的激活函数(activation function) σ \sigma σ,这样多层感知机的输出变成了下面的样式:
通过堆叠这样的隐藏层,可以产生更有表达能力的模型。
1.3 通用近似定理
定义:一个具有足够数量的隐藏层神经元的前馈神经网络(例如多层感知机),只要使用适当的激活函数(如非线性激活函数),可以以任意精度近似任何连续的、多变量的函数。
如,在一对输入上进行基本逻辑操作,多层感知机是通用近似器,但它并不关心训练的效率、网络的大小或如何选择最优的网络结构。因此,实际工作中还需要考虑优化算法、网络的设计和数据量等问题。
2 激活函数
激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活,它们将输入信号转换为输出的可微运算。 大多数激活函数都是非线性的。激活函数的输出被称为活性值(activations)。
2.1 ReLU函数
最受欢迎的激活函数是修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。 ReLU提供了一种非常简单的非线性变换。
给定元素 x x x ,ReLU函数被定义为该元素与0的最大值:
R e L U ( x ) = m a x ( x , 0 ) ReLU(x)=max(x,0) ReLU(x)=max(x,0)
即只保留正元素,丢弃所有负元素,可以看出ReLU是分段的。
当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。
所以:
- 当正向传播时,如果隐藏层仿射函数的输出 z z z 是正数,则输出本身;如果输出是负数或者0,则输出0.
- 当反向传播时,如果 z z z 是正数,则输出1; z z z 是负数或者0时,输出0
ReLU有很多变体,比如参数化ReLU,即为ReLU添加一个线性项,这样即使有些参数是负的,也可以通过:
2.2 sigmoid函数
对于一个定义域在 R \mathbb{R} R中的输入,sigmoid函数将输入变化为区间(0,1)上的输出,所以也被称为挤压函数(squashing function),公式如下:
早期神经网络热衷与“激发”和“不激发”,即认为有一个阈值单元,低于阈值取0,高于阈值取1。但当大家专注于梯度学习后,sigmoid函数作为一个平滑的曲线,逐渐被使用。
sigmoid函数的导数为以下公式:
即输入为0时,导数值最大为0.25,越远离0,导数值越接近0
2.3 tanh函数
与sigmoid函数类似, tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。 tanh函数的公式如下:
tanh的导数公式是:
即输入越接近0,导数值越接近最大值1,越远离0,导数值越接近0