基础部分
求均匀分布的极大似然估计
极大似然估计的原理与计算方法
约束优化
KKT方法时解决约束优化问题非常通用的解决方法(是拉格朗日乘子法的推广)。通过拉格朗日函数将约束优化问题转化为无约束优化问题。可将有d个变量和k个约束条件的最优化问题转化为具有d+k个变量的无约束优化问题。
KKT条件(必要不充分条件):
广义拉格朗日的梯度为0
所有关于x和KKT乘子的约束都满足
不等式约束显示的松弛互补性:
熵、KL散度、交叉熵
假设随机变量
X
X
X的概率分布是
P
(
X
)
P(X)
P(X),则其(香农)熵是
H
(
P
)
=
−
E
X
∼
P
[
l
o
g
P
(
x
)
]
,
H(P)=-\Bbb E _{X\sim P}[logP(x)],
H(P)=−EX∼P[logP(x)],
当
X
X
X为离散变量时,可以写成:
H
(
P
)
=
−
∑
x
P
(
x
)
l
o
g
P
(
x
)
.
H(P)=-\sum_x P(x)logP(x).
H(P)=−x∑P(x)logP(x).当
X
X
X服从均匀分布时,熵最大。一个分布的(香农)熵是指遵循这个分布的事件所产生的期望信息总量。
KL散度用来衡量两个分布之间的差异
D
K
L
(
P
∣
∣
Q
)
=
E
X
∼
P
[
l
o
g
P
(
x
)
Q
(
x
)
]
D_{KL}(P||Q)=\Bbb E _{X\sim P}[log\frac {P(x)}{Q(x)}]
DKL(P∣∣Q)=EX∼P[logQ(x)P(x)]
是不对称的!
交叉熵:
H
(
P
,
Q
)
=
E
X
∼
P
[
l
o
g
Q
(
x
)
]
H(P,Q)=\Bbb E _{X\sim P}[log{Q(x)}]
H(P,Q)=EX∼P[logQ(x)]
即
H
(
P
,
Q
)
=
H
(
P
)
+
D
K
L
(
P
∣
∣
Q
)
.
H(P,Q)=H(P)+D_{KL}(P||Q).
H(P,Q)=H(P)+DKL(P∣∣Q).
评价指标
F1-score
ROC与AUC
L1、L2正则化以及区别
L1 最重要的一个特点,输出稀疏,会把不重要的特征直接置零,而 L2 则不会。为什么?
图像角度:正则项的解空间与原始损失函数的等高线的交点
梯度角度:L2正则项的在原点的梯度为0,加上原始损失函数的梯度后不为0 ,所以一定不是最小点。
L2 有唯一解,而 L1 不是
防止模型过拟合
选择复杂度适当的模型、正则化(L1范数、L2范数)、早停、数据集扩增、dropout
生成模型与判别模型
生成方法由数据学习联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),然后求出条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)作为预测的模型. 典型的生成模型有 朴素贝叶斯模型和隐马尔可夫模型。
生成方法的特点:生成方法可以还原出联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),而判别方法不能;生成方法的学习收敛速率更快,即当样本容量增加的时候,模型可以更快的收敛到真实模型;当存在隐变量时,扔可以用生成方法学习,判别方法就不行。判别方法的特点,直接预测,准确率往往更高
Softmax函数
激活函数都有哪些
全面总结
补充
当必须要使用sigmoid激活函数时,双曲正切通常要比sigmoid更好。sigmoid在除了前馈网络以外的情景中更为常见。循环网络,许多概率模型以及一些自编码器有一些额外的要求使得他们不能使用分段线性激活函数。
ReLU:优点是易于学习,缺点是不能学习到激活为0的样本;其变种保证了在各个位置都有梯度。
数据不平衡怎么处理
机器学习
常见的损失函数
交叉熵
均方差损失(Mean Square Error,MSE)
均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近,两者的均方差就越小。
计算方式:
假设有 n 个训练数据 xi,每个训练数据 xi 的真实输出为 yi,模型对 xi 的预测值为 y^i。该模型在 n 个训练数据下所产生的均方误差损失可定义如下:
M
S
E
=
1
n
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
MSE=\frac{1}{n}\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2}
MSE=n1∑i=1n(yi−y^i)2
假设真实目标值为100,预测值在-10000到10000之间,我们绘制MSE函数曲线如 图1 所示。可以看到,当预测值越接近100时,MSE损失值越小。MSE损失的范围为0到∞ 。
Ranking loss
ranking loss的目的是去预测输入样本之间的相对距离。这个任务经常也被称之为度量学习(metric learning)。可用于匹配模型的训练。
这里设置阈值的目的是,当某个负样本对中的表征足够好,体现在其距离足够远的时候,就没有必要在该负样本对中浪费时间去增大这个距离了,因此进一步的训练将会关注在其他更加难分别的样本对中。
label smoothing
标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。
LDA主题模型
LDA(Latent Dirichlet Allocation)是一个生成式的有向图模型,认为一篇文档(Document) 可以由多个主题(Topic) 混合而成, 而每个Topic 都是词表上的概率分布,文章中的每个词都是由一个固定的 Topic 生成的。
因此,LDA的参数为
α
\alpha
α和
η
\eta
η,当学习出了这两个控制参数就确定了模型,便可以用来生成文档。
α
\alpha
α和
η
\eta
η 通常为K维和N维迪利克雷分布的参数。 这两个参数可以通过变分法(EM算法)求解。
beam search
N-gram模型
N-Gram模型是一种统计语言模型。简单来讲,统计语言模型是计算语料库中某个句子出现概率的模型。
假设句子W是由T个单词 w 1 , w 2 , w 3 , … w T w_1,w_2,w_3,…w_T w1,w2,w3,…wT按照顺序构成的,那么句子W出现的概率可以认为是T个单词依次出现的联合概率:
P ( w 1 , w 2 , … , w T ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) , . . . , P ( w T ∣ w 1 , . . w T − 1 ) P(w_1,w_2,…,w_T)=P(w_1)P(w_2|w_1)P(w_3|w_1, w_2),...,P(w_T|w_1,..w_{T-1}) P(w1,w2,…,wT)=P(w1)P(w2∣w1)P(w3∣w1,w2),...,P(wT∣w1,..wT−1)
TF-IDF
介绍HMM
HMM是一个有向图的生成式模型。主要用于时序数据建模。hmm中的变量分为两组,一组是隐变量,第二组是观测变量。观测变量的取值依赖于隐变量,即
x
t
x_t
xt仅由
y
t
y_t
yt决定,
y
t
y_t
yt取决于
y
t
−
1
y_{t-1}
yt−1。
hmm的参数有三组:状态转移概率,输出观测概率,初始状态概率。
HMM与CRF的区别
一个是有向图生成模型,一个是无向图判别式模型。
随机森林
AdaBoost
GBDT
DT-Decision Tree决策树,GB是Gradient Boosting,是一种学习策略,GBDT的含义就是用Gradient Boosting的策略训练出来的DT模型。
模型的结果是一组回归分类树组合(CART Tree Ensemble):
T
1
,
.
.
.
T
k
T_1,...T_k
T1,...Tk。其中
T
j
T_j
Tj学习的是之前
i
−
1
i-1
i−1棵树预测结果的残差,这种思想就像准备考试前的复习,先做一遍习题册,然后把做错的题目挑出来,在做一次,然后把做错的题目挑出来在做一次,经过反复多轮训练,取得最好的成绩。
在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失函数L(y,ft(x))=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。
而模型最后的输出,是一个样本在各个树中输出的结果的和:
即可以做分类,也可以做回归。
off-policy 和 on-policy有什么区别
所谓在线学习, 就是指我必须本人在场, 并且一定是本人边玩边学习, 而离线学习是你可以选择自己玩, 也可以选择看着别人玩, 通过看别人玩来学习别人的行为准则, 离线学习 同样是从过往的经验中学习, 但是这些过往的经历没必要是自己的经历, 任何人的经历都能被学习. 或者我也不必要边玩边学习, 我可以白天先存储下来玩耍时的记忆, 然后晚上通过离线学习来学习白天的记忆.
最典型的在线学习就是 Sarsa,最典型的离线学习就是 Q learning。
off-policy methods sample efficient as they are able to make use of any experience; in contrast, on-policy methods would, if specific care is not taken, introduce a bias when using off-policy trajectories
深度学习
动量
在优化中使用动量的目的是减少震荡,加速学习。动量法不仅使用当前的梯度,同时还利用之前的梯度提供的信息。它将过去时间步的梯度做了加权平均,且权重按时间步指数衰减。
对称失效
Batch Normalization
但是这种表示可能破坏已经学习到的特征。为了解决这个问题,BN添加了两个可以学习的变量
γ
\gamma
γ和
β
\beta
β来scale and shift the normalized value,也就是能够还原BN之前学习到的特征。
y
k
=
γ
k
x
^
k
+
β
k
.
y_k = \gamma_k \hat x_k+\beta_k.
yk=γkx^k+βk. 综上所述,BN可以看做一个以
γ
\gamma
γ和
β
\beta
β为参数的,从
x
x
x到
y
y
y的一个映射。
BN为什么效果好呢,统一数据量级,平滑了损失平面loss landscape,并指出残差网络和DenseNet均起到了平滑损失平面的作用,因此他们具有较快的收敛速度。
BN有两个功能,一个是可以加快训练和收敛速度,另外一个是可以防止过拟合。
BN算法是如何加快训练和收敛速度的呢?
BN算法在实际使用的时候会把特征给强制性的归到均值为0,方差为1的数学模型下。深度网络在训练的过程中,如果每层的数据分布都不一样的话,将会导致网络非常难收敛和训练,而如果能把每层的数据转换到均值为0,方差为1的状态下,一方面,数据的分布是相同的,训练会比较容易收敛,另一方面,均值为0,方差为1的状态下,在梯度计算时会产生比较大的梯度值,可以加快参数的训练,更直观的来说,是把数据从饱和区直接拉到非饱和区。更进一步,这也可以很好的控制梯度爆炸和梯度消失现象,因为这两种现象都和梯度有关。
BN最大的优点为允许网络使用较大的学习速率进行训练,加快网络的训练速度。
BN算法时如何防止过拟合的?
在这里摘录一段国外大神的解释:
When training with Batch Normalization, a training example is seen in conjunction with other examples in the mini-batch, and the training network no longer producing deterministic values for a given training example. In our experiments, we found this effect to be advantageous to the generalization of the network.
大概意思是:在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。
这句话什么意思呢?意思就是同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个理解成一种数据增强:同样一个样本在超平面上被拉扯,每次拉扯的方向的大小均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过神经网络的整个过程的,意味着神经网络每一层的输入都被数据增强处理了。
Dropout
知识蒸馏
我们可以先训练好一个teacher网络,然后将teacher的网络的输出结果
q
q
q作为student网络的目标,训练student网络,使得student网络的结果
p
p
p接近
q
q
q,因此,我们可以将损失函数写成
C
E
(
y
,
p
)
+
C
E
(
q
,
p
)
CE(y,p)+CE(q,p)
CE(y,p)+CE(q,p)。这里CE是交叉熵(Cross Entropy),y是真实标签的onehot编码,q是teacher网络的输出结果,p是student网络的输出结果。
知识蒸馏
张量化
Tucker分解是一种高阶的主成分分析,它将一个张量表示成一个核心(core)张量沿每一个mode乘上一个矩阵。
图神经网络
GCN
现在常用的GCN指的是ICLR 2017上发表的GCN,它的特点是:
- 只考虑一阶邻域,并通过堆叠多层增加感受野
- 是谱方法的近似,也是空间方法的起点
缺点:
3. 拉普拉斯矩阵唯一,已训练图结构不能应用于其他图
4. 限定在无向图上
5. 要加载整个图才能进行训练,对于机器存储空间要求较高,不适用于大规模图
GAT
优点:
- 不需要预先知道图的拓扑结构,可以直接应用到 inductive learning:包括在训练过程中在完全未见过的图上评估模型的任务上。
- 可并行化,同时也避免了诸如求逆等代价高昂的矩阵运算。适用于大规模图
- 鲁棒性更强:和GCN不同,GAT可以对同一个 neighborhood的node分配不同的重要性,使得模型的capacity大增。
- 图不需要是无向的,可以处理有向图
缺点:
- 增加了额外计算邻居节点信息的时间和内存消耗
6. 注意力的作用跟网络初始化有关
GraphSage
是一种inductive 的顶点 embedding 方法。
GraphSAGE 没有直接使用邻接矩阵,而是使用邻居节点采样。对于邻居节点数目不足的,采取重复采样策略 ,并生成中心节点的特征聚集向量。相较于传统直推式节点嵌入算法, GraphSAGE 并不是为图中每个节点生成固定的表示,而是学习一个为节点产生嵌入表示的映射函数。
图的pooling
- 平均或求和
- attention
- 上面两种方法没有考虑图的拓扑结构,基于聚类的方法可以考虑图的拓扑结构。
Attention的几种计算方式
点击方法假定查询向量和键值向量的空间对齐;general方法可以将查询向量和键值向量的空间对齐;concat和perception可以看做一类方法,但是perception的计算速度更快,因为
W
a
m
t
W_a m_t
Wamt可以重复利用。
+
b
+b
+b可以学习到某些key的全局重要性,不管其与query的相关性。
Transfomer
Transformer 是一个基于attention机制的encoder-decoder模型。encoder和decoder部分都由多个transformer layer堆叠而成。每个transformer layer通过多头自注意力机制对输入进行编码。自注意力机制通过点积计算每个输入token的权重,再对每个token加权求和得到输出。decoder部分在self-attention层之上还有一个encoder-decoder layer.
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K ⊤ d k ) V Attention(Q,K,V)=softmax(\frac{QK^\top}{\sqrt {d_k}})V Attention(Q,K,V)=softmax(dkQK⊤)V
点积结果为什么要缩放
在输入数量较大时,softmax将几乎全部的概率分布都分配给了最大值对应的标签。也就是说极大的点积值将整个 softmax 推向梯度平缓区,使得收敛困难,梯度消失为0,造成参数更新困难。
Transformer使用了layer normalization,与batch normalization的区别
时间复杂度
o ( n 2 d ) o(n^2d) o(n2d) n n n是序列长度, d d d是词向量维度。使用h个头的时间复杂度和单头一样。
input_mask如何作用到后面self-attention计算过程
由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 k k k个特征向量时,我们只能看到第 k − 1 k-1 k−1及其之前的解码结果,论文中把这种情况下的multi-head attention叫做masked multi-head attention
We implement this inside of scaled dot-product attention by masking out all values (setting to − ∞ -\infty −∞) all) in the input of the softmax which correspond to illegal connections.
Transformer为什么要比text CNN/RNN效果要好
Transformer为什么要比text CNN/RNN效果要好
句子是整体处理的,而不是逐字处理,不受长期依赖问题困扰
Transformer的缺点
对于长输入的任务,典型的如篇章级别的任务(比如文本摘要),因为任务的输入太长,Transformer会有巨大的计算复杂度,导致速度急剧变慢。解决方法:Transforme-XL或使用RNN。
张量化Transformer
对多头注意力部分进行张量化(一种近似计算方法),不同的attention head之间参数共享,只是使用不同的core tensor,core tensor是一个对角向量,因此参数很少。大约可以将参数压缩h倍。
Seq2Seq
词向量
- one-hot
- word2vector
- bert…
Bert相比于word2vector的优势
- 没有考虑词序问题
- 受限于window窗口大小的限制,不能考虑整个句子中所有词的相关性
- static vs context
word2vec给出的向量,是模型训练好以后,给出的embedding table。对于一个word而言,通过embedding table得出word对应的vector,即实现了word to vector。这样的vector是一种静态 static 的vector,与word所在的句子无关。例如“I want to access my bank account”,和“we went to the river bank”,对于这两个句子中,word2vec给出的bank的向量是固定的。
ELMo/BERT利用预训练好的语言模型,然后根据具体输入从该语言模型中可以得到上下文依赖的当前词表示(对于不同上下文的同一个词的表示是不一样的),再当成特征加入到具体的NLP有监督模型里
RNN
RNN 为什么会梯度消失/爆炸
简单说,因为反向传播时在计算梯度时会出现
∏
i
=
1
n
t
a
n
h
’
W
i
\quad \prod_{i=1}^n tanh^{’} W_i
∏i=1ntanh’Wi的连乘,在0-1之间或是一个很大的数,梯度就会变为0或一个无穷大。
Why LSTMs Stop Your Gradients From Vanishing: A View from the Backwards Pass
解释LSTM的构造
Understanding LSTM Networks
RNN的问题:1. 梯度消失,梯度爆炸;2. 长期依赖问题。
这两个问题的原因:参数w的连乘导致梯度消失或梯度爆炸;在计算t时间步的隐状态时,早期的h前面会有很多w的连乘,如果w是一个小于1的数,会导致早期的h几乎不起作用。
简单来说,LSTM额外维护了一个细胞状态
c
t
c_t
ct,
c
t
c_t
ct的改变很慢(两个时间步之间的导数接近1,因此可以防止或者缓解梯度爆炸或梯度消失)。并通过一个选择遗忘单元来决定
c
t
−
1
c_{t-1}
ct−1需要遗忘多少,并有一个选择记忆单元来对当前步的输入
x
t
x_t
xt进行选择记忆。并用这两步的结果之和作为新的
c
t
c_t
ct。再通过
c
t
c_t
ct更新得到当前步的隐状态
h
t
h_t
ht,因此可以缓解长期依赖问题。
Recurrent (LSTM, RNN)的时间复杂度
o ( n d 2 ) . o(nd^2). o(nd2). n n n是序列长度, d d d是词向量维度。因为 W h Wh Wh的时间复杂度为 o ( d 2 ) o(d^2) o(d2)
BERT
位置编码
BERT的Position Embeddings和Transformer不一样,不是三角函数位置编码(Transformer)而是学习出来的
Learned Positional Embedding学习的是编码绝对位置;三角函数位置编码也是绝对位置编码,但是可以表示相对位置信息。但是由于距离的对称性,Sinusoidal Position Encoding虽然能够反映相对位置的距离关系,但是无法区分方向。
在《Attention is all you need》[2]里面提到,Learned Positional Embedding和Sinusoidal Position Encoding两种方式的效果没有明显的差别
从方法的可理解性上,相比相对位置编码的两种方法,Learned Positional Embedding更加的简单直接,易于理解。从参数维度上,使用Sinusoidal Position Encoding不会引入额外参数,Learned Positional Embedding增加的参数量会随线性增长;在可扩展性上,Learned Positional Embedding可扩展性较差,只能表征在以内的位置,而另外两种方法没有这样的限制,可扩展性更强。
BERT 预训练模型包含两个预训练任务:预测被屏蔽的单词、预测下一个句子。
对于要MASK 15%的tokens:
(1) 80%的情况是替换成[MASK]
(2) 10%的情况是替换为随机的token
(3) 10%的情况是保持不变
不同预训练LM的对比
RoBERTa
XLNet
优化
AdamW本质上就是在损失函数里面加入了L2正则项,Adam是一种学习率自适应的优化算法。
强化学习
分类
基于概率这边,有REINFORCE,在基于价值这边有 Q learning, Sarsa 等. 而且我们还能结合这两类方法的优势之处, 创造更牛逼的一种方法, 叫做 Actor-Critic, actor 会基于概率做出动作, 而 critic 会对做出的动作给出动作的价值, 这样就在原有的 policy gradients 上加速了学习过程.
最典型的在线学习就是 Sarsa 了, 还有一种优化 Sarsa 的算法, 叫做 Sarsa lambda, 最典型的离线学习就是 Q learning, 后来人也根据离线学习的属性, 开发了更强大的算法, 比如让计算机学会玩电动的 Deep-Q-Network.
saras是on-policy学习,q-learning是off-policy学习。sarsa的学习比较保守稳健,每一个episode和每个episode的每个step都会执行episilon-greedy探索;q-learning则倾向于利用经验的累积,学习到最优策略。在悬崖行走曲线上,q-learning方法是optimal的,但会有风险,sarsa方法是安全的,但收敛更慢。
落地
用Flask封装一个外部可见的服务器应用。
BERT在美团搜索核心排序的探索和实践
“最全PyTorch分布式教程”来了!
torch中model.eval()与model.train()的区别
在卡容量有限的情况下,如何加大batch
pytroch反向传播梯度累加及清零
Soft skill
介绍工作的时候先abstract,再detail
abstract突出问题、创新点和有益效果