当前位置:   article > 正文

机器学习:残差学习、RNN、GAN、迁移学习、知识蒸馏

残差学习

ps:了解一些新的概念和知识,是自己的理解,不一定正确,如有不对,欢迎指正~

了解了卷积神经网络之后我们再来了解几个东西

残差学习

从经验来看,网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征模式的提取,所以当模型更深时理论上可以取得更好的结果。但是,实际上却并非如此。
在这里插入图片描述
纵轴是错误率,可以看到56层的深度,比20层还要差。这是一个神经网络的瓶颈。
何恺明博士提出了残差学习来解决这个问题。
我们假设当输入为x的时候,学习到的特征为H(x),我们定义F(x)=H(x)-x为残差,我们让下一层的输入为F(x)+x,那么如果残差是0的时候,下一层的输入就是x了,也就意味着做了一个恒等映射。这样可以保证,最起码增加深度的时候,这个网络不会退化,因为他最差就什么也不学,相当于没加。而且一般残差不会为0,这样我们就可以保证在输入特征的基础上学到新的特征。如图是残差模块的示意图。
在这里插入图片描述
ResNet网络参考了VGG19网络,在其基础上进行了修改,加入了残差单元,在各项比赛摘得桂冠。

RNN

RNN,循环神经网络。与CNN最大的不同就是RNN具有“记忆”能力。RNN擅长处理序列数据(具有前后顺序关系的)。
这是如何做到的呢,传统的神经网络输入一句话,得到一个结果。在输入一句话,再得到一个结果。那么想象一下对话的场景,如果你和一个人工智能对话,他不能只根据你说的这句话,输出一个结果,这样不够智能,如果他能把之前的对话都记录下来,然后你的每一句话,都根据之前的所有对话得出回答。这才更智能,更像是人与人的聊天。所以,RNN的做法就是每一次学习的时候,把上一次的状态加进来一起学习。这就让他有了“记忆”功能。
在这里插入图片描述

GAN

GAN(生成式对抗网络,Generative adversarial network)。GAN可以生成不存在于真实世界的数据,用于图像生成和数据增强。模型通过框架中两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。
以图像为例子,假设我们有两个网络,G(Generator)和D(Discriminator)。

  • G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
  • D是一个判别网络,判别一张图片是不是“真实的”。输出1为真,反之为0.
    在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
    最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 1。这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。

在这里插入图片描述

迁移学习

我们都知道,表现好的有监督学习必然需要大量的标注数据,注数据是一项枯燥无味且花费巨大的任务,如何充分利用之前标注好的数据,同时又保证在新的任务上的模型精度呢?所以有了迁移学习。
目前尚无统一的对于迁移学习的定义。从广义上讲,只要我们利用了已有的知识、模型、结构来帮助我们达成在目标数据上的学习目标,那么这一过程就可称之为迁移学习。

了解两种方式:

  • 把已经训练好的网络的权重参数拿来,当作你的网络的初始化,然后拿你的数据,在此基础上进行训练学习。
  • 直接把别人训练好的权重参数拿来,当作你的权重参数。后面的全连接层自己来写,完成你的任务。

在这里插入图片描述

知识蒸馏

知识蒸馏指的是将复杂模型(teacher)中学到的知识迁移到简单模型(student)中去。
一般来说,我们认为teacher模型具有强大的能力和表现,而student模型则体量很小。通过知识蒸馏,希望student模型能尽可能逼近亦或是超过teacher模型,从而用更少的复杂度来获得类似的预测效果,实现模型的压缩和量化

上面说的迁移学习,一般认为模型的参数保留了模型学到的知识,常见的迁移学习的方式就是在一个大的数据集上先做预训练,然后使用预训练得到的参数在一个小的数据集上做fine-tuning(两个数据集往往领域不同或者任务不同),例如先在Imagenet上做预训练,然后在COCO数据集上做检测。

蒸馏神经网络想做的事情,本质上很接近迁移学习。(知识蒸馏开山之作:Hinton的Distilling the Knowledge in a Neural Network。)论文中,作者认为可以将模型看成是黑盒子,知识可以看成是输入到输出的映射关系。因此,我们可以先训练好一个teacher网络,然后将teacher的网络的输出结果 q作为student网络的目标,训练student网络,使得student网络的结果pred接近q。
所以,整个做法就是先训练一个teacher网络,然后使用这个teacher网络的输出和数据的真实标签去训练student网络。从而将一个网络的知识转移到另一个网络,也可以将多个网络学到的知识转移到一个网络中去。

在这里插入图片描述

end-to-end

如果看早几年15年左右的论文,经常出现这个词语,说端到端的神经网络,现在貌似不多了。因为现在很多都是端到端的网络。
端到端指的是输入是原始数据,输出是最后的结果
非端到端就是说:输入端不是直接的原始数据,而是在原始数据中提取的特征。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号