机器学习面试题总结

机器学习面试题

1.支持向量机

  • 模型建立

  • 为什么要求解SVM的对偶问题?

    原问题:固定w,b,针对α求最大值

    对偶问题:固定α,针对w,b求最大值

  • 核函数的原理及作用

    1. 从模型的角度,使得模型具有拟合非线性函数的能力。 根据Cover Theomem,高维空间比低维空间更容易线性可分。

    2. 从优化角度,对偶的表示能够带来内积,从而便于求解。

  • 常用核函数

    线性核,多项式核,高斯核,拉普拉斯核,Sigmoid核

  • SMO算法

  • 与逻辑回归 异同点 66

    都是分类算法

    损失函数不一样,思想不一样(一个是极大似然,负对数损失(交叉熵损失),logistic损失;一个是支持向量距离最大,hinge损失)

  • KKT条件是带有等式约束和不等式约束问题的有解的必要条件,而不是充分条件(除非该函数是凸函数),拉格朗日乘子发是等式约束有解的必要条件

  • Slater条件是强对偶的充分条件

2.逻辑回归

  • 模型假设、建立

  • 损失函数推导(极大似然函数)

  • 梯度更新推导

  • 与SVM模型的异同点

    1. LR是参数模型,即假设数据来源于某个分布,而SVM是非参数模型。

    2. 使用的损失函数分别是交叉熵和Hinge loss。

    3. LR更新为(yx−s(θTx))xi(y_x-s(\theta^Tx))x_i(yx−s(θTx))xi,根据预测值降低较远点对模型参数的影响,而SVM仅使用支持向量。

    4. LR难以解决线性不可分的问题,而SVM可以使用各种核函数解决。

    5. SVM只需要计算少数几个支持向量。

  • 与回归的关系和区别

    1. 均可用最大似然函数建模,并使用SGD学习参数

    2. 均可使用t检验、F检验评价结果及参数有效性

    3. 解决的问题分别是分类与回归。

    4. 逻辑回归可看作是广义的线性回归,对ln(p1−p)ln(\frac{p}{1-p})ln(1−pp)进行回归。

  • 如何解决多分类问题? 可以输入属于每个类别的概率,计算损失函数,也可以使用多个二分类器,判别样本是否属于每一类。

  • 有哪些处理离散、连续特征的方法?

  • 优缺点

    不仅能分类还能得出概率。

3.偏差,方差

偏差:同一算法,在不同数据集(相同大小),训练出来的模型,输出的平均值与真实模型输出之间的距离

方差:同一算法,在不同数据集(相同大小),训练出来的模型,输出的方差。

4.分类问题损失函数

 

 

 

 

5.0-1 Loss

0-1 Loss 是最简单也是最容易直观理解的一种损失函数。对于二分类问题,如果预测类别 y_hat 与真实类别 y 不同(样本分类错误),则 L=1;如果预测类别 y_hat 与 真实类别 y 相同(样本分类正确),则 L=0(L 表示损失函数)。0-1 Loss 的表达式为: 在这里插入图片描述 0-1 Loss 的曲线如下图所示: 在这里插入图片描述 0-1 Loss 的特点就是非常直观容易理解。但是它存在两个缺点:

  • 0-1 Loss 对每个错分类点都施以相同的惩罚(损失为 1),这样对犯错比较大的点(ys 远小于 0,极端一点即margin接近负无穷)无法进行较大的惩罚,所有犯错点都同等看待,这不符合常理,不太合适。

  • 0-1 Loss 不连续、非凸、不可导,难以使用梯度优化算法。 因此,实际应用中,0-1 Loss 很少使用。

6.Hinge Loss

在这里插入图片描述 Hinge Loss 的曲线如下图所示:

在这里插入图片描述 Hinge Loss 的形状就像一本要合上的书,故称为合页损失。显然,只有当 ys < 1 时,Loss 才大于零;对于 ys > 1 的情况,Loss 始终为零。Hinge Loss 一般多用于支持向量机(SVM)中,体现了 SVM 距离最大化的思想。而且,当 Loss 大于零时,是线性函数,便于梯度下降算法求导。 Hinge Loss 的另一个优点是使得 ys > 0 的样本损失皆为 0,由此带来了稀疏解,使得 SVM 仅通过少量的支持向量就能确定最终超平面

7.Modified Huber Loss

Huber Loss,它结合了均方损失(MSE)和绝对值损失(MAE) 的优点,当|y-f(x)|小于一个实现指定的δ时,变为平方损失,大于δ时变为绝对值损失,比前两者更为robust。而Huber Loss 也能应用于分类问题中,称为 Modified Huber Loss,其表达是如下: 在这里插入图片描述 Modified Huber Loss 的曲线如下图所示: 在这里插入图片描述 从表达式和 Loss 图形上看,Modified Huber Loss 结合了 Hinge Loss 和 交叉熵 Loss 的优点。一方面能在 ys > 1 时产生稀疏解提高训练效率;另一方面对于 ys < −1 样本的惩罚以线性增加,这意味着受异常点的干扰较少。scikit-learn 中的 SGDClassifier 就使用了 Modified Huber Loss。

5.决策树

算法类型

特征选择

主要原因是特征分裂的评价标准不一样,cart有两种评价标准:Variance和Gini系数。而ID3和C4.5的评价基础都是信息熵。信息熵和Gini系数是针对分类任务的指标,而Variance是针对连续值的指标因此可以用来做回归。

这三种树模型的特征评价标准都是信息信息增益(信息增益比类似),也就是不纯度(impurty)的变化量:

img

img

那么impurty怎么度量呢?

  • Entropy 信息熵 信息熵是度量集合中样本不纯度的一种指标,假设当前集合为D,其中样本类别数为|y|,第k类样本所占的比例为p_k,那么集合D的信息熵Entropy则定义为:

img

img

  • Gini 基尼系数 基尼系数也是衡量集合中样本不纯度的一种指标,假设当前集合为D,其中样本类别数为|y|,第k类样本所占的比例为p_k,那么集合D的基尼系数Gini则定义为:

img

img

  • Variance 方差 Variance方差也是衡量集合中样本不纯度的一种指标,因为只是针对连续值,因此只能用于处理回归决策树。假设当前集合为D,样本数量为N,每个样本的值为y_i,那么集合D的Variance方差则定义为:

img

img

连续值处理

C4.5连续值离散化(采用二分法)

缺失值处理

主要面临两个问题:1.如何在属性值缺失的情况下进行划分属性选择。2.给定划分属性,若样本在该属性上的值缺失,该如何进行划分

剪枝

预剪枝,后剪枝

终止条件

有了选取分割特征和最佳分割点的方法,树便可以依此进行分裂,但是分裂的终止条件是什么呢?

  • 节点中所有目标变量的值相同, 既然都已经是相同的值了自然没有必要再分裂了,直接返回这个值就好了。

  • 树的深度达到了预先指定的最大值。

  • 不纯度的减小量小于预先定好的阈值,也就是指进一步的分割数据并不能更好的降低数据不纯度的时候就可以停止树分裂了。

  • 节点的数据量小于预先定好的阈值。

6.Attention 机制

前言

Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。

在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。

Attention is All You Need:Attention Is All You Need

1.Transformer 整体结构

首先介绍 Transformer 的整体结构,下图是 Transformer 用于中英文翻译的整体结构:

img

Transformer 的整体结构,左图Encoder和右图Decoder

可以看到 Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。Transformer 的工作流程大体如下:

第一步:获取输入句子的每一个单词的表示向量 XX由单词的 Embedding(Embedding就是从原始数据提取出来的Feature) 和单词位置的 Embedding 相加得到。

img

Transformer 的输入表示

第二步:将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C,如下图。单词向量矩阵用 表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。

img

Transformer Encoder 编码句子信息

第三步:将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。

img

Transofrmer Decoder 预测

上图 Decoder 接收了 Encoder 的编码矩阵 C,然后首先输入一个翻译开始符 "<Begin>",预测第一个单词 "I";然后输入翻译开始符 "<Begin>" 和单词 "I",预测单词 "have",以此类推。这是 Transformer 使用时候的大致流程,接下来是里面各个部分的细节。

2. Transformer 的输入

Transformer 中单词的输入表示 x单词 Embedding位置 Embedding (Positional Encoding)相加得到。

img

Transformer 的输入表示

2.1 单词 Embedding

单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。

2.2 位置 Embedding

Transformer 中除了单词的 Embedding,还需要使用位置 Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。

位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:

img

其中,pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。使用这种公式计算 PE 有以下的好处:

  • 使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。

  • 可以让模型容易地计算出相对位置,对于固定长度的间距 k,PE(pos+k) 可以用 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。

将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 xx 就是 Transformer 的输入。

