[toc]

为什么二分类不用 MSE 损失函数?

对于二分类问题,损失函数不采用均方误差(Mean Squared Error,MSE)至少可以从两个角度来分析。

均方差 Mean Squared Error (MSE) 损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下

$$
J_{M S E}=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2}
$$

数据分布角度

首先,使用 MSE 意味着假设数据采样误差是遵循正态分布的。用贝叶斯门派的观点来看,意味着作了高斯先验的假设。实际上,可以分为两类(即二分类)的数据集是遵循伯努利分布。

如果假设误差遵循正态分布,并使用最大似然估计(Maximum Likelihood Estimation,MLE),我们将得出 MSE 正是用于优化模型的损失函数。

首先,正态/高斯分布$\mathcal{N}$由两个参数$(\mu, \sigma)$定义,训练数据$(x, y)$包括特征$x$和实际观测值$y$。简单来说,每当我们采样数据时,观测值有时会与真实值相匹配,有时观测值会因某些误差而失真。我们假设所有观测到的数据都带有一定的误差(即$\epsilon$),并且误差遵循均值为$0$,方差未知的正态分布。我们可以这样来看,实际观测值$y$通常围绕待预测的目标值$\hat{y}$呈正态分布。

在一定的假设下, 我们可以通过最大化似然(MLE)推导出均方差损失的形式。假设模型预测值与真实值之间的误差服从高斯分布$(\mu = 0, \sigma = 1)$,则给定一个$x_i$,模型输出真实值$y_i$的概率为:

$$
p\left(y_{i} \mid x_{i}\right)=\frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{\left(y_{i}-\hat{y_{i}}\right)^{2}}{2}\right)
$$

进一步我们假设数据集中 N 个样本点之间相互独立,则给定所有$x$输出所有真实值$y$的概率,即似然 Likelihood,为所有$p(y_i \mid x_i)$的累乘:

$$
L(x, y)=\prod_{i=1}^{N} \frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{\left(y_{i}-\hat{y}_{i}\right)^{2}}{2}\right)
$$

通常为了方便计算,我们最大化对数似然函数(maximize log-likelihood)

$$
LL(x, y) = log(L(x,y)) = -\frac{N}{2} \log 2 \pi-\frac{1}{2} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2}
$$

去掉无关的第一项,然后转化为最小化负对数似然(Minimize Negative Log-Likelihood)

$$
N L L(x, y)=\frac{1}{2} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2}
$$

可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。

对于平均绝对误差 Mean Absolute Error (MAE) 是另一类常用的损失函数,也称为 L1 Loss。其基本形式如下:

$$
J_{M A E}=\frac{1}{N} \sum_{i=1}^{N}\left|y_{i}-\hat{y}_{i}\right|
$$

我们也可以通过类似的过程进行推导:
假设模型预测与真实值之间的误差服从拉普拉斯分布 Laplace distribution$(\mu = 0, b = 1)$,则给定一个 $x_i$ 模型输出真实值$y_i$的概率为:

$$
p\left(y_{i} \mid x_{i}\right)=\frac{1}{2} \exp \left(-\left|y_{i}-\hat{y}_{i}\right|\right)
$$

$$
L(x, y)=\prod_{i=1}^{N} \frac{1}{2} \exp \left(-\left|y_{i}-\hat{y}{i}\right|\right) \
L L(x, y)=N \ln \frac{1}{2}-\sum
{i=1}^{N}\left|y_{i}-\hat{y}{i}\right| \
N L L(x, y)=\sum
{i=1}^{N}\left|y_{i}-\hat{y}_{i}\right|
$$

优化角度

逻辑回归是分类的一种,输出包含 sigmoid(也可以是其他非线性激活函数),而如果还用 mse 做损失函数的话:

$$
\text { Loss }=\frac{1}{2} \sum_{i=1}^{n}\left(y_{i}-\hat{y}{i}\right)^{2}=\frac{1}{2} \sum{i=1}^{n}\left(y_{i}-\sigma\left(w x_{i}+b\right)\right)^{2}=\sum_{i=1}^{n}\left(y_{i}-\frac{1}{1+e^{-\left(w x_{i}+b\right)}}\right)^{2}
$$

