四、多层感知机
4.1 感知机
感知机是一个二分类模型:输出-1或1
训练感知机
等价于使用批量大小为1的梯度下降,并使用如下损失函数:
(预测正确,预测错误就有梯度,因为大于0)
收敛定理
XOR问题
感知机不能拟合XOR函数(异或运算),他只能产生线性分割面
4.2 多层感知机
可以解决XOR问题
我们可以把前𝐿−1层看作表示,把最后一层看作线性预测器。 这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。
隐藏层大小是超参数
实现
4.3 激活函数
激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。
sigmoid函数
sigmoid函数将输入变换为区间(0, 1)上的输出
因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值
tanh函数
ReLU函数
最受欢迎的激活函数是修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。
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. 欠拟合还是过拟合?
模型容量:拟合各种函数的能力
低容量的模型难以拟合训练数据,高容量的模型可以记住所有的训练数据
VC维:对于一个分类模型,VC等于一个最大的数据集的大小,不管如何给定标号,都存在一个模型对它进行完美分类
它可以衡量训练误差和泛化误差之间的间隔,但深度学习中很少使用,因为它衡量不准确、且计算深度学习模型的VC维很困难
4.5 权重衰退 weight decay
正则化,通过函数与零的距离来衡量函数的复杂度
控制模型容量方法:模型参数少,模型参数值选择范围小
使用均方范数作为硬性限制
权重衰退通过限制参数值的选择范围来控制模型容量
通常不限制偏移b(限不限制都差不多)
小的θ意味着更强的正则项
使用均方范数作为柔性限制
对每个θ,都可以找到λ,使得之前的目标函数等价于下面
超参数λ控制了正则项的重要程度
参数更新法则
计算梯度
时间t更新参数
通常,在深度学习中通常叫做权重衰退
实现
4.6 Dropout
全连接层使用
无偏差的加入噪音
对x加入噪音得到x’,我们希望E[x’]=x
丢弃法对每个元素进行如下扰动:
dropout的使用
通常作用在隐藏全连接层的输出上
正则项只在训练中使用:他们影响模型参数的更新
在推理(预测)过程中,丢弃法直接返回输入 h= dropout(h)
这样也能保证确定性的输出
超参数:p(通常写λ) 可以取0.5 0.1 0.9…
实现
4.8 数值稳定性和模型初始化
考虑如下有d层的神经网络
计算损失关于参数的梯度
梯度爆炸
过多的矩阵累乘(d-t太大)
问题:
- 值超出值域(infinity)
- 对学习率敏感
- 如果学习率太大 ->大参数值 ->更大的梯度
- 如果学习率太小 ->训练无进展
- 我们可能需要在训练过程不断调整学习率
梯度消失
当sigmoid函数的输入很大或是很小时,它的梯度都会消失。
问题:
- 梯度值变为0
- 无论如何选择学习率,训练没有进展
- 对于底部层尤为严重,仅仅顶部层训练的较好,无法让神经网络更深
让每层的方差都是一个常数(要求)
让每层的输出和梯度都看作随机变量
让他们的均值和方差都保持一致
使用以下方法来满足该要求:
权重初始化
在合理值区间里随机初始参数
训练开始的时候更容易有数值不稳定
- 远离最优解的地方损失函数表面可能很复杂
- 最优解附近表面会比较平
使用 来初始可能对小网络没问题,但不能保证深度神经网络