3. Self-Attention(自注意力机制)

img

Transformer Encoder 和 Decoder

上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

因为 Self-Attention是 Transformer 的重点,所以我们重点关注 Multi-Head Attention 以及 Self-Attention,首先详细了解一下 Self-Attention 的内部逻辑。

3.1 Self-Attention 结构

img

Self-Attention 结构

上图是 Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。

3.2 Q, K, V 的计算

Self-Attention 的输入用矩阵X进行表示,则可以使用线性变阵矩阵WQ,WK,WV计算得到Q,K,V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。

img

Q, K, V 的计算

3.3 Self-Attention 的输出

得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:

img

Self-Attention 的输出

公式中计算矩阵QK每一行向量的内积,为了防止内积过大,因此除以 的平方根。Q乘以K的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为Q乘以 [公式] ,1234 表示的是句子中的单词。

img

Q乘以K的转置的计算

得到 之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1.

img

对矩阵的每一行进行 Softmax

得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z

img

Self-Attention 输出

上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出 等于所有单词 i 的值 [公式] 根据 attention 系数的比例加在一起得到,如下图所示:

img

Zi 的计算方法

3.4 Multi-Head Attention

在上一步,我们已经知道怎么通过 Self-Attention 计算得到输出矩阵 Z,而 Multi-Head Attention 是由多个 Self-Attention 组合形成的,下图是论文中 Multi-Head Attention 的结构图。

img

Multi-Head Attention

从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵Z。下图是 h=8 时候的情况,此时会得到 8 个输出矩阵Z

img

多个 Self-Attention

得到 8 个输出矩阵 到 [公式] 之后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z

img

Multi-Head Attention 的输出

可以看到 Multi-Head Attention 输出的矩阵Z与其输入的矩阵X的维度是一样的。

4. Encoder 结构

img

Transformer Encoder block

上图红色部分是 Transformer 的 Encoder block 结构,可以看到是由 Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 组成的。刚刚已经了解了 Multi-Head Attention 的计算过程,现在了解一下 Add & Norm 和 Feed Forward 部分。

4.1 Add & Norm

Add & Norm 层由 Add 和 Norm 两部分组成,其计算公式如下:

img

Add &amp;amp;amp; Norm 公式

其中 X表示 Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的,所以可以相加)。

AddX+MultiHeadAttention(X),是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到:

img

残差连接

Norm指 Layer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

4.2 Feed Forward

Feed Forward 层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下。

img

Feed Forward

X是输入,Feed Forward 最终得到的输出矩阵的维度与X一致。

4.3 组成 Encoder

通过上面描述的 Multi-Head Attention, Feed Forward, Add & Norm 就可以构造出一个 Encoder block,Encoder block 接收输入矩阵 ,并输出一个矩阵 [公式] 。通过多个 Encoder block 叠加就可以组成 Encoder。

第一个 Encoder block 的输入为句子单词的表示向量矩阵,后续 Encoder block 的输入是前一个 Encoder block 的输出,最后一个 Encoder block 输出的矩阵就是编码信息矩阵 C,这一矩阵后续会用到 Decoder 中。

img

Encoder 编码句子信息

5. Decoder 结构

img

Transformer Decoder block

上图红色部分为 Transformer 的 Decoder block 结构,与 Encoder block 相似,但是存在一些区别:

  • 包含两个 Multi-Head Attention 层。

  • 第一个 Multi-Head Attention 层采用了 Masked 操作。

  • 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。

  • 最后有一个 Softmax 层计算下一个翻译单词的概率。

5.1 第一个 Multi-Head Attention

Decoder block 的第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。下面以 "我有一只猫" 翻译成 "I have a cat" 为例,了解一下 Masked 操作。

下面的描述中使用了类似 Teacher Forcing 的概念,不熟悉 Teacher Forcing 的童鞋可以参考以下上一篇文章Seq2Seq 模型详解。在 Decoder 的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入 "<Begin>" 预测出第一个单词为 "I",然后根据输入 "<Begin> I" 预测下一个单词 "have"。

img

Decoder 预测

Decoder 可以在训练的过程中使用 Teacher Forcing 并且并行化训练,即将正确的单词序列 (<Begin> I have a cat) 和对应输出 (I have a cat <end>) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住,注意 Mask 操作是在 Self-Attention 的 Softmax 之前使用的,下面用 0 1 2 3 4 5 分别表示 "<Begin> I have a cat <end>"。

