指标

  • TP(true positive,真正): 预测为正,实际为正

  • FP(false positive,假正): 预测为正,实际为负

  • TN(true negative,真负):预测为负,实际为负

  • FN(false negative,假负): 预测为负,实际为正

  • ACC(accuracy,准确率):ACC=(TP+TN)/(TP+TN+FN+FP)ACC = (TP+TN)/(TP+TN+FN+FP)

  • P(precision精确率、精准率、查准率P=TP/(TP+FP)P = TP/ (TP+FP)

  • R(recall,召回率、查全率):$ R = TP/ (TP+FN)$

  • TPR(true positive rate,,真正类率同召回率、查全率):TPR=TP/(TP+FN)TPR = TP/ (TP+FN)

    注:Recall = TPR

  • FPR(false positive rate,假正类率):FPR=FP/(FP+TN)FPR =FP/ (FP+TN)

  • TNR (true negative rate,真负类率) :TNR=TN/(FP+TN)TNR = TN/(FP+TN)

  • F-Score: FScore=(1+β2)×(P×R)/(β2×(P+R))=2×TP/(2×TP+FP+FN)F-Score = (1+β^2) \times (P\times R) / (β^2 \times (P+R)) = 2 \times TP/(2 \times TP + FP + FN)

  • 当β=1是,F1score=2×P×R/(P+R)F1-score = 2\times P\times R/(P+R)

  • P-R曲线(precision-recall,查准率-查全率曲线)

  • ROC曲线(receiver operating characteristic,接收者操作特征曲线)横轴:负正类率(false postive rate FPR)

    纵轴:真正类率(true postive rate TPR)

  • AUC(area under curve)值

正则项

https://www.cnblogs.com/maybe2030/p/9231231.html

  • L1范数相当于加入了一个Laplacean先验;

  • L2范数相当于加入了一个Gaussian先验。

  • DropOut 概率丢弃部分神经元

  • BN 把每神经元输入值的分布强行拉回到均值为0方差为1的标准正态分布,避免因为激活函数导致的梯度弥散问题。

  • 归一化和标准化:

归一化

x=xmin(x)max(x)min(x)x^{\prime}=\frac{x-\min (x)}{\max (x)-\min (x)}

标准化

x=xμσx^{\prime}=\frac{x-\mu}{\sigma}

  • 提升模型精度:归一化后,不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
  • 加速模型收敛:标准化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。:

img

如何防止过拟合?

  • 数据增广(Data Augmentation)
  • 正则化(L0正则、L1正则和L2正则),也叫限制权值Weight-decay
  • Dropout
  • Early Stopping
  • 简化模型
  • 增加噪声
  • Bagging
  • 贝叶斯方法
  • 决策树剪枝
  • 集成方法,随机森林
  • Batch Normalization

如何防止欠拟合?

  • 添加新特征
  • 添加多项式特征
  • 减少正则化参数
  • 增加网络复杂度
  • 使用集成学习方法,如Bagging

Attention

将注意力放到重点信息上

优势:

  • 参数少

    模型复杂度跟 CNNRNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小

  • 速度快

    Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

  • 效果好

    Attention引入之前存在的问题:长距离的信息会被弱化

原理

  • query 和 key 进行相似度计算,得到权值

  • 将权值进行归一化,得到直接可用的权重

  • 将权重和 value 进行加权求和

类型

计算区域

1)Soft Attention,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。

2)Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)

3)Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

Self-Attention:

img

 Attention (Q,K,V)=softmax(QKTdk)V\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V

Multi-head:

有不同的Q,K,VQ,K,V 表示,最后将其结果结合起来

img

所用信息

假设我们要对一段原文计算Attention,这里原文指的是我们要做attention的文本,那么所用信息包括内部信息和外部信息,内部信息指的是原文本身的信息,而外部信息指的是除原文以外的额外信息。

1)General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。

比如在阅读理解任务中,需要构建问题和文章的关联,假设现在baseline是,对问题计算出一个问题向量q,把这个q和所有的文章词向量拼接起来,输入到LSTM中进行建模。那么在这个模型中,文章所有词向量共享同一个问题向量,现在我们想让文章每一步的词向量都有一个不同的问题向量,也就是,在每一步使用文章在该步下的词向量对问题来算attention,这里问题属于原文,文章词向量就属于外部信息。

