微信,头条,快手, 阿里 的nlp面的问题
1.面试必读:
模型问的比较细,问你的模型基本都是从你的简历中出现的,这也就以为这你平时工作中需要注意一下几点:多读 多记 多重构
- 1.1多关注一下深度学习相关的公众号,多读,多记
- 1.2某一具体方向点的知识,最好直接看英文文献,中文翻译的时候,看的似懂非懂,譬如可以看一下 bert的论文,attention is all you need 等,这样理解更深刻。
- 1.3 多重构多实践,譬如可以自己手动写一下bert方便理解。
- 1.4 每周工作的时候,需要有业务产出的压力,很多同学都忽略了自己成长的部分。最好是业务成长和个人成长结合起来。譬如有的 需求可能需要规则产出效果,但是也要给自己留出学习的时间。
- 1.5 工作中 多思考:譬如增加这个模型的意义是什么?是来解决什么问题的?不加会怎么样? 而不是项目完成就完成了。譬如在序列标注中,为什么最后一步要增加CRF,这个的意义是什么? 其实可以在项目过程中,自己多思考,然后做实验看效果,就搞清楚了。
- 1.6 看面经之后,一定要记录下来自己的理解,形成自己的话,而不是死记 别人的答案。这样 不容易收敛。
2. 具体面试题
-
2.0 模型= 数据(如何找到训练数据) + 网络结构(用的是cnn还是lstm 等) + loss选取(交叉熵?) + 优化器选取(adam?) + 超参(如何调试)
-
2.1 lstm 是为了解决rnn的什么问题而提出的,他是如何解决的?如果只是为了解决梯度消失,那直接配一个 skip connection 残差网络是否可以?为什么? (快手+ 头条)
https://blog.youkuaiyun.com/laolu1573/article/details/77470889
https://zhuanlan.zhihu.com/p/28749444
答:rnn可以解决 很多序列问题,什么时候用到lstm,视情况而定。 当处理的文本较短的时候,rnn就可以处理的很好,不需要lstm,当处理的文本长的时候,就需要lstm了。因为rnn 解决不了长依赖的问题。考虑一个语言模型,它试图根据前面的单词预测下一个单词。譬如:云彩在天空中。天空这个词 可以通过rnn 预测,不需要lstm也可以。 但在某些情况下,我们需要更多的上下文,再譬如:我在法国出生。。。。我可以说一口流利的法语。
不幸的是,随着这种差距的扩大,RNNs无法学会连接信息。法语的预测rnn 就搞不定了,需要lstm -
2.2 模型优化器 都有哪些?最好的是哪个?它好在哪里? Adam 动态调节学习率 (微信和头条)
答:批量梯度下降,随机梯度下降,mini-batch 梯度下降…adam
a. 批量梯度下降BGD:
优点:对凸函数可以收敛到全局最小值;对非凸函数可以收敛到局部最小值。
缺点:全部数据都需要参与每一次的参数优化;速度慢;新数据不然容易加入到 训练过程中;消耗大量内存
b.随机梯度下降 SGD:
优点:速度快,比较快,并且可以新增样本
缺点:每一条数据就更新一次参数;loss function 有严重的震荡
如果learning rate 设置的小一点,SGD和 BGD会有一样的收敛性
c. MBGD:
优点:
缺点1: 不能保证可以很好的收敛。rate 太小 收敛速度会很慢;rate 太大 会错过收敛点。
缺点2:对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。
d.Momentum
就是改变了 参数更新的 公式,在惯性方向收敛的更快了。
e .Nesterov Momentum , 对 Momentum 做一次优化
fgh:adagrad,RMSprop,adadelt(adad)
https://blog.youkuaiyun.com/SHAOYEZUIZUISHAUI/article/details/81705001
-
2.3 序列标注里面的 crf是用来干嘛的?它的作用是什么?它是为了解决哪一类case 而出现的?(头条)
答:序列标注模板用的是BIOE的形式
B:begin
I:中间位置
E: end
O:other
假设数据集有两种实体类型:人物(Person)和机构(Organization)。同时假设采用BIO标注体系。因此会有五种实体标签:B-Person
I-Person
B-Organization
I-Organization
O
如果不用 crf 可能会出现 不是 B开头的标注
也可以会出现 标注动词开始,标注动词结尾,但是中间有标注名词。
所以crf的作用是:
a.句子的开始单词的标签类型应该是B或O,而不是I
b.限制一些格式。如B-Person I-Person是合理的,B-Person I-Organization是不合理的
crf如果继续往下问:会设计到 转移矩阵,转移概率,马尔科夫等,可以再看看。 -
2.4 loss ,尝试过修改loss 吗?(阿里)
-
2.5 attention的原理是什么?它学的是什么?(微信)
-
2.6 你知道的loss 都有哪些?(滴滴)
-
2.7 归一化你都了解哪些? 知道BN么? 它的实现原理是什么?
-
2.8 你遇到过 梯度消失的问题么? 训练的时候,你是怎么解决的
答:梯度消失的解决方法有很多 (1)激活函数换成 relu 和 leakrelu;(2) 用lstm 取代 rnn,lstm用很多加法代替乘法。http://keep.01ue.com/?pi=371459&_a=app&_c=index&_m=p -
2.9 BN 来解决什么问题?原理是什么?如何使用
答:可以解决梯度消失;正则化;
原理 1 每个batch内的某一个维度做 归一化; 2 做完之后做一次线性变换
使用的的时候,是在 每一层做非线性变换之前加入 -
2.10 bert的结构,以及 和transformer的关系
这个一定会问,一定要搞清楚
transformer 主要包括几部分
bert的结构是什么 -
2.11 lstm 和 gru的区别
-
2.12 gbdt是否需要 归一化?为什么
-
2.13 如何解决过拟合的问题?
-
2.14 过拟合的表现是什么
-
2.15 深度学习 loss不下降的解决方法:
https://blog.youkuaiyun.com/zongza/article/details/89185852
3.算法题
3.1 二叉树,从左边看,输出从左边看到的节点。二叉树的左视图
https://blog.youkuaiyun.com/cyong888/article/details/104041939
https://blog.youkuaiyun.com/cyong888/article/details/104043634
3.2 一串数字,没有括号,请输入数字之间的 运算符,+ 和 * ,使得 值最大
3.3 二叉树,输出每个叶子节点 从根节点到叶子节点的遍历。
3.4 给定一组单词,编写一个程序,找出其中最长单词,要求这个单词是由这组单词中的其他单词组合而成。
- 示例输入:cat, banana, dog, nana, walk, walker, dogwalker
- 示例输出:dogwalker
4. 同学们如果有更好的面试题
可以在评论里面写一下,我会编辑到这个帖子里