📜  GrowNet:梯度提升神经网络

📅  最后修改于: 2022-05-13 01:58:08.696000             🧑  作者: Mango

GrowNet:梯度提升神经网络

GrowNet是 2020 年由普渡大学、加州大学洛杉矶分校和弗吉尼亚理工大学的学生与亚马逊和 LinkedIn 加利福尼亚的工程师合作提出的。他们提出了一种新的梯度提升算法,他们使用浅层神经网络作为弱学习器,在分类、回归和学习排序下训练梯度提升模型的通用损失函数,以及处理梯度陷阱的完全纠正步骤训练并为其提供稳定性。

在继续讨论 GrowNet 的架构细节之前,先了解一下Gradient Boosting的快速修订。

梯度提升

梯度提升是一种流行的提升算法。在梯度提升中,每个预测器都会纠正其前任的错误。与 Adaboost 相比,训练实例的权重没有调整,而是使用前任的残差作为标签来训练每个预测器。

有一种技术叫做梯度提升


基学习器是 CART(分类和回归树)的树。该图解释了如何针对回归问题训练梯度提升树。

集成由N棵树组成。 Tree1 使用特征矩阵X和标签y进行训练。标记的预测\hat{y} 用于确定训练集残差r_2 .然后使用特征矩阵X和残差对 Tree2 进行训练r_1 Tree1 作为标签。预测结果\hat{r_1} 然后用于确定残差r_2 .重复该过程,直到训练完构成集成的所有N棵树。

建筑学

正如我们在上面了解到的,梯度提升算法背后的关键思想是将简单的低阶模型作为一种构建块,通过使用一阶或二阶梯度统计的顺序提升来构建更强大的高阶模型.在 Grownet 中,我们使用浅层神经网络(例如,具有一到两个隐藏层)作为弱学习器。

成长网架构

在每个提升步骤中,我们将原始输入特征的向量与当前迭代最后一层的输出相结合。然后将这个新的特征集作为输入传递,通过使用当前残差的提升算法来训练下一个弱学习器。模型的最终输出是所有这些按顺序训练的弱学习器模型得分的加权组合。

假设一个数据集有n 个样本和d维特征空间 D ={(x_i, y_i)_{i=1}^{n} | x_i \epsilon R^{d}, y_i \epsilon R}。 Grownnet 使用 K 个加法函数来预测输出:

\hat{y_i} = \varepsilon(x_i) = \sum_{k=0}^{K} a_k f_k (x_i), f_k \epsilon F

其中,f_k 表示一个独立的、以线性层为输出层的浅弱学习器,a_k 是步长(提升率)。

在这里,浅层学习者需要最小化的目标函数如下:

L(\varepsilon) = \sum_{i=0}^{n} l(y_i, \hat{y_i})

然而,这个目标函数是不够的,因为与梯度提升决策树类似,模型是以加法方式训练的。因此,我们需要将上一阶段的输出添加到样本中x_i .现在,前一阶段的输出是:

\hat{y_i}^{(t-1)} = \sum_{k = 0}^{t-1} a_k f_k (x_i)

因此,我们对阶段 t 的目标函数变为:

L^{(t)} = \sum_{i=0}^{n} l(y_i, \hat{y}_i^{(t-1)} + \alpha_t f_t(x_i))

上述目标函数可以简化为:

L^{(t)} = \sum_{i=0}^{n} h(\widetilde{y_i} - \alpha_t f_t(x_i))^{2}

其中,\widetilde{y_i} = -\frac{g_i}{h_i},并且 g i和 h i是目标函数l在 x i wrt \hat{y}_i^{t-1} 处的一阶梯度。在下一步中,我们将计算用于回归、分类和排名学习的 g 和 h 的 thr 值:

回归

对于回归,假设我们应用了mse损失函数并用l来表示,那么在t阶段计算不同变量的公式为:

