大疆2019校招提前批机器学习算法工程师在线笔试题目回忆版

最后还涉及到两道16分的在线编程题目,但是我忘记了,故没有列出来,望大家原谅2333。

大疆2019年校招提前批机器学习算法工程师B卷题目回忆版

1 考察关于各种激活函数

sigmoidtanhreluleaky relu函数的优缺点比较

 

1.1 神经网络中引入激活函数的作用:

激活函数就是映射,且函数几乎处处可导。一般认为激活函数的作用就是为了给神经网络加入非线性的因素,因为激活函数一般都是非线性函数,没有了激活函数,那么神经网络难以对于生活中常见的非线性数据建模。所以,神经网络激活函数是不可缺少的。

 

1.2 sigmoid函数

特点:良好的非线性映射,是以非零作为中心,有梯度消失的缺点

 

梯度消失现象:sigmoid 神经元在值为0或1的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个代价函数关于该单元输出的梯度相乘,结果也会接近为0。

 

 

1.3 tanh

特点:以0为中心,就有梯度消失的特点

 

 

1.4  Relu

修正线性单元(Rectified linear unit)

也通常表示为:

特点:以非0作为中心,没有梯度消失的特点,是目前应用最广泛的激活函数,Relu对于SGD的收敛具有巨大的加速作用。有人认为这是由于它的线性、非饱和的公式所致的。

 

 

1.5 .LReLU,PReLU,RReLU

特点:这三个都是相对于Relu的改进,三个函数的写法可以近似地认为是一样的,细节上有一些差异

其中可以看成是斜率,也就是说这个激活函数多引进了一个参数


对于LRelu来说,ai是固定的,可以通过各种验证方式选出一个合适的ai来

PRelu是对于LRelu的改进,可以自适应地学习参数而不是固定的,原论文建议0.25

RRelu的ai是一个给定范围内的随机变量,随机选择的,在一定程度上可以起到正则化的作用

 

 

 

1.6 ELU

Exponential Linear Units的缩写,函数形式为

 其中a

特点:右侧的线性部分能够缓解梯度消失,左侧的软饱和能够对于输入变化鲁棒.而且收敛速度更快.

 

 

1.7 softplus


 

1.8 softsign



 

 

1.9 原题回忆版1:Leaky Relu激活函数的公式是什么?为什么要使用Leaky Relu激活函数?

首先relu激活函数有个缺点,它在训练的时候比较脆弱,并且可能死掉。比如一个非常大的梯度经过一个relu神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0 。也就是说,这个relu单元在训练中将不可逆转死亡,导致了数据多样化的丢失。实际中,如果学习率设置的过高,可能会发现网络中40%的神经元会死掉(在这个训练中这些神经元都不会被激活),合理设置学习率会降低这种情况的发生。

Leaky Relu激活函数是为了解决“Relu死亡”问题的尝试,对于Relu而言,在x<0时,函数值为0,而leaky Relu则是给出了一个很小的负数梯度值,比如0.01


当选择激活函数的时候:如果使用 ReLU ,那么一定要小心设置 learning rate ,而且要注意不要让你的网络出现很多 “ dead ” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU 、 PReLU 或者 Maxout最好不要用 sigmoid ,可以试试 tanh ,不过可以预期它的效果会比不上 ReLU 和 Maxout

 

原题会议版2 对于一个神经元,其输出为-0.0001,则这个神经元是哪个激活函数

A sigmoid;  B Tanh;  C Relu

其中Relu和sigmoid函数都是没有负值输出的,所以三个选项中怎么选择B Tanh

 

2 图像为什么要进行数据增强?数据增强的方法有哪些?

在图像的深度学习中,为了丰富图像训练集,更好地提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强。数据增强常用的方式有:就是一些诸如图像的几何变换。比如旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变图像尺寸大小,增强图像噪音(一般使用高斯噪音、椒盐噪音),但是需要注意的是不要引入其他图像轮廓的噪音。

另外的一种回答:

收集数据准备微调深度学习模型时,经常会遇到某些分类数据严重不足的情况,另外数据集过小容易造成模型的过拟合。

数据增强的方法:

· Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化(此处对色彩抖动的理解不知是否得当);

· PCA  Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;

· Random Scale:尺度变换;

· Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;

· Horizontal/Vertical Flip:水平/垂直翻转;

· Shift:平移变换;

· Rotation/Reflection:旋转/仿射变换;

· Noise:高斯噪声、模糊处理;

· Label shuffle:类别不平衡数据的增广,参见海康威视ILSVRC2016的report;另外,文中提出了一种Supervised Data Augmentation方法,有兴趣的朋友的可以动手实验下。

 

3 机器学习中为什么要进行归一化,以及常见的几种归一化的方法

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。 

归一化的目标:

1 把数变为(0,1)之间的小数
        主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。
2 把有量纲表达式变为无量纲表达式
        归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。 
另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

 

归一化后有两个好处:

1 提升模型的收敛速度

举个例子:

如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)

 

2 提升模型的精度

归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性

 

3 深度学习中数据归一化可以防止模型梯度爆炸

 

常见的数据归一化方法:

最常见的是min-max标准化和z-score标准化。

min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)/线性函数归一化/离差标准化

是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

 

其中max为样本数据的最大值,min为样本数据的最小值。

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

 

如果想要将数据映射到[-1,1],则将公式换成:

x* = x* * 2 -1

或者进行一个近似

x* = (x - x_mean)/(x_max - x_min), x_mean表示数据的均值。

def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

z-score标准化(zero-mean normalization)

最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法,spss默认的标准化方法就是z-score标准化。也叫标准差标准化,这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

x* = (x - μ ) / σ

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

 

标准化的公式很简单,步骤如下:

1. 求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;
2.进行标准化处理:
zij=(xij-xi)/si
其中:zij为标准化后的变量值;xij为实际变量值。
3.将逆指标前的正负号对调。
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

 

为什么z-score标准化后的数据标准差为1?

x-μ只改变均值,标准差不变,所以均值变为0

(x-μ)/σ只会使标准差除以σ倍,所以标准差变为1

 

4 卷积神经网络中特征图大小的计算

真题:一个200*200的图像,经过5*5的卷积滤波器,padding = 1 , stride = 2; 再经过3X3的最大池化层,其中stride = 1no padding; 再经过一个卷积层,其中padding = 1, kernal = 3stride = 1,问所得到的feature map的尺寸是多大。

计算:具体的计算方法可以参照算法工程师XXX童鞋的博客

https://blog.csdn.net/qq_33221533/article/details/80986866

在这篇博客中给出了详细透彻的计算方法

公式:,参数解释,其中为原图的输入尺寸,Ppadding的大小,K为滤波器的尺寸,S为步长Stride。根据题意

经过第一层卷积层,fm,再经过一个3X3的最大池化层,得到此时fm,然后再经过一个卷积层,则得到fm,这个时候应该是97还是97.5?我填的97

5 优化方法总结

可以参照这篇链接https://blog.csdn.net/u010089444/article/details/76725843

里面详细地介绍了各种优化算法。

真题:Adagrad算法是什么?其缺点是什么

对于每一个参数θi 的训练都使用了相同的学习率α。Adagrad算法能够在训练中自动的对learning rate进行调整,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。因此,Adagrad非常适合处理稀疏数据。

我们设为第t轮第i个参数的梯度,即。因此,SGD中参数更新的过程可写为:

 

Adagrad在每轮训练中对每个参数θi的学习率进行更新,参数更新公式如下:

 

其中,Gt∈Rd×d为对角矩阵,每个对角线位置i,i为对应参数θi从第1轮到第t轮梯度的平方和。ϵ是平滑项,用于避免分母为0,一般取值1e−8。Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。


6  手推BP算法

 

 

 

 

 

 

 

 


猜你喜欢

转载自blog.csdn.net/qq_33221533/article/details/81057536