2)Local Attention,这种方式只使用内部信息,key和value以及query只和输入原文有关,在self attention中,key=value=query。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。

还是举阅读理解任务的例子,上面的baseline中提到,对问题计算出一个向量q,那么这里也可以用上attention,只用问题自身的信息去做attention,而不引入文章信息。

结构层次

结构方面根据是否划分层次关系,分为单层attention,多层attention和多头attention:

1)单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention。

2)多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务。

3)多头Attention,这是Attention is All You Need中提到的multi-head attention,用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention:

Image for post

最后再把这些结果拼接起来:

Image for post

相似度计算方式

在做attention的时候,我们需要计算query和某个key的分数(相似度),常用方法有:

1)点乘:最简单的方法,

Image for post

2)矩阵相乘:

Image for post

3)cos相似度:

Image for post

4)串联方式:把q和k拼接起来,

Image for post

5)用多层感知机也可以:

Image for post

BN,LN,IN,GN,SN

BN、LN、IN和GN这四个归一化的计算流程几乎是一样的,可以分为四步:

1.计算出均值

2.计算出方差

3.归一化处理到均值为0,方差为1

4.变化重构,恢复出这一层网络所要学到的分布

μB1mi=1mxiσB21mi=1m(xiμB)2x^ixiμBσB2+ϵyiγx^i+βBNγ,β(xi)\begin{aligned} \mu_{\mathcal{B}} & \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_{i} \\ \sigma_{\mathcal{B}}^{2} & \leftarrow \frac{1}{m} \sum_{i=1}^{m}\left(x_{i}-\mu_{\mathcal{B}}\right)^{2} \\ \widehat{x}_{i} & \leftarrow \frac{x_{i}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}} \\ y_{i} & \leftarrow \gamma \widehat{x}_{i}+\beta \equiv \mathrm{BN}_{\gamma, \beta}\left(x_{i}\right) \end{aligned}

训练的时候,是根据输入的每一批数据来计算均值和方差,那么测试的时候,平均值和方差是怎么来的?

对于均值来说直接计算所有训练时batch 均值的平均值;然后对于标准偏差采用每个batch 方差的无偏估计

E[x]EB[μB]Var[x]mm1EB[σB2]\begin{aligned} \mathrm{E}[x] & \leftarrow \mathrm{E}_{\mathcal{B}}\left[\mu_{\mathcal{B}}\right] \\ \operatorname{Var}[x] & \leftarrow \frac{m}{m-1} \mathrm{E}_{\mathcal{B}}\left[\sigma_{\mathcal{B}}^{2}\right] \end{aligned}

img

Batch Normalization:

1.BN的计算就是把每个通道的NHW单独拿出来归一化处理

2.针对每个channel我们都有一组γ,β,所以可学习的参数为2*C

3.当batch size越小,BN的表现效果也越不好,因为计算过程中所得到的均值和方差不能代表全局

Layer Normalizaiton:

1.LN的计算就是把每个CHW单独拿出来归一化处理,不受batchsize 的影响

2.常用在RNN网络,但如果输入的特征区别很大,那么就不建议使用它做归一化处理

Instance Normalization

1.IN的计算就是把每个HW单独拿出来归一化处理,不受通道和batchsize 的影响

2.常用在风格化迁移,但如果特征图可以用到通道之间的相关性,那么就不建议使用它做归一化处理

Group Normalizatio

1.GN的计算就是把先把通道C分成G组,然后把每个gHW单独拿出来归一化处理,最后把G组归一化之后的数据合并成CHW

2.GN介于LN和IN之间,当然可以说LN和IN就是GN的特列,比如G的大小为1或者为C

Switchable Normalization

1.将 BN、LN、IN 结合,赋予权重,让网络自己去学习归一化层应该使用什么方法

2.集万千宠爱于一身,但训练复杂

鞍点的定义和特点?

一阶导为0,但不是极大极小值的点

该点处的黑塞矩阵为不定矩阵

常见的损失函数

https://zhuanlan.zhihu.com/p/58883095