Skip to content

Commit 4f26877

Browse files
committed
添加10道【机器学习】【计算机视觉】【Python】等方向的面试题
1 parent 8cfaaed commit 4f26877

File tree

6 files changed

+108
-82
lines changed

6 files changed

+108
-82
lines changed

docs/数据结构与算法.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,16 @@ if __name__ == "__main__":
11111111

11121112
- [ ] TODO
11131113

1114+
##
1115+
1116+
### 构建堆的复杂度
1117+
1118+
- [ ] TODO
1119+
1120+
### 堆找出第k大元素的复杂度
1121+
1122+
- [ ] TODO
1123+
11141124
## 打印螺旋矩阵
11151125

11161126
- [ ] TODO

docs/机器学习.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ $$J(\phi(z),y;w)=-yln(\phi(z))-(1-y)ln(1-\phi(z))$$
133133

134134
- [ ] TODO
135135

136+
### 逻辑回归是处理线性问题还是非线性问题的?
137+
138+
- [ ] TODO
139+
136140
## 线性回归
137141

138142
### 基本原理
@@ -318,7 +322,7 @@ SVM的目标函数
318322

319323
第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
320324

321-
这个问题理解起来非常简单。分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。通过上面的第二点不同点可以了解,在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。​
325+
这个问题理解起来非常简单。分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。通过上面的第二点不同点可以了解,在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。​
322326

