字节跳动实习算法面经
写在前面
字节跳动是一直想去实习的公司,3 月份的时候觉得自己学的还不够扎实,暂时没有投简历。4 月 14 号在官网投了简历,4 月 15 号就有小姐姐打电话预约面试时间,今天下午面试。
非本计算机专业出身,在研究生阶段做过基于机器学习和 CNN 的目标识别。没论文,没竞赛,只有所里的公司实习。编码方面也有些生疏,其实劣势蛮大的。
一面(约 1h)
一面面试官是很亲切的小哥哥。在我回答问题的时候一直微笑点头,让我也不那么紧张了。
- 自我介绍:姓名,年龄,本科和硕士学校,专业,相关经历,来这里实习的原因。
- 讲一下熟悉的模型:说了项目里用到的 RF,从特征构建、特征选择、模型选择、到模型调优。
- 为什么选了 RF?:项目里更关注性能和计算量的平衡,RF 相对可控。
- 用的什么指标进行衡量的?:一开始是 acc,但是对于不平衡数据不够准确,后来基于混淆矩阵计算了一些指标。
- 不平衡应该怎么做?:过多数据欠采样,过少数据过采样,另外还有一些基于模型的方法比如 SMOTE 方法等。
- RF 和 GBDT 的区别是什么?:都是集成方法,分别是 Bagging 和 Boosting,并行和串行。
- GBDT 可以并行吗?:原理上是不行的,这也是训练过程比 RF 慢的原因。但是 XgBoost 作为 GBDT 的一种工程实现方法,在决策树的构建过程中加入了部分并行技巧,加快了速度。
- GBDT 和 XgBoost 的区别是什么呢?:XgBoost 是 GBDT 的一个工程实现。1)在树的构建过程中加入了一些并行技巧;2)GBDT 本身是没有预剪枝等过程的,XgBoost 在构建的过程中加入了一些正则,起到了缓解过拟合的作用。
- (因为提到了 CNN 相关的东西)ResNet 的结构特点以及解决的问题是什么?:ResNet 之前,大多认为深度越深,性能越好实际上不是,会出现信息消逝的情况。ResNet 提出了“捷径”概念,将浅处的输出牵到深处,形成一个残差,相当于把信息又往深了传递了一下。
- 了解 BN 吗?:为了解决网络中数据分布变化大,学习过程慢的问题。采用标准化,又引入两个可学习的参数来重建浅层网络学到的分布。
- 编程题,构建哈夫曼树:本身不了解哈夫曼树,但是了解哈夫曼编码的一些思想,讲出来后,小哥哥引导着思路,然后我写出了代码。代码本身还有优化空间,但是小哥哥也说通过了。
- 反问。
让我稍等下一面。
一面总结:
其实一面里问到的东西都还是偏基础的,基本上问题问出来后,一次回答就够了。面试官会再从回答中牵扯到的知识点问起。主要针对做过的项目提问。
二面(约 1h)
二面是个小姐姐面的。难度也确实比一面更难些,问的更细了。
- 自我介绍。同上
- 介绍 RF 和 GBDT:串行并行角度。GBDT 是残差学习角度。
- GBDT 具体细节:大致说了下思路,感觉答的不是很详细。
- 挑一个熟悉的项目说一下:RF 提特征、选特征、调参、评估。
- 有自己手写代码实现过 RF 吗?:没有….(得去看看了
- 特征选择里提到的互信息选择,互信息的计算公式是什么?:忘记了..
- 为什么选择了 RF 呢?RF 由 DT 组成,有一定的解释性,性能和计算量相对可控。
- 对于 RF 可解释性这一点,做了什么相关实验吗?:突然想到 RF 本身引入了随机性,可解释性没有很强,就说到对于里面的树的路径可以进行分析得到特征重要性。(这部分有点忘记了,赶紧补充学习)
- DT 了解吗?:知道的有 ID3,C4.5,CART 树,分别用信息增益,信息增益比,基尼系数作为启发函数。
- 写出信息增益的表达式
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E5%AE%9E%E4%B9%A0%E7%AE%97%E6%B3%95%E9%9D%A2%E7%BB%8F/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com