点击“小詹学Python”,“星标”或"置顶"
关键时刻,第一时间送达
本文转载自“Python全家桶”
金三银四的金三已经过了三分之二,不知道大家最近工作找的咋样?
身边最近也有好多朋友打算换工作,和他们交流了许多,都在说今年的就业市场没有之前那么好,以往简历投出去,马上就能收到好几个面试机会,而现在隔几天才能收到一个面试。确实是这样,毕竟今年是资本寒冬,大环境都不行,许多企业都已经开始裁员了,直接导致就业需求和往年相比大大降低,再加上被裁人员的再就业竞争,想要再寻求一份称心如意的工作就难上加难了。所以建议大家要是目前工作还是可以的话,最好是先干着,更不建议裸辞找工作。
说到正题,之前分享了10道深度学习面试题,今天再继续分享10道,希望这些面试题可以帮助到找深度学习岗位的朋友们。
11.神经网路中使用relu函数要好过tanh和sigmoid函数?
答:1.使用sigmoid函数,算激活函数时(指数运算),计算量大,反向传播误差梯度时,求导涉及除法和指数运算,计算量相对较大,而采用relu激活函数,整个过程的计算量节省很多
2.对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况,这种现象称为饱和,从而无法完成深层网络的训练。而relu函数就不会出现饱和倾向,不会有特别小的梯度出现
3.relu函数会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。当然现在也有一些对relu函数的改进,比如prelu, random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进多加一句,现在主流的做法,会多做一步batch normalization,尽可能保证每一层网络的输入具有相同的分布。
12.深度学习中的Batch Normalization?
答:BN就是在神经网络的训练过程中对每层的输入数据加一个标准化处理
传统的神经网络,只是在将样本x输入输入层之前对x进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据x进行标准化,还对每个隐藏层的输入进行标准化
13.为什么在LSTM模型中既存在sigmoid函数又存在tanh两种激活函数,二不是选择区中单独的一组?这样做的目的是什么?
答:sigmoid函数用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了;
tanh用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以;
两者的目的不同
14.如何解决RNN梯度爆炸和弥散的问题?
答:梯度爆炸:为解决梯度爆炸问题,Thomas Mikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阀值的时候,将它截断为一个较为小的数。
解决梯度弥散问题的两种方法:
第一种:将随机初始化W改为一个有关联的矩阵初始化。
第二种:使用ReLU代替sigmid函数。ReLU导数不是0就是1,因此,神经元的梯度将始终为1,而不会当梯度传播了一定时间之后变小
15.什么样的资料不适合深度学习?
答:(1) 数据集太小,数据样本不足时,深度学习相对于其他机器学习算法,没有明显优势;
(2) 数据集没有局部相关性,目前深度学习表现较好的领域是图像识、语音、自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不合适使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄,职业,收入,家庭状况等各种因素,将这些元素打乱,并不会影响相关的结果
16.如何解决梯度消失和梯度膨胀?
答:(1) 梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重解雇小于1的话,那么即使这个结果是0.99,经过足够多层传播之后,误差对输入层的偏导会趋于0;
(2) 梯度膨胀:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大
解决方案:可以通过激活函数来解决或者用Bath Normalization解决这个问题
17.广义线性模型是怎么被应用在深度学习中?
答:深度学习从统计学角度,可以看做递归的广义线性模型
广义线性模型相对于经典的线性模型(y=wx+b),核心在于引入了连接函数g(.),形式变为:y=g-1(wx+b)
深度学习时递归的广义线性模型,神经元的激活函数,既为广义线性模型的连接函数。逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样,容易引起初学者的困惑
18.简述神经网络的发展史?
答:sigmoid会饱和,造成梯度消失,于是有了ReLU
ReLU负半轴是死区,会造成梯度变为0,于是有了LeakyReLU、PReLU
强调梯度和权值分布的稳定性,由此有了ELU,以及较新的SELU
太深了,梯度传递不下去,于是有了highway
干脆连highway的参数都不要,直接变残差,于是有了ResNet
强行稳定参数的均值和方差,于是有了BatchNorm
在梯度流中增加噪声,于是有了Dropout
RNN梯度不稳定,于是加几个通路和门控,于是有了LSTM
LSTM简化一下,有了GRU
GAN的JS散度有问题,会导致梯度消失或者无效,于是有了WGAN
WGAN对梯度的clip有问题,于是有了WGAN-GP
19.深度学习常用方法:
答:全连接DNN(相邻层互相连接,层内无连接)
AutoEncoder(尽可能还原输入)、Sparse Coding(在AE上加入L1规范)、RBM(解决概率问题)---->>特征检测---->>栈式叠加贪心训练
RBM---->DBM
解决全连接DNN的全连接问题---->CNN
解决全连接DNN的无法对时间序列上变化进行建模的问题---->RNN----解决时间轴上的梯度消失问题---->>LSTM
DNN是传统的全连接网络,可以用于广告点击预估,推荐等。其使用embedding的方式将很多离散的特征编码到神经网络中,可以很大的提升结果
CNN主要用于计算机视觉(Computer Vision)领域,CNN的出现主要解决了DNN在图像领域中参数过多的问题。同时,CNN特有的卷积,池化、batch normalization、Inception、ResNet、DeepNet等一系列的发展使得在分类、物体检测、人脸识别、图像分割等众多领域有了长足的进步。同时,CNN不仅在图像上应用很多,在自然语言处理上也颇有进展,现在已经有基于CNN的语言模型可以比LSTM更好的效果。在最新的AlphaZero中,CNN中的ResNet也是两种基本算法之一
GAN是一种应用在生成模型的训练方法现在有很多在CV方面的应用,例如图像翻译,图像超清化,图像修复等等
RNN主要应用于NLP领域,用于处理序列到序列的问题。普通RNN会遇到梯度爆炸和梯度消失的问题。所以现在在NLP领域,一般会使用LSTM模型。在最近的机器翻译领域,Attention作为一种新的手段,也被引入进来
除了DNN、RNN和CNN外,自动编码器(AutoEncoder)、稀疏编码(SparseCoding)、深度信念网络(DBM)、限制玻尔兹曼(RBM)也都有相应的研究
20.简单说说CNN常用的几个模型:
名称 | 特点 |
LeNet5 | 没啥特点,不过是第一个CNN应该知道 |
AlexNet | 引入了ReLU和dropout,引入数据增强,池化相互之间有覆盖,三个卷积一个最大池化+三个全连接 |
VGGNet | 采用1*1和3*3的卷积核以及2*2的最大池化使得层数变得更深,常用VGGNet-16和VGGNet-19 |
Google Inception Net | 这个在控制参数的同时,获得了比较好的分类性能,和上面相比有几个大的改进 1.去除最后的全连接层,而是用一个全局的平均池化层来取代它 2.引入Inception Module,这是一个4个分支结合的结构,所有的分支都用到了1*1的卷积,这是因为1×1性价比很高,可以用很少的参数达到非线性和特征变换 3.Inception V2第二版将所有的5*5变成2个3*3,而且提出来著名的Batch Normalization 4.Inception V3第三版就更变态了,把较大的二维卷积拆成了两个较小的一维卷积,加速运算,减少过拟合,同时还更改了Inception Module的结构 |
微软ResNet残差神经网络 (Residual Neural Network) | 1.引入高速公路结构,可以让神经网络 变得非常深 2.ResNet第二个版本将ReLU激活函数 变成y=x的线性函数 |
到这里深度学习的20道面试题就已经分享完成。要是感觉本文不错,欢迎大家点赞转发。