MSE 函数对于二分类问题来说是非凸的,有多个极值点,所以不适用做损失函数了。sigmoid激活函数的输入很可能直接就在平坦区域,那么导数就几乎是 0,梯度就几乎不会被反向传递,梯度直接消失了。所以 mse 做损失函数的时候最后一层不能用 sigmoid 做激活函数,其他层可以用 sigmoid 做激活函数。。简而言之,如果使用 MSE 损失函数训练二分类模型,则不能保证将损失函数最小化。这是因为 MSE 函数期望实数输入在范围$(-\infin, \infin)$中,而二分类模型通过 Sigmoid 函数输出范围为$(0, 1)$的概率。

当将一个无界的值传递给 MSE 函数时,在目标值 处有一个明确最小值的情况下,会形成一条漂亮的 U 形(凸)曲线。另一方面,当将来自 Sigmoid 等函数的有界值传递给 MSE 函数时,可能会导致结果并不是凸的。

当然,用其他损失函数只能保证在第一步不会直接死掉,反向传播如果激活函数和归一化做得不好,同样会梯度消失。所以从梯度这个原因说 mse 不好不是很正确。

用交叉熵损失函数后还会有梯度消失的问题吗?

梯度消失问题存在 2 个地方:

  • 1.损失函数对权值 w 求导,这是误差反向传播的第一步,mse 的损失函数会在损失函数求导这一个层面上就导致梯度消失;所以使用交叉熵损失函数。

  • 2.误差反向传播时,链式求导也会使得梯度消失。使用交叉熵损失函数也不能避免反向传播带来的梯度消失,此时规避梯度消失的方法:

    • ReLU 等激活函数;
    • 输入归一化、每层归一化;
    • 网络结构上调整,比如 LSTM、GRU 等深度神经网络,不管用什么损失函数,隐含层的激活函数如果用 sigmoid,肯定会梯度消失,训练无效。如果是浅层神经网络,影响可能不是很大,和神经网络的输入有关,如果输入经过了归一化,结果靠谱,如果没有归一化,梯度也直接消失,训练肯定失败。

损失函数和激活函数决定的是模型会不会收敛,也影响训练速度;优化器决定的是模型能不能跳出局部极小值、跳出鞍点、能不能快速下降这些问题的。

LSTM 原理

LSTM 是循环神经网络 RNN 的变种,其包含三个门,分别是输入门遗忘门输出门

LSTM 与 GRU 的区别

  • GRU 只有两个门(update 和 reset),LSTM 有三个门(forget, input, output),GRU 直接将hidden state传给下一个单元,而 LSTM 用 memory cell 把hidden state包装起来。
  • LSTM 和 GRU 的性能在很多任务上不分伯仲。
  • GRU 的参数更少,因此更容易收敛,但在大数据集上,LSTM 性能表现更好。

Transformer 的原理

Transformer 本身是一个典型的 encoder-decoder 模型,Encoder 端和 Decoder 端均有 6 个 Block,Encoder 端的 Block 包括两个模块,多头 self-attention 模块以及一个前馈神经网络模块;Decoder 端的 Block 包括三个模块,多头 self-attention 模块,多头 Encoder-Decoder attention 交互模块,以及一个前馈神经网络模块;需要注意:Encoder 端和 Decoder 端中的每个模块都有残差层和 Layer Normalization 层。

Transformer 的计算公式,QKV 怎么得到

QKV 分别是由输入 X 通过线性变换得到的。

$$
Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
$$

multi-head 的作用

多次 attention 综合的结果至少能够起到增强模型的作用,也可以类比 CNN 中同时使用多个卷积核的作用,直观上讲,多头的注意力有助于网络捕捉到更丰富的特征/信息。

residual 连接

在 transformer 的 encoder 和 decoder 中,各用到了 6 层的 attention 模块,每一个 attention 模块又和一个 FeedForward 层(简称 FFN)相接。对每一层的 attention 和 FFN,都采用了一次残差连接,即把每一个位置的输入数据和输出数据相加,使得 Transformer 能够有效训练更深的网络。在残差连接过后,再采取 Layer Nomalization 的方式。

resnet 的思想:残差模块能让训练变得更加简单,如果输入值和输出值的差值过小,那么可能梯度会过小,导致出现梯度小时的情况,残差网络的好处在于当残差为 0 时,改成神经元只是对前层进行一次线性堆叠,使得网络梯度不容易消失,性能不会下降。

