ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NLP面试常见的知识点

2021-09-16 18:04:24  阅读:292  来源: 互联网

标签:采样 知识点 NLP 梯度 模型 batch 面试 正则 归一化


为什么归一化?

1 处理不同量纲的数据,将其缩放到相同的数据区间和范围。
2 加快计算素的,提高计算精度

归一化的方法?

1 极差变换法(最大最小值变换)

\[y_{i} = \frac{x_{i}-min(x)}{max(x)-min(x)} \]

缺点:归一化过程中容易受到极端值的影响

2 0均值归一化

\[y_{i} = \frac{x_{i}-mean(x)}{\sigma(x)} \]

哪些算法模型需要归一化,哪些不需要归一化?

一般来说,树结构的算法不需要归一化,而寻找最-优解问题的算法则需要数据归一化。
不需要

  • 决策树(数值缩放不影响分裂点的位置,对树结构不造成影响)
  • 随机森林(树与树之间是独立的,不需要归一化)
  • XGbboost
  • 朴素贝叶斯:不关系具体取值,只关心分布

需要:

  • 线性回归、逻辑回归、SVM
  • KNN、K-means
  • Adaboost 和 GBDT (GBDT是在上一颗树的基础上通过梯度下降求最优化,归一化收敛更快)

什么样的模型对缺失值敏感?

1 树模型对缺失值的敏感度低,大部分可以在数据缺失的情况中使用
2 涉及到距离变量(如计算两个点之间的距离)如KNN和SVM,缺失数据就变得比较重要,因为涉及到距离,缺失值处理不当就会导致效果很差。
3 线性模型的损失函数往往涉及距离计算,计算预测值与真实值的差别,容易对缺失值敏感。
4 神经网络的鲁棒性强,对缺失数据不敏感
5 贝叶斯模型对于缺失数据也比较稳定。

欠拟合和过拟合的原因及解决方案 ?

  • 欠拟合出现的原因:
    1 模型复杂度过低
    2 特征量太少

  • 解决办法:
    1 增加新特征
    2 减少正则化参数
    3 模型复杂化(例如在回归模型中增加高次项,神经网络中增加模型层数和隐藏层单元数)

  • 过拟合出现的原因:
    1 样本选择有误(样本太少,标签错误等)选择的样本不足以代表整个整个规则
    2 样本噪音过大
    3 参数太多,模型复杂度高

  • 解决方法:
    1 正则化
    2 数据扩充(获取更多的数据或者通过一定的规则产生新的数据)
    3 Dropout
    4 Early Stop

类别不平衡问题怎么解决?

什么是类别不平衡问题:值分类任务中,不同类别的训练样例数目差别很大的情况
解决类别不平衡问题的方法:
1 欠采样:对多数类样本进行欠采样
2 过采样:对少数类样本过采样
3 扩大数据集
4 阈值移动:基于原始数据集进行学习,在预测时,将缩放的公式嵌入到决策过程中
5 惩罚算法:增加少数类分错的成本

欠采样:
优:减少样本数据量,改善了运行时间和存储
缺:1 可能丢掉有用的信息,2 通过随机欠采样的样本可能是有偏差的样本

过采样:
优:不会有信息丢失
缺:复制了少数类样本,增加了过拟合的可能性

为什么不用one-hot向量?

1 one-hot向量无法表达不同词之间的相似度,任何一对one-hot向量的余弦距离为零。
2 随着词典的增大,其向量维度也会一直不断变大。
word2vec可以较好的表达出不同此之间的相似和类比关系

word2vec的结构


CBOW模型的计算流程

skip-gram也类似

word2vec的两种训练技巧

