首页 > 其他分享 >【动手学深度学习_李沐】笔记:(三)多层感知机

【动手学深度学习_李沐】笔记:(三)多层感知机

时间:2024-01-14 19:22:05浏览次数:48  
标签:权重 训练 模型 多层 感知机 参数 拟合 李沐 隐藏

【三、多层感知机】笔记

1. 多层感知机:

  • 合并隐藏层:通过合并⼀个或多个隐藏层来克服线性模型的限制

  • 多层感知机(multilayer perceptron):MLP,在输出层和输⼊层之间增加⼀个或多个全连接的隐藏层,并通过激活函数转换隐藏层的输出。最简单是将许多全连接层堆叠,每⼀层都输出到上⾯的层,直到最后的输出。把前 L-1 层看作表⽰,把最后⼀层看作线性预测器。如图,有 4 个输⼊,3 个输出,隐藏层包含 5 个隐藏单元。输出只需实现隐藏层和输出层的计算,因此层数为 2。这两个层是全连接的,全连接层的参数开销比较高需要进行权衡

  • 非线性:X∈Rn×d 表示 n 个样本的小批量,每个样本有 d 个输⼊(特征);H∈Rn×h 表示隐藏层输出,单隐藏层多层感知机有 h 个隐藏单元;W(1)∈Rd×h 表示隐藏层权重;b(1)∈R1×h 表示隐藏层偏置;W(2)∈Rh×q 表示输出层权重;b(2)∈R1×q 表示输出层偏置;O∈Rn×q 表示单隐藏层多层感知机的输出
    image
    image
    image

  • 合并隐藏层可产⽣参数:W = W(1)W(2)b =b(1)W(2) + b(2) 的等价单层模型。在仿射变换之后对每个隐藏单元应⽤非线性的激活函数 σ(activation function)。激活函数的输出被称为激活值(activations),此时不能再将多层感知机退化成线性模型
    image
    image

  • 多层感知机中堆叠隐藏层,如H(1) = σ1(XW(1) + b(1)) 和H(2) =σ2(H(1)W(2) + b(2)),产⽣更有表达能⼒的模型

  • 激活函数:多数是⾮线性的,通过计算加权和偏置确定神经元是否应该被激活,是将输⼊信号转换为输出的可微运算

  • a.a. 线性整流单元 ReLU(Rectified linear unit)函数:通过将相应的激活值设为0来仅保留正元素并丢弃所有负元素。输⼊为负时导数为0,输⼊为正导数为1,输⼊为0时不可导,默认为0(输⼊一般不为0)。实现简单,在各种预测任务中表现良好。求导要么让参数消失,要么让参数通过,使得优化表现得更好,同时减轻了梯度消失问题:ReLU(x) = max(x, 0)
    image
    image

  • a.b. 参数化 ReLU(Parameterized ReLU,pReLU)函数:[He et al., 2015],添加⼀个线性项,即使参数是负的,某些信息仍然可以通过:pReLU(x) = max(0, x) + α min(0, x)

  • b. 挤压 sigmoid(Squashing function)函数:它将范围 (-inf, inf) 中的任意输⼊压缩到区间 (0,1) 中的某个值,是平滑、可微的阈值单元近似。在隐藏层中较少使⽤,被更简单、更容易训练的 ReLU 所取代。输⼊为0时导数达到最⼤值 0.25,输⼊远离 0 时导数接近 0
    image
    image
    image
    image

  • c. 双曲正切 tanh 函数:将输⼊压缩转换为区间** (-1, 1)输入在 0 附近时接近线性变换**。输⼊接近 0 时导数接近最⼤值 1,输⼊在远离 0 点时导数接近 0
    image
    image
    image
    image


2. 模型选择、欠拟合和过拟合:

  • 如何发现可以泛化的模式是机器学习的根本问题。将模型在训练数据上拟合得⽐在潜在分布中更接近的现象称为过拟合,⽤于对抗过拟合的技术称为正则化
  • 训练误差(training error)是指训练数据集的误差。泛化误差(generalization error)是指将模型应⽤在同样从原始样本的分布中抽取的⽆限多的数据样本时,模型误差的期望
  • 独立同分布假设:假设训练数据和测试数据都从相同的分布中独⽴提取
  • 影响模型泛化的因素:
  • a. 可调整参数的数量。当可调整参数(⾃由度)数量很⼤时,模型更容易过拟合
  • b. 参数采⽤的值。当权重的取值范围较⼤时,模型更容易过拟合
  • c. 训练样本的数量。简单模型也很容易过拟合只包含⼀个或两个样本的数据集,但过拟合⼀个数百万个样本数据集需要⼀个极其灵活的模型
  • 训练集、测试集、验证集
  • K 折交叉验证:当训练数据稀缺时难以有足够的验证集,将原始训练数据分成K个不重叠的⼦集,然后执⾏K次模型训练和验证,每次在 K-1 个⼦集上训练,并在剩余的⼀个⼦集(该轮没有⽤于训练的⼦集)上验证,通过K次实验的结果取平均估计训练和验证误差
  • 欠拟合(underfitting):训练误差和验证误差都很严重,但差距小,如果模型不能降低训练误差,可能意味着模型过于简单,表达能⼒不⾜,⽆法捕获学习模式
  • 过拟合(overfitting):训练误差明显低于验证误差,训练样本数量不⾜。深度学习领域,最好的预测模型在训练数据上的表现往往⽐在保留数据上好得多。实际更关心验证误差,而不是训练误差和验证误差的差距
  • 是否过拟合可能取决于模型复杂性、可⽤训练数据集大小
    image