relu 的公式和优缺点,relu 在 0 的位置可导吗,不可导怎么处理

$$
relu(x) = max(x, 0)
$$

优点:

  • 解决了梯度消失、爆炸的问题
  • 计算方便,计算速度快,求导方便
  • 加速网络训练

缺点包括:

  • 由于负数部分恒为 0,会导致一些神经元无法激活
  • 输出不是以 0 为中心

由于 relu 函数的左导数和右导数不相等,所以其不可导。针对这种类型的激活函数,可以使用次梯度来解决。

次梯度方法(subgradient method)是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。

$$
c \le \frac{f(x) - f(x_0)}{x - x_0}
$$

对于 relu 函数,当 x>0 时,导数为 1,当 x<0 时导数为 0。因此 relu 函数在 x=0 的次梯度 c ∈ [ 0 , 1 ],c 可以取[0,1]之间的任意值。

如何处理神经网络中的过拟合问题?

  • L1/L2 正则化
  • dropout
  • data argumentation
  • early stop

L1/L2 正则化的区别

在 L1 规范化中,权重通过一个常量向 0 进行缩小;在 L2 规范化中,权重通过一个和 w 成比例的量进行缩小
当一个特定的权重绝对值|w|很大时,L1 规范化的权重缩小要比 L2 规范化小很多;当一个特定的权重绝对值|w|很小时,L1 规范化的权重缩小要比 L2 规范化大很多
L1 规范化倾向于聚集网络的权重在相对少量的高重要度的连接上,而其他权重会被驱使向 0 接近
在 w=0 处偏导数不存在,此时使用无规范化的随机梯度下降规则,因为规范化的效果是缩小权重,不能对一个已经是 0 的权重进行缩小

神经网络都有哪些正则化操作?BN 和 LN 分别用在哪?

最常用的正则化技术是 dropout,随机的丢掉一些神经元。还有数据增强,早停,L1 正则化,L2 正则化等。

  • Batch Normalization 是对这批样本的同一维度特征做归一化.
  • Layer Normalization 是对这单个样本的所有维度特征做归一化。

BN 用在图像较多,LN 用在文本较多。

Attention 和全连接的区别是啥?

Attention 的最终输出可以看成是一个“在关注部分权重更大的全连接层”。但是它与全连接层的区别在于,注意力机制可以利用输入的特征信息来确定哪些部分更重要。

全连接的作用的是对一个实体进行从一个特征空间到另一个特征空间的映射,而注意力机制是要对来自同一个特征空间的多个实体进行整合。全连接的权重对应的是一个实体上的每个特征的重要性,而注意力机制的输出结果是各个实体的重要性。比如说,一个单词“love”在从 200 维的特征空间转换到 100 维的特征空间时,使用的是全连接,不需要注意力机制,因为特征空间每一维的意义是固定的。而如果我们面对的是词组“I love you”,需要对三个 200 维的实体特征进行整合,整合为一个 200 维的实体,此时就要考虑到实体间的位置可能发生变化,我们下次收到的句子可能是“love you I”,从而需要一个与位置无关的方案。

BP 算法及推导

BP 算法是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

反向传播要求有对每个输入值期望得到的已知输出,来计算损失函数的梯度。因此,它通常被认为是一种监督式学习方法,虽然它也用在一些无监督网络(如自动编码器)中。它是多层前馈网络的 Delta 规则的推广,可以用链式法则对每层迭代计算梯度。反向传播要求人工神经元(或“节点”)的激励函数可微

BP 算法

BP 网络的结构降法的基础上。BP 网络的输入输出关系实质上是一种映射关系:一个 输入 m 输出的 BP 神经网络所完成的功能是从 一维欧氏空间向 m 维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是 BP 算法得以应用的基础。

反向传播算法主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。

BP 算法的学习过程由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,网络的学习在权值修改过程中完成。误差达到所期望值时,网络学习结束。

推导

$$
z^l = W^la^{l-1} + b^l \
a^l = \sigma(z^l)
$$

其中,$z^l$表示第$l$层$(l=1,2,…,L)$经过激活函数之前的输出,而$a^l$表示第 l 层经过激活函数之后的输出,$\sigma$表示激活函数。

