F1-Score相关概念

  1. F1分数(F1 Score),是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0,值越大意味着模型越好。假如有100个样本,其中1个正样本,99个负样本,如果模型的预测只输出0,那么正确率是99%,这时候用正确率来衡量模型的好坏显然是不对的。<br />![图片.png](https://cdn.nlark.com/yuque/0/2021/png/22690403/1632548441319-af1e6c8d-2dc9-4b7b-8aa6-e496ca9626eb.png#clientId=u1c31805f-89ef-4&from=paste&height=122&id=uc01f339f&name=%E5%9B%BE%E7%89%87.png&originHeight=162&originWidth=1184&originalType=binary&ratio=1&size=26309&status=done&style=none&taskId=uc9f195c7-f467-4d91-a678-4af2091e87b&width=888)
  • 查准率(precision),指的是预测值为1且真实值也为1的样本在预测值为1的所有样本中所占的比例。以西瓜问题为例,算法挑出来的西瓜中有多少比例是好西瓜。

    图片.png

  • 召回率(recall),也叫查全率,指的是预测值为1且真实值也为1的样本在真实值为1的所有样本中所占的比例。所有的好西瓜中有多少比例被算法挑了出来。

图片.png

  • F1分数(F1-Score),又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。

    图片.png
    更一般的,我们定义Fβ分数为:
    图片.png
    除了F1分数之外,F0.5分数和F2分数,在统计学中也得到了大量应用,其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率。

Macro-F1和Micro-F1

  1. Macro-F1Micro-F1是相对于多标签分类而言的。<br />![图片.png](https://cdn.nlark.com/yuque/0/2021/png/22690403/1632548399295-04073fb6-ef1b-4a7a-888b-dd50521f8551.png#clientId=u1c31805f-89ef-4&from=paste&height=242&id=ua13f6968&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=484&originWidth=793&originalType=binary&ratio=1&size=101247&status=done&style=none&taskId=u92fc1375-46e3-409f-b67e-0997c01f183&width=396.5)<br />![图片.png](https://cdn.nlark.com/yuque/0/2021/png/22690403/1632548365650-bbdec3fb-a7fb-4524-8394-5bf6b89e9a6b.png#clientId=u1c31805f-89ef-4&from=paste&height=191&id=u7823e041&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=381&originWidth=1054&originalType=binary&ratio=1&size=85787&status=done&style=none&taskId=u24193464-a0f6-45f6-b6ba-46fee2e0b97&width=527)

方差与偏差

假设有如下未知的曲线(用虚线画出表示我们并不真正清楚该曲线的具体方程),因为未知,所以下面称为“上帝曲线”。在“上帝曲线”的附近会产生一些随机数据,这就是之后要用到的数据集:
image.png
下面会通过该数据集来解释下什么是机器学习中的“偏差”和“方差”。
1 “偏差”
我们可以选择不同复杂度的模型来拟合该数据集,比如线性回归,或者多项式回归:
image.png
可以看到线性回归比较简单,和“上帝曲线”相差较大,也就是“偏差”较大。而多项式回归可以较好的拟合“上帝曲线”,所以说该模型的“偏差”较小。
2 “方差”
数据集是有随机性的,除了上一节使用的数据集外,我们还可能得到如右侧这样新的数据集:
image.png
在新的数据集上当然也可以运用线性回归,或者多项式回归:
image.png
可见,较简单的线性回归变化不大,也就是说“方差”较小。而多项式回归对数据太敏感,变化太大,也就是说“方差”较大。因此带来的后果是,修改数据后对“上帝曲线”的拟合很糟糕。
3 “欠拟合”和“过拟合”
综上,可以知道“偏差”和“方差”对机器学习的影响是:
(1)“欠拟合”:较简单的模型“偏差”较大,不能对数据集进行很好的拟合,从而与“上帝曲线”相差较大,这在机器学习中称为“欠拟合”。解决方案是选择“偏差”小的模型,即复杂度高的模型。
(2)“过拟合”:复杂的模型,可以较好地拟合当前数据集,但由于“方差”较大,反而和“上帝曲线”相距较远,这在机器学习中称为“过拟合”。解决方案是选择“方差”小的模型,即复杂度低的模型。
所以我们要选择恰当的复杂度的模型,其“偏差”和“方差”也都适度,才能“适度拟合”:
image.png

过拟合

过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
例如机器学习基础 - 图10,其中机器学习基础 - 图11为权重向量。机器学习基础 - 图12,随着x指数变大,其导数的系数变大。
图片.png

L1正则化和L2正则化

图片.png

为什么正则化能够降低过拟合?

如果发生过拟合, 参数机器学习基础 - 图15一般是比较大的值, 加入惩罚项后, 只要控制C的大小,当C很大时,机器学习基础 - 图16机器学习基础 - 图17就会很小,即达到了约束数量庞大的特征的目的。
例如【1.过拟合】中的例子,如果机器学习基础 - 图18机器学习基础 - 图19都为0,则能使模型复杂度降低,导数也会变小。

为什么L1正则会产生稀疏解呢?

L1和L2正则常被用来解决过拟合问题。而L1正则也常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,将0对应的特征遗弃,进而用来选择特征。

假设只有一个参数为机器学习基础 - 图20,损失函数为机器学习基础 - 图21,分别加上L1正则项和L2正则项后有:
图片.png

假设机器学习基础 - 图23在0处的导数为机器学习基础 - 图24,即
图片.png
则可以推导使用L1正则和L2正则时的导数。
引入L2正则项,在0处的导数
图片.png
引入L1正则项,在0处的导数
图片.png
可见,引入L2正则时,代价函数在0处的导数仍是机器学习基础 - 图28,无变化。而引入L1正则后,代价函数在0处的导数有一个突变。从 d 0 + λ到 d 0 − λ ,若 d 0 + λ和 d 0 − λ 异号,则在0处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即 w = 0 处。两种 regularization 能不能把最优的 x 变成 0,取决于原先的费用函数在 0 点处的导数。

L1和L2正则化比较

  1. L2 regularizer :使得模型的解偏向于范数较小的 W,通过限制 W 范数的大小实现了对模型空间的限制,从而在一定程度上避免了过拟合(因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』) 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。
  2. L1 regularizer :它的优良性质是能产生稀疏性,导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有“可解释性”。

激活函数

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。作用是为了增加深度网络模型的非线性变化。

sigmod函数

图片.png
函数表达式:
图片.png
导数:
图片.png
应用:
· Sigmoid 函数的输出范围是 0 到 1。因此它对每个神经元的输出进行了归一化;
· 用于将预测概率作为输出的模型。取值范围是 0 到 1。
· 梯度平滑,避免「跳跃」的输出值;
· 函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;
· 明确的预测,即非常接近 1 或 0。
缺点:
· 当Z值非常大或者非常小的时候,会导致其导数趋近于零,也就是权重的梯度趋近于零,即梯度消失。所以倾向于梯度消失;
· 函数输出不是以 0 为中心的,这会降低权重更新的效率;
· Sigmoid 函数执行指数运算,计算机运行得较慢。

Tanh双曲正切函数

图片.png
函数表达式:
图片.png
导函数:
图片.png
tanh 的输出间隔为 1,并且整个函数以 0 为中心,在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层。

ReLU函数

图片.png
函数表达式:
图片.png
导数:
图片.png
ReLU函数的优点:
在输入为正数的时候(对于大多数输入 z 空间来说),不存在梯度消失问题。
计算速度要快很多。ReLU线性关系(sigmod和tanh计算指数,计算速度会比较慢)
ReLU函数的缺点:
当输入为负时,梯度为0,会产生梯度消失问题。

Leaky ReLU函数

图片.png
函数表达式:
图片.png
导数:
图片.png

ELU函数

图片.png
函数表达式:
图片.png

Softmax函数

图片.png
函数表达式:
图片.png

KL散度和交叉熵的关系

1 信息量
一条信息的信息量大小和它的不确定性有很大的关系。一句话如果需要很多外部信息才能确定,我们就称这句话的信息量比较大。比如你听到“云南西双版纳下雪了”,那你需要去看天气预报、问当地人等等查证(因为云南西双版纳从没下过雪)。相反,如果和你说“人一天要吃三顿饭”,那这条信息的信息量就很小,因为条信息的确定性很高。
那我们就能将事件x_0的信息量定义如下(其中p(x_0)表示事件x_0发生的概率):
图片.png
图片.png
2 熵
信息量是对于单个事件来说的,但是实际情况一件事有很多种发生的可能,比如掷骰子有可能出现6种情况,明天的天气可能晴、多云或者下雨等等。熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。公式如下:
机器学习基础 - 图47
n表示事件可能发生的情况总数
其中一种比较特殊的情况就是掷硬币,只有正、反两种情况,该种情况(二项分布或者0-1分布)熵的计算可以简化如下:
机器学习基础 - 图48
p(x)代表掷正面的概率,1-p(x)则表示掷反面的概率(反之亦然)
3 相对熵
相对熵又称KL散度,用于衡量对于同一个随机变量x的两个分布p(x)和q(x)之间的差异。在机器学习中,p(x)常用于描述样本的真实分布,例如[1,0,0,0]表示样本属于第一类,而q(x)则常常用于表示预测的分布,例如[0.7,0.1,0.1,0.1]。显然使用q(x)来描述样本不如p(x)准确,q(x)需要不断地学习来拟合准确的分布p(x)。
KL散度的公式如下:
机器学习基础 - 图49
n表示事件可能发生的情况总数
KL散度的值越小表示两个分布越接近。
4 交叉熵
我们将KL散度的公式进行变形,得到:
机器学习基础 - 图50
前半部分就是p(x)的熵,后半部分就是我们的交叉熵:
机器学习基础 - 图51
机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的。

为什么分类问题的损失函数采用交叉熵而不是均方误差MSE?

假设给定输入为x,label为y,其中y的取值为0或者1,是一个分类问题。我们要训练一个最简单的Logistic Regression来学习一个函数f(x)使得它能较好的拟合label,如下图所示。

image.png
其中 机器学习基础 - 图53机器学习基础 - 图54
也即,我们要学的函数 机器学习基础 - 图55 。目标为使a(x)与label y越逼近越好。

  1. 最小均方误差,MSE(Mean Squared Error)Loss
    机器学习基础 - 图56
  2. 交叉熵误差CEE(Cross Entropy Error)Loss
    机器学习基础 - 图57

我们想衡量模型输出a和label y的逼近程度,其实这两个Loss都可以。但是为什么Logistic Regression采用的是交叉熵作为损失函数呢?看下这两个Loss function对w的导数,也就是SGD梯度下降时,w的梯度。

  1. 最小均方差
    机器学习基础 - 图58
  2. 交叉熵
    机器学习基础 - 图59
    由于 机器学习基础 - 图60 ,则:机器学习基础 - 图61

sigmoid函数 机器学习基础 - 图62 如下图所示,可知的导数机器学习基础 - 图63 在输出接近 0 和 1 的时候是非常小的,故导致在使用最小均方差Loss时,模型参数w会学习的非常慢。而使用交叉熵Loss为sigmod函数与实际值之间的差,例如y=1,当a接近0时,此时误差大,梯度也大;当a接近1时,此时误差小,梯度也小。所以为了更快的学习速度,分类问题一般采用交叉熵损失函数。
机器学习基础 - 图64
当label = 1,也即 机器学习基础 - 图65,交叉熵损失函数 机器学习基础 - 图66
如图所示,可知交叉熵损失函数的值域为 机器学习基础 - 图67
image.png

Dropout原理

Dropout在神经网络中的使用

(1)在训练模型阶段
无可避免的,在训练网络的每个单元都要添加一道概率流程。
image.png
图4:标准网络和带有Dropout网络的比较
对应的公式变化如下:

  • 没有Dropout的网络计算公式:

image.png

  • 采用Dropout的网络计算公式(y表示激活函数):

image.png
上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。
代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、……、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。
注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。
(2)在测试模型阶段
预测模型的时候,每一个神经单元的权重参数要乘以概率p
image.png
图5:预测模型时Dropout的操作
测试阶段Dropout公式:
机器学习基础 - 图73

为什么Dropout可以解决过拟合?

1)取平均的作用: 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
(2)减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
图片.png

生成式模型和判别式模型