多层感知机|动手学深度学习

371 阅读3分钟

1. 计算 pReLU 激活函数的导数。

pReLU(Parametric Rectified Linear Unit)激活函数是ReLU(Rectified Linear Unit)的一个变种,它引入了一个可学习的参数 aa 来控制负输入的斜率。pReLU 激活函数的公式如下:

f(x)=max(0,x)amin(0,x)f(x) = \max(0, x) - a \min(0, x)

其中,xx 是输入值,aa 是一个可训练的参数,通常初始化为一个小的负数,比如 a=0.01a = -0.01

要计算 pReLU 激活函数的导数,我们需要考虑 xx 的两种情况:

  1. x>0x > 0 时,pReLU 的导数是 1,因为 max(0,x)\max(0, x) 的导数是 1,而 amin(0,x)a \min(0, x) 为 0。

  2. x<0x < 0 时,pReLU 的导数是 aa,因为 max(0,x)\max(0, x) 为 0,而 amin(0,x)a \min(0, x) 的导数是 aa

因此,pReLU 激活函数的导数可以表示为:

f(x)={1if x>0aif x0f'(x) = \begin{cases} 1 & \text{if } x > 0 \\ a & \text{if } x \leq 0 \end{cases}

这意味着 pReLU 函数在正数区间的梯度与原始的ReLU函数相同,而在负数区间则由参数 aa 控制,这允许负输入有一定的梯度,从而有助于缓解ReLU激活函数中的“死亡ReLU“问题,即当输入为负时,梯度为零,导致权重不再更新。

2. 证明一个仅使用 ReLU(或 pReLU)的多层感知机构造了一个连续的分段线性函数。

由于ReLU和pReLU都是分段线性函数,每个神经元的输出也是分段线性的。一个多层感知机可以表示为多个这样的神经元的组合。如果我们将每个层的输出视为下一层的输入,那么整个网络的输出可以表示为一系列分段线性函数的复合。

ReLU 和 pReLU 在 x>0x > 0 时都是连续的。对于 ReLU,当 x=0x = 0 时,函数是连续的,但是不可导的。对于 pReLU,由于引入了参数 aa,即使在 x=0x = 0 时,函数也是连续且可导的,因为斜率是平滑过渡的。

总的来说,由于每个神经元的输出是分段线性的,并且整个网络是这些神经元的线性组合,所以整个网络的输出也是一个分段线性函数。此外,由于 ReLU 和 pReLU 在定义域内是连续的,整个网络的输出也是连续的。

3. 证明 tanh(x)+1=2sigmoid(2x)\operatorname{tanh}(x) + 1 = 2 \operatorname{sigmoid}(2x)

tanh(x)=1e2x1+e2x\operatorname{tanh}(x) = \frac{1 - e^{-2x}}{1 + e^{-2x}}

sigmoid(x)=11+ex\operatorname{sigmoid}(x) = \frac{1}{1 + e^{-x}}

tanh(x)+1=1e2x+1+e2x1+e2x=21+e2x=2sigmoid(2x)\operatorname{tanh}(x) + 1 = \frac{1 - e^{-2x} + 1 + e^{-2x}}{1 + e^{-2x}} = \frac{2}{1 + e^{-2x}} = 2 \operatorname{sigmoid}(2x)

4. 假设我们有一个非线性单元,将它一次应用于一个小批量的数据。这会导致什么样的问题?

在深度学习中,将非线性激活函数应用于数据通常是为了引入非线性,从而允许神经网络学习并模拟更加复杂的函数。然而,如果非线性单元被应用于一个小批量(mini-batch)的数据,可能会遇到几个问题:

  1. 梯度消失或爆炸:非线性激活函数,特别是像sigmoid或tanh这样的饱和激活函数,可能导致梯度消失问题,即在反向传播过程中梯度值变得非常小,这会显著减慢学习过程。另一方面,某些非线性函数可能导致梯度爆炸,即梯度值变得非常大,这会导致权重更新不稳定,甚至导致模型发散。

  2. 死亡ReLU问题:ReLU(Rectified Linear Unit)是一种常用的非线性激活函数,但如果输入为负,它会输出0。在训练过程中,如果一个神经元的输出持续为0,那么这个神经元就会停止学习,这种现象被称为“死亡ReLU”问题。

  3. 局部极小值或鞍点:非线性激活函数的引入可能会使得损失函数的景观变得更加复杂,存在许多局部极小值和鞍点。这可能导致优化算法难以找到全局最小值,从而影响模型的泛化能力。

  4. 计算复杂度:非线性激活函数增加了模型的计算复杂度,因为每个激活函数都需要额外的计算。对于大型模型或大数据集,这可能会导致训练时间显著增加。

  5. 过拟合风险:非线性激活函数可能会增加模型的容量,使其能够捕捉到数据中的复杂模式。然而,如果模型过于复杂,它可能会对训练数据过拟合,而在未见过的测试数据上表现不佳。

  6. 难以解释性:非线性激活函数可能会使得模型的决策过程变得更加难以解释。这是因为非线性函数的引入使得从输入到输出的映射变得更加复杂,难以直观理解。

  7. 批量归一化的需求:为了解决一些由非线性激活函数引入的问题,如梯度消失或爆炸,通常会在非线性激活之前应用批量归一化(Batch Normalization)。批量归一化通过规范化小批量数据的均值和方差,有助于稳定梯度并加速训练过程。

  8. 对输入数据的敏感性:非线性激活函数可能会增加模型对输入数据的敏感性。这意味着,即使输入数据的微小变化也可能导致输出的显著变化,这可能会影响模型的稳定性和鲁棒性。

总的来说,虽然非线性激活函数对于构建能够学习复杂模式的强大神经网络至关重要,但它们的使用也带来了一些挑战和问题,需要通过适当的技术,如正则化、归一化和优化算法的选择,来解决这些问题。