第一步:是 Decoder 的输入矩阵和 Mask 矩阵,输入矩阵包含 "<Begin> I have a cat" (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。在 Mask 可以发现单词 0 只能使用单词 0 的信息,而单词 1 可以使用单词 0, 1 的信息,即只能使用之前的信息。

img

输入矩阵与 Mask 矩阵

第二步:接下来的操作和之前的 Self-Attention 一样,通过输入矩阵X计算得到Q,K,V矩阵。然后计算Q和 的乘积 [公式]

img

Q乘以K的转置

第三步:在得到 之后需要进行 Softmax,计算 attention score,我们在 Softmax 之前需要使用Mask矩阵遮挡住每一个单词之后的信息,遮挡操作如下:

img

Softmax 之前 Mask

得到 Mask 之后在 Mask [公式]上进行 Softmax,每一行的和都为 1。但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。

第四步:使用 Mask 与矩阵 V相乘,得到输出 Z,则单词 1 的输出向量 [公式] 是只包含单词 1 信息的。

img

Mask 之后的输出

第五步:通过上述步骤就可以得到一个 Mask Self-Attention 的输出矩阵 ,然后和 Encoder 类似,通过 Multi-Head Attention 拼接多个输出[公式] 然后计算得到第一个 Multi-Head Attention 的输出ZZ与输入X维度一样。

5.2 第二个 Multi-Head Attention

Decoder block 第二个 Multi-Head Attention 变化不大, 主要的区别在于其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C 计算的。

根据 Encoder 的输出 C计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算),后续的计算方法与之前描述的一致。

这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。

5.3 Softmax 预测输出单词

Decoder block 最后的部分是利用 Softmax 预测下一个单词,在之前的网络层我们可以得到一个最终的输出 Z,因为 Mask 的存在,使得单词 0 的输出 Z0 只包含单词 0 的信息,如下:

img

Decoder Softmax 之前的 Z

Softmax 根据输出矩阵的每一行预测下一个单词:

img

Decoder Softmax 预测

这就是 Decoder block 的定义,与 Encoder 一样,Decoder 是由多个 Decoder block 组合而成。

6. Transformer 总结

  • Transformer 与 RNN 不同,可以比较好地并行训练。

  • Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了。

  • Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到。

  • Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score。

7.Word2Vec

作者:穆文 链接:[NLP] 秒懂词向量Word2vec的本质 - 知乎 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1. 什么是 Word2vec?

在聊 Word2vec 之前,先聊聊 NLP (自然语言处理)。NLP 里面,最细粒度的是 词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,首先就要拿词语开刀。

举个简单例子,判断一个词的词性,是动词还是名词。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的词性,我们要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种

我在前作『都是套路: 从上帝视角看透时间序列和数据挖掘』提到,大部分的有监督机器学习模型,都可以归结为:

f(x)->y

在 NLP 中,把 x 看做一个句子里的一个词语,y 是这个词语的上下文词语,那么这里的 f,便是 NLP 中经常出现的『语言模型』(language model),这个模型的目的,就是判断 (x,y) 这个样本,是否符合自然语言的法则,更通俗点说就是:词语x和词语y放在一起,是不是人话。

Word2vec 正是来源于这个思想,但它的最终目的,不是要把 f 训练得多么完美,而是只关心模型训练完后的副产物——模型参数(这里特指神经网络的权重),并将这些参数,作为输入 x 的某种向量化的表示,这个向量便叫做——词向量(这里看不懂没关系,下一节我们详细剖析)。

我们来看个例子,如何用 Word2vec 寻找相似词:

  • 对于一句话:『她们 夸 吴彦祖 帅 到 没朋友』,如果输入 x 是『吴彦祖』,那么 y 可以是『她们』、『夸』、『帅』、『没朋友』这些词

  • 现有另一句话:『她们 夸 我 帅 到 没朋友』,如果输入 x 是『我』,那么不难发现,这里的上下文 y 跟上面一句话一样

  • 从而 f(吴彦祖) = f(我) = y,所以大数据告诉我们:我 = 吴彦祖(完美的结论)

2. Skip-gram 和 CBOW 模型

上面我们提到了语言模型

  • 如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』

  • 而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』

2.1 Skip-gram 和 CBOW 的简单情形

我们先来看个最简单的例子。上面说到, y 是 x 的上下文,所以 y 只取上下文里一个词语的时候,语言模型就变成:

用当前词 x 预测它的下一个词 y

但如上面所说,一般的数学模型只接受数值型输入,这里的 x 该怎么表示呢? 显然不能用 Word2vec,因为这是我们训练完模型的产物,现在我们想要的是 x 的一个原始输入形式。

答案是:one-hot encoder

所谓 one-hot encoder,其思想跟特征工程里处理类别变量的 one-hot 一样(参考我的前作『数据挖掘比赛通用框架』、『深挖One-hot和Dummy背后的玄机』)。本质上是用一个只含一个 1、其他都是 0 的向量来唯一表示词语。

我举个例子,假设全世界所有的词语总共有 V 个,这 V 个词语有自己的先后顺序,假设『吴彦祖』这个词是第1个词,『我』这个单词是第2个词,那么『吴彦祖』就可以表示为一个 V 维全零向量、把第1个位置的0变成1,而『我』同样表示为 V 维全零向量、把第2个位置的0变成1。这样,每个词语都可以找到属于自己的唯一表示。

OK,那我们接下来就可以看看 Skip-gram 的网络结构了,x 就是上面提到的 one-hot encoder 形式的输入,y 是在这 V 个词上输出的概率,我们希望跟真实的 y 的 one-hot encoder 一样。

img

首先说明一点:隐层的激活函数其实是线性的,相当于没做任何处理(这也是 Word2vec 简化之前语言模型的独到之处),我们要训练这个神经网络,用反向传播算法,本质上是链式求导,在此不展开说明了,

当模型训练完后,最后得到的其实是神经网络的权重,比如现在输入一个 x 的 one-hot encoder: [1,0,0,…,0],对应刚说的那个词语『吴彦祖』,则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 vx 来表示x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 vx 就可以用来唯一表示 x。

*注意:上面这段话说的就是 Word2vec 的精髓!!*

此外,我们刚说了,输出 y 也是用 V 个节点表示的,对应V个词语,所以其实,我们把输出节点置成 [1,0,0,…,0],它也能表示『吴彦祖』这个单词,但是激活的是隐含层到输出层的权重,这些权重的个数,跟隐含层一样,也可以组成一个向量 vy,跟上面提到的 vx 维度一样,并且可以看做是词语『吴彦祖』的另一种词向量。而这两种词向量 vx 和 vy,正是 Mikolov 在论文里所提到的,『输入向量』和『输出向量』,一般我们用『输入向量』。

需要提到一点的是,这个词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作——把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。

2.2. Skip-gram 更一般的情形

上面讨论的是最简单情形,即 y 只有一个词,当 y 有多个词时,网络结构如下:

img

可以看成是 单个x->单个y 模型的并联,cost function 是单个 cost function 的累加(取log之后)

如果你想深入探究这些模型是如何并联、 cost function 的形式怎样,不妨仔细阅读参考资料4. 在此我们不展开。

2.3 CBOW 更一般的情形

跟 Skip-gram 相似,只不过:

Skip-gram 是预测一个词的上下文,而 CBOW 是用上下文预测这个词

网络结构如下

img

更 Skip-gram 的模型并联不同,这里是输入变成了多个单词,所以要对输入处理下(一般是求和然后平均),输出的 cost function 不变,在此依然不展开,建议你阅读参考资料4.

3. Word2vec 的训练trick

相信很多初次踩坑的同学,会跟我一样陷入 Mikolov 那篇论文(参考资料1.)里提到的 hierarchical softmax 和 negative sampling 里不能自拔,但其实,它们并不是 Word2vec 的精髓,只是它的训练技巧,但也不是它独有的训练技巧。 Hierarchical softmax 只是 softmax 的一种近似形式(详见参考资料7.),而 negative sampling 也是从其他方法借鉴而来。

为什么要用训练技巧呢? 如我们刚提到的,Word2vec 本质上是一个语言模型,它的输出节点数是 V 个,对应了 V 个词语,本质上是一个多分类问题,但实际当中,词语的个数非常非常多,会给计算造成很大困难,所以需要用技巧来加速训练。

这里我总结了一下这两个 trick 的本质,有助于大家更好地理解,在此也不做过多展开,有兴趣的同学可以深入阅读参考资料1.~7.

  • hierarchical softmax

    • 本质是把 N 分类问题变成 log(N)次二分类

  • negative sampling

    • 本质是预测总体类别的一个子集

8.权重衰减 学习率衰减