323327
第四,​线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。(引自http://www.zhihu.com/question/26768865/answer/34078149)
324328

@@ -739,6 +743,10 @@ Boosting:各个预测函数只能顺序生成,因为后一个模型参数需
739743
- [机器学习实战(三)——决策树](https://blog.csdn.net/jiaoyangwm/article/details/79525237)
740744
- [决策树基本概念及算法优缺点](https://www.jianshu.com/p/655d8e555494)
741745

746+
### 决策树的ID3和C4.5介绍一下
747+
748+
- [ ] TODO
749+
742750
## 随机森林(RF)
743751

744752
### 基本原理
@@ -1477,6 +1485,10 @@ L2正则化参数
14771485

14781486
- [ ] TODO
14791487

1488+
### Softmax代码实现
1489+
1490+
- [ ] TODO
1491+
14801492
## 交叉熵损失函数
14811493

14821494
- [ ] TODO

docs/深度学习.md

Lines changed: 1 addition & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ if (this->layer_param_.pooling_param().pool() == PoolingParameter_PoolMethod_MAX
216216

217217
- [ ] TODO
218218

219-
### BN可以防止过拟合么?
219+
### BN 可以防止过拟合么?为什么
220220

221221
- [ ] TODO
222222

@@ -862,76 +862,6 @@ W∗=argminw∗∑iN(ti∗−w^T∗ϕ5(Pi))2+λ||w^∗||2
862862

863863
- [如何理解空洞卷积(dilated convolution)?](<https://www.zhihu.com/question/54149221>)
864864

865-
## RetinaNet(Focal loss)
866-
867-
《Focal Loss for Dense Object Detection》
868-
869-
- arXiv:https://arxiv.org/abs/1708.02002
870-
871-
清华大学孔涛博士在知乎上这么写道:
872-
873-
目标的检测和定位中一个很困难的问题是,如何从数以万计的候选窗口中挑选包含目标物的物体。只有候选窗口足够多,才能保证模型的 Recall。
874-
875-
目前,目标检测框架主要有两种:
876-
877-
一种是 one-stage ,例如 YOLO、SSD 等,这一类方法速度很快,但识别精度没有 two-stage 的高,其中一个很重要的原因是,利用一个分类器很难既把负样本抑制掉,又把目标分类好。
878-
879-
另外一种目标检测框架是 two-stage ,以 Faster RCNN 为代表,这一类方法识别准确度和定位精度都很高,但存在着计算效率低,资源占用大的问题。
880-
881-
Focal Loss 从优化函数的角度上来解决这个问题,实验结果非常 solid,很赞的工作。
882-
883-
何恺明团队提出了用 Focal Loss 函数来训练。
884-
885-
因为,他在训练过程中发现,类别失衡是影响 one-stage 检测器准确度的主要原因。那么,如果能将“类别失衡”这个因素解决掉,one-stage 不就能达到比较高的识别精度了吗?
886-
887-
于是在研究中,何恺明团队采用 Focal Loss 函数来消除“类别失衡”这个主要障碍。
888-
889-
结果怎样呢?
890-
891-
为了评估该损失的有效性,该团队设计并训练了一个简单的密集目标检测器—RetinaNet。试验结果证明,当使用 Focal Loss 训练时,RetinaNet 不仅能赶上 one-stage 检测器的检测速度,而且还在准确度上超越了当前所有最先进的 two-stage 检测器。
892-
893-
**参考**
894-
895-
- [如何评价Kaiming的Focal Loss for Dense Object Detection?](https://www.zhihu.com/question/63581984)
896-
- [首发 | 何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录](https://zhuanlan.zhihu.com/p/28442066)
897-
898-
899-
## FPN 特征金字塔网络
900-
901-
- [ ] TODO
902-
903-
## Faster R-CNN的RPN网络
904-
905-
RPN结构说明:
906-
907-
1) 从基础网络提取的第五卷积层特征进入RPN后分为两个分支,其中一个分支进行针对feature map(上图conv-5-3共有512个feature-map)的每一个位置预测共(9*4=36)个参数,其中9代表的是每一个位置预设的9种形状的anchor-box,4对应的是每一个anchor-box的预测值(该预测值表示的是预设anchor-box到ground-truth-box之间的变换参数),上图中指向rpn-bbox-pred层的箭头上面的数字36即是代表了上述的36个参数,所以rpn-bbox-pred层的feature-map数量是36,而每一张feature-map的形状(大小)实际上跟conv5-3一模一样的;
908-
909-
2) 另一分支预测该anchor-box所框定的区域属于前景和背景的概率(网上很对博客说的是,指代该点属于前景背景的概率,那样是不对的,不然怎么会有18个feature-map输出呢?否则2个就足够了),前景背景的真值给定是根据当前像素(anchor-box中心)是否在ground-truth-box内;
910-
911-
3) 上图RPN-data(python)运算框内所进行的操作是读取图像信息(原始宽高),groun-truth boxes的信息(bounding-box的位置,形状,类别)等,作好相应的转换,输入到下面的层当中。
912-
913-
4) 要注意的是RPN内部有两个loss层,一个是BBox的loss,该loss通过减小ground-truth-box与预测的anchor-box之间的差异来进行参数学习,从而使RPN网络中的权重能够学习到预测box的能力。实现细节是每一个位置的anchor-box与ground-truth里面的box进行比较,选择IOU最大的一个作为该anchor-box的真值,若没有,则将之class设为背景(概率值0,否则1),这样背景的anchor-box的损失函数中每个box乘以其class的概率后就不会对bbox的损失函数造成影响。另一个loss是class-loss,该处的loss是指代的前景背景并不是实际的框中物体类别,它的存在可以使得在最后生成roi时能快速过滤掉预测值是背景的box。也可实现bbox的预测函数不受影响,使得anchor-box能(专注于)正确的学习前景框的预测,正如前所述。所以,综合来讲,整个RPN的作用就是替代了以前的selective-search方法,因为网络内的运算都是可GPU加速的,所以一下子提升了ROI生成的速度。可以将RPN理解为一个预测前景背景,并将前景框定的一个网络,并进行单独的训练,实际上论文里面就有一个分阶段训练的训练策略,实际上就是这个原因。
914-
915-
5) 最后经过非极大值抑制,RPN层产生的输出是一系列的ROI-data,它通过ROI的相对映射关系,将conv5-3中的特征已经存入ROI-data中,以供后面的分类网使用。
916-
917-
另外两个loss层的说明:
918-
也许你注意到了,最后还有两个loss层,这里的class-loss指代的不再是前景背景loss,而是真正的类别loss了,这个应该就很好理解了。而bbox-loss则是因为rpn提取的只是前景背景的预测,往往很粗糙,这里其实是通过ROI-pooling后加上两层全连接实现更精细的box修正(这里其实是我猜的)。
919-
ROI-Pooing的作用是为了将不同大小的Roi映射(重采样)成统一的大小输入到全连接层去。
920-
921-
以上。
922-
923-
**参考资料**
924-
925-
- [Faster-Rcnn中RPN(Region Proposal Network)的理解](https://blog.csdn.net/mllearnertj/article/details/53709766)
926-
927-
## ROI Pooling、ROI Align和ROI Warping对比
928-
929-
- [ ] TODO
930-
931-
**参考资料**
932-
933-
- [Mask-RCNN中的ROIAlign, ROIPooling及ROIWarp对比](https://blog.csdn.net/lanyuxuan100/article/details/71124596)
934-
935865
## Pooling层原理
936866

937867
- [ ] TODO
@@ -940,10 +870,6 @@ ROI-Pooing的作用是为了将不同大小的Roi映射(重采样)成统一
940870

941871
- [ ] TODO
942872

943-
## 非极大值抑制NMS
944-
945-
- [ ] TODO
946-
947873
## 为什么降采用使用max pooling,而分类使用average pooling
948874

949875
- [ ] TODO

docs/编程语言.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,10 @@ C++中有哪些容器(序列容器,关联容器)?vetor与list的区别
561561

562562
- [ ] TODO
563563

564+
Python的全局锁
565+
566+
- [ ] TODO
567+
564568
### Python 字典采用的是什么数据结构?
565569

566570
答:使用的是key-value匹配的哈希结构

docs/计算机视觉.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,10 @@ def voc_ap(rec, prec, use_07_metric=False):
607607
- [图像语义分割准确率度量方法总结](https://zhuanlan.zhihu.com/p/38236530)
608608
- [论文笔记 | 基于深度学习的图像语义分割技术概述之5.1度量标准](https://blog.csdn.net/u014593748/article/details/71698246)
609609

610+
## 非极大值抑制NMS
611+
612+
- [ ] TODO
613+
610614
## 目标检测中的Anchor
611615

612616
- [ ]
@@ -1174,6 +1178,76 @@ NMS_demo.py:<https://github.com/humengdoudou/object_detection_mAP/blob/master/
11741178

11751179
- [YOLOv1,YOLOv2,YOLOv3解读](<https://blog.csdn.net/hancoder/article/details/87994678>)
11761180

1181+
## RetinaNet(Focal loss)
1182+
1183+
《Focal Loss for Dense Object Detection》
1184+
1185+
- arXiv:https://arxiv.org/abs/1708.02002
1186+
1187+
清华大学孔涛博士在知乎上这么写道:
1188+
1189+
目标的检测和定位中一个很困难的问题是,如何从数以万计的候选窗口中挑选包含目标物的物体。只有候选窗口足够多,才能保证模型的 Recall。
1190+
1191+
目前,目标检测框架主要有两种:
1192+
1193+
一种是 one-stage ,例如 YOLO、SSD 等,这一类方法速度很快,但识别精度没有 two-stage 的高,其中一个很重要的原因是,利用一个分类器很难既把负样本抑制掉,又把目标分类好。
1194+
1195+
另外一种目标检测框架是 two-stage ,以 Faster RCNN 为代表,这一类方法识别准确度和定位精度都很高,但存在着计算效率低,资源占用大的问题。
1196+
1197+
Focal Loss 从优化函数的角度上来解决这个问题,实验结果非常 solid,很赞的工作。
1198+
1199+
何恺明团队提出了用 Focal Loss 函数来训练。
1200+
1201+
因为,他在训练过程中发现,类别失衡是影响 one-stage 检测器准确度的主要原因。那么,如果能将“类别失衡”这个因素解决掉,one-stage 不就能达到比较高的识别精度了吗?
1202+
1203+
于是在研究中,何恺明团队采用 Focal Loss 函数来消除“类别失衡”这个主要障碍。
1204+
1205+
结果怎样呢?
1206+
1207+
为了评估该损失的有效性,该团队设计并训练了一个简单的密集目标检测器—RetinaNet。试验结果证明,当使用 Focal Loss 训练时,RetinaNet 不仅能赶上 one-stage 检测器的检测速度,而且还在准确度上超越了当前所有最先进的 two-stage 检测器。
1208+
1209+
**参考**
1210+
1211+
- [如何评价Kaiming的Focal Loss for Dense Object Detection?](https://www.zhihu.com/question/63581984)
1212+
- [首发 | 何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录](https://zhuanlan.zhihu.com/p/28442066)
1213+
1214+
1215+
## FPN 特征金字塔网络
1216+
1217+
- [ ] TODO
1218+
1219+
## Faster R-CNN的RPN网络
1220+
1221+
RPN结构说明:
1222+
1223+
1) 从基础网络提取的第五卷积层特征进入RPN后分为两个分支,其中一个分支进行针对feature map(上图conv-5-3共有512个feature-map)的每一个位置预测共(9*4=36)个参数,其中9代表的是每一个位置预设的9种形状的anchor-box,4对应的是每一个anchor-box的预测值(该预测值表示的是预设anchor-box到ground-truth-box之间的变换参数),上图中指向rpn-bbox-pred层的箭头上面的数字36即是代表了上述的36个参数,所以rpn-bbox-pred层的feature-map数量是36,而每一张feature-map的形状(大小)实际上跟conv5-3一模一样的;
1224+
1225+
2) 另一分支预测该anchor-box所框定的区域属于前景和背景的概率(网上很对博客说的是,指代该点属于前景背景的概率,那样是不对的,不然怎么会有18个feature-map输出呢?否则2个就足够了),前景背景的真值给定是根据当前像素(anchor-box中心)是否在ground-truth-box内;
1226+
1227+
3) 上图RPN-data(python)运算框内所进行的操作是读取图像信息(原始宽高),groun-truth boxes的信息(bounding-box的位置,形状,类别)等,作好相应的转换,输入到下面的层当中。
1228+
1229+
4) 要注意的是RPN内部有两个loss层,一个是BBox的loss,该loss通过减小ground-truth-box与预测的anchor-box之间的差异来进行参数学习,从而使RPN网络中的权重能够学习到预测box的能力。实现细节是每一个位置的anchor-box与ground-truth里面的box进行比较,选择IOU最大的一个作为该anchor-box的真值,若没有,则将之class设为背景(概率值0,否则1),这样背景的anchor-box的损失函数中每个box乘以其class的概率后就不会对bbox的损失函数造成影响。另一个loss是class-loss,该处的loss是指代的前景背景并不是实际的框中物体类别,它的存在可以使得在最后生成roi时能快速过滤掉预测值是背景的box。也可实现bbox的预测函数不受影响,使得anchor-box能(专注于)正确的学习前景框的预测,正如前所述。所以,综合来讲,整个RPN的作用就是替代了以前的selective-search方法,因为网络内的运算都是可GPU加速的,所以一下子提升了ROI生成的速度。可以将RPN理解为一个预测前景背景,并将前景框定的一个网络,并进行单独的训练,实际上论文里面就有一个分阶段训练的训练策略,实际上就是这个原因。
1230+
1231+
5) 最后经过非极大值抑制,RPN层产生的输出是一系列的ROI-data,它通过ROI的相对映射关系,将conv5-3中的特征已经存入ROI-data中,以供后面的分类网使用。
1232+
1233+
另外两个loss层的说明:
1234+
也许你注意到了,最后还有两个loss层,这里的class-loss指代的不再是前景背景loss,而是真正的类别loss了,这个应该就很好理解了。而bbox-loss则是因为rpn提取的只是前景背景的预测,往往很粗糙,这里其实是通过ROI-pooling后加上两层全连接实现更精细的box修正(这里其实是我猜的)。
1235+
ROI-Pooing的作用是为了将不同大小的Roi映射(重采样)成统一的大小输入到全连接层去。
1236+
1237+
以上。
1238+
1239+
**参考资料**
1240+
1241+
- [Faster-Rcnn中RPN(Region Proposal Network)的理解](https://blog.csdn.net/mllearnertj/article/details/53709766)
1242+
1243+
## ROI Pooling、ROI Align和ROI Warping对比
1244+
1245+
- [ ] TODO
1246+
1247+
**参考资料**
1248+
1249+
- [Mask-RCNN中的ROIAlign, ROIPooling及ROIWarp对比](https://blog.csdn.net/lanyuxuan100/article/details/71124596)
1250+
11771251
## DeepLab系列(V1-V3+)
11781252

11791253
- [ ] TODO

docs/面试经验.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@
107107
- [ ] [寒武纪服务器软件工程师面经](https://www.nowcoder.com/discuss/211983)
108108
- [ ] [春招计算机视觉面经(阿里海康大华 华为腾讯、水晶光电、虹软)](https://www.nowcoder.com/discuss/190511)
109109
- [ ] [美的提前批面试【数据挖掘】](https://www.nowcoder.com/discuss/203015)
110-
- [ ] [发个面经吧,bat加字节](https://www.nowcoder.com/discuss/198905)
111-
- [ ] [回馈牛客,字节算法三面许愿求offer](https://www.nowcoder.com/discuss/211763)
112-
- [ ] [字节跳动2020届提前批 AI Lab cv 三面视频面](https://www.nowcoder.com/discuss/210508)
113-
- [ ] [春招实习数分面经](https://www.nowcoder.com/discuss/189529)
114-
- [ ] [阿里算法面经](https://www.nowcoder.com/discuss/209306)
115-
- [ ] [菜鸡总结暑期实习求职经历(附部分面经](https://www.nowcoder.com/discuss/205718)
110+
- [x] [发个面经吧,bat加字节](https://www.nowcoder.com/discuss/198905)
111+
- [x] [回馈牛客,字节算法三面许愿求offer](https://www.nowcoder.com/discuss/211763)
112+
- [x] [字节跳动2020届提前批 AI Lab cv 三面视频面](https://www.nowcoder.com/discuss/210508)
113+
- [x] [春招实习数分面经](https://www.nowcoder.com/discuss/189529)
114+
- [x] [阿里算法面经](https://www.nowcoder.com/discuss/209306)
115+
- [x] [菜鸡总结暑期实习求职经历(附部分面经](https://www.nowcoder.com/discuss/205718)
116116
- [x] [字节AiLab CV 面经,已经收到感谢信](https://www.nowcoder.com/discuss/211352)
117117
- [x] [寒武纪加面,C++ 面经](https://www.nowcoder.com/discuss/210657)
118118
- [x] [面试体验:Facebook 篇](https://www.nowcoder.com/discuss/211670)

0 commit comments

Comments
 (0)