四、多层感知机

4.1 感知机

notion image
感知机是一个二分类模型:输出-1或1
notion image

训练感知机

等价于使用批量大小为1的梯度下降,并使用如下损失函数:
(预测正确,预测错误就有梯度,因为大于0)

收敛定理

notion image

XOR问题

感知机不能拟合XOR函数(异或运算),他只能产生线性分割面
 

4.2 多层感知机

可以解决XOR问题
我们可以把前𝐿−1层看作表示,把最后一层看作线性预测器。 这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP
隐藏层大小是超参数
右图这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。 输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。 注意,这两个层都是全连接的。 每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。
右图这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。 输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。 注意,这两个层都是全连接的。 每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。
notion image
notion image

实现

4.3 激活函数

激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。

sigmoid函数

sigmoid函数将输入变换为区间(0, 1)上的输出
因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值
notion image

tanh函数

notion image
 

ReLU函数

最受欢迎的激活函数是修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。
notion image

4.4 模型选择、欠拟合和过拟合

4.4.1 训练误差和泛化误差

训练误差:模型在训练数据上的误差
泛化误差:模型在新数据上的误差
例子:根据摸考成绩来预测未来考试分数
在过去的考试中表现很好(训练误差)不代表未来考试一定会好(泛化误差)
学生A通过背书在摸考中拿到很好成绩
学生B知道答案后面的原因

4.4.2 模型选择

验证数据集:一个用来评估模型好坏的数据集
例如拿出 50% 的训练数据
不要跟训练数据混在一起(常犯错误)
测试数据集:只用一次的数据集
K-折交叉验证
无法提供足够的数据来构成一个合适的验证集时使用
将训练数据分割成K块,使用第 i 块(i = 1, …, K)作为验证数据集,其余的作为训练数据集,报告K个验证集误差的平均
常用K = 5或K = 10
 

4.4.3. 欠拟合还是过拟合?

notion image
模型容量:拟合各种函数的能力
低容量的模型难以拟合训练数据,高容量的模型可以记住所有的训练数据
模型复杂度对欠拟合和过拟合的影响
模型复杂度对欠拟合和过拟合的影响
VC维:对于一个分类模型,VC等于一个最大的数据集的大小,不管如何给定标号,都存在一个模型对它进行完美分类
notion image
它可以衡量训练误差和泛化误差之间的间隔,但深度学习中很少使用,因为它衡量不准确、且计算深度学习模型的VC维很困难
 

4.5 权重衰退 weight decay

正则化,通过函数与零的距离来衡量函数的复杂度
控制模型容量方法:模型参数少,模型参数值选择范围小

使用均方范数作为硬性限制

权重衰退通过限制参数值的选择范围来控制模型容量
通常不限制偏移b(限不限制都差不多)
小的θ意味着更强的正则项

使用均方范数作为柔性限制

对每个θ,都可以找到λ,使得之前的目标函数等价于下面
超参数λ控制了正则项的重要程度
notion image

参数更新法则

计算梯度
时间t更新参数
通常,在深度学习中通常叫做权重衰退

实现

4.6 Dropout

全连接层使用

无偏差的加入噪音

对x加入噪音得到x’,我们希望E[x’]=x
丢弃法对每个元素进行如下扰动:

dropout的使用

通常作用在隐藏全连接层的输出上
notion image
正则项只在训练中使用:他们影响模型参数的更新
在推理(预测)过程中,丢弃法直接返回输入 h= dropout(h)
这样也能保证确定性的输出
超参数:p(通常写λ) 可以取0.5 0.1 0.9…

实现

4.8 数值稳定性和模型初始化

考虑如下有d层的神经网络
计算损失关于参数的梯度

梯度爆炸

过多的矩阵累乘(d-t太大)
问题:
  • 值超出值域(infinity)
  • 对学习率敏感
    • 如果学习率太大 ->大参数值 ->更大的梯度
    • 如果学习率太小 ->训练无进展
    • 我们可能需要在训练过程不断调整学习率

梯度消失

notion image
当sigmoid函数的输入很大或是很小时,它的梯度都会消失。
问题:
  • 梯度值变为0
  • 无论如何选择学习率,训练没有进展
  • 对于底部层尤为严重,仅仅顶部层训练的较好,无法让神经网络更深

让每层的方差都是一个常数(要求)

让每层的输出和梯度都看作随机变量
让他们的均值和方差都保持一致
notion image
使用以下方法来满足该要求:

权重初始化

在合理值区间里随机初始参数
训练开始的时候更容易有数值不稳定
  • 远离最优解的地方损失函数表面可能很复杂
  • 最优解附近表面会比较平
使用 来初始可能对小网络没问题,但不能保证深度神经网络

Xavier初始

notion image
Loading...