草庐IT

堆叠式自动编码器(SAE)--学习笔记

Wsyoneself 2023-04-19 原文
  1. 自动编码器及常见类型:
    1. 对于自编码器,往往并不关心输出是什么(因为输出就是输入的复现),只需要关心中间层的编码,或输入到编码的映射。
    2. 如果在编码和输入不同的前提下,系统仍可以复原输入,则说明编码已承载输入的所有信息。即特征提取。
    3. 给隐层增加一定的约束,从数据维度:
      1. 隐藏层维度小于输入数据维度,当每两层之间的变换均为线性且监督训练的误差是二次型误差时,网络等价于PCA。
      2. 隐藏层维度大于输入数据维度,即“稀疏自编码器”,原理,从人脑机理出发,人类神经系统在某一刺激下,大部分神经元是被抑制的。
    4. 稀疏自编码器:
      1. 对隐藏单元施加稀疏性(同时具有比输入更多的隐藏单元), 自动编码器可以在输入数据中学习有用的结构。 这允许输入 的稀疏表示。 这些对于分类任务的前训练是有用的。
      2. 稀疏自动编码器是对自动编码器加入一个正则化项,约束隐含层神经元节点大部分输出0,少部分输出非零,大大减少了需要训练的参数数目。克服了自动编码器容易陷入局部及小值和存在过拟合的问题
  2. 无监督逐层贪婪预训练:
    1. 对于较深的网络,如果直接进行训练很容易出现梯度消失或梯度爆炸问题,无监督逐层贪婪预训练是减缓这一问题的一个简单方法,即通过逐层的进行单独训练,形成一个初始化的参数,在训练第L层时,冻结第1~(L-1)层的参数, 最终实现每一层的单独训练.
    2. 逐层单独使得每个层得参数都只是全部最优,然后再进行这个网络的训练,直到网络的收敛。
    3. 逐层预训练使得深度网络的训练成为可能,原因:预训练好的网络在一定程度上拟合了训练数据的结构,使得整个网络的初始值在一个合适的状态,便于有监督阶段加快迭代收敛。
  3. SAE:
    1. 是一个由多层稀疏自编码器组成的深度神经网络模型,其前一层自编码器隐层的输出作为其后一层自编码器的输入,最后一层是个分类器(logistic 回归或者softmax分类(预测分析))。
    2. SAE是在简单自动编码器基础上,增加隐藏层的深度,一般,堆栈自动编码器是关于隐层对称的,通常Encoder和Decoder的层数是一样的,左右对称.其对称层的参数也可以是具有转置关系的,这种技术称为权重捆绑,这样可以使得模型的参数减半,加快训练速度并降低过拟合的风险。注意: 偏置项不进行捆绑。
    3. 训练一个编码器得到隐层的特征表示h,再将h作为原始信息,训练一个新的自编码器,得到新的特征表达。
    4. SAE整个网络的训练不是一蹴而就的,而是需要逐层进行。逐层非监督预训练。
    5. 对于常见的分类任务,一般分为两个阶段:
      1. 逐层预训练(非监督学习,自动编码器各层的输出都是原始数据的不同表达)
      2. 微调(增加一层分类层,并结合有标注的训练数据,在误差函数指导下,对系统的参数进行微调,以使得整个网络能够完成所需的分类任务。)
      3. 通过layer-wise pre-training逐层堆叠起来,而不是直接训练多层的网络。
    6. 堆叠自动编码器方法与DBN相同,具体过程描述如下:
      1. 给定初始输入,采用无监督方式训练第一层自动编码器,减小重构误差达到设定值。
      2. 把第一个自动编码器隐含层的输出作为第二个自动编码器的输入,采用以上同样的方法训练自动编码器。
      3. 重复第二步直到初始化完成所有自动编码器。
      4. 把最后一个堆叠自动编码器的隐含层的输出作为分类器的输入,然后采用有监督的方法训练分类器的参数。

有关堆叠式自动编码器(SAE)--学习笔记的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  9. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  10. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

随机推荐