机器学习基础知识汇总
计算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}$,这种累加形式导致导数也是累加的形式,因此避免了梯度的消失。