动手学深度学习(pytorch)学习记载16-暂退法[学习记载]

[复制链接]
发表于 2026-1-30 09:30:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
暂退法

暂退法(Dropout)是深度学习中一种常用的正则化技能,由 Geoffrey Hinton 和他的同事们在 2012 年提出。它紧张用于防止神经网络模子过拟合,进步模子的泛化本领。暂退法是一种简单而有用的正则化方法,被广泛应用于各种深度学习模子中,尤其是在图像和语音辨认等范畴。
暂退法的工作原理:

随机扬弃:在练习过程中,暂退法会在每次迭代时随机扬弃(即将输出设置为零)网络中的一部分神经元。扬弃的神经元在当前迭代中不会加入前向和反向流传。
生存概率:每个神经元被扬弃的概率是预先设定的,通常由超参数控制。比方,如果设置为 0.5,则每个神经元有 50% 的概率在每次迭代中被扬弃。
练习和测试差异:在练习过程中使用暂退法时,神经元的扬弃是随机的,而在测试或实际使用模子时,全部神经元都加入盘算,但输出须要通过生存概率举行缩放,以保持输出的盼望值稳固。
暂退法的优点:

镌汰过拟合:通过随机扬弃神经元,暂退法迫使网络学习更加鲁棒的特性,而不是依赖于特定的神经元聚集。
模子匀称:暂退法可以看作是一种模子匀称技能,由于它在练习过程中隐式地练习了多个差别的“奇怪”网络。这些网络的猜测效果在测试时被匀称,这通常比单个网络的猜测更稳固。
防止共顺应:暂退法通过随机扬弃神经元,防止了神经元之间形成过于精密的依赖关系,即共顺应(co-adaptation)。
暂退法的缺点:

盘算服从:由于在练习过程中须要多次前向和反向流传,暂退法大概会增长练习时间。
超参数选择:符合的扬弃概率须要通过实行来确定,这大概会增长模子调优的工作量。
大概的副作用:在某些环境下,暂退法大概会引入额外的噪声,影响模子的学习服从。
暂退法是一种简单而有用的正则化方法,被广泛应用于各种深度学习模子中,尤其是在图像和语音辨认等范畴。
代码实例

  1. import torch
  2. from torch import nn
  3. from d2l import torch as d2l
复制代码
实现 dropout_layer 函数, 该函数以dropout的概率扬弃张量输入X中的元素, 将剩余部分除以1.0-dropout
  1. def dropout_layer(X, dropout):
  2.     assert 0 <= dropout <= 1 # 使用 assert 语句确保 dropout 参数的值在 0 到 1 之间
  3.     # 在本情况中,所有元素都被丢弃
  4.     if dropout == 1:
  5.         return torch.zeros_like(X)
  6.     # 在本情况中,所有元素都被保留
  7.     if dropout == 0:
  8.         return X
  9.     mask = (torch.rand(X.shape) > dropout).float()
  10.     return mask * X / (1.0 - dropout)
复制代码
表明一下mask那段代码:
创建一个与 X 形状类似的随机张量 mask,此中的元素是从匀称分布 [0, 1) 中随机抽取的。
将 mask 中的每个元素与 dropout 值举行比力,如果随机值大于 dropout,则在 mask 中生存该元素(值为 1.0),否则将该元素设置为 0。如许,mask 张量中约莫有 dropout 比例的元素为 0,别的为 1。
将 mask 张量与输入 X 相乘,如许 X 中对应于 mask 中为 0 的元素将被扬弃(设置为 0)。
末了,为了保持输出张量的盼望值稳固,将扬弃使用后的张量除以 (1.0 - dropout)。这是由于在扬弃了一部分元素后,剩余元素的总和会镌汰,通过除以 (1.0 - dropout) 可以使得输出张量的盼望值与原始输入 X 的盼望值保持划一。
通过下面几个例子来测试dropout_layer函数,将输入X通过暂退法使用,暂退概率分别为0、0.5和1。
  1. X= torch
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表