定义误差函数:

$$
C=\frac{1}{2}\left|a^{L}-y\right|_{2}^{2}
$$

其中,$L$代表多层感知机总的层数, $a^L$表示多层感知机第$L$层经过激活函数后的输出,即神经网络所预测的输出值。而 y 是训练数据中对应输入 x 实际的输出值 y。

为了方便进一步的计算推导,以及避免重复计算,我们引入一个中间量$\delta^l$,我们称它为第 l 层的 delta 误差,表示误差函数对于神经网络第 l 层激活前输出值的偏导数,即$\delta^l = \frac{\partial C}{\partial z^l}$。

$$
\delta^{L}=\frac{\partial C}{\partial z^{L}}=\frac{\partial C}{\partial a^{L}} \frac{\partial a^{L}}{\partial z^{L}}=\left(a^{L}-y\right) \odot \sigma^{\prime}\left(z^{L}\right)
$$

求得了输出层的 delta 误差,误差函数 C 对于输出层参数的导数,即对权重矩阵以及偏置项的导数可通过输出层的 delta 误差求得如下,这里使用了求导的链式法则

$$
\frac{\partial C}{\partial W^{L}}=\frac{\partial C}{\partial z^{L}} \frac{\partial z^{L}}{\partial W^{L}}=\delta^{L}\left(a^{L-1}\right)^{T} \
\frac{\partial C}{\partial b^{L}}=\frac{\partial C}{\partial z^{L}} \frac{\partial z^{L}}{\partial b^{L}}=\delta^{L} \odot \mathbf{1}=\delta^{L}
$$

我们可以很容易看到,一旦求出了当前层的 delta 误差,误差函数对当前层各参数的导数便可以相应的求出。

得到了最后一层的 delta 误差,我们接下来需要将 delta 误差逆向传播,即不断地根据后一层的 delta 误差求得前一层的 delta 误差,最终求得每一层的 delta 误差。其实在这里我们主要利用的是求导的链式法则。假设我们已经求得第 l+1 层的 delta 误差,我们可以将第 l 层的 delta 误差表示如下

$$
\delta^{l}=\frac{\partial C}{\partial z^{l}}=\frac{\partial C}{\partial z^{l+1}} \frac{\partial z^{l+1}}{\partial z^{l}}=\delta^{l+1} \frac{\partial z^{l+1}}{\partial z^{l}}
$$

因为

$$
z^{l + 1} = W^{l + 1} a^l + b^{l + 1} = W^{l + 1}\sigma(z^l) + b^{l + 1}
$$

所以

$$
\delta^{l} = (W^{l + 1})^T\delta^{l + 1} \odot\sigma^{\prime}(z^l)
$$

在求得每一层的 delta 误差后,我们可以很容易地求出误差函数 C 对于每一层参数的梯度:

$$
\frac{\partial C}{\partial W^{l}}=\frac{\partial C}{\partial z^{l}} \frac{\partial z^{l}}{\partial W^{l}}=\delta^{l}\left(a^{l-1}\right)^{T} \
\frac{\partial C}{\partial b^{l}}=\frac{\partial C}{\partial z^{l}} \frac{\partial z^{l}}{\partial b^{l}}=\delta^{l} 1=\delta^{l}
$$

最后我们可以通过梯度下降法来对每一层的参数进行更新:

$$
W^{l} =W^{l}-\eta \frac{\partial C}{\partial W^{l}} \
b^{l} =b^{l}-\eta \frac{\partial C}{\partial b^{l}}
$$

梯度消失和梯度爆炸的问题是如何产生的?如何解决?

由于反向传播过程中,前面网络权重的偏导数的计算是逐渐从后往前累乘的,如果使用 sigmoid, tanh 激活函数的话,由于导数小于一,因此累乘会逐渐变小,导致梯度消失,前面的网络层权重更新变慢;如果权重 w 本身比较大,累乘会导致前面网络的参数偏导数变大,产生数值上溢。

因为 sigmoid 导数最大为 1/4,故只有当 abs(w)>4 时才可能出现梯度爆炸,因此最普遍发生的是梯度消失问题。

