百度网盘python
提取码:qhhv 面试
(1)Backpropagation(反向传播)算法
后向传播是在求解损失函数L对参数w求导时候用到的方法,目的是经过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是所有置0,不然全部隐层的数值都会与输入相关,这称为对称失效。编程
(2)梯度消失、梯度爆炸网络
梯度消失:这本质上是因为激活函数的选择致使的, 最简单的sigmoid函数为例,在函数的两端梯度求导结果很是小(饱和区),致使后向传播过程当中因为屡次用到激活函数的导数值使得总体的乘积梯度结果变得愈来愈小,也就出现了梯度消失的现象。架构
梯度爆炸:同理,出如今激活函数处在激活区,并且权重W过大的状况下。可是梯度爆炸不如梯度消失出现的机会多。app
(3)过拟合框架
过拟合的缘由是算法的学习能力过强;一些假设条件(如样本独立同分布)多是不成立的;训练样本过少不能对整个空间进行分布估计。机器学习
处理方法:分布式
一、早中止:如在训练中屡次迭代后发现模型性能没有显著提升就中止训练
数据集扩增:在原始数据上作改动,从而可获得更多的数据,作各类变换。如:将原始图片旋转一个小角度;在图像上添加噪声;作一些有弹性的畸变;截取原始图像的一部分、原有数据加随机噪声、重采样
二、正则化 L1 regularization,L2 regularization,
三、交叉验证
四、特征选择/特征降维
五、增长网络的稀疏度,下降网络的复杂度(深度)
六、添加Dropout,适当下降Learning rate,适当减小epoch的次数
(4) 为什么使用Batch Normalization:
若用多个梯度的均值来更新权重的批量梯度降低法能够用相对少的训练次数遍历完整个训练集,其次可使更新的方向更加贴合整个训练集,避免单个噪音样本使网络更新到错误方向。然而也正是由于平均了多个样本的梯度,许多样本对神经网络的贡献就被其余样本平均掉了,至关于在每一个epoch中,训练集的样本数被缩小了。batch中每一个样本的差别性越大,这种弊端就越严重。通常的解决方法就是在每次训练完一个epoch后,将训练集中样本的顺序打乱再训练另外一个epoch,不断反复。这样从新组成的batch中的样本梯度的平均值就会与上一个epoch的不一样。而这显然增长了训练的时间。同时由于没办法保证每次更新的方向都贴合整个训练集的大方向,只能使用较小的学习速率。这意味着训练过程当中,一部分steps对网络最终的更新起到了促进,一部分steps对网络最终的更新形成了干扰,这样“磕磕碰碰”无数个epoch后才能达到较为满意的结果。
为了解决这种“不效率”的训练,BN首先是把全部的samples的统计分布标准化,下降了batch内不一样样本的差别性,而后又容许batch内的各个samples有各自的统计分布。
(5) 神经网络模型优化的经常使用方案
一、增长(减小)隐藏层的复杂度,如增长隐藏层数,调整隐藏层的神经元个数,或者在隐藏层使用更加复杂的网络结构,如CNN、RNN、LSTM、GRU或者增长Attention层等等;
二、添加Dropout层,使用Dropout的原理优化网络参数,防止过拟合;
三、尝试不一样的优化器,经常使用的优化器包括SGD、Adam、RMSprop(动量相关);
四、增长迭代次数,通常为了快速检验模型效果训练次数比较少,优化过程当中能够增长训练次数;
五、调整优化器的学习率,学习率过小会形成模型收敛速度降低,还有可能求出的是局部最优解,训练模型时的损失函数降低慢;学习率过大会引发模型没法到达最优解,在最优解附近来回跳转,可是通常状况下学习率并非一成不变的,而是随着模型的训练在优化;
六、增长批处理的大小,采用批处理的方式训练数据时每一个batch的数据进行一次反向传播,更新参数,因此每一个batch的数据分布对模型训练有着必定的影响,调整batch_size的大小,对模型优化有必定的做用;
七、正则化,能够优化模型太过复杂而引发运行时间过长的问题,也能够在必定程度上防止模型过拟合。(过拟合也就是模型把训练数据的内部关系都记下来了,在训练集损失函数很小,可是在测试集上损失函数开始增大,也就是在测试集上的效果开始降低)
(6)经常使用特征提取方法
一、潜在语义索引:利用SVD奇异值分解方法来得到文本的主题
二、主成分分析(PCA), 是一种统计方法。经过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
三、线性判别分析
在天然语言处理领域, LDA是隐含狄利克雷分布,他是一种处理文档的主题模型。LDA是一种监督学习的降维技术,而PCA是无监督的降维技术,LDA是在降维的基础上考虑了类别的因素,但愿获得的投影类内方差最小,类与类之间的方差最大。
(7)为何要卷积?
第一种称为参数共享。理想的是,在图像的一个部分中有用的特征检测器可能在图像的另外一部分中有用。例如,边缘检测器可能对图像的许多部分有用。参数的共享容许参数的数量很小而且还容许稳健的平移不变性。翻译不变性是指猫移动和旋转的概念仍然是猫的图片。
第二个被称为稀疏链接。每一个输出层只是少许输入的函数(特别是滤波器大小的平方)。这大大减小了网络中的参数数量,并容许更快的培训。
1. CNN的三个优势:
sparse interaction(稀疏的交互),parameter sharing(参数共享),equivalent respresentation(等价表示)。适合于自动问答系统中的答案选择模型的训练。
2. CNN与DNN的区别:
DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤其重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入能够是tensor,例如二维矩阵,经过filter得到局部特征,较好的保留了平面结构信息。
3. filter尺寸计算:
Feature Map的尺寸等于(input_size + 2 * padding_size − filter_size)/stride+1
4. RNN为何具备记忆功能?
这个是在RNN就解决的问题,就是由于有递归效应,上一时刻隐层的状态参与到了这个时刻的计算过程当中,直白一点呢的表述也就是选择和决策参考了上一次的状态。
5. 为何LSTM记的时间长?
由于特地设计的结构中具备CEC的特色,偏差向上一个状态传递时几乎没有衰减,因此权值调整的时候,对于很长时间以前的状态带来的影响和结尾状态带来的影响能够同时发挥做用,最后训练出来的模型就具备较长时间范围内的记忆功能。
偏差回传的主力仍是经过了Memory Cell而保持了下来。因此咱们如今用的LSTM模型,依然有比较好的效果。
最后整个梳理一下偏差回传的过程,偏差经过输出层,分类器,隐层等进入某个时刻的Block以后,先将偏差传递给了Output Gate和Memory Cell两个地方。
到达输出门的偏差,用来更新了输出门的参数w,到达Memory Cell以后,偏差通过两个路径:一是经过这个cell向前一个时刻传递或者更前的时刻传递,二是用来传递到input gate和block的输入,用来更新了相应的权值(注意!不会通过这里向前一个时刻传递偏差)。
最关键的问题就是,这个回传的算法,只经过中间的Memory Cell向更前的时刻传递偏差。
在RNN中U、V、W的参数都是共享的,也就是只须要关注每一步都在作相同的事情,只是输入不一样,这样来下降参数个数和计算量。
6. RNN特色:
时序长短可变(只要知道上一时刻的隐藏状态ht−1ht−1与当前时刻的输入xtxt,就能够计算当前时刻的隐藏状态htht。而且因为计算所用到的WxhWxh与WhhWhh在任意时刻都是共享的。递归网络能够处理任意长度的时间序列)顾及时间依赖,将来信息依赖(双向递归)
7. RNN主要包括LSTM,GRU
GRU对LSTM作了两个大改动:将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)和重置门(Reset Gate); 将单元状态与输出合并为一个状态。
GRU只用了两个gates,将LSTM中的输入门和遗忘门合并成了更新门。而且并不把线性自更新创建在额外的memory cell上,而是直接线性累积创建在隐藏状态上,并靠gates来调控。
1.有过ocr(光学字符识别)、人脸识别或其余图像识别相关工做或研究经验者优先;
2.熟悉至少一种经常使用的深度学习框架好比pytorch,tensorflow,Caffe,MxNet等
3.在遥感图像处理、目标检测与分割框架(Mask_Rcnn、Yolo等)、对arcmap或者QGIS等地理信息软件的处理等等有实践经验
4.熟悉python、C/C++、Git
5.用过opencv(计算机视觉库)、dlib(机器学习、人脸识别相关库),CNN、RNN等深度学习算法,熟悉一些经常使用的机器学习算法好比SVM,adaboost等
六、较流畅的英文技术材料阅读能力;对系统优化和算法模型应用有浓厚兴趣;阅读过相关源码,理解该类架构设计者优先;具有分布式计算框架的使用和并行算法的开发经验者优先。
七、精通Linux系统应用开发;了解机器学习算法原理,对算法高效实现有浓厚兴趣,有必定机器学习算法实现经验;有并行计算、GPU计算相关经验者优先。
一、梯度降低算法的正确步骤是什么?
a.计算预测值和真实值之间的偏差
b.重复迭代,直至获得网络权重的最佳值
c.把输入传入网络,获得输出值
d.用随机值初始化权重和误差
e.对每个产生偏差的神经元,调整相应的(权重)值以减少偏差
A.abcde B.edcba C.cbaed D.dcaeb
解析:正确答案D,考查知识点-深度学习。
二、已知:
- 大脑是有不少个叫作神经元的东西构成,神经网络是对大脑的简单的数学表达。
- 每个神经元都有输入、处理函数和输出。
- 神经元组合起来造成了网络,能够拟合任何函数。
- 为了获得最佳的神经网络,咱们用梯度降低方法不断更新模型
给定上述关于神经网络的描述,什么状况下神经网络模型被称为深度学习模型?
A.加入更多层,使神经网络的深度增长
B.有维度更高的数据
C.当这是一个图形识别的问题时
D.以上都不正确
解析:正确答案A,更多层意味着网络更深。没有严格的定义多少层的模型才叫深度模型,目前若是有超过2层的隐层,那么也能够及叫作深度模型。
三、训练CNN时,能够对输入进行旋转、平移、缩放等预处理提升模型泛化能力。这么说是对,仍是不对?
A.对 B.不对
解析:对。如寒sir所说,训练CNN时,能够进行这些操做。固然也不必定是必须的,只是data augmentation扩充数据后,模型有更多数据训练,泛化能力可能会变强。
四、下面哪项操做能实现跟神经网络中Dropout的相似效果?
A.Boosting B.Bagging C.Stacking D.Mapping
解析:正确答案B。Dropout能够认为是一种极端的Bagging,每个模型都在单独的数据上训练,同时,经过和其余模型对应参数的共享,从而实现模型参数的高度正则化。
五、下列哪一项在神经网络中引入了非线性?
A.随机梯度降低
B.修正线性单元(ReLU)
C.卷积函数
D.以上都不正确
解析:正确答案B。修正线性单元是非线性的激活函数。
1.请简要介绍下tensorflow的计算图。解析:Tensorflow是一个经过计算图的形式来表述计算的编程系统,计算图也叫数据流图,能够把计算图看作是一种有向图,Tensorflow中的每个节点都是计算图上的一个Tensor, 也就是张量,而节点之间的边描述了计算之间的依赖关系(定义时)和数学操做(运算时)。以下两图表示: