深度学习笔记——卷积神经网络、自编码器

前言

发现虽然玩了一次卷积神经网络,但还没有写文章分析下它在干什么。

and今天瞅了眼自编码器和深度生成模型,生成宝可梦感觉真好玩啊(x

视频链接:李宏毅机器学习中文课程 - 网易云课堂 (163.com)

个人博客页观感更好捏:深度学习笔记——卷积神经网络、自编码器 | Andrew的个人博客 (andreww1219.github.io)

一、卷积神经网络

1. 应用场景

  1. 在图片处理中,我们想要捕捉的特征远比整张图片的尺寸要小,无需对所有像素作线性组合
  2. 我们想要捕捉的特征可以在图片的不同位置出现,因此一些hidden layer的参数会相等导致冗余
  3. 降低图片的分辨率几乎不会影响判断结果,可以降低数据维度加快计算

我们将以上三点更加抽象地描述为:

1. 特定信息只存在于完整数据中的一部分
2. 特定信息在完整数据中多次出现
3. 降采样对结果不会有影响

2. 解决方案

  1. 卷积层
    利用卷积核抽取我们需要的特定信息,卷积核只作用于输入数据中的一定区域(解决了问题1),并以一定步长在输入数据上移动(解决了问题2)。

  2. 池化层
    用某个数值代表特定区域的数值,成倍地降低数据地空间大小(解决了问题3

3. 更多示例

当一个问题满足上述的三个条件时,就可以利用卷积神经网络来train一个合适的模型。

实际上,卷积和池化不一定要同时出现。

比如,在下五子棋时,判断当前棋局的问题满足问题1和问题2,但是不满足问题3

由2可知,卷积层解决的是问题1和问题2,池化层解决的是问题3。

因此,我们只需要使用卷积来处理五子棋的问题。

二、自编码器

1. 何为自编码器

在使用PCA时,我们得到一个矩阵 M M M将原始的高维数据 x x x转换为低维数据 z z z,同时可以利用 M T M^T MT对低维数据 z z z作逆变换得到 x ^ \widehat{x} x 。但是在高维向低维投影的过程中出现了损失,所以逆变换得到的 x ^ \widehat{x} x 与原来的 x x x存在不小的偏差

PCA原理参考:机器学习笔记——机器学习系统设计、支持向量机(SVM)、K-Means算法、主成分分析法(PCA) - 掘金 (juejin.cn)

在神经网络中,一个hidden layer的参数就是一个矩阵,所以我们可以将上述过程描述为:

I n p u t L a y e r ( x ) → H i d d e n L a y e r ( 参数为 M , 得到 z ) → O u t p u t L a y e r ( 参数为 M T 得到 , x ^ ) Input Layer(x) \rightarrow Hidden Layer(参数为M, 得到z) \rightarrow Output Layer(参数为 M^T 得到, \widehat{x} ) InputLayer(x)HiddenLayer(参数为M,得到z)OutputLayer(参数为MT得到,x )

我们将前面的过程称作编码(Encode),后面的过程称作(解码),中间输出的编码后的低维数据称作code

我们现在希望编码和解码的过程,能够尽可能地减小损失,最大程度地还原数据

不妨分别将编码和解码过程抽象为神经网络,然后在训练的过程最小化 x x x x ^ \widehat{x} x 之间的偏差:

x → N N   E n c o d e r → c o d e → N N   D e c o d e r → x ^ x \rightarrow NN\space Encoder \rightarrow code \rightarrow NN\space Decoder \rightarrow \widehat{x} xNN EncodercodeNN Decoderx

于是我们就利用了没有任何标签的数据,训练了一个能自动解码和编码的神经网络,而且解码和编码模块都能单独拎出来用,这就是自编码器

2. 自编码器的神奇之处

2.1 CNN与自编码器

在卷积神经网络中,我们可以将卷积和池化操作也看作是编码过程,本质是提取低维的特定信息。

对应地,将解码过程称作反卷积和反池化:

  1. 反卷积的操作与卷积一致
  2. 反池化将数据扩大时,多出来的空间可以置零,或取相同的值

2.2 预训练(Pre-training)

在神经网络层次比较深时,需要拟合大量的参数。

我们可以将每个Hidden Layer(注意:不包括输出层)视作一个编码器,先利用大量的无标签数据依次对每个Hidden Layer的参数作初始化,这个过程叫预训练(Pre-training)。

最后在随机初始化输出层的参数,再利用少量标签数据训练模型。在这里,大部分的参数已经被预训练确定了七七八八,所以训练阶段只是在做微调(fine-tuning)

2.3 生成新数据

特别有趣的是,我们可以自己设定一些code,丢进解码器中,这样就得到许多新数据。

将真的原始数据生成的code作Normalization,然后划定真code比较密集的一个范围作为我们的假code,可以使我们选择的code更有意义。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用,这篇笔记是关于卷积神经网络CNN)的深度学习理论详解和项目实战的学习笔记。这篇笔记主要介绍了CNN在计算机视觉和图像识别中的应用。 根据引用,在CNN中,Co代表输出通道数(也称为卷积核数量),Ci代表输入通道数,Kh代表卷积核的高度,Kw代表卷积核的宽度。这些参数可以用来定义CNN的结构。 根据引用,你提到想要使用R语言实现一维CNN,并输入一些变量进行二分类。你可以按照想要的数据进行二分类,然后使用R语言编写代码来实现CNN,并添加损失函数的曲线。 希望这些信息对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深度学习卷积神经网络CNN)全笔记,附代码](https://blog.csdn.net/weixin_58176527/article/details/125530000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [深度学习——CNN卷积神经网络个人理解笔记汇总](https://blog.csdn.net/m0_59998867/article/details/123696930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [语言实现一维CNN吗,想输入些变量实现二分类 就是有一些变量,想输入到cnn里算一下进行二分类,这个是想做...](https://download.csdn.net/download/Mrrunsen/88267034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值