解决方法通常包括

  • 使用 ReLU 等激活函数,梯度只会为 0 或者 1,每层的网络都可以得到相同的更新速度
  • 采用 LSTM
  • 进行梯度裁剪(clip), 如果梯度值大于某个阈值,我们就进行梯度裁剪,限制在一个范围内
  • 使用正则化,这样会限制参数 w 的大小,从而防止梯度爆炸
  • 设计网络层数更少的网络进行模型训练
  • batch normalization

语言模型中,Bert 为什么在 masked language model 中采用了 80%、10%、10%的策略?

如果训练的时候 100%都是 Mask,那么在 fine-tune 的时候,所有的词时候已知的,不存在[Mask],那么模型就只知道根据其他词的信息来预测当前词,而不会直接利用这个词本身的信息,会凭空损失一部分信息,对下游任务不利。

还有 10% random token 是因为如果都用原 token,模型在预训练时可能会偷懒,不去建模单词间的依赖关系,直接照抄当前词

[MASK] 是以一种显式的方式告诉模型『这个词我不告诉你,你自己从上下文里猜』,从而防止信息泄露。如果 [MASK] 以外的部分全部都用原 token,模型会学到『如果当前词是 [MASK],就根据其他词的信息推断这个词;如果当前词是一个正常的单词,就直接抄输入』。这样一来,在 finetune 阶段,所有词都是正常单词,模型就照抄所有词,不提取单词间的依赖关系了。

以一定的概率填入 random token,就是让模型时刻堤防着,在任意 token 的位置都需要把当前 token 的信息和上下文推断出的信息相结合。这样一来,在 finetune 阶段的正常句子上,模型也会同时提取这两方面的信息,因为它不知道它所看到的『正常单词』到底有没有被动过手脚的。

Bert 现有的问题有哪些?

  • Bert 模型过于庞大,参数太多,无论是 feature-based approach 还是 fine-tune approach 都很慢;而且因为表示是上下文相关的,上线的应用需要实时处理,时间消耗太大;
  • Bert 给出来的中文模型中,是以字为基本单位的,很多需要词向量的应用无法直接使用;同时该模型无法识别很多生僻词,都是 UNK;
  • Bert 模型作为自回归模型,由于模型结构的问题,无法给出句子概率值

非平衡数据集的处理方法有哪些?

  • 采用更好的评价指标,例如 F1、AUC 曲线等,而不是 Recall、Precision
  • 进行过采样,随机重复少类别的样本来增加它的数量;
  • 进行欠采样,随机对多类别样本降采样
  • 通过在已有数据上添加噪声来生成新的数据
  • 修改损失函数,添加新的惩罚项,使得小样本的类别被判断错误的损失增大,迫使模型重视小样本的数据
  • 使用组合/集成方法解决样本不均衡,在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果;

交叉熵损失与 KL 散度的区别

KL 散度是相对熵(relative entropy),用来衡量两个概率分布之间的差异,对于两个概率分布 $p(x), q(x)$ ,其中 $p(x)$ 是真实概率分布,而 $q(x)$ 是数据计算得到的概率分布,其相对熵的计算公式为:

$$
K L(p | q)=-\int p(x) \ln q(x) d x-\left(\int p(x) \ln p(x) d x\right)
$$

当且仅当$p(x) == q(x)$时,其值为 0;其前半部分$-\int p(x) \ln q(x) d x$为交叉熵的表达公式,或者说相对熵等于交叉熵减去数据真实分布的熵。
由于真实的概率分布是固定的,因此公式中的后半部分是常数,所以优化交叉熵损失也等效于优化相对熵损失。

熵、条件熵、互信息、相对熵

熵是一个随机变量不确定性的度量。对于一个离散型变量,定义为:

$$
H(x) = -\sum_{x\in X}p(x)\log{p(x)}
$$

一个随机性变量的熵越大,就表示不确定性越大,也就是说随机变量包含的信息量越大。
熵只依赖于$X$的分布,与$X$的取值无关。

条件熵

条件熵 $H(Y|X)$ 表示在已知随机变量 $X$ 的条件下随机变量 $Y$ 的不确定性,$H(Y|X)$ 定义为在给定条件 $X$ 下,$Y$ 的条件概率分布的熵对 $X$ 的数学期望:

$$
H(Y\mid X) = \sum_{x\in X}p(x)H(Y\mid X=x)
$$

