经典无监督学习

聚类

K均值

PCA主成分分析

深度学习下的无监督学习

  • 自编码器

    • 传统的基于特征学习的自编码器
    • 变种的生成式自编码器
  • Gen网络(对抗式生成网络)

传统自编码器

原理

类似于一个自学习式PCA,如果编码/解码器只是单层线性的话

自编码器编码解码示意图:

特征提取过程中甚至用到了卷积网络+relu的结构(我的认知停留在Originally级别)

编码&解码器可以共享权值(在我接触的代码中一般都没共享权值)

损失函数推荐L2

应用

由于重建已知数据是个没什么用的过程,所以自编码器一般在训练后会丢掉解码过程作为一个特征提取工具,

这里的思路是当我们有少量含标签数据以及大量无标签数据时,可以采用使用无标签数据训练自编码器,然后使用训练好的编码器加上分类器去提取有标签数据并训练分类器,不过现实可能不太好,这是老师的评价:

下图表示的是有标签数据经过训练好的编码器去训练分类器的过程,

通过监督学习进行微调,也分两种,一个是只调整分类器(黑色部分):

另一种:通过有标签样本,微调整个系统:(如果有足够多的数据,这个是最好的。end-to-end learning端对端学习)

一旦监督训练完成,这个网络就可以用来分类了。

在相关文献中有提到Greedy Training的,这是一种逐层训练的方式,是由于当时数据数量和计算能力决定的,现在已经不再使用了,老师说他特意提出来也只是为了防止大家看到这个词蒙圈。

Variational Autoencoder

TensorFlow实现

可以生成数据的自编码器变种——变分自编码器

位置一:我们将 encoder 的输出(2m个数)视作分别为m个高斯分布的均值(z_mean)和方差的对数(z_log_var),也就是特征z分布的描述

位置二、三:我们采样初始数据,根据 encoder 输出的均值与方差,生成服从相应高斯分布的随机数:

 eps = tf.random_normal((self.batch_size, n_z), 0, 1,
dtype=tf.float32)
# z = mu + sigma*epsilon
self.z = tf.add(self.z_mean,
tf.mul(tf.sqrt(tf.exp(self.z_log_sigma_sq)), eps))

即使这样这里还有tips:

位置四:经由z还原x,计算loss,这里的loss计算颇为复杂,先给出结论,推导以后再说(逃... ...:

最后,尝试应用模型

下面是用于生成图片的应用,采样并尝试重构:

这里的z是直接采样得到的,而非先采样N(0,1)后使用均值标准差等还原出来的。

对抗式生成网络

噪声->生成图 + 真图 ->分类器,实际属于二分类问题

由于结构简单在手写数字和人脸上效果不错,但对于复杂场景效果一般

提高思路一:多尺度生成

自右向左逐层生成图像

训练过程比较繁琐:每个尺度都要进行鉴别

提高思路二:卷积生成网络

据说效果也很不错

混合型生成网络

由于这部分内容不是课程重点,实际讲解也不够详细,所以记录的也就比较简洁了,主要把发展脉络理顺,各个PPT页上均有论文出处,如果有需要的话可以从论文入手。

『cs231n』无监督学习的更多相关文章

  1. 『cs231n』通过代码理解风格迁移

    『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...

  2. 『cs231n』计算机视觉基础

    线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...

  3. 『cs231n』卷积神经网络的可视化与进一步理解

    cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非 ...

  4. 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上

    GAN网络架构分析 上图即为GAN的逻辑架构,其中的noise vector就是特征向量z,real images就是输入变量x,标签的标准比较简单(二分类么),real的就是tf.ones,fake ...

  5. 『cs231n』注意力模型

    RNN实现文本标注: 弊端是图像信息只在初始化时有用到 Soft Attention模型: 每一层具有三个输入:隐藏状态 + 注意力特征向量 + 词向量 每一层具有两个输出:新的位置分布(指示下一次‘ ...

  6. 『cs231n』视频数据处理

    视频信息 和我之前的臆想不同,视频数据不仅仅是一帧一帧的图片本身,还包含个帧之间的联系,也就是还有一个时序的信息维度,包含人的动作判断之类的任务都是要依赖动作的时序信息的 视频数据处理的两种基本方法 ...

  7. 『cs231n』作业1选讲_通过代码理解KNN&交叉验证&SVM

    通过K近邻算法探究numpy向量运算提速 茴香豆的“茴”字有... ... 使用三种计算图片距离的方式实现K近邻算法: 1.最为基础的双循环 2.利用numpy的broadca机制实现单循环 3.利用 ...

  8. 『cs231n』作业3问题3选讲_通过代码理解图像梯度

    Saliency Maps 这部分想探究一下 CNN 内部的原理,参考论文 Deep Inside Convolutional Networks: Visualising Image Classifi ...

  9. 『cs231n』RNN之理解LSTM网络

    概述 LSTM是RNN的增强版,1.RNN能完成的工作LSTM也都能胜任且有更好的效果:2.LSTM解决了RNN梯度消失或爆炸的问题,进而可以具有比RNN更为长时的记忆能力.LSTM网络比较复杂,而恰 ...

随机推荐

  1. maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两

    1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在tar ...

  2. DNS视图及压力测试(四)

    Bind安全控制选项 Allow-transfer {}; #用于控制区域传送文件 Allow-query {}; #通常用于服务器是缓存名称服务器时,控制查询客户端 Allow-recursion ...

  3. 如何加固linux NFS 服务安全的方法

    NFS(Network File System)是 FreeBSD 支持的一种文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源.不正确的配置和使用 NFS,会带来安全问题. 概述 N ...

  4. Python Web学习笔记之GIL机制下的鸡肋多线程

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程.多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? 有同学 ...

  5. c++中的字符集与中文

    就非西欧字符而言,比如中国以及港澳台,在任何编程语言的开发中都不得不考虑字符集及其表示.在c++中,对于超过1个字节的字符,有两种方式可以表示: 1.多字节表示法:通常用于存储(空间效率考虑). 2. ...

  6. 20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用

    20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用 引言 这次免考选择了四个项目,难度也是从简到难,最开始先写一个工具的使用 想要开发安卓首先要会编写代码,但是想要逆向分 ...

  7. .Family_物联网

    群名称 : .Family_物联网 QQ群号: 群介绍 基于嵌入式,构建各通信模式,网关,平台软件,工业系统等领域,欢迎各位朋友加群,交流学习!

  8. NOIP Mayan游戏 - 搜索

    Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有 ...

  9. 【转】iOS学习之iOS禁止Touch事件

    iOS程序中有时会有需要禁止应用接收Touch的要求(比如动画进行时,防止触摸事件触发新方法). 一.一般有两种: 1.弄个遮罩层,禁止交互: 2.使用UIApplication中的方法进行相关的交互 ...

  10. IMAP协议命令(详细)

    参照:http://www.cnblogs.com/qiubole/archive/2007/11/23/970180.html 转载:http://blog.sina.com.cn/s/blog_5 ...