本文旨在收集在面试过程中问到的,以及从网上收集到的有价值的问题,目的是为了从问题出发主动整合知识,在校招有限的时间内抓住重点,避免漫无目的地看书复习。这些问题尽量给出自己的回答,如果暂时没有回答或者需要较长时间整理资料的,需要后续再补充。
###K-means的算法流程?与KNN的区别?
K-means的基本算法流程:
- 初始化k个聚类中心 c 1 , c 2 , . . . , c k c_1,c_2,...,c_k c1,c2,...,ck
- 对于每个样本 x i x_i xi和每个聚类中心 c j c_j cj,计算样本与聚类中心之间的距离 d i j d_{ij} dij
- 对于每个样本 x i x_i xi,基于其最小的 d i j d_{ij} dij把其分配到第 j j j个类 C j C_j Cj
- 对于每个类 C j C_j Cj,计算其所有样本的均值作为新的聚类中心,重复步骤2和步骤3直至样本点所属的类不再变化或达到最大迭代次数
K-means与KNN的区别:
- K-means是无监督学习算法,KNN是有监督学习算法
- K-means有明显的训练过程(求聚类中心),KNN在学习阶段只是简单的把所有样本记录
- 在测试阶段,对于K-means,新的样本点的判别与聚类中心有关,即与所有训练样本有关,对于KNN,新的样本点的判别只是与最近邻的K个样本有关。
###在目标检测算法中,two stage的算法比one stage在检测小物体上更有效,此说法同意吗,为什么?
基本上同意这个说法。
要说明这个问题主要从感受野的角度去看,one stage的方法,对于SSD,其采取多个特征图进行分类,但由于依赖网络中比较深的层(特征图),感受野很大,因而小物体检测不准确。同样,对于Yolo,由于在方法设计中就把原图分块,即设定了最后用于判断的特征图尺寸,其感受野也很大,因而对小物体判断也不准确。
相对于one stage方法要求同时分离前景和背景以及做出分类,two stage的方法由于proposal的存在可以先用简单的结构分出前景和背景(此时感受野小,特征图分辨率高),再通过深层网络做进一步分类和精修,提高准确率。
one stage的方法也有针对这个问题进行过优化,SSD增加相对不那么深的特征图层作判断,以减小感受野增加分辨率,但层数不深的特征图的判别能力有限,无法大幅增加准确率;Yolo v3增加了FPN,用多尺度特征来判断,增加了对小物体判别能力;RetinaNet也是one stage方法,用了FPN判别,此处对小物体检测更有效,另外其设计了focal loss的训练方式,此方式可认为把two stage中proposal达到的正负样本平衡以修改损失函数的方式达到类似效果,提高了训练效率和整体的准确率。
###梯度下降法与牛顿法的区别与优劣性
主要的的区别:梯度下降法是一阶,牛顿法是二阶
牛顿法相对于梯度下降法:
优点:二阶比一阶收敛速度快;
缺点:对目标函数严格,要求目标函数二阶可微,Hessian矩阵正定;需要计算Hessian矩阵以及它的逆,计算量大。
参考:https://www.cnblogs.com/shixiangwan/p/7532830.html
###描述Canny算法的流程
以下是简述:
- 先用高斯滤波器进行图像模糊(一般边缘检测算法都需要先滤波降低对噪声的敏感)
- 计算图像的梯度幅值图像和角度图像(计算梯度即提取边缘,参考其它边缘检测算法;计算角度是为步骤3要用)
- 对梯度幅值图像进行非最大值抑制(目的是为了细化边缘)
- 用双阈值对边缘进行选择和连接(主体思想是把弱边缘连接到强边缘上)
以下问题来自知乎:https://zhuanlan.zhihu.com/p/25005808,提出自己的想法和答案
###CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?
CNN是用于挖掘数据之间的空间相关性(相对于RNN用于挖掘时序相关性),所以不管是NLP,Speech还是AlphaGo,只要数据之间存在空间相关性,就可以使用CNN。而CNN最成功的应用在CV是因为在图像数据中的空间相关性最明显,像素之间存在两个维度上的空间相关性。
回答CNN通过什么手段抓住此共性这个问题,实质上是回答卷积和池化的特点。主要手段有局部连接(local connectivity)、权值共享(parameter sharing)和池化(pooling)(跟原文回答有点出入,觉得多层次是深度学习的特点而不是CNN的特点)。局部连接和权值共享有效地减少了网络的权值参数,抑制过拟合,同时保持了原始数据之间的空间联系。池化是下采样的一种方式,只取数值最大的特征,减少参数并且在空间上对原图物体保持平移不变性。
###什么样的资料集不适合用深度学习?
- 数据集太小。数据集太小时,用深度学习提取出来的特征非常容易过拟合,没有泛化能力,因而不及传统的机器学习方法。其本质是样本空间太稀疏,不能反映总体空间的分布,因而用深度学习得到的模型会过拟合。
- 数据之间没有局部相关性。深度学习对于结构化的数据提取特征有非常好的效果,但对于没有结构化的数据,即数据之间不存在局部相关性,如可能存在统计关系等,此时用深度学习就不是很合适。
###激活函数选用什么,有什么好处,为什么会有这样的好处。
1)sigmoid:
表达式:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac{1}{1+e^{-x}}
f(x)=1+e−x1
求导:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f'(x)=f(x)(1-f(x))
f′(x)=f(x)(1−f(x))
特点:增强0附近的梯度,放大信号,梯度计算方便,但对非敏感区域会饱和,造成梯度消失
2)tanh:
表达式:
f
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
f(x)=ex+e−xex−e−x
求导:
f
′
(
x
)
=
1
−
(
f
(
x
)
)
2
f'(x)=1-(f(x))^2
f′(x)=1−(f(x))2
特点:与sigmoid函数相似,另经过原点,不会引起在原点的偏移
3)Relu:
表达式:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0,x)
f(x)=max(0,x)
求导:
f
′
(
x
)
=
{
0
x
<
0
1
x
>
0
f'(x)=\begin{cases}0 & x<0\\1 & x > 0\end{cases}
f′(x)={01x<0x>0
特点:单侧抑制,增强稀疏性,避免梯度消失
4)Softmax:(不算激活函数,但在这里一并总结了)
表达式:
a
i
=
e
z
i
∑
k
e
z
k
a_i=\frac{e^{z_i}}{\sum_k{e^{z_k}}}
ai=∑kezkezi,
z
i
,
a
i
z_i,a_i
zi,ai分别表示第
i
i
i个节点的输入和输出
特点:用于多类分类问题,将输出归一化,方便计算基于概率的loss
求导:这里的求导主要是softmax loss的反向传播梯度,因为常考,具体步骤参考
https://blog.csdn.net/qian99/article/details/78046329,原博里描述链式求导时累加号表示有点有小问题,但过程和结果是对的,最好手动推一遍,这里直接给出答案:
∂
C
∂
z
i
=
a
i
−
y
i
\frac{\partial C}{\partial z_i}=a_i-y_i
∂zi∂C=ai−yi
###为什么很多做人脸的Paper会最后加入一个Local Connected Conv?
###对所有优化问题来说, 有没有可能找到比現在已知算法更好的算法?
###Dropout怎么做,有什么用处,解释;用贝叶斯机率说明Dropout的原理
###何为共线性, 跟过拟合有啥关联?
###广义线性模型是怎被应用在深度学习中?
###什么造成梯度消失问题? 推导一下
###不同的权值初始化方式以及其造成的后果。为什么会造成这样的结果。
###为什么网络够深(Neurons 足够多)的时候,总是可以避开较差Local Optima?
###样本方差与总体方差的关系。
https://blog.csdn.net/fuming2021118535/article/details/51290320
注意点:样本方差的估计量的期望等于总体方差,样本方差的计算中,分母除以n-1而不是n。