逐层贪婪预训练(解决梯度消失的第一个成功方案,但现在除了NLP领域外很少使用)

2023-05-16

起因/背景:梯度消失 vanishing gradient problem

DNN的训练中,由于梯度消失,即输出层的错误在反向传播的过程中会显著地越来越小,所以靠近输入层的层的梯度就接近0, 所以这些层的参数就会得不到更新。而只有靠近输出层的那几层的参数得到了很好的更新。这是比较深的多层NN训练的一个难点。

梯度消失:随着NN的隐层数目增加,网络加深,从输出层传回的错误信息的量就会显著减少。于是那些靠近输出层的隐层能够被正常更新参数,但是靠近输入层的隐层却被更新地很慢或者完全更新不了。

Training deep neural networks was traditionally challenging as the vanishing gradient meant that weights in layers close to the input layer were not updated in response to errors calculated on the training dataset.
As the number of hidden layers is increased, the amount of error information propagated back to earlier layers is dramatically reduced. This means that weights in hidden layers close to the output layer are updated normally, whereas weights in hidden layers close to the input layer are updated minimally or not at all.

针对这个难点,一个创新的方法诞生了:逐层贪婪预训练(简称:预训练),这个方法可以让DNN被很好地训练。这是Hinton2006年提出的方法(论文名:A Fast Learning Algorithm for Deep Belief Nets ),正是这个方法让深度学习再次复兴。

An important milestone in the resurgence of neural networking that initially allowed the development of deeper neural network models was the technique of greedy layer-wise pretraining, often simply referred to as “pretraining.”

逐层

一层一层的训练,一次只训练一层,所以你完全可以在本来已经预训练好的模型后面再加一层,因为这新加的一层的训练只需要它前面的最后一层的数据,前面其他层的参数都是fixed固定的。

贪婪

贪婪就是因为逐层,因为贪婪也是一个抽象概念,即只处理好当前的任务,让当下的子任务达到最优,即使这样做并不会使得全局最优。一次只把一层训练好,训练到完美优秀。

The technique is referred to as “greedy” because the piecewise or layer-wise approach to solving the harder problem of training a deep network. As an optimization process, dividing the training process into a succession of layer-wise training processes is seen as a greedy shortcut that likely leads to an aggregate of locally optimal solutions, a shortcut to a good enough global solution.

在这里插入图片描述

预训练基于什么假设

基于浅层模型总是比深层模型好训练的一个假设。所以才把整个网络的训练分解为多个子任务,一次训练一层。
在这里插入图片描述

预训练的好处

作为一种权重初始化方案
在这里插入图片描述

预训练的主要方法

有监督逐层贪婪预训练

不断向一个有监督学习任务的模型中添加隐层(中间层), 被用来迭代地加深一个有监督模型。
Broadly, supervised pretraining involves successively adding hidden layers to a model trained on a supervised learning task.

Pretraining is used to iteratively deepen a supervised model.

无监督逐层贪婪预训练

使用逐层贪婪预训练流程去构建一个无监督的自编码器模型,在最后一层加一个有监督的输出层,比如最常见的softmax分类层,或者也可以加SVM,KNN,逻辑回归等任何机器学习模型,因为这个无监督的自编码器实际上就是一个特征提取器,除输出层外的最后一层就是最终无监督学到的特征。
Unsupervised pretraining involves using the greedy layer-wise process to build up an unsupervised autoencoder model, to which a supervised output layer is later added

这里,预训练被用于迭代地加深一个无监督模型,这个无监督模型最后会被当做有监督模型用。
Pretraining is used to iteratively deepen an unsupervised model that can be repurposed as a supervised model。

还可以对整个网络进行有监督的微调!!!这是很常见的做法:在无监督逐层贪婪预训练结束后,先添加softmax层,然后对整个网络的所有参数进行有监督的微调。相当于无监督逐层贪婪预训练只是为DNN做一个初始化和正则化,得到的网络仍然是一个DNN。
Although the weights in prior layers are held constant, it is common to fine tune all weights in the network at the end after the addition of the final layer. As such, this allows pretraining to be considered a type of weight initialization method.
在这里插入图片描述
在这里插入图片描述

当你有大量无标签数据和少量有标签数据时,再用少量有标签数据进行有监督微调之前,用无监督预训练去做一个权重初始化也许会有用

Unsupervised pretraining may be appropriate when you have a significantly larger number of unlabeled examples that can be used to initialize a model prior to using a much smaller number of examples to fine tune the model weights for a supervised task.
在这里插入图片描述

这种方法在某些问题上真的有用,比如文本问题,先用无监督预训练文本数据,为词语以及他们的关系提供一个更详细的分布表示。

The approach can be useful on some problems; for example, it is best practice to use unsupervised pretraining for text data in order to provide a richer distributed representation of words and their interrelationships via word2vec.

除了自然语言处理领域之外,很多领域都抛弃了摈弃了无监督预训练,因为无监督预训练成功的前提是必须用大量的无标签数据去预训练才可以学到好的表示。然后用这些表示进行微调。
在这里插入图片描述

已经不再被需要

虽然无监督预训练是帮助深度学习解决梯度消失造成的训练问题的第一个成功的方案,但是现在已经有了更好的方法:权重初始化,其他激活函数,梯度下降的变体,正则化等方法去保证DNN的成功训练并能达到更好的效果。所以这种无监督预训练已经不被需要了。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逐层贪婪预训练(解决梯度消失的第一个成功方案,但现在除了NLP领域外很少使用) 的相关文章

