GCN-GAN基础知识部分

目录

一、对抗神经网络GAN

对GAN的理解,GAN原理及基本框架

GAN优缺点

训练GAN的技巧

二、LSTM

Long Short-term Memory(LSTM)

LSTM-Example

 重点部分​编辑


一、对抗神经网络GAN

对GAN的理解,GAN原理及基本框架

对抗神经网络(GAN)的理解 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/150597936        包括生成模型(Generative model)和判别模型(Discriminative model)两部分。(生成器视图欺骗判别器,判别器努力不被生成器欺骗)
        生成模型的任务是生成看起来真实、和原始数据相似的实例。
        判别模型的任务是判断给定的实例是自然真实的还是伪造的(即是真实数据还是生成模型生成的)。

        最终的效果是得到很好地生成模型,生成模型所生成的产品达到真假难分的地步。
训练过程中,生成网络G生成尽可能多的产品(图像)试图欺骗判别网络D,判别网络的任务就是将真实和假的产品区分开。G和D构成一个动态的“博弈过程”,最终的均衡点为纳什均衡点。

        GAN一般在训练中不稳定而且效果也很差,即使延迟训练时间也不能很好地改善。比如:G生成的样本不是真的,D给予正确评价,D的评价相当于告诉G其生成的样本有多真实,那么基于D较高的评价,G输出会认为自己是对的,就会形成他们两个自我欺骗,导致最终结果缺少信息,缺少特征。

深度学习----GAN(生成对抗神经网络)原理解析_sakura小樱的博客-CSDN博客_gan神经网络https://blog.csdn.net/Sakura55/article/details/81512600        GAN应用到深度学习神经网络上就是,通过生成网络G和判别网络D的不断博弈,进而使G学习到数据的分布。训练完成后,生成网络G可以生成一段逼真的数据。

        GCN-GAN基础知识部分_第1张图片

GCN-GAN基础知识部分_第2张图片

         逆变换采样:是伪随机数采样的一种基本方法。在已知任意概率分布的累积分布函数时,可用于从该分布中生成随机样本。逆变换采样_百度百科 (baidu.com)

         GAN的目标就是生成和真实数据接近的分布(^p(x),p(x)),那么 怎么去定义一个恰当的优化目标或一个损失?使得生成的概率分布和真实数据分布尽量接近。GAN没有使用传统的loss函数,而是引入判别模型(常用的支持向量机和多层神经网络),优化过程就是寻找在生成模型和判别模型之间的一个纳什均衡。

GAN优缺点

深度学习----GAN(生成对抗神经网络)原理解析_sakura小樱的博客-CSDN博客_gan神经网络https://blog.csdn.net/Sakura55/article/details/81512600优点:

        相比其他所有模型, GAN可以产生更加清晰,真实的样本;GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域;相比VAE, GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进一致的,而VAE是有偏差的。GAN可以避免损失函数设计的困难,只要有一个基准,直接上判别器,剩下的交给对抗训练就可以了。

缺点:

        GAN不适合处理离散形式的数据,比如文本;GAN存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决,原因在前文第一部分有说)。GAN的优化器不常用SGD;

训练GAN的技巧

        输入规范到(-1,1),最后一层激活函数用tanh,使用mini-batch norm,避免使用RELU,pooling层,可以使用leakrelu激活函数。

二、LSTM

台大李宏毅教授的深度学习视频,笔记与总结

下面这两种方式都是在输出这个值的时候能够考虑到它上一个值。

GCN-GAN基础知识部分_第3张图片

 Bidirectional RNN:双向RNN扩大了每个节点的感受域,对于序列来说,能够达到考虑全部元素。

GCN-GAN基础知识部分_第4张图片

        上面的方式都是有个memory,将经过(用过)的元素都存到一个memory cell中,用的时候拿出来,计算结束存进去提供给下一个元素的计算。