两个问题导致word2vec计算量大
(1)词表维度大
(2)softmax计算量大
第一个解决方法:层次softmax
把N个多分类问题变成logn个二分类问题,可以将softmax转换成sigmoid函数,并且还可以利用\(\sigma(x)^{'} = \sigma(x)*(1-\sigma(x))\)
第二个解决方法 高频词抽样+负采样
1 将常见的单词组合或者词组作为单个“word”来处理
2 对高频词单词进行抽样来减少训练样本个数
3 对优化目标采用“negative sampling”方法,这样每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担

  • 高频词抽样
    主要思想是少训练没有区分度的高频term;对于我们在训练原始文本中遇到的每一个单词,它们都有一定概率被我们从文本中删掉,而这个被删除的概率与单词的频率有关。词频越高(stopword),抽样越少;
  • 负采样

常见的损失函数及其优缺点

  • sigmoid

\[f(x) = \frac{1}{1+exp(-x)} \]

特点:能够将输入的连续值变换为0和1 之间的输出
缺点:
1 容易梯度消失(因为导数的最大值为0.25,即经过一次sigmoid之后梯度就减少4分之3,当层数很多时,梯度就容易变为0)
补充: 解决梯度消失和梯度爆炸的方法 (梯度爆炸:梯度截断,添加正则化--如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生;梯度消失:改激活函数,batchnorm,残差结构,将RNN换成LSTM)
2 解析式含有幂运算,比较耗时
3 输出数据不是零均值

  • tanh

\[tanh(x) = \frac{exp(x)-exp(-x)}{exp(x)+exp(-x)} \]

特点:和sigmoid差不多,值域为【-1,1】,解决了sigmoid不是零均值的问题
缺点:梯度消失和幂运算的问题仍然存在
\(tanh(x/2) = 2*\sigmoid(x) - 1\)

  • relu

\[relu(x) = max(0,x) \]

优点:
解决了梯度消失问题
计算速度快,只需要判断输入是否为0
收敛速度远快于sigmoid和tanh
缺点:
输出不是0均值
容易出现神经元坏死,即参数永远无法更新(可能产生这种现象的两个原因:1参数初始化 2 学习率太大)
原点不可导(随意选择一个导数进行替代,默认为0)

  • leaky relu

\[f(x) = max(\alpha * x,x) \alpha = 0.01 \]

缓解了relu中神经元坏死的现象

  • Elu

\[f(x) =\left\{ \begin{matrix} x ,x>0 \\ \alpha*(exp(x) - 1) \end{matrix} \right. \]


不会出现relu中的神经元坏死现象
输出的数值是零均值的
缺:
含有幂运算,计算量稍大

  • gelu

\[f(x) = 0.5x(1+tanh([\sqrt{\frac{2}{\pi}}(x+0.044715x^3)]) \]

bert和transformer中使用的激活函数(高斯误差线性单元)

深度学习中batch size的大小对训练过程的影响是什么样的?

不考虑bn的情况下,batch size的大小决定了深度学习训练过程中的完成每个epoch所需的时间和每次迭代(iteration)之间梯度的平滑程度。batch size只能说影响完成每个epoch所需要的时间,决定也算不上吧。根本原因还是CPU,GPU算力吧。瓶颈如果在CPU,例如随机数据增强,batch size越大有时候计算的越慢。

对于一个大小为N的训练集,如果每个epoch中mini-batch的采样方法采用最常规的N个样本每个都采样一次,设mini-batch大小为b,那么每个epoch所需的迭代次数(正向+反向)为 , 因此完成每个epoch所需的时间大致也随着迭代次数的增加而增加。

由于目前主流深度学习框架处理mini-batch的反向传播时,默认都是先将每个mini-batch中每个instance得到的loss平均化之后再反求梯度,也就是说每次反向传播的梯度是对mini-batch中每个instance的梯度平均之后的结果,所以b的大小决定了相邻迭代之间的梯度平滑程度,b太小,相邻mini-batch间的差异相对过大,那么相邻两次迭代的梯度震荡情况会比较严重,不利于收敛;b越大,相邻mini-batch间的差异相对越小,虽然梯度震荡情况会比较小,一定程度上利于模型收敛,但如果b极端大,相邻mini-batch间的差异过小,相邻两个mini-batch的梯度没有区别了,整个训练过程就是沿着一个方向蹭蹭蹭往下走,很容易陷入到局部最小值出不来。

总结下来:batch size过小,花费时间多,同时梯度震荡严重,不利于收敛;batch size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值。

讲讲正则化为什么能降低过拟合程度,并且说明下下L1正则化和L2正则化。

正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。

给loss function加上正则化项,能使得新得到的优化目标函数h = f+normal,需要在f和normal中做一个权衡(trade-off),如果还像原来只优化f的情况下,那可能得到一组解比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。

L1正则化和L2正则化:

L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。

什么是优化器?

一言以蔽之,优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向更新合适的大小,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小。

标签:采样,知识点,NLP,梯度,模型,batch,面试,正则,归一化
来源: https://www.cnblogs.com/zhou-lin/p/15294482.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有