一、多层感知机
1.定义:L−1层看作“表⽰”(加入激活函数使其非线性),把最后⼀层看作线性预测器。
这种架构通常称为多层感知机(multilayer perceptron),通常缩写为MLP。
2.虽然⼀个单隐层⽹络能学习任何函数,但并不意味着我们应该尝试使⽤单隐藏层⽹络来解决所有问题。 事实上,通过使⽤更深(⽽不是更⼴)的⽹络,我们可以更容易地逼近许多函数。
3.具有全连接层的多层感知机的参数开销可能会⾼得令⼈望⽽却步。(用什么技术解决?)
激活函数(实现线性→非线性)
1.激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活
2.⼤多数激活函数都是⾮线性的
3.系统有了激活函数,就不可能再将我们的多层感知机退化成线性模型
4.常⽤的激活函数包括ReLU函数(常用)、sigmoid函数和tanh函数(容易导致梯度消失)
二、欠拟合与过拟合
- 定义:
欠拟合:模型过于简单(训练误差≈验证误差,泛化误差很⼩,且两种误差都比较高)
过拟合:模型过于复杂(训练误差<验证误差,泛化误差很大,且两种误差都比较低)
- 实验例子:
模型一:从多项式特征中选择前2个维度,即1和x
训练结果:
模型二:从多项式特征中选择前4个维度,即1,x,x^2/2!,x^3/3!\
训练结果:
模型三:从多项式特征中选取所有维度,即1,x,x^2/2!,x^3/3!.....x^19/19!
训练结果:
三、权重衰减(目的:解决过拟合问题)
- 正则化模型的技术,解决过拟合问题。权重衰减(weight decay)是最⼴泛使⽤的正则化的技术之⼀,它通常也被称为L2正则化。
- 权重向量:w
- 使⽤平⽅范数∥w∥ 2⽽不是标准范数∥w∥(即欧⼏⾥得距离)的原因:
- 平⽅范数∥w∥ 2使得惩罚的导数很容易计算:导数的和等于和的导数。
- 使⽤L2范数的⼀个原因是它对权重向量的⼤分量施加了巨⼤的惩罚。这使得我们的学习算法偏向于在⼤量特征上均匀分布权重的模型。在实践中,这可能使它们对单个变量中的观测误差更为稳定。相⽐之下,L1惩罚会导致模型将权重集中在⼀⼩部分特征上,⽽将其他权重清除为零。这称为特征选择(feature selection),这可能是其他场景下需要的
- 损失函数变化如下:
![](https://i-blog.csdnimg.cn/blog_migrate/0a547f6e511536f80219d62e86475b61.png)
- ⼩批量随机梯度下降公式变化如下:
- 是否对相应的偏置b 2进⾏惩罚在不同的实践中会有所不同,在神经⽹络的不同层中也会有所不同。通常,⽹络输出层的偏置项不会被正则化。
四、暂退法(Dropout)
- 暂退法可以避免过拟合,它通常与控制权重向量的维数和⼤⼩结合使⽤的。
- 简单性的另⼀个⻆度是平滑性,即函数不应该对其输⼊的微⼩变化敏感。他们建议在计算后续层之前向⽹络的每⼀层注⼊噪声。因为当训练⼀个有多层 的深层⽹络时,注⼊噪声只会在输⼊-输出映射上增强平滑性。这种⽅法之所以被称为暂退法,因为我们从表⾯上看是在训练过程中丢弃(drop out)⼀些神经元。在整个训练过程的每⼀次迭代中,标准暂退法包括在计算下⼀层之前将当前层中的⼀些节点置零。
- 在训练时使用暂退法,在测试时不⽤暂退法。
-
从⽽产⽣扰动点 x ′ = x + ϵ ,预期是 E [ x ′ ] = x。换⾔之,每 个中间活性值 h 以暂退概率 p 由随机变量 h ′ 替换根据此模型的设计,其期望值保持不变,即 E [ h ′ ] = h
-
⼀些研究⼈员在测试时使⽤暂退法,⽤于估计神经⽹络预测的“不确定性”: 如果通过许多不同的暂退法遮盖后得到的预测结果都是⼀致的,那么我们可以说⽹络发挥更稳定。
#每个隐藏层的输出(在激活函数之后) def forward(self, X): H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs)))) # 只有在训练模型时才使⽤dropout if self.training == True: # 在第⼀个全连接层之后添加⼀个dropout层 H1 = dropout_layer(H1, dropout1) H2 = self.relu(self.lin2(H1)) if self.training == True: # 在第⼆个全连接层之后添加⼀个dropout层 H2 = dropout_layer(H2, dropout2) out = self.lin3(H2) return out
五、前向传播与反向传播
六、数值稳定性和模型初始化
- 初始化⽅案的选择在神经⽹络学习中起着举⾜轻重的作⽤,它对保持数值稳定性⾄关重要。此外, 这些初始化⽅案的选择可以与⾮线性激活函数的选择有趣的结合在⼀起。我们选择哪个函数以及如何初始化 参数可以决定优化算法收敛的速度有多快。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。
- 梯度消失和梯度爆炸
- 要么是梯度爆炸(gradient exploding)问题:参数更新过⼤,破坏了模型的稳定收敛;要么是梯度消失(gradient vanishing)问题:参数更新过⼩,在每次更新时⼏乎不会移动,导致模型⽆法学习。
-
考虑⼀个具有 L 层、输⼊ x 和输出 o 的深层⽹络。其第l层的权重向量的梯度如下:
- 使用参数初始化打破对称性 (我们在每⼀层的隐藏单元之间具有排列对称性,交换每层的隐藏单元,可以获得相同的函数。W(1)的所有元素仍然采⽤相同的值,我们可能永远也⽆法实现⽹络的表达能⼒)
-
请注意,虽然⼩批量随机梯度下降不会打破这种对称性,但暂退法、正则化可以。
-
参数初始化的方法
-
默认随机初始化
-
Xavier 初始化
-
-