Long Short-term Memory(LSTM)

        在LSTM中,一共有3个Gate,要想存入Memory Cell需要经过一个Gate,只有这个Gate打开的时候才能存入。对于这个Gate什么时候打开或是关闭是由这个neural network自己学习到的;输出的地方也有一个Gate,这个Gate决定要不要把值输出,其打开关闭由neural network自己学到;另外还有一个Forget Gate,决定什么时候要把Memory cell里面的东西忘掉,到低什么时候去忘掉也是由neural network自己学到。

GCN-GAN基础知识部分_第5张图片

         4个input:想要存进去的值、操控Input Gate的值、操控Forget Gate的值还有操控Output Gate的值,只有一个最后的输出。

GCN-GAN基础知识部分_第6张图片

         如上图所示,一开始蓝色部分(Memory Cell)中存的是c,从z输入处理后是g(z)后经过input gate,得到g(z)f(zi),f(zi)是1就让g(z)通过,是0就不让这个g(z)通过,到达memory cell时,有forget gate决定要不要忘记之前的信息c,即cf(z),f(z)取0,1决定信息c要不要留下,即得到如上图所示c`的式子,经过进一步处理得到h(c`)由output gate的f(z)决定要不要将其输出。

LSTM-Example

GCN-GAN基础知识部分_第7张图片

如下图所示,x1,x2是input,乘以不同的权重w以控制不同的Gate以及一开始的处理,所以LSTM需要的参数量达到4倍.

GCN-GAN基础知识部分_第8张图片

 重点部分GCN-GAN基础知识部分_第9张图片

 按照下图右侧的计算步骤在左图进行描述:可以表示为:

c是memory里面的值,下图中粉红色的加号得到的值形成新的要存入memory cell的值

GCN-GAN基础知识部分_第10张图片

 多个连接:GCN-GAN基础知识部分_第11张图片

 进一步简化,会在计算时考虑C(memory cell),h(如图所示)以及原来的x

GCN-GAN基础知识部分_第12张图片

 GRU是LSTM进化版本,有两个Gate,少了很多参数。

 理解Pytorch中LSTM的输入输出(从input输入到Linear输出)

       (3条消息) 深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)_Cyril_KI的博客-CSDN博客_lstm输入

         pytorch实现:nn.LSTM总共有7个参数,其中只有前三个是必须的,一般使用DataLoader形成批量数据,因此batch_first也比较重要,LSTM常见的两个应用场景为文本处理和时序预测。

1.input_size:
        在文本处理中,通过Word2Vec来对单词进行嵌入表示,将每一个单词表示成一个100维度的向量,那么input_size = 100。
        在时间序列预测时,每一个节点都会有它自己的特征向量,如果只有一个特征,则input_size=1,多维特征input_size = n

2.hidden_size:隐层状态的维数:(每个LSTM单元或者时间步的输出的ht的维度,单元内部有权重与偏差计算)。

3.num_layers:层数(在竖直方向堆叠的多个相同个数单元的层数)

4.batch_first:是否输入输出的第一维为batchsize

5.seq_len:在文本处理中,如果一个句子有7个单词,则seq_len=7;在时间序列预测中,假设我们用前24个小时的负荷来预测下一时刻负荷,则seq_len=24。

6.batch_size:一次性输入LSTM中的样本个数。在文本处理中,可以一次性输入很多个句子;在时间序列预测中,也可以一次性输入很多条数据。

7.num_directions:如果是双向LSTM,则num_directions=2;否则num_directions=1。

        若初始化LSTM时,batch_fist=False(默认情况),则

输入:input(batch_size, seq_len, input_size),
输出:output(seq_len, batch_size, num_directions * hidden_size)

        如果在初始化LSTM时令batch_first=True,那么input和output的shape变为:

input(batch_size, seq_len, input_size)
output(batch_size, seq_len, num_directions * hidden_size)

定义模型的代码:

self.lstm = nn.LSTM(self.input_size, self.hidden_size, self.num_layers, batch_first=True)
self.linear = nn.Linear(self.hidden_size, self.output_size)

 

你可能感兴趣的:(深度学习,生成对抗网络,深度学习,神经网络)