算法工程师面试(一 深度学习)

找了一些别人面试算法工程师中被问到的问题,搜了比较合适的答案,本人第一篇博客,有错误请指出改正!!

1 模型类

1.1 resnet和densenet及其不同

那么ResNet解决了什么问题呢?

训练深层的神经网络,会遇到梯度消失和梯度爆炸(vanishing/exploding gradients)的问题,影响了网络的收敛,但是这很大程度已经被标准初始化(normalized initialization)和BN(Batch Normalization)所处理。
当深层网络能够开始收敛,会引起网络退化(degradation problem)问题,即随着网络深度增加,准确率会饱和,甚至下降。这种退化不是由过拟合引起的,因为在适当的深度模型中增加更多的层反而会导致更高的训练误差。
ResNet就通过引入深度残差连接来解决网络退化的问题,从而解决深度CNN模型难训练的问题。

相比ResNetDenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。而且DenseNet是直接concat来自不同层的特征图,这可以实现特征重用,提升效率,这一特点是DenseNet与ResNet最主要的区别。

1.2 resnet几种结构具体怎么实现,bottleneck的作用,为什么可以降低计算量,resnet参数量和模型大小

ResNet在PyTorch的官方代码中共有5种不同深度的结构,深度分别为18、34、50、101、15。不同深度的网络结构由不同的子模块搭建,(1) 一种基于BasicBlock,浅层网络ResNet18, 34都由BasicBlock搭成;(2) 另一种基于Bottleneck,深层网络ResNet50, 101, 152乃至更深的网络,都由Bottleneck搭成。如图2所示,左侧为BasicBlock,右侧为Bottleneck的结构:
左侧为BasicBlock,右侧为Bottleneck的结构所谓的BottleNeck,就是为了减少计算量,在卷积之前用1×1的卷积降低通道数,从而降低了参数量,卷积之后再用1×1的卷积恢复通道数.

整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

比如说我有一个模型参数量是1M,在一般的深度学习框架中(比如说PyTorch),一般是32位存储。32位存储的意思就是1个参数用32个bit来存储。那么这个拥有1M参数量的模型所需要的存储空间的大小即为:1M * 32 bit = 32Mb = 4MB。因为1 Byte = 8 bit。

1.3 Inception系列的演化

Inception v1即大名鼎鼎的GoogLeNet:Inception v1在结构上有两个突出的特点:
1 Multi-branch结构:
每个inception module分为四个branch,输出时对所有branch的输出concatenation。
2 Heterogeneous branch结构:
每个branch的结构都是不一样的,主要表现在branch的depth和kernel size两方面。
在这里插入图片描述

                                     Inception v1核心模块

Inception v2 v3
Inception v2和v3是在同一篇文章中提出来的。相比Inception v1,结构上的改变主要有两点:
1)用堆叠的小kernel size(33)的卷积来替代Inception v1中的大kernel size(55)卷积;
2)引入了空间分离卷积(Factorized Convolution)来进一步降低网络的复杂度。
Inception v4
主要思想:Inception表现很好,很火的ResNet表现也很好,把他们结合起来
Inception v4

在这里插入图片描述
残差连接只能加速网络收敛,真正提高网络精度的还是“更大的网络规模。

1.4 知道哪些移动端/轻量化模型

SqueezeNet、MobileNet、ShuffleNet、Xception。

SqueezeNet特点:Fire module 与 GoogLeNet 思想类似,采用 1*1 卷积对 feature map 的维数进行「压缩」,从而达到减少权值参数的目的;采用与 VGG 类似的思想——堆叠的使用卷积,这里堆叠的使用 Fire module。

MobileNet:核心思想是采用 depth-wise convolution 操作,在相同的权值参数数量的情况下,相较于 standard convolution 操作,可以减少数倍的计算量,从而达到提升网络运算速度的目的。采用 depth-wise convolution 会有一个问题,就是导致「信息流通不畅」,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise convolution 解决这个问题。

ShuffleNet:与 MobileNet 一样采用了 depth-wise convolution,但是针对 depth-wise convolution 带来的副作用——「信息流通不畅」,ShuffleNet 采用了一个 channel shuffle 操作来解决。在网络拓扑方面,ShuffleNet 采用的是 resnet 的思想,而 mobielnet、SqueezeNet 采用的是 VGG 的思想。

Xception:Xception 并不是真正意义上的轻量化模型,只是其借鉴 depth-wise convolution

1.5 GAN

生成对抗网络(Generative Adversarial Nets)有生成网络(Generator)与判别网络(Discriminator)。当生成网络G捕捉到样本数据分布,用服从某一分布的噪声z生成一个类似真实训练数据的样本,与真实样本越接近越好;判别网络D一般是一个二分类模型,在本文中D是一个多分类器,用于估计一个样本来自于真实数据的概率,如果样本来自于真实数据,则D输出大概率,否则输出小概率。在训练的过程中,需要固定一方,更新另一方的网络状态,如此交替进行。在整个训练的过程中,双方都极力优化自己的网络,从而形成竞争对抗,知道双方达到一个动态的平衡。此时生成网络训练出来的数据与真实数据的分布几乎相同,判别网络也无法再判断出真伪。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值