动手学深度学习【多层感知机】

一、多层感知机

我们的数据可能会有⼀种表⽰,这种表⽰会考虑到我们在特征之间的相关交互作⽤。在此表⽰的基础上建⽴⼀个线性模型可能会是合适的,但我们不知道如何⼿动计算这么⼀种表⽰。对于深度神经⽹络,我们使⽤观测数据来联合学习隐藏层表⽰和应⽤于该表⽰的线性预测器。
(这种“表示”该怎么可视化呢?怎么评判它是否合格呢?)

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!

训练结果:

 

1. 可调整参数的数量。当可调整参数的数量(有时称为⾃由度)很⼤时,模型往往更容易过拟合。
2. 参数采⽤的值。当权重的取值范围较⼤时,模型可能更容易过拟合。
3. 训练样本的数量。即使模型很简单,也很容易过拟合只包含⼀两个样本的数据集。⽽过拟合⼀个有数百
万个样本的数据集则需要⼀个极其灵活的模型


三、权重衰减(目的:解决过拟合问题)

  • 正则化模型的技术,解决过拟合问题。权重衰减(weight decay)是最⼴泛使⽤的正则化的技术之⼀,它通常也被称为L2正则化。
  • 权重向量:w             
  • 使⽤平⽅范数w2⽽不是标准范数w(即欧⼏⾥得距离)的原因
    • 平⽅范数w2使得惩罚的导数很容易计算:导数的和等于和的导数。
    • 使⽤L2范数的⼀个原因是它对权重向量的⼤分量施加了巨⼤的惩罚。这使得我们的学习算法偏向于在⼤量特征上均匀分布权重的模型。在实践中,这可能使它们对单个变量中的观测误差更为稳定。相⽐之下,L1惩罚会导致模型将权重集中在⼀⼩部分特征上,⽽将其他权重清除为零。这称为特征选择(feature selection),这可能是其他场景下需要的
  • 损失函数变化如下:
,其中 λ为正则化常数

 

  • ⼩批量随机梯度下降公式变化如下:

 

 

  • 是否对相应的偏置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 初始化

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值