ML | Loss function & Activation function

Loss function

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。

常见损失函数与优缺点

Zero-one loss

$$ L(Y,f(X))= \left\{\begin{matrix} 1,Y\neq f(X) \\ 0,Y=f(X)\end{matrix}\right. $$

  • 0-1损失函数直接对应了分类判断错误的个数,但它是非凸函数,不好优化
  • 感知机使用的即是该损失函数,但这个条件太严格,也可以放宽条件:

$$ L(Y,f(X))= \left\{\begin{matrix} 1,\left| Y-f(X)\right|\geq T \\ 0,\left| Y-f(X)\right|<T \end{matrix}\right. $$

绝对值损失函数

$$ L(Y,f(x))=\left|Y-f(x)\right| $$

log对数损失函数

$$ L(Y,P(Y|X))=-logP(Y|X) $$

  • log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合
  • 健壮性不强,相比于hinge loss对噪声更敏感
  • 逻辑回归的损失函数就是log对数损失函数

平方损失函数

$$ L(Y|f(X))=\sum_N(Y-f(X))^2 $$

  • 经常应用于回归问题

Exponential loss

$$ L(Y|f(X))=exp[-yf(x)] $$

  • 对离群点、噪声非常敏感,常用在AdaBoost算法(迭代算法,针对同一个训练集训练不同的分类器)中

Hinge

$$ L(y,f(x))=max(0,1-yf(x)) $$

  • 该式子表示,如果分类正确,那么损失为0,否则为\(1-yf(x)\),SVM支持向量机即选用该损失函数
  • 一般\(f(x)\)是预测值,在\((-1,1)\)之间,\(y\)则是目标值,其不鼓励分类器过度自信,即\(-1<f(x)<1\),让某个正确分类的样本距离分割线超过1不会有任何奖励,从而使分类器更加专注于整体误差
  • 健壮性较高,对异常点、噪声不敏感,无较好的概率解释

Perceptron loss 感知损失

$$ L(y,f(x))=max(0,-f(x)) $$

  • 是Hinge损失的变种,Hinge对判定边界附近的点惩罚力度很高,而perceptron loss只要样本的判定类别正确,它就满意,不管其判定边界的距离,其泛化能力没Hinge强

Cross-entropy loss function

$$ L=-\frac{1}{n}\sum_x[y\text{ln}a+(1-y)\text{ln}(1-a)] $$

其中,\(x\)表示样本,\(y\)表示实际的标签,\(a\)表示预测的输出,\(n\)表示样本总数

  • 本质是一种对数似然函数,可用于二分类和多分类中(输入数据是softmax或sigmoid函数的输出)

    • 二分类中

      $$ loss=-\frac{1}{n}\sum_x[y\text{ln}a+(1-y)\text{ln}(1-a)] $$

    • 多分类中

    $$ loss=-\frac 1 n \sum_i y_i\text{ln}a_i $$

  • 当使用sigmoid作为激活函数时,常用交叉熵损失函数而非均方误差损失函数,因其可完美解决均方损失函数权重更新过慢的问题,具有“误差大更新快,误差小更新慢”的良好性质
  • 均方误差损失函数(MSE)

$$ MSE(y,y')=\frac{\sum_{i=1}^n (y_i-y_i')^2}{n} $$

Activation function

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。

Sigmoid

$$ f(x)=\frac1 {1+e^{-z}} $$

  • 输出范围在0到1之间,由此可知其对每个神经元的输出进行了归一化
  • 用在把预测概率作为输出的模型中
  • 梯度平滑,避免跳跃输出
  • 函数可微,且是明确的预测
  • Drawbacks: 倾向于梯度消失、输出函数不以0为中心,会降低权重更新效率、执行指数运算,计算机运行速度慢

Softmax

$$ f(x)=\frac{e^{x_i}}{\sum_{j=1}^{K}e^{x_j}} $$

Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。

Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是 argmax函数的概率版本或「soft」版本。

Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。

Softmax激活函数的主要缺点是:

  • 在零点不可微;
  • 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

Tanh 双曲正切

$$ f(x)=tanh(x)=\frac 2 {1+e^{-2x}}-1 $$

  • 与Sigmoid函数相似,但具有一定的优势
  • 当输入较大或较小时,输出几乎是平滑的且梯度较小,不利于权重更新
  • tanh输出间隔为1,且整个函数以0为中心
  • 负输入也将被映射为负,而零输入被映射为0
  • 在一般二元分类问题中,tanh函数常用于隐藏层,而sigmoid函数常用于输出层,但也需要根据实际情况来进行调整

ReLU激活函数

$$ \sigma(x)= \left\{\begin{matrix} max(0,x),x\geq0 \\ 0,x<0\end{matrix}\right. $$

  • 输入为正时,不存在梯度饱和的问题
  • 计算速度很快,只存在线性关系
  • 但当输入为负时,其完全失效,在反向传播过程中如果输入负数则梯度将完全变0,这与sigmoid和tanh函数相似
  • 输出为0或正数,也不是以0为中心的函数

Leaky ReLU

$$ \sigma(x)= \left\{\begin{matrix} y_i,y_i>0 \\ a_iy_i,y_i\leq0\end{matrix}\right. $$

  • Leaky ReLU通过把x的非常小的线性分量给予负输入来调整负值的零梯度问题
  • leak有助于扩大ReLU函数的问题,通常a取0.01左右,使得其函数范围为负无穷到正无穷

ELU

$$ g(x)=ELU(x)=\left\{\begin{matrix} x,x>0 \\ \alpha(e^x-1),x\leq0\end{matrix}\right. $$

ELU 的提出也解决了 ReLU 的问题。与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。

显然,ELU 具有 ReLU 的所有优点,并且:

  • 没有 Dead ReLU 问题,输出的平均值接近 0,以 0 为中心;
  • ELU 通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;
  • ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。