g_i = 2(\hat{y_i}^{(t-1)} - y_i ) \\ \\ \\  h_i =2 ; \widetilde{y_i} = y_i - y_i^{(t-1)}

现在,对于下一个弱学习器 f_t,通过在 \left \{ x_i, \widetilde{y_i} \right \} 上对 i =1, 2, 3, ... 进行最小二乘回归。 n.在校正步骤中,所有模型参数都使用 MSE 损失进行反向传播。

分类

让我们将二元交叉熵损失视为分类和标签的损失函数,例如 y_i \epsilon {\left \{-1,1 \right \}} 。这是因为 y_i^2 = 1 可用于我们的推导.那么t阶段不同变量的计算公式如下:

g_i = \frac{-2 y_i}{(1+ e^{2 y_i \hat{y_i}^{(t-1)}})} \\ \\ \\ h_i = \frac{4 y_i^{2}e^{2 y_i \hat{y_i}^{(t-1)}}}{(1+ e^{2 y_i \hat{y_i}^{(t-1)}})^{2}}\\ \\ \\ \widetilde{y_i} = \frac{y_i(1+ e^{-2 y_i \hat{y_i}^{(t-1)}})}{2}

现在,对于下一个弱学习器 f_t,使用二阶统计对 \left \{ x_i, \widetilde{y_i} \right \} 进行最小二乘回归。在校正步骤中,所有模型参数都使用 e 二元交叉熵损失进行反向传播。

学习2级

学习排名是一种算法策略,应用于监督学习,以解决关于搜索查询相关性的排名问题。这是一个非常重要的搜索问题,在许多领域都有应用。

让我们考虑对于给定的查询,选择了一对文档 {U i , U j }。让我们为这些文档取一个特征向量,即{x i , x j }。让\left \{ \hat{y_i}, \hat{y_j} \right \}     分别表示样本 x i和 x j的模型输出。该查询的成对损失函数可以如下给出:

l(\hat{y_i}, \hat{y_j})=  \frac{1}{2} (1- S_{ij}) \sigma_0 (\hat{y_i}- \hat{y_j}) + log( 1+ e^{-\sigma_0 (\hat{y_i}- \hat{y_j}) })

在哪里, S_{ij} \, \epsilon \, \left \{0, -1, +1 \right \}     如果 U_i 比 U_j 具有更大的相关性,则 S_{ij} =1。 S_{ij} = -1 则与上述相关性相反。 S_{ij} =0,则两者的相关性相等。 \sigma_0 是 sigmoid函数。

现在,损失函数、一阶统计量和二阶统计量可以推导出如下:

l = \sum_{j: \left \{  i,j \right \} \epsilon I } l(\hat{y_i}, \hat{y_j}) + \sum_{j: \left \{  i,j \right \} \epsilon I } l(\hat{y_i}, \hat{y_j}) \\ \\ \\ g_i = \sum_{j: \left \{  i,j \right \} \epsilon I } \partial_{\hat{y}_i} l(\hat{y_i}, \hat{y_j}) - \sum_{j: \left \{  j,i \right \} \epsilon I } \partial_{\hat{y}_i} l(\hat{y_i}, \hat{y_j}) \\ \\ \\ h_i = \sum_{j: \left \{  i,j \right \} \epsilon I } \partial_{\hat{y}_i}^{2} l(\hat{y_i}, \hat{y_j}) - \sum_{j: \left \{  j,i \right \} \epsilon I } \partial_{\hat{y}_i}^{2} l(\hat{y_i}, \hat{y_j}) \\

纠正步骤

在之前的 boosting 框架中,每个弱学习器都是贪婪地学习的,即在 boosting 步骤t第 t弱学习器,而之前的所有t-1 个弱学习器保持不变。然而,在纠正步骤中,该模型不是固定之前的t-1 个弱学习器,而是允许通过反向传播更新之前的t-1 个弱学习器的参数。此外,升压率\alpha_k     进入模型的参数,并通过校正步骤自动更新。

参考:

  • 成长网论文