F1-Score相关概念
F1分数(F1 Score),是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0,值越大意味着模型越好。假如有100个样本,其中1个正样本,99个负样本,如果模型的预测只输出0,那么正确率是99%,这时候用正确率来衡量模型的好坏显然是不对的。<br />
查准率(precision),指的是预测值为1且真实值也为1的样本在预测值为1的所有样本中所占的比例。以西瓜问题为例,算法挑出来的西瓜中有多少比例是好西瓜。

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

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

更一般的,我们定义Fβ分数为:
除了F1分数之外,F0.5分数和F2分数,在统计学中也得到了大量应用,其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率。
Macro-F1和Micro-F1
Macro-F1和Micro-F1是相对于多标签分类而言的。<br /><br />
方差与偏差
假设有如下未知的曲线(用虚线画出表示我们并不真正清楚该曲线的具体方程),因为未知,所以下面称为“上帝曲线”。在“上帝曲线”的附近会产生一些随机数据,这就是之后要用到的数据集:
下面会通过该数据集来解释下什么是机器学习中的“偏差”和“方差”。
1 “偏差”
我们可以选择不同复杂度的模型来拟合该数据集,比如线性回归,或者多项式回归:
可以看到线性回归比较简单,和“上帝曲线”相差较大,也就是“偏差”较大。而多项式回归可以较好的拟合“上帝曲线”,所以说该模型的“偏差”较小。
2 “方差”
数据集是有随机性的,除了上一节使用的数据集外,我们还可能得到如右侧这样新的数据集:
在新的数据集上当然也可以运用线性回归,或者多项式回归:
可见,较简单的线性回归变化不大,也就是说“方差”较小。而多项式回归对数据太敏感,变化太大,也就是说“方差”较大。因此带来的后果是,修改数据后对“上帝曲线”的拟合很糟糕。
3 “欠拟合”和“过拟合”
综上,可以知道“偏差”和“方差”对机器学习的影响是:
(1)“欠拟合”:较简单的模型“偏差”较大,不能对数据集进行很好的拟合,从而与“上帝曲线”相差较大,这在机器学习中称为“欠拟合”。解决方案是选择“偏差”小的模型,即复杂度高的模型。
(2)“过拟合”:复杂的模型,可以较好地拟合当前数据集,但由于“方差”较大,反而和“上帝曲线”相距较远,这在机器学习中称为“过拟合”。解决方案是选择“方差”小的模型,即复杂度低的模型。
所以我们要选择恰当的复杂度的模型,其“偏差”和“方差”也都适度,才能“适度拟合”:
过拟合
过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
例如,其中
为权重向量。
,随着x指数变大,其导数的系数变大。
L1正则化和L2正则化
为什么正则化能够降低过拟合?
如果发生过拟合, 参数一般是比较大的值, 加入惩罚项后, 只要控制C的大小,当C很大时,
到
就会很小,即达到了约束数量庞大的特征的目的。
例如【1.过拟合】中的例子,如果和
都为0,则能使模型复杂度降低,导数也会变小。
为什么L1正则会产生稀疏解呢?
L1和L2正则常被用来解决过拟合问题。而L1正则也常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,将0对应的特征遗弃,进而用来选择特征。
假设只有一个参数为,损失函数为
,分别加上L1正则项和L2正则项后有:

假设在0处的导数为
,即

则可以推导使用L1正则和L2正则时的导数。
引入L2正则项,在0处的导数
引入L1正则项,在0处的导数
可见,引入L2正则时,代价函数在0处的导数仍是,无变化。而引入L1正则后,代价函数在0处的导数有一个突变。从 d 0 + λ到 d 0 − λ ,若 d 0 + λ和 d 0 − λ 异号,则在0处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即 w = 0 处。两种 regularization 能不能把最优的 x 变成 0,取决于原先的费用函数在 0 点处的导数。
L1和L2正则化比较
- L2 regularizer :使得模型的解偏向于范数较小的 W,通过限制 W 范数的大小实现了对模型空间的限制,从而在一定程度上避免了过拟合(因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』) 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。
- L1 regularizer :它的优良性质是能产生稀疏性,导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有“可解释性”。
激活函数
激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。作用是为了增加深度网络模型的非线性变化。
sigmod函数

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

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

函数表达式:
导数:
ReLU函数的优点:
在输入为正数的时候(对于大多数输入 z 空间来说),不存在梯度消失问题。
计算速度要快很多。ReLU线性关系(sigmod和tanh计算指数,计算速度会比较慢)
ReLU函数的缺点:
当输入为负时,梯度为0,会产生梯度消失问题。
Leaky ReLU函数
ELU函数
Softmax函数
KL散度和交叉熵的关系
1 信息量
一条信息的信息量大小和它的不确定性有很大的关系。一句话如果需要很多外部信息才能确定,我们就称这句话的信息量比较大。比如你听到“云南西双版纳下雪了”,那你需要去看天气预报、问当地人等等查证(因为云南西双版纳从没下过雪)。相反,如果和你说“人一天要吃三顿饭”,那这条信息的信息量就很小,因为条信息的确定性很高。
那我们就能将事件x_0的信息量定义如下(其中p(x_0)表示事件x_0发生的概率):

2 熵
信息量是对于单个事件来说的,但是实际情况一件事有很多种发生的可能,比如掷骰子有可能出现6种情况,明天的天气可能晴、多云或者下雨等等。熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。公式如下:
n表示事件可能发生的情况总数
其中一种比较特殊的情况就是掷硬币,只有正、反两种情况,该种情况(二项分布或者0-1分布)熵的计算可以简化如下:
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散度的公式如下:
n表示事件可能发生的情况总数
KL散度的值越小表示两个分布越接近。
4 交叉熵
我们将KL散度的公式进行变形,得到:
前半部分就是p(x)的熵,后半部分就是我们的交叉熵:
机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的。
为什么分类问题的损失函数采用交叉熵而不是均方误差MSE?
假设给定输入为x,label为y,其中y的取值为0或者1,是一个分类问题。我们要训练一个最简单的Logistic Regression来学习一个函数f(x)使得它能较好的拟合label,如下图所示。

其中 ,
。
也即,我们要学的函数 。目标为使a(x)与label y越逼近越好。
- 最小均方误差,MSE(Mean Squared Error)Loss
- 交叉熵误差CEE(Cross Entropy Error)Loss
我们想衡量模型输出a和label y的逼近程度,其实这两个Loss都可以。但是为什么Logistic Regression采用的是交叉熵作为损失函数呢?看下这两个Loss function对w的导数,也就是SGD梯度下降时,w的梯度。
- 最小均方差
- 交叉熵
由于,则:
sigmoid函数 如下图所示,可知的导数
在输出接近 0 和 1 的时候是非常小的,故导致在使用最小均方差Loss时,模型参数w会学习的非常慢。而使用交叉熵Loss为sigmod函数与实际值之间的差,例如y=1,当a接近0时,此时误差大,梯度也大;当a接近1时,此时误差小,梯度也小。所以为了更快的学习速度,分类问题一般采用交叉熵损失函数。

当label = 1,也即 ,交叉熵损失函数
如图所示,可知交叉熵损失函数的值域为
Dropout原理
Dropout在神经网络中的使用
(1)在训练模型阶段
无可避免的,在训练网络的每个单元都要添加一道概率流程。
图4:标准网络和带有Dropout网络的比较
对应的公式变化如下:
- 没有Dropout的网络计算公式:

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

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