互信息

互信息表示在得知 $Y$ 后,原来信息量减少了多少。

$$
I(X;Y) = \sum_{x\in X}\sum_{y\in Y}p(x, y)\log{\frac{p(x, y)}{p(x)p(y)}} \
I(X;Y) = H(X) - H(X\mid Y) = H(Y) - H(Y\mid X)
$$

如果$X$与$Y$相互独立,则互信息为 0。

相对熵

KL 散度(Kullback-Leibler divergence)和相对熵是等价的,KL 散度是两个概率分布 P 和 Q 差别的非对称性的度量。KL 散度越小表示两个分布越接近。也就是说 KL 散度是不对称的,且 KL 散度的值是非负数。

$$
D_{KL}(P//Q) = -\int{p(x)\log{q(x)}dx} - (- \int{p(x)\log{q(x)}dx}) = -\int{p(x)\log[\frac{q(x)}{p(x)}]dx}
\
D_{KL}(P//Q) = - \sum_{x\in X}p(x)log(q(x)) - (-\sum_{x\in X}p(x)log(p(x)))
$$

显然$D_{KL}(P//Q)$不等于$D_{KL}(Q//P)$,即 KL 散度不是一个对称量。

JS 散度是基于 KL 散度的变种,度量了两个概率分布的相似度,解决了 KL 散度的非对称问题。如果两个分配 P,Q 离得很远,完全没有重叠的时候,那么 KL 散度值是没有意义的,而 JS 散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为 0。梯度消失了。

$$
J S\left(P_{1} | P_{2}\right)=\frac{1}{2} K L\left(P_{1} | \frac{P_{1}+P_{2}}{2}\right)+\frac{1}{2} K L\left(P_{2} | \frac{P_{1}+P_{2}}{2}\right)
$$

机器学习泛化能力评测指标

泛化能力是模型对未知数据的预测能力。

分类问题

  • 准确率:分类正确的样本占总样本的比例
    准确率的缺陷:当正负样本不平衡比例时,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。

  • 召回率:分类正确的正样本个数占实际的正样本个数的比例。

  • F1 score:是精确率和召回率的调和平均数,综合反应模型分类的性能。
    Precision 值和 Recall 值是既矛盾又统一的两个指标,为了提高 Precision 值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保 守而漏掉很多“没有把握”的正样本,导致 Recall 值降低。

    ROC 曲线的横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性 率(True Positive Rate,TPR)。FPR 和 TPR 的计算方法分别为

  • 精确度(precision)/查准率:TP/(TP+FP)=TP/P 预测为真中,实际为正样本的概率 s

  • 召回率(recall)/查全率:TP/(TP+FN) 正样本中,被识别为真的概率

  • 假阳率(False positive rate):FPR = FP/(FP+TN) 负样本中,被识别为真的概率

  • 真阳率(True positive rate):TPR = TP/(TP+FN) 正样本中,能被识别为真的概率

  • 准确率(accuracy):ACC =(TP+TN)/(P+N) 所有样本中,能被正确识别的概率

    上式中,P 是真实的正样本的数量,N 是真实的负样本的数量,TP 是 P 个正样本中被分类器预测为正样本的个数,FP 是 N 个负样本中被分类器预测为正样本的个数。

    AUC:AUC 是 ROC 曲线下面的面积,AUC 可以解读为从所有正例中随机选取一个样本 A,再从所有负例中随机选取一个样本 B,分类器将 A 判为正例的概率比将 B 判为正例的概率大的可能性。AUC 反映的是分类器对样本的排序能力。AUC 越大,自然排序能力越好,即分类器将越多的正例排在负例之前。

  • F1-score:在多分类问题中,如果要计算模型的 F1-score,则有两种计算方式,分别为微观micro-F1宏观macro-F1,这两种计算方式在二分类中与 F1-score 的计算方式一样,所以在二分类问题中,计算 micro-F1=macro-F1=F1-score,micro-F1 和 macro-F1 都是多分类 F1-score 的两种计算方式。

    micro-F1:计算方法:先计算所有类别的总的 Precision 和 Recall,然后计算出来的 F1 值即为 micro-F1;

    使用场景:在计算公式中考虑到了每个类别的数量,所以适用于数据分布不平衡的情况;但同时因为考虑到数据的数量,所以在数据极度不平衡的情况下,数量较多数量的类会较大的影响到 F1 的值;

    marco-F1:计算方法:将所有类别的 Precision 和 Recall 求平均,然后计算 F1 值作为 macro-F1;

    使用场景:没有考虑到数据的数量,所以会平等的看待每一类(因为每一类的 precision 和 recall 都在 0-1 之间),会相对受高 precision 和高 recall 类的影响较大。

回归问题

  • RMSE(Root Mean Square Error, 均方根误差):

    $$
    RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(\hat{y_i} - y_i)^2}
    $$

    RMSE 经常被用来衡量回归模型的好坏。RMSE 能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点 数量非常少,也会让 RMSE 指标变得很差。

  • MAPE(Mean Absolute Percentage Error):

    $$
    M A P E=\frac{100 %}{n} \sum_{i=1}^{n}\left|\frac{\hat{y}{i}-y{i}}{y_{i}}\right|
    $$

    引入别的评价指标,MAPE,平均绝对百分比误差。相比 RMSE,MAPE 相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

bagging、boosting、stacking 的异同

Bagging 算法(套袋发)

bagging 的算法过程如下:

从原始样本集中使用 Bootstraping 方法随机抽取 n 个训练样本,共进行 k 轮抽取,得到 k 个训练集(k 个训练集之间相互独立,元素可以有重复)。

对于 n 个训练集,我们训练 k 个模型,(这个模型可根据具体的情况而定,可以是决策树,knn 等)

对于分类问题:由投票表决产生的分类结果;对于回归问题,由 k 个模型预测结果的均值作为最后预测的结果(所有模型的重要性相同)。

Boosting(提升法)

boosting 的算法过程如下:

对于训练集中的每个样本建立权值 wi,表示对每个样本的权重, 其关键在与对于被错误分类的样本权重会在下一轮的分类中获得更大的权重(错误分类的样本的权重增加)。

同时加大分类 误差概率小的弱分类器的权值,使其在表决中起到更大的作用,减小分类误差率较大弱分类器的权值,使其在表决中起到较小的作用。每一次迭代都得到一个弱分类器,需要使用某种策略将其组合,最为最终模型,(adaboost 给每个迭代之后的弱分类器一个权值,将其线性组合作为最终的分类器,误差小的分类器权值越大。)

Bagging 和 Boosting 的主要区别

样本选择上: Bagging 采取 Bootstraping 的是随机有放回的取样,Boosting 的每一轮训练的样本是固定的,改变的是买个样的权重。

样本权重上:Bagging 采取的是均匀取样,且每个样本的权重相同,Boosting 根据错误率调整样本权重,错误率越大的样本权重会变大

预测函数上:Bagging 所以的预测函数权值相同,Boosting 中误差越小的预测函数其权值越大。

并行计算: Bagging 的各个预测函数可以并行生成;Boosting 的各个预测函数必须按照顺序迭代生成。

Focal loss

针对样本不均衡问题提的出损失函数。

二分类交叉熵损失函数:

$$
CE = \left{\begin{array}{rlr}
-\log §, & \text { if } & y=1 \
-\log (1-p), & \text { if } & y=0
\end{array}\right.
$$

为了解决正负样本不平衡的问题,在交叉熵损失的前面加上一个参数$\alpha$:

$$
CE = \left{\begin{array}{rlr}
-\alpha\log §, & \text { if } & y=1 \
-(1-\alpha)\log (1-p), & \text { if } & y=0
\end{array}\right.
$$

尽管$\alpha$平衡了正负样本,但对难易样本的不平衡没有任何帮助。而实际上,目标检测中大量的候选目标都是像下图一样的易分样本。这些样本的损失很低,但是由于数量极不平衡,易分样本的数量相对来讲太多,最终主导了总的损失。而本文的作者认为,易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本(这个假设是有问题的,是 GHM 的主要改进对象)

Focal Loss 的思想:把高置信度§样本的损失再降低一些。

$$
FL = \left{\begin{array}{rll}
-\alpha(1-p)^{\gamma} \log §, & \text { if } & y=1 \
-(1-\alpha) p^{\gamma} \log (1-p), & \text { if } & y=0
\end{array}\right.
$$