随机推荐

  • css: css3动画(淡入淡出)

    64 keyframes 规则用于创建动画 xff0c 并且必须 把它捆绑到某个选择器 xff0c 否则不会产生动画效果 您必须定义动画的名称和时长 如果忽略时长 xff0c 则动画不会允许 xff0c 因为默认值是 0 xff08 动画的
  • 小程序:插件未授权使用

    问题1 登录用户不是该小程序的开发者 替换 project config json 文件下的appid 问题2 插件未授权使用 由于我个人是个体工商户 xff0c 添加不了 社交 gt 直播 类型 xff0c 所以开发者工具登录我的微信没法
  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • flutter报错: Gradle threw an error while downloading artifacts from the network. Retrying

    项目之前是可以正常运行的 xff0c 突然就报这个错误了 Gradle threw an error span class token keyword while span downloading artifacts span class
  • webpack:1 概念

    loader的作用 xff1a 是用来处理不同类型的文件 xff0c 操作的是文件 plugin的作用 xff1a 是一个扩展器 xff0c 不操作文件 xff0c 用来增强功能 其它webpack的使用看webpack原汁原味的 官网 高
  • 数据库: mongodb导入json数据

    登录聚合数据 xff0c 找些免费的api请求后下载成json文件 xff0c 去掉多余的格式只保留数组格式 xff0c 选择json文件即可导入成功 可以看资源 xff1a 新闻头条新闻头条新闻头条 carc1subject1 json
  • webpack: 4 loader汇总(style-loader等)

    所有的loader必须匹配规则 xff0c 否则不生效 配置文件中 xff0c module中rules的use执行顺序是从后往前执行 url loader 用于将文件转换为base64 URI的webpack加载程序 options li
  • webpack: 5 报错,错误

    webpack 报错 xff1a Uncaught ReferenceError is not defined webpack webpack打包jquery的插件 xff08 EasyLazyLoad xff09 时 xff0c 报错 方
  • Vue:无限滚动-通过vant组件

    一 xff1a 下拉刷新上拉加载功能 1 实现原理 xff1a 通过vant的List和PullRefresh两个组件实现 xff08 PullRefresh组件标签包裹List组件标签 xff09 2 我遇到的问题 Load方法触发的次数
  • webpack:打包示例-打包多入口

    入口 entry 前台 index 39 public assets js index 39 打包入口项 list 39 public assets js list 39 search 39 public assets js search
  • kubernetes基础——一文读懂k8s

    容器 容器与虚拟机对比图 左边为容器 右边为虚拟机 容器技术是虚拟化技术的一种 xff0c 以Docker为例 xff0c Docker利用Linux的LXC LinuX Containers 技术 CGroup Controll Grou
  • curl错误28:Resolving timed out after 15009 milliseconds解决方案

    报错信息如字面意思就是连接超时了 xff0c 解决方案如下 xff1a 1 检查Curl的超时参数 xff0c 如果设置小于1s的超时时间 xff0c curl会直接返回超时错误 xff08 28 xff09 xff0c 并不会发起任何的请
  • Linux 可视化桌面远程连接

    Linux xff08 一 xff09 防止系统文件修改导致DNS清空 chattr 43 i etc resolv conf xff08 二 xff09 安装vnc yum install y tigervnc tigervnc serv
  • C-Free5注册码,秘钥,解决办法

    C Free5注册码 xff0c 秘钥 xff0c 解决办法 用户名 xff1a 123123 电子邮件 xff1a 111 64 qq com 注册码 xff1a mJ2Em9jdm7jGwYTpmp2H6KmehtvO 显示让重启电脑
  • Ubuntu16.04将python命令指向python3

    第一步 xff1a 将原来的python文件进行备份 sudo cp usr bin python usr bin python bak 第二步 xff1a 删除原来指向python2的文件 sudo rm usr bin python 第
  • 素数伴侣

    题目 xff1a 解析 xff1a 本题目采用了匈牙利算法 xff0c 起初以为只是找到所有的素数伴侣 xff0c 但是题目有一个条件 xff0c 那就是每个数字只能使用一次 xff0c 组成拥有最多的素数伴侣 代码产出 xff1a spa
  • 接之前的SpringBoot项目通过金蝶中间件部署中未处理的问题

    新建的springboot项目是2 3 1的版本 xff0c 打包到金蝶中部署就一直栈内存溢出 后来把pom文件中的父依赖换成了2 2 4版本 xff0c 打包部署到金蝶中就能运行了 xff0c 我也不知道具体原因 如果有知道具体原因的请不
  • 如何解决centos虚拟机每次启动都要自己登录root问题

    解决办法 xff1a 可以通过修改 etc gdm custom conf文件 xff0c 实现root用户免密码自动登陆 1 输入命令vi etc gdm cutstom conf 2 在 daemon 下增加 需要插入时按i进行插入模式
  • 关于word中最后一个分节符导致的空白页删除问题

    主要原因 xff1a 一般最后一个空白页出现的原因有两个 xff0c 一个是分节符或者分页符导致 xff0c 另一个是上一页内容太多顶出来导致多一些 xff08 这种情况可以选择调节前面内容长度 xff0c 并设置前页最后一个字符的行距 x
  • 逐层贪婪预训练(解决梯度消失的第一个成功方案,但现在除了NLP领域外很少使用)

    起因 背景 xff1a 梯度消失 vanishing gradient problem DNN的训练中 xff0c 由于梯度消失 xff0c 即输出层的错误在反向传播的过程中会显著地越来越小 xff0c 所以靠近输入层的层的梯度就接近0 x