选自Github 转载于机器之心
去年上海科技大学 AI 实验室开源了一份深度学习面试题集锦,它从数学基础、经典机器学习算法、深度学习算法以及编程语言等方面提供了众多面试题。此外,这一个项目是作者在准备 2018 年春招实习过程中的总结,内容以计算机书籍的学习笔记为主,在整理重点知识的同时会尽量保证知识的系统性。读者们快来试试能闯过多少道春招面试题吧!
项目地址:https://github.com/ShanghaiTechAIClub/DLInterview
因为上科大的项目并没有提供配套的答案,所以这些问题只能检测自身知识掌握度。不过后文给出了另一个春招/秋招的复习资源项目,它包含计算机科学的大量精要知识与教程,这份复习资源目前已有超过 45K 的收藏量。
数学基础相关
1. 概率与数理统计
一个袋子里有 100 个黑球和 100 个白球,每次随机拿出两个球丢掉,如果丢掉的是不同颜色的球,则从其他地方补充一个黑球到袋子里,如果颜色相同,则补充一个白球到袋子里。问:最后一个球是黑球和白球的概率分别为多大?
2. 智商题
A 容器中有 4L 沙子,B 容器中有 4L 米,假设米和沙子密度一样。有一个 C 容器是 300ml, 第一步,用 C 从 A 中舀 300ml 到 B 中,混合均匀,第二步,用 C 从 B 冲舀 300ml 到 A 中混合均匀。再重复第一步和第二步,问这四步之后,A 中的米和 B 中的沙子谁多?
3. 答题挑战赛
在AI 答题挑战赛中我们对线性代数、概率论和最优化方法等数学基础提了一些有意思的题目:
1. 数学中哪一个子领域以随机事件为研究对象?
A. 概率论;B. 微积分;C. 数学分析;D. 线性代数
2. 概率论中的贝叶斯法则与下面哪个元素无关?
A. 事件概率;B. 自由概率;C. 条件概率;D. 联合概率
3. 在概率论中,中心极限定理与下列哪一项有关?
A. 均匀分布;B. 假设检验;C. 贝叶斯法则;D. 依概收敛
4. 在概率论中,大数定律与下列哪一项无关?
A. 数学方差;B. 条件概率;C. 独立性;D. 数学期望
5. 下面哪一个分布不属于连续型分布?
A. 指数分布;B. 均匀分布;C. 泊松分布;D. 正态分布
以上题目答案:ABDBC
6. 下面哪一项不是线性代数涉及的主题?
A. 行列式;B. 矩阵微分;C. 代数几何;D. 线性方程组求解
7. 一阶张量是什么?
A. 向量;B. 标量;C. 元组;D. 矩阵
8. 列向量左乘行向量得出什么?
A. 矩阵;B. 标量;C. 向量;D. 矢量
9. 矩阵的秩(rank)是指什么?
A. 最大线性相关向量组数;B. 对角线元素之和;C. 最大线性无关向量组数;D. 对角元素之差
10. 下面哪一项与雅可比(Jacobian)矩阵无关?
A. 线性代数;B. 微积分;C.Carl Gustav Jacob Jacobi;D. 概率论
以上题目答案:CAACD
11. 下列与梯度下降无关的是?
A. 最速下降法;B. 坐标下降法;C. 一阶导数;D. 随机梯度下降法
12. 下列会使用 Hessian 矩阵的最优化方法是?
A. 拟牛顿法;B. 共轭梯度法;C. 梯度下降法;D. 牛顿法
13. 一般机器学习中所说的牛顿法是什么?
A. 概率论方法;B. 最优化方法;C. 微积分方法;D. 物理学方法
14. 在最优化方法中,共轭梯度法有什么特点?
A. 比梯度下降收敛快;B. 采用二阶梯度;C. 沿梯度向下降;D. 比牛顿法收敛快
以上题目答案:BDBA
机器学习基础相关
1. 概率与统计相关
最大似然估计和距离度量之间的关系是什么?
如何理解最小二乘与最大似然估计?
2. 线性代数相关
A 和 B 是两个矩阵,求 tr(A'B),A'指 A 的转置。(写出来后,我没有检查 AB 是否 size 相同,他说应该考虑这种边界条件,并说你考虑了 AB 是否空矩阵这是比较好的一点)。
3. 经典 ML 模型
3.1 SVM 模型
讲一讲 SVM,知道多少说多少?为什么要用对偶问题求解?(今日头条)
简单讲一下 BP 是如何计算的?
SVM 加核函数用过吗?讲一讲其中的差别?(今日头条)
训练样本多,维度大就可以用核函数;如果样本少,用核函数比较容易过拟合
SVM 在训练的时候有没有遇到 hard example?(今日头条)
SVM 对 hard example 的应用很重要,先用一部分训练集训练一个模型,然后用剩下的一部分训练集的一部分做测试,把出错的再送入重新训练,重复二三次,效果会比较好
怎样选择 SVM 核函数?多项式核和 RBF 核的关系?
说一说 LR 和 SVM 的损失函数。
3.2 PCA
讲一下 PCA,为什么是方差最大?
如何推导 PCA,具体针对推导问很多为什么。
3.3 XGBoost
了解提升方法吗?你能解释一下最基础的 AdaBoost 算法,以及提升树算法吗?
XGBoost 了解吗?你能解释一下 XGBoost 的核心思想及主要做法吗?
3.4 其它
讲一下生成模型和判别模型有什么区别
你觉得滴滴打车的拼车价是怎么计算出来的,详细描述。(路径规划,订单预测之类的)
你觉得滴滴打车的溢价,1.1 倍,1.2 倍,这些数值是怎么计算出来的?(订单预测,当前司机数量),目的是什么?
推导 BP,神经网络的求导及反向传播过程是怎么样的?(可以用均方损失函数)
4. 答题挑战赛
在机器之心 AI 答题挑战赛中我们对经典机器学习方法提了一些有意思的题目:
1. 如果没有非线性激活函数,10 层的神经网络和多少层的神经网络等效?
A.1 层;B. 以上都对;C.10 层;D.5 层
2. 对神经网络执行权重衰减或删除是什么操作?
A. 归一化;B. 正则化;C. 简化;D. 量化
3. 要获得损失函数表面的曲率信息,需要求解损失函数的什么结构?
A. 混淆矩阵;B.Jacobian 矩阵;C.Hessian 矩阵;D. 邻接矩阵
4. 不属于降维方法的是?
A.PCA;B. 自编码器;C.t-SNE;D. 支持向量机
5. 把参数分布吸引到球形域是什么正则化方法?
A.L2;B.L1;C.L0;D.L∞
以上题目答案:BBCDA
深度学习基础相关
1. CNN
CNN 为什么可以在 CV/NLP/Speech 等领域都可以使用?
什么样的数据适合 Deep learning?
1×1 卷积的作用是什么?
给你几个输入张量与卷积核,你能手动算一下卷积得出的特征图吗?
一维卷积是怎样做的,你能画一下它大概图示吗?
从 AlexNet、VGG-Net 到 ResNet 介绍一下主流的卷积神经网络架构。
从 Inception-V1 到 Inception-ResNet,介绍一下 Inception 家族的发展以及不同之处。
你能介绍一下目标检测,及该任务主要使用的模型及方法吗?
2. 过拟合 (Overfitting)
何为共线性,跟过拟合有啥关联?如何解决共线性这种问题?
多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。
如何解决 Overfitting 问题,主要有哪些方法?
3. 损失函数
交叉熵和相对熵(KL 散度)之间的关系是什么?KL 散度有哪些特性?
你了解 SVM 常用的合页损失函数吗?它能不能用在深度模型上?
你能解释一下 L1 和 L2 正则化的原理吗?这两种正则化有什么不同?
为什么神经网络的损失函数是非凸的,最优化非凸函数会遇到什么问题?
4. RNN
RNN 有什么缺陷以及 LSTM 是如何怎么解决的?
GRU 以及 Minimal GRU 都是什么样的,它们的运行机制以及精简的门控都是哪些?
你能用函数抽象表达出循环神经网络吗?它与卷积神经网络的抽象表达有什么不同?
5. GAN
介绍一下 GAN,讲一讲生成器和判别器以及他们的关系。
原版生成对抗网络那个目标函数(极小极大博弈)能理解吗?能不能解释一下这个目标函数。
WGAN 相比于 GAN 主要改进在哪里,你能解释一下 Wasserstein 距离?
6. 其它
深度学习是万能的吗?什么地方不适用,如果给你一个任务,你如何选择用深度学习还是传统的如 SVM?
深度学习的待学习的参数量和训练样本数量之间的关系是什么样的?
什么是梯度消失和爆炸,解释一下它们形成的原因。
为什么梯度相反的方向是函数下降最快的方向?
算法与数据结构
1. 二叉树
二叉搜索树如何删除某个节点,先说思路后写代码 (今日头条)。
二叉树之字形层次遍历,(正反正反)。
2. 链表
一个链表,如何依次输出第一个,倒数第一个,第二个,倒数第二个(今日头条)。
原址:变换为奇数在前 偶数在后,相对顺序不变。
链表求和。
3. 查找
给一个 float 数,如何求算术平方根.(今日头条)
4. 哈希
要实现一个哈希表应该怎么做(根据要哈希的内容选择合适的哈希函数和冲突解决方案)。
5. 排序
一个 0-1 矩阵,每一排都是 0 在前 1 在后,问哪一排的 1 最多?(二分法)问有没有更简单的方法(每一排记录当前的最左边的 1 的位置,下一排的时候直接忽略右边的)问时间复杂度,猜测是 O(m+n)。
6. 搜索
描述迪杰斯特拉算法。
描述 dfs 和 bfs, 分别怎么实现?(栈和队列)。
7. 动态规划
动态规划是什么, 动态规划和带记忆的递归有什么区别?(自顶而下和自底而上)
0-1 背包问题的动态规划递归式怎么写?
三角数堆,只能往左下或者右下走,从堆顶到堆底和最小是多少。(dp)
8. 其它
若干个长度不同的数组,求最小区间,让每个数组都有数字在这个区间内?
三种砖块,分别是 11,12,13,拼成 1N,有多少种拼法?时间复杂度多少?(今日头条)
斐波那契数列。
描述 KMP 算法。
写代码:两个有序数组的合并。
编程语言相关问题
1. Python
一个 python 的 dict,按照 key-value 存储,如何按照 value 排序。
static 的类有什么用。
如何实现一个只能实例化一次的类。
模板类是什么?
纯虚函数和虚函数的区别是什么?
2. C++
一个 dict,如果是 C++怎么做?一个 map,怎么按照 value 排序?
看了这么多题目,哪些会做哪些不会也就有一个明晰的了解。那么如何为年后的春招做准备呢?2018 年中山大学郑永川构建了一个准备秋招/春招的学习笔记:CS-Notes。该项目包含了计算机科学的大量精要知识与教程,目前该项目已经有超过 45K 的收藏量。
CS-Notes 项目从基础排序算法到编程理念展示了计算机科学的应知应会,该项目对机器学习开发者及入门读者也非常有用,例如 Linux 系统、面向对象的编程、Git 工具和代码可读性等。这些笔记都是作者根据对各类书籍的理解,并记录重要知识点而完成。
项目地址:https://github.com/CyC2018/CS-Notes
该项目的主体内容可分为 9 部分,其中算法介绍了基础的栈和队列、并查集、排序和查找等,操作系统介绍了现代计算机系统与 Linux 系统。其它如介绍了设计模式和基本思想的面向对象编程、世界上最先进的分布式版本控制系统 Git、以及 Java 和编程实践等都有涉及。
如下是该项目各类别的基本目录与内容,因为机器学习可能会常用到面向对象的编程方法,因此我们在后面简要介绍了这一章节中面向对象的基本思想。
算法
剑指 Offer 题解(目录根据原书第二版进行编排)
Leetcode 题解(做了一个大致分类,并对每种分类题型的解题思路做了总结)
算法(排序、并查集、栈和队列、红黑树、散列表)
操作系统
计算机操作系统(进程管理、内存管理、设备管理、链接)
Linux(基本实现原理以及基本操作)
网络
计算机网络(物理层、链路层、网络层、运输层、应用层)
HTTP(方法、状态码、Cookie、缓存、连接管理、HTTPs、HTTP 2.0)
Socket(I/O 模型、I/O 多路复用)
面向对象
设计模式(实现了 Gof 的 23 种设计模式)
面向对象思想(三大原则(继承、封装、多态)、类图、设计原则)
数据库
数据库系统原理(事务、锁、隔离级别、MVCC、间隙锁、范式)
SQL(SQL 基本语法)
Leetcode-Database 题解(Leetcode 上数据库题目的解题记录)
MySQL(存储引擎、索引、查询优化、切分、复制)
Redis(五种数据类型、字典和跳跃表数据结构、使用场景、和 Memcache 的比较、淘汰策略、持久化、文件事件的 Reactor 模式、复制)
Java
Java 基础(不会涉及很多基本语法介绍,主要是一些实现原理以及关键特性)
Java 容器(包含容器源码的分析)
Java 虚拟机(运行时数据区域、垃圾收集、类加载)
Java 并发(线程使用方式、两种互斥同步方法、线程协作、JUC、线程安全、内存模型、锁优化)
Java I/O(NIO 的原理以及实例)
系统设计
系统设计基础(性能、伸缩性、扩展性、可用性、安全性)
分布式(分布式锁、分布式事务、CAP、BASE、Paxos、Raft)
集群(负载均衡、Session 管理)
攻击技术(XSS、CSRF、SQL 注入、DDoS)
缓存(缓存特征、缓存位置、缓存问题、数据分布、一致性哈希、LRU、CDN)
消息队列(消息处理模型、使用场景、可靠性)
分布式问题分析(分布式事务、分布式锁、分布式 Session、负载均衡)
工具
Git(一些 Git 的使用和概念)
Docker(Docker 基本原理)
构建工具(构建工具的基本概念、主流构建工具介绍)
正则表达式(参考 正则表达式必知必会)
编码实践
代码可读性(参考 编写可读代码的艺术)
代码风格规范(Google 开源项目的代码风格规范)
代码风格规范(Google 开源项目的代码风格规范)