机器学习:期望风险、经验风险、结构风险

机器学习:期望风险、经验风险、结构风险

这里主要记录我理解期望风险、经验风险、结构风险的过程。

损失函数Loss

损失函数是期望风险、经验风险和结构风险的基础。

我想大多数人对损失函数并不陌生吧,就是机器学习训练的的时候用于计算prediction 与 ground truth之间的误差,用于反向传播。

交叉熵,平方损失函数,合页损失函数,IoU Loss,TV Loss等都是常用的损失函数。

期望风险与经验风险的对比

经验风险 局部 不可求
期望风险 全局 可求

经验风险

经验风险是对训练集中的所有样本点损失函数的平均最小化,如下式:
R ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x ) ) R(f) = \frac{1}{N}\sum^N_{i=1}L(y_i,f(x)) R(f)=N1i=1NL(yi,f(x))
其中 L ( ⋅ ) L(\cdot) L()为损失函数, y i y_i yi为ground truth, f ( x ) f(x) f(x)为预测结果,N表示的是训练样例集中样本的数目。

期望风险

经验风险越小说明模型f(X)对训练集的拟合程度越好,但是对于未知的样本效果怎么样呢?

为了衡量这个模型对所有的样本(包含未知的样本和已知的训练样本)预测能力,熟悉概率论的很容易就想到了用期望。即假设X和Y服从联合分布P(X,Y).那么期望风险就可以表示为:

R e x p ( f ) = E P [ L ( Y , f ( X ) ) ] = ∫ x ∫ y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_P[L(Y,f(X))]= \int_{x}\int_{y}L(y,f(x))P(x,y)dxdy Rexp(f)=EP[L(Y,f(X))]=xyL(y,f(x))P(x,y)dxdy

结构损失

期望损失无法计算,所以模型训练的时候都是通过经验风险(Loss)进行反向传播。由于只考虑经验风险的话,容易出现过拟合。

这个时候就引出了结构风险。结构风险是对经验风险和期望风险的折中。在经验风险函数后面加一个正则化项(惩罚项)便是结构风险了。如下式,即结构损失=经验损失+惩罚项:
R ( f ) = 1 N L ( y i , f ( x i ) + λ J ( f ) ) R(f) = \frac1NL(y_i,f(x_i)+\lambda J(f)) R(f)=N1L(yi,f(xi)+λJ(f))
相比于经验风险,结构风险多了一个惩罚项其中是一个 λ \lambda λ是一个大于0的系数。 J ( f ) J(f) J(f)表示的是是模型f的复杂度。比较常见的惩罚项一般通过L1正则化以及L2正则化进行计算。

L1正则化惩罚项,通过代码我们可以很明显的发现,计算的就是模型参数的1范数。

regularization_loss = 0
for param in model.parameters():
    regularization_loss += torch.sum(abs(param))
 
classify_loss = criterion(pred,target)
loss = classify_loss + lamda * regularization_loss
 
optimizer.zero_grad()
loss.backward()
optimizer.step()

经验风险越小,那么说明模型的拟合能力强,即模型决策函数越复杂,其包含的参数越多。当经验风险函数小到一定程度就出现了过拟合现象。也可以理解为模型决策函数的复杂程度是过拟合的必要条件,那么我们要想防止过拟合现象的方式,就要破坏这个必要条件,即降低决策函数的复杂度(惩罚项 J ( f ) J(f) J(f)最小化)。

现在出现两个需要最小化的函数了。我们需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化,一个简单的办法把两个式子融合成一个式子,得到结构风险函数然后进行最小化。

参考:

(8条消息) 机器学习–>期望风险、经验风险与结构风险之间的关系_liyajuan521的博客-CSDN博客_经验风险最小化

机器学习准则(期望风险、经验风险、结构风险) - 知乎 (zhihu.com)

(8条消息) L1和L2正则化——PyTorch版本_我的断点在哪里的博客-CSDN博客_l2归一化 pytorch

你可能感兴趣的:(笔记,机器学习,人工智能,算法)