1.权重衰减(weight decay) L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。

1.1 L2正则化与权重衰减系数 L2正则化就是在代价函数后面再加上一个正则化项:

其中C0代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2 1/211经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整为1。系数λ就是权重衰减系数。

1.2 为什么可以对权重进行衰减 我们对加入L2正则化后的代价函数进行推导,先求导:

可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:

在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为1-ηλ/n,因为η、λ、n都是正的,所以1-ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。 另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:

对比上面w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。

1.3 权重衰减(L2正则化)的作用 作用: 权重衰减(L2正则化)可以避免模型过拟合问题。 思考: L2正则化项有让w变小的效果,但是为什么w变小可以防止过拟合呢? 原理: (1)从模型的复杂度上解释:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合更好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。(2)从数学方面的解释:过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

内容来自: 正则化方法:L1和L2 regularization、数据集扩增、dropout

2.学习率衰减(learning rate decay) 在训练模型的时候,通常会遇到这种情况:我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learning rate),但是训练集的损失下降到一定的程度后就不在下降了,比如training loss一直在0.7和0.9之间来回震荡,不能进一步下降。如下图所示:

遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。 学习率衰减(learning rate decay) 就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。 学习率衰减基本有两种实现方法: 线性衰减。例如:每过5个epochs学习率减半。 指数衰减。例如:随着迭代轮数的增加学习率自动发生衰减,每过5个epochs将学习率乘以0.9998。具体算法如下: decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps) 其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。 Reference: (1)学习率衰减部分内容和图片来自: 学习率衰减(learning rate decay) (2) 神经网络学习率(learning rate)的衰减

9.聚类方法

距离度量

非负,同一,对称,直递

欧式距离

曼哈顿距离

闵可夫斯基

方法

分离聚类:kmeans kmeans++ ISOTA

解决分离聚类无法处理环形数据分布的情况 密度聚类: DBSCAN(引入一堆术语,邻域,核心点,边缘点,簇:由密度相连关系可以导出的最大集合,密度直达,密度可达,密度相连)

解决相连传递问题 层次聚类:AGNES 有自顶向下和自底向上两种

10.贝叶斯公式

朴素贝叶斯:优化的是最大后验

EM算法:优化的是最大似然,

E步

M步

11.GBDT

一、Regression Decision Tree:回归树

回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化平方误差。也就是被预测出错的人数越多,错的越离谱,平方误差就越大,通过最小化平方误差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。(引用自一篇博客,详见参考文献3)

img

回归树示例

  回归树算法如下图(截图来自《统计学习方法》5.5.1 CART生成):

img

回归树生成算法

二、Boosting Decision Tree:提升树算法

提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式:残差 = 真实值 - 预测值 。提升树即是整个迭代过程生成的回归树的累加。  举个例子,参考自一篇博客(参考文献 4),该博客举出的例子较直观地展现出多棵决策树线性求和过程以及残差的意义。  训练一个提升树模型来预测年龄:  训练集是4个人,A,B,C,D年龄分别是14,16,24,26。样本中有购物金额、上网时长、经常到百度知道提问等特征。提升树的过程如下:

img

提升树示例

该例子很直观的能看到,预测值等于所有树值得累加,如A的预测值 = 树1左节点 值 15 + 树2左节点 -1 = 14。  因此,给定当前模型 fm-1(x),只需要简单的拟合当前模型的残差。现将回归问题的提升树算法叙述如下:

img

提升树算法

三、Gradient Boosting Decision Tree:梯度提升决策树

提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。

img

损失函数列表

  但对于一般的损失函数,往往每一步优化没那么容易,如上图中的绝对值损失函数和Huber损失函数。针对这一问题,Freidman提出了梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。(注:鄙人私以为,与其说负梯度作为残差的近似值,不如说残差是负梯度的一种特例)算法如下(截图来自《The Elements of Statistical Learning》):

img

梯度提升决策树算法

算法步骤解释:

  • 1、初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,即ganma是一个常数值。

  • 2、 (a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计 (b)估计回归树叶节点区域,以拟合残差的近似值 (c)利用线性搜索估计叶节点区域的值,使损失函数极小化 (d)更新回归树

  • 3、得到输出的最终模型 f(x)

作者:SiyueLin 链接:GBDT:梯度提升决策树 - 简书 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

12.处理类别不平衡数据的方法:

重采样

更换新的评判标准

更换方法(决策树)

smote

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值