3. 权重衰减:

  • 权重衰减:也称为** L2 正则化,要保证权重向量较小,常将其范数作为惩罚项加到最小化损失**的问题中。将原来的训练⽬标最小化训练标签上的预测损失,调整为最小化预测损失和惩罚项之和

  • 正则化常数 λ 是⼀个非负超参数,除以 2 是因为⼆次函数求导时,2 和 1/2 会抵消。通过平⽅ L2 范数去掉平⽅根留下权重向量每个分量的平方和使惩罚的导数容易计算,即导数的和等于和的导数
    image
    image

  • L2 正则化线性模型构成经典的岭回归(ridge regression)算法,L1 正则化线性回归被称为套索回归(lasso regression)。L2 范数对权重向量的⼤分量施加了巨⼤的惩罚,使学习算法偏向于在⼤量特征上均匀分布权重的模型,对单个变量中的观测误差更鲁棒。L1 惩罚会导致模型将其他权重清除为零而将权重集中在⼀小部分特征上,即特征选择

  • L2 正则化回归的小批量随机梯度下降,根据估计值与观测值之间的差异来更新 w,较⼤的 λ 值对 w 的约束更⼤:
    image

  • 是否对相应的偏置 b2 进⾏惩罚在不同的实现、神经⽹络的不同层有所不同,通常不正则化⽹络输出层的偏置项

  • 正则化可处理过拟合,在训练集的损失函数中加⼊惩罚项,降低学习模型的复杂度。L2 惩罚的权重衰减能够保持简单模型,但会导致学习算法更新步骤中的权重衰减。同⼀训练代码实现中,不同的参数集可有不同的更新⾏为


4. Dropout:

  • 泛化性和灵活性之间的基本权衡被描述为偏差-方差权衡

  • 1995年,克⾥斯托弗·毕晓普证明了具有输⼊噪声的训练等价于 Tikhonov 正则化

  • 丢弃法(dropout):在正向传播过程中,计算每⼀内部层的同时注⼊噪声。从表⾯上看是在训练过程中丢弃(drop out)⼀些神经元,在整个训练过程的每⼀次迭代中,dropout包括在计算下⼀层之前将当前层中的⼀些节点置零。dropout 会破坏共适应性,避免过拟合,通常和控制权重向量的维数、⼤小联合使用。仅在训练期间使⽤

  • 无偏的⽅式注⼊噪声,在固定其他层时,每⼀层的期望值等于没有噪⾳时的值

  • 标准 dropout 正则化中,通过按保留(未丢弃)节点的分数归⼀化消除每⼀层偏差。每个中间激活值 h 以丢弃概率 p 由随机变量 h′ 替换,期望值不变,即 E[h′] = h
    image

  • 输出层的计算不能过度依赖于 h1, . . . , h5 的任何⼀个元素,将dropout 应⽤到隐藏层,以p的概率将隐藏单元置零
    image


5. 正向传播、反向传播和计算图:

  • 正向传播的计算图
    image

  • 正向传播隐藏层不包括偏置项,输⼊样本 x∈Rd、权重 W(1)∈Rh×d、中间变量 z∈Rh、隐藏变量 h (中间变量)、权重 W(2)∈Rq×h、输出层变量 o、损失函数 l、样本标签 y、损失项 L、超参数 λ、正则化项 s、正则化损失 J (目标函数)
    image
    image
    image
    image
    image
    image

  • 反向传播:应⽤链式法则,依次计算每个中间变量和参数的梯度。输出层模型参数的梯度 ∂J/∂W(2)∈Rq×h 和 ∂J/∂W(1)∈Rh×d、隐藏层输出的梯度 ∂J/∂h∈Rh、中间变量 z 的梯度 ∂J/∂z∈Rh ⽤按元素乘法运算符 ⊙ 表示
    image
    image
    image
    image
    image
    image
    image

  • 正向传播和反向传播是相互依赖的,训练比预测需要更多的内存(显存)。反向传播复⽤正向传播中存储的中间值,需要保留中间值,因此训练⽐预测需要更多的内存(显存)。这些中间值的⼤小与⽹络层的数量和批量的⼤小⼤致成正⽐,使⽤更⼤的批量来训练更深层次的⽹络更容易导致内存(显存)不⾜(out of memory)错误


