姓名:Jyx
描述:人工智能学习笔记
集成学习
集成学习将各种不同的学习器联合起来,以期提高总体的预测效果。为发掘各个学习器的优点,需要一套专门的方案来进行联合。
1. 几何平均。将各个分类器的预测结果进行几何平均。其基本原理是使联合后的概率与各个学习器预测的概率的KL距离最小化
2. 算术平均。 将各个分类器的预测结果进行算术平均
3. 多数投票 。
并没有一般的规则来指导该选择何种方式联合学习器。另外,在特定的学习案例里甚至可能出现联合后的学习器比单个学习器中最好的还要差的情况
boosting
boosting 是一种特殊的集成学习方法。所有的‘基’分类器都是弱学习器,但通过采用特定的方式迭代,每次根据训练过的学习器的预测效果来更新样本权值,用于新的一轮学习,最终提高联合后的学习效果
adaboosting
adaboosting的分类目标是
f(x)=sign(F(x))where F(x)=∑k=1Kαϕ(x;θk)
f(\bf{x}) = sign(F(\bf{x})) \\
where\ F(\bf{x}) = \sum_{k = 1}^K\alpha \phi(\bf{x};\bf{\theta}_k)
f(x)=sign(F(x))where F(x)=k=1∑Kαϕ(x;θk)
其损失定义如下
J(x)=∑i=1Nexp(−yiF(xi))(1)
J(\bf{x})=\sum_{i=1}^Nexp(-y_i F(\bf{x}_i)) \tag{1}
J(x)=i=1∑Nexp(−yiF(xi))(1)
adaboosting要求每个‘基’分类器返回二值标记,即ϕ(x;θ)∈{−1,1}\phi(\bf{x};\bf{\theta}) \in \{-1, 1\}ϕ(x;θ)∈{−1,1},而且类别标记y∈{−1,1}y \in \{-1, 1\}y∈{−1,1}。因此分类成功是的损失总是exp(−1)exp(-1)exp(−1),失败时的损失总是exp(1)exp(1)exp(1),所以失败时有更多的惩罚,最小化损失即最大化成功率
adaboosting算法
(1)式的优化是一个NPC问题。我们只能退而寻求次优的解法。实际操作中使用的是分段最优的搜索方式,从第一个函数开始,每次添加一个函数,并优化此轮的目标。
我们定义
Fm(x)=Fm−1(x)+αmϕ(x;θm)显然有 F(x)=FK(x)
F_m(\bf{x}) = F_{m - 1}(\bf{x}) + \alpha_m \phi(\bf{x};\theta_m) \\
\text{显然有 }F(\bf{x}) = F_K(\bf{x})
Fm(x)=Fm−1(x)+αmϕ(x;θm)显然有 F(x)=FK(x)
在第m步,我们优化的目标
Jm(x)=∑i=1Nexp(−yiFm(xi))=∑i=1Nexp(−yi(Fm−1(xi)+αmϕ(xi;θm)))=∑i=1Nwimexp(−yiαmϕ(xi;θm)),where wim=exp(−yiFm−1(xi))
\begin{aligned}
J_m(\bf{x}) &= \sum_{i=1}^Nexp(-y_i F_m(\bf{x}_i)) \\
&=\sum_{i = 1}^N exp(-y_i(F_{m - 1}(\bf{x}_i) + \alpha_m \phi(\bf{x}_i;\theta_m))) \\
&=\sum_{i = 1}^N w_i^m exp(-y_i\alpha_m \phi(\bf{x}_i;\theta_m)), where\ w_i^m =exp(-y_i F_{m - 1}(\bf{x}_i))
\end{aligned}
Jm(x)=i=1∑Nexp(−yiFm(xi))=i=1∑Nexp(−yi(Fm−1(xi)+αmϕ(xi;θm)))=i=1∑Nwimexp(−yiαmϕ(xi;θm)),where wim=exp(−yiFm−1(xi))
这里wimw_i^mwim与本轮的优化目标无关,可以在每回合迭代开始计算好,并且我们可以把wimw_i^mwim看成是第m轮第i个样本的权重,如果所有的wimw_i^mwim相加不等于1,我们很容易通过归一化使其等于1,并且这样的变化不影响优化,归一化后,有
∑i=1Nwim=1
\sum_{i = 1}^Nw_i^m = 1
i=1∑Nwim=1
在前面说过ϕ(x;θ)∈{−1,1}\phi(\bf{x};\bf{\theta}) \in \{-1, 1\}ϕ(x;θ)∈{−1,1},y∈{−1,1}y \in \{-1, 1\}y∈{−1,1},用y^i\hat{y}_iy^i表述第iii个样本的预测值,则
Jm(x)=exp(−αm)∑y^i=yiwim⏟2+exp(αm)∑y^i≠yiwim⏟3(4)
J_m(\bf{x}) = exp(-\alpha_m)\underbrace {\sum_{\hat{y}_i =y_i}w_i^m}_2 + exp(\alpha_m)\underbrace{\sum_{\hat{y}_i \neq y_i}w_i^m}_3 \tag{4}
Jm(x)=exp(−αm)2y^i=yi∑wim+exp(αm)3y^i=yi∑wim(4)
因为所有的wimw_i^mwim加起来等于1。于是上式中的2部分小了,3部分就大了,反之亦然。
于是最小化目标函数等价于最小化3部分(显然exp(αm)>exp(−αm)exp(\alpha_m) > exp(-\alpha_m)exp(αm)>exp(−αm))。
θm=argminθ∑i=1NwimI(1−yiϕ(xi;θm)I(x)={0x=01x!=0(5)
\theta_m = \mathop{\arg\min}_{\theta}\sum_{i = 1}^Nw_i^m I(1 - y_i \phi(\bf{x}_i;\bf{\theta}_m) \tag{5}\\
\begin{aligned}
I(x) =
\begin{cases}
0& \text{x=0}\\
1& \text{x!=0}
\end{cases}
\end{aligned}
θm=argminθi=1∑NwimI(1−yiϕ(xi;θm)I(x)={01x=0x!=0(5)
上式优化依赖于具体的ϕ(x;θ)\phi(\bf{x};\bf{\theta})ϕ(x;θ),相当于对ϕ(x;θ)\phi(\bf{x};\bf{\theta})ϕ(x;θ)求最小经验风险
一旦5式得解, 就可以求出具体的∑y^i=yiwim\sum_{\hat{y}_i =y_i}w_i^m∑y^i=yiwim,∑y^i≠yiwim\sum_{\hat{y}_i \neq y_i}w_i^m∑y^i=yiwim,令
∑y^i≠yiwim=Pm则∑y^i=yiwim=1−Pm
\sum_{\hat{y}_i \neq y_i}w_i^m = P_m \\
则\sum_{\hat{y}_i =y_i}w_i^m = 1 - P_m
y^i=yi∑wim=Pm则y^i=yi∑wim=1−Pm
然后对4式求导并使其等于0,可以得到
αm=12ln1−PmPm
\alpha_m = \dfrac{1}{2}\ln{\dfrac{1 - P_m}{P_m}}
αm=21lnPm1−Pm
然后
wim+1=exp(−yiFm(xi))Zm=wimexp(−yiαmϕ(xi;θm))ZmZm是归一化因子,所以等于所有N个分子之和,即Zm=∑i=1Nwimexp(−yiαmϕ(xi;θm))
w_i^{m+1} =\frac{exp(-y_i F_m(\bf{x}_i))}{Z_m} = \frac{w_i^m exp(-y_i \alpha_m \phi(\bf{x}_i;\theta_m))}{Z_m} \\
Z_m \text{是归一化因子,所以等于所有N个分子之和,即} \\
Z_m=\sum_{i = 1}^Nw_i^m exp(-y_i \alpha_m \phi(\bf{x}_i;\theta_m))
wim+1=Zmexp(−yiFm(xi))=Zmwimexp(−yiαmϕ(xi;θm))Zm是归一化因子,所以等于所有N个分子之和,即Zm=i=1∑Nwimexp(−yiαmϕ(xi;θm))
这样adaboost算法就得解了
Gradient Boosting
L2 boosting
adaboost 提供了一个思路,我们替换adaboost损失函数(1)便可以得到不同的算法,例如把指数损失换成L2损失
J(x)=∑i=1N(yi−F(xi))2
J(\bf{x})=\sum_{i=1}^N (y_i - F(\bf{x}_i) )^2 \\
J(x)=i=1∑N(yi−F(xi))2
在第m步
Jm(x)=∑i=1N(yi−Fm(xi))2=∑i=1N(yi−Fm−1(xi)−αmϕ(xi;θm))2=∑i=1N(ri−αmϕ(xi;θm)2ri=yi−Fm−1(xi) 被称为残差(6)
J_m(\bf{x}) = \sum_{i=1}^N (y_i - F_m(\bf{x}_i) )^2=\sum_{i=1}^N (y_i - F_{m - 1}(\bf{x}_i) - \alpha_m \phi(\bf{x}_i;\theta_m))^2 = \sum_{i=1}^N (r_i -\alpha_m \phi(\bf{x}_i;\theta_m )^2 \tag{6} \\
r_i = y_i - F_{m - 1}(\bf{x}_i)~~\text{被称为残差}
Jm(x)=i=1∑N(yi−Fm(xi))2=i=1∑N(yi−Fm−1(xi)−αmϕ(xi;θm))2=i=1∑N(ri−αmϕ(xi;θm)2ri=yi−Fm−1(xi) 被称为残差(6)
6式可以简单的看成对残差进行预测的L2回归任务进行解决
这种损失的定义我们成为L2boosting
一般的Gradient Boosting
将损失定义为任意函数的boosting就是Gradient Boosting。
对于任意损失函数L(y,F(x))L(y,F(\bf{x}))L(y,F(x)),在第m步,
L(y,Fm(x))=L(y,Fm−1(x)+αmϕ(x;θm))
L(y,F_m(\bf{x})) = L(y,F_{m - 1}(\bf{x}) + \alpha_m \phi(\bf{x};\theta_m))
L(y,Fm(x))=L(y,Fm−1(x)+αmϕ(x;θm))
直接优化上式是一个很困难的任务,我们只能退而求其次
这时我们想想梯度下降法求函数极值的过程,考虑x=Fm−1(x)x = F_{m - 1}(\bf{x})x=Fm−1(x), Δx=αmϕ(x;θm)\Delta x= \alpha_m \phi(\bf{x};\theta_m)Δx=αmϕ(x;θm),回忆梯度下降法,我们每步的迭代方向为负梯度方向,即有
αmϕ(x;θm)=−dL(y,Fm−1(x))dFm−1(x)
\alpha_m \phi(\bf{x};\theta_m) =-\frac{\mathrm{d} L(y,F_{m-1}(\bf{x})) }{\mathrm{d F_{m-1}(\bf{x)}}}
αmϕ(x;θm)=−dFm−1(x)dL(y,Fm−1(x))
这样我们就只要每次训练θm\theta_mθm是得上式想等,就可以进行更新
Fm(x)=Fm−1(x)+αmϕ(x;θm)
F_m(\bf{x}) = F_{m - 1}(\bf{x}) + \alpha_m \phi(\bf{x};\theta_m)
Fm(x)=Fm−1(x)+αmϕ(x;θm)
这就是所谓的每次预测负梯度方向