机器学习基础知识汇总

计算CNN输出尺寸

公式:输出尺寸=(输入尺寸-filter尺寸+2*padding)/stride+1

ROC 和AUC

ROC曲线的x轴是伪阳率即$\frac{伪阳}{真阴+伪阳}$,y轴是真阳率即$\frac{真阳}{真阳+伪阴}$。

  • thresh-hold很高,导致全部预测阴,则真阳率为0,伪阳率为0,在坐标点$(0, 0)$;
  • thresh-hold很低,导致全部预测阳,则真阳率为1,伪阳率为1,在坐标点$(1, 1)$;
  • 如果分类效果很好,则真阳率很高,伪阳率很低,接近坐标点$(0, 1)$。AUC即(Area Under Curve),即ROC曲线下的面积。如果分类效果越好,点越接近$(0, 1)$则AUC越大。

参考链接

卡方检验

卡方检验可以用于两个变量间的相关性检测

核心思想:卡方衡量了实际值与理论值的差异程度

即,先假设两个变量之间是相互独立的,计算一组理论值$T$,设实际值是$A$,则$\mathfrak{X}^2=\frac{\sum(A-T)^2}{T}$

参考链接

交叉熵损失函数

$H(p, q) = \sum_i p_i × log\frac{1}{q_i}$,可以衡量两个分布的相似度。

可以配合sigmoid,使其在误差下降的时候,梯度不会太小。

Perplexity

困惑度,如果语言模型生成的句子越不像是人说的,困惑度越大,语言模型越差。

在语言模型中,可以将一句话的似然函数,用来描述这句话的困惑度。似然函数越大,困惑度越小。

于是有:

$$PPL=\sqrt[n]{\frac{1}{P(w_1,w_2,…,w_N)}}$$

$$=e^{\frac{1}{N}ln\frac{1}{P(w_1,w_2,…,w_N)}}$$

$$=e^{-\frac{1}{N}\sum_{i=1}^NlnP(w_i)}$$

参考链接

Haffman 编码

本身概念不难,最短编码。构造也很简单,每次把两个最小的拿出来,合并,再丢回去。

需要注意的是,编码的时候,所有的编码,不可以是其他的任何编码的前缀。

RNN和LSTM

RNN有什么问题?LSTM为何可以解决这个问题?

RNN由于长期依赖的问题,经过许多阶段传播后,梯度倾向于消失(大部分情况)或**爆炸(很少,但对优化过程影响很大)。

  • LSTM的自循环的权重视上下文而定,而不是固定的;而普通的RNN是固定的W。
  • 内部状态$s$或者$h$:
    • RNN:$h^{(t)}=\sigma(b+Wh^{(t−1)}+Ux^{(t)})$
    • LSTM:$s^{(t)}_i=f^{(t)}_is^{(t−1)}_i+g^{(t)}_ii^{(t)}_i$,$g^{(t)}_i$又称为“备选状态”。
    • GRU:$h^{(t)}_i=u^{(t−1)}_ih^{(t−1)}_i+(1−u^{(t−1)}_i)\tilde h_t$
    • 传统的RNN使用“覆写”的方式计算状态:$S_t=f(S_{t-1},x_t)$,根据求导的链式法则,这种形式直接导致梯度别表示成连积的形式,容易导致梯度消失或者梯度爆炸。
    • 现代的RNN(包括但不限于LSTM单元),使用“累加”的方式计算状态:$S_t = \sum_{\tau=1}^t\Delta S_{\tau}$,这种累加形式导致导数也是累加的形式,因此避免了梯度的消失。