6. 数值稳定性和模型初始化

  • 梯度爆炸(gradient exploding)问题:参数更新过⼤,破坏了模型的稳定收敛。如由于深度⽹络的初始化导致

  • 梯度消失(gradient vanishing)问题:参数更新过小,在每次更新时⼏乎不会移动,导致⽆法学习。导致梯度消失问题的常⻅原因是每层的线性运算之后的激活函数σ,如 sigmoid 函数的输⼊很⼤或很小时梯度都会消失,而** ReLU 系列函数更稳定**,可加速收敛

  • 打破隐藏单元的参数对称性:考虑参数初始化,小批量随机梯度下降不会打破这种对称性,但 dropout 正则化可以

  • 参数初始化

  • a. 需确保梯度和参数可以得到很好的控制,随机初始化是保证优化前打破对称性的关键,需要⽤启发式的初始化⽅法来确保初始梯度既不太⼤也不太小

  • b. 默认使用正态分布来初始化权重值,中等规模问题有效

  • c. Xavier初始化:输出的⽅差不受输⼊数量影响,任何梯度的⽅差不受输出数量影响。假设权重 wij 具有零均值和⽅差 σ2,层 xj 的输⼊也具有零均值和⽅差 γ2,并且独⽴于 wij,则 oi 的平均值和方差:
    imageimageimage
    imageimageimageimage

  • 保持⽅差不变需设置 ninσ2 = 1,反向传播则 noutσ2 = 1,无法同时满足。标准且实⽤的 Xavier 初始化如下,从均值为零,⽅差σ2 的⾼斯分布中采样权重
    image
    image

  • 如均匀分布 U(−a, a) 的⽅差为 a2/3,代⼊到 σ2 可得初始化建议:
    image

(5)参数初始化的其他方法:参数绑定(共享)、超分辨率、序列模型等启发式算法。Xiao 等的初始化⽅法[Xiao et al., 2018],⽆需结构技巧而训练 10000 层神经⽹络


7. 环境和分布偏移

  • 分布偏移:训练集和测试集并不来⾃同⼀个分布。

  • 协变量偏移(covariate shift):在分布偏移的分类中,协变量偏移研究最⼴泛。假设输⼊的分布随时间改变,但标签函数(即条件分布P(y|x))没有改变

  • 标签偏移:与协变量偏移相反,标签边缘概率 P(y) 可以改变,但是类别条件分布 P(x|y) 在不同的领域之间保持不变

  • 概念偏移:标签的定义发⽣变化,在时间或空间上仅仅逐渐发⽣偏移

  • 非平稳分布(nonstationary distribution):分布变化缓慢且模型没有得到充分更新

  • 分布偏移纠正:

  • a. 真实⻛险是从真实分布中抽取的所有数据的总体损失的预期,经验⻛险是训练数据的平均损失,⽤于近似真实⻛险。实践中,进⾏经验⻛险最小化。从真实分布p(x, y)中抽取的所有数据的总体损失的期望值:
    image
    image

  • b. 协变量偏移纠正
    image

根据数据来⾃正确分布与来⾃错误分布的概率之比重新衡量每个数据样本的权重:
image

加权经验风险最小化
image

使⽤** logistic 回归⽅法**:
image

  • c. 标签偏移纠正,重要性权重将对应于标签似然⽐率如下,可代入上述加权经验⻛险最小化
    image
    image

  • d. 概念偏移纠正

  • 学习问题的分类法批量学习在线学习(奖励和损失,如下图)、tiger 机(在线学习特例,采取⾏动有限,可获得更强的最优性理论保证)、控制(环境影响,反应取决于之前发⽣的事情,控制理论如 PID 变体可⽤于⾃动调整超参数)、强化学习(基于环境而⾏动)、考虑到环境(环境变化的速度和⽅式很⼤程度决定可采⽤的算法类型)
    image


8. 实战 Kaggle ⽐赛:预测房价

  • 数据集:由 Bart de Cock 于 2011 年收集[DeCock, 2011],涵盖 2006-2010 年亚利桑那州埃姆斯市的房价。分为训练集和测试集,每条记录包括 79 种房屋的属性值和属性,如街道类型、施⼯年份、屋顶类型、地下室状况等,这些特征由各种数据类型组成。如建筑年份由整数表⽰,屋顶类型由离散类别表⽰,其他特征由浮点数表⽰,但⼀些数据丢失,缺失值被标记为 “NA”,只能在官⽅测试集中评估模型,难以划分训练集以创建验证集

  • Kaggle 链接:https://www.kaggle.com/c/house-prices-advanced-regression-techniques

  • DATA 说明:data_description.txt 类别选项说明、sample_submission.csv 训练集房价、test.csv 测试集指标、train.csv 训练集指标,目标是预测测试集房价并上传

  • 数据预处理:通过将特征重新缩放到零均值和单位方差来标准化数据。将类别特征转化为指标特征,可以使我们把它们当作⼀个独热向量来对待
    image
    image
    imageimage

  • 训练:⽤价格预测的对数衡量差异,也是⽐赛中官方用来评价提交质量的误差指标。即将下面进行转换:
    image

  • 因此,预测价格的对数与真实标签价格的对数之间出现以下均方根误差:
    image

  • 利用 TensorFlow Decision Forests 进行房价预测:
    https://www.kaggle.com/code/gusthema/house-prices-prediction-using-tfdf/notebook

标签:权重,训练,模型,多层,感知机,参数,拟合,李沐,隐藏
From: https://www.cnblogs.com/haifengyuhui/p/17964049

相关文章

  • python中如何在多层循环中使用break/continue
    关于break/continue这两个关键字在平常的使用过程中一直比较迷糊。好不容易理解了吧,过段时间不使用好像忘记了什么。这个问题也是很多初学者比较容易提及的问题。先通过一个简单的单层循环来了解一下这两个关键字的使用。print('=============单层循环使用=============')for......
  • 书籍推荐-《多层建筑中的移动工作机器人框架》
    书籍:ARoboticFrameworkfortheMobileManipulator:TheoryandApplication作者:NguyenVanToan,PhanBuiKhoi出版:CRCPress来源:公众号【一点人工一点智能】关注 51CTO @一点人工一点智能,了解更多移动机器人&人工智能信息01书籍介绍《多层建筑中的移动工作机器人框架》通过......
  • python跳出多层for循环的方法
    在业务逻辑中有时候会遇到两层for循环的情况,触发某些条件时,需要直接退出两层for循环而python官方是没有goto语句的那么我们可以这样实现第一种定义变量flag,根据flag的值做退出flag=Trueforiinrange(10):forjinrange(10):ifi+j>15:print(i,j......
  • 武汉星河互娱:虚拟与现实融合成趋势主旋律,满足玩家多层次需求
    随着科技的不断进步,2024年手游市场迎来了一场全新的变革,未来发展趋势逐渐清晰,为玩家和行业带来了更多惊喜。未来手游市场将更加注重游戏内容的多元化。传统的角色扮演(RPG)和休闲游戏仍将是市场的主力,但随着玩家对游戏的需求不断升级,各类创新性、富有挑战性的游戏类型将不断涌现。从......
  • 多层感知机
    激活函数激活函数必须是非线性的,因为如果激活函数也是线性无法解决XOR问题代码importtorchfromtorchimportnnfromd2limporttorchasd2lbatch_size=256train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)num_inputs,num_outputs,num_hidd......
  • 多层If的判断
     问题:多层If判断函数公式解决:=IF(N10>=90,,IF(N10>=80,10,IF(N10>=70,30,IF(N10>=60,50,45))))=IF(N10<60,45,IF(N10<70,50,IF(N10<80,30,IF(N10<90,10,))))=IFS(N10<60,45,N10<70,50,N10<80,30,N10<90,10,1,)=SWITCH(TRUE,N10<60,45,N10<......
  • js中结束多层for循环
     关键字break和continue都是结束循环的作用,但是它只能结束它外面的第一层循环,如果代码里面是一层一层又一层的循环,你想直接结束最外层循环就需要outer了。outer:for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(j==0){......
  • 多层语法糖嵌套
    装饰器多层语法糖嵌套小练习:##先验证登录##再验证输入的金额---符合数字/余额充足###取款函数里面#defget_balance():##校验登录##校验金额符合数字/余额充足---把金额通过装饰器返回来##拿着你的金额进行提款use_data={'usern......
  • js 跳出多层循环(终止循环)
    1、thrownewError()优点:可以中断循环执行;适用于各种形式(for循环,forEach循环等)缺点:相当于强制抛错中断执行,不仅终止了循环,后续代码也不再执行废话不多说,上例子,找出【第一个爱吃芒果】的人:constarr=[{name:'张三',fruit:['苹果','香蕉']}......
  • 多层神经网络源码
    多层神经网络源码解析在深度学习领域,多层神经网络是一种常用的模型,用于解决各种复杂的问题。本文将介绍多层神经网络的原理,并通过一个简单的代码示例来演示其实现过程。神经网络原理神经网络是一种基于人工神经元的模型,通过多层神经元的连接来模拟人脑的信息处理过程。它由输入......