Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

ML——最小二乘与梯度下降

本文持续更新,主要总结各种与最小二乘和梯度下降相关的优化方法


最小二乘与最小均方误差的区别

最小二乘法

  • 二乘也就是平方的意思,故又称最小平方法(英文全称Least Square Method, LSM或者LS)
  • 是一种数学优化技术
  • 通过最小化误差的平方和寻找数据的最佳函数匹配
    • 为什么最小化误差平方和可以得到最佳函数匹配呢?
      • 可以证明,只要误差是服从正太分布的,最小化误差平法和就能匹配到最佳函数(这个高斯证明过)
      • 可以证明,误差的确是服从正太分布的,细节可以参考为什么正太分布如此常见
      • 中心极限定理说了,在适当的条件下,大量相互独立随机变量的均值经适当标准化后依分布收敛于正态分布
        • 适当的条件包括三个要素:
          • 独立
          • 随机
          • 相加
        • 误差满足上面三个要素
      • 综上所述,最小二乘法(最小化误差平法和)可以的到最佳函数匹配
  • 最小二乘法通过求导,并令导数为0,直接求得误差平方和(损失函数的一种)取最小值时的参数
  • 公式:
    $$\theta^{\star} = \mathop{\arg\min}_\theta L(x) = \sum_i^{m}(y_i-f(x_i;\theta))^2$$

加权最小二乘法

  • 加权最小二乘中每个样本的误差前面会乘上相应的权重,然后再求和
    $$\theta^{\star} = \mathop{\arg\min}_\theta L(x) = \sum_i^{m}w_i(y_i-f(x_i;\theta))^2$$

最小化均方误差

  • 最小二乘(Least Square, LS)问题是这样一类优化问题,目标函数是若干项的平方和
  • LS的一种更复杂也更灵活的变形: 加权最小二乘根据实际问题考虑每个求和项的重要程度,即为每一项加权值w
  • 均方误(Mean Square Error, MSE)是一种加权最小二乘,它的权值是对应项的概率
    $$\theta^{\star} = \mathop{\arg\min}_\theta L(x) = \sum_i^{m}\frac{1}{m}(y_i-f(x_i;\theta))^2 = \frac{1}{m}\sum_i^{m}(y_i-f(x_i;\theta))^2$$

周志华的解释

  • 基于均方误差最小化来进行模型求解的方法称为最小二乘法 ——《机器学习》(周志华著)
    • 理解:周志华的意思应该是把均方误差与误差平方和视为一个东西,也就是说各项的权重相同,所以感觉这里定义其实是比较模糊的,不用太在意最小二乘法与最小化均方误差法的定义

总结

  • 三者可以理解为相同的表达式,其中
    • 最小二乘法(LSM), 权重为1, 每个样本相同
    • 最小均方误差(MSE), 权重为 \(\frac{1}{m}\),每个样本相同
    • 加权最小二乘 , 权重为自定义的值, 每个样本可以不同
  • 最小均方误差(MSE) 是一种 加权最小二乘 , 他的权重为样本的概率, 每个样本出现的概率相等, 就都乘以 \(\frac{1}{m}\) 即可

梯度下降与梯度上升

意义

为什么需要梯度下降或者梯度上升,而不是用直接对目标函数求导得到最优解?

几点说明
  • 对于凸函数而言:
    • 通过函数(损失函数等)对参数求导,令其导数为0,的确可以解得损失函数的最小(最大)值点对应的参数
  • 对于非凸函数而言:
    • 相同的方法可能只能得到极值点,而不是最小(最大)值点
    • 但此时梯度下降法也不能找到最优点
  • 无论是梯度下降函数直接推到求解目标函数最优解,我们都需要求目标函数的导数,并且需要确保目标函数可导,不然是不能用这些方法的
几点原因
  • 有时候目标方程(令导数为0后得到的方程)很复杂,求导数为0的参数的解(根)很难
    • 包括时间和空间两方面可能面临困难
    • 比如大矩阵的乘法,大矩阵的逆等
    • 求某一点的梯度一般是比较容易的(只要求出导数后将对应点的数值带入即可)
      • 这里与求导数为0的解难度不一样,在求出函数导数后,求某一点的梯度仅仅需要带入该点的值,而求导数为0的解需要的是很难的解题过程,甚至可能找不到解
  • 有时候目标方程很奇怪,之前我们没见过,需要我们写新的代码教会计算机如何直接求解函数的根
    • 直接使用梯度下降的话是计算机可以理解的
    • 梯度下降法不用重新写代码来教给计算机

梯度下降

  • 梯度下降是最小化目标函数
    • \(\theta=\theta-\lambda\frac{\partial L(\theta)}{\partial\theta}\)
    • \(\lambda\) 为步长
    • 每轮迭代沿着负梯度方向移动

梯度上升

  • 梯度上升是最大化目标函数
    • \(\theta=\theta+\lambda\frac{\partial L(\theta)}{\partial\theta}\)
    • \(\lambda\) 为步长
    • 每轮迭代验证正梯度方向移动

梯度下降(上升)法与最小二乘法

最小二乘法

  • 最小二乘法是一种通过最小化误差的平方和寻找数据的最佳函数匹配的数学优化技术
  • 与最小二乘法并列的是最小话误差的三次方或者四次方等方法
    • 这里的三次方和和四次方和只是为了和二次方和作对比,实践中很少遇到这样的优化技术

梯度下降(上升)法

  • 梯度下降(上升)法的目标是通过迭代(每次朝着最优方向,即梯度下降最快方向前进)不断逼近能使得目标函数最小(最大)时的最优参数值的方法
  • 梯度下降(上升)是一种迭代法,也就是通过更新参数不停的逼近最优点,可以用来解决各种各样的问题(包括最小二乘问题,最小化误差三次方和等)
    • 这里最小二乘问题可以理解为用最小二乘法(最小化误差平法和)来寻找最佳函数的问题

总结

  • 最小二乘法与梯度下降(上升)法不在一个维度,不能对比
最小二乘法
  • 目标:找到(或者逼近)最优函数,使得该函数能最拟合已知数据
  • 方法:最小化误差平方和
梯度下降(上升)法
  • 目标:找到(或者逼近)最优参数,使得该参数能最小化(最大化)目标函数
  • 方法:是通过沿梯度方向迭代更新参数

ML——模型的方差与偏差

本文讲解机器学习中模型的方差偏差关系


偏差与方差的定义

  • 方差:模型的预测值之间的离散程度
  • 偏差:模型整体的预测值与真实值的偏离程度

正则化与方差和偏差

  • 参考博客:https://www.cnblogs.com/qkloveslife/p/9885500.html

总结

  • \(\lambda\) 为正则化系数
  • 当 \(\lambda\) 很小时,模型处于“高方差”状态,“训练误差”很小,“交叉验证误差”较大
  • 当 \(\lambda\) 很大时,模型处于“高偏差”状态,“训练误差”和“交叉验证误差”都很大

集成学习与方差和偏差

  • 参考博客:https://blog.csdn.net/xmu_jupiter/article/details/47314927

总结

集成学习分两类
  • 平均方法:例如随机森林, Bagging methods。在平均方法中,系统分别去建立多个基分类器,分类器之间没有任何联系。然后在分类或者回归阶段,各个分类器根据测试数据给出自己的答案,然后系统根据各个分类器给出的结果去综合出最后的结果,比如可以使投票的形式
  • 提升方法:例如梯度提升决策树GBDT,AdaBoost。在提升方法中,系统模型在训练过程中会先后建立一系列分类器,这些分类器单个可能是弱分类器,但是组合起来就成为一个强分类器
  • Stacking方法:
    • 单层Stacking(普通Stacking):降低方差,类似于bagging(因为类似于集成了多个模型投票,属于平均方法)
    • 多层Stacking:同时降低方差和偏差,每层上有平均方法,多层之间是提升方法
    • 方差与偏差、Bagging、Boosting、Stacking【实用机器学习5.1-5.4】
不同类别的偏差与方差
  • 平均方法尝试去降低模型的方差
    • 从统计学的视角看,多个样本均值的方差小于单个样本的方差,具体地样本均值的方差= \(\sigma_{\text{mean}} = \frac{\sigma^2}{n}\),其中 \(n\) 为样本数量
    • 所以平均方法通常比其任何一个基分类器效果好
  • 而提升方法尝试去降低模型的偏差

ML——泛化特征与非泛化特征


泛化特征与非泛化特征

  • 泛化特征(Generalized Features):
    • 泛化特征是指那些能够捕捉数据内在模式或规律性的特征,这些特征具有一定的普遍性,可以适用于不同但相关的场景
    • 一个模型如果具备良好的泛化能力,意味着它能在未见过的数据上表现良好,即不仅能准确预测训练集中的数据,还能对新数据做出合理的预测
    • 在创建泛化特征时,通常会考虑去除噪声、避免过拟合,并确保特征的选择基于数据的统计显著性和稳定性
  • 非泛化特征(Non-Generalized Features 或 Specific Features):
    • 非泛化特征是指那些与特定数据样本紧密相关,但在其他类似的数据样本中可能不具备相同意义或重要性的特征
    • 这些特征可能会导致模型过拟合,即模型在训练数据上的表现非常好,但对于未曾见过的新数据则可能无法给出准确的预测
    • 非泛化特征的例子包括某些特定于训练集样本的异常值或者非常具体且不常见的属性

一些说明

  • 统计型特征一般可以看做是泛化特征
  • User-ID或者Item-ID这种特征一般可以看做是非泛化特征
  • 在数据量特别大的时候,其实User-ID和Item-ID类特征是可以放进模型的,只要有充足的数据来训练他们的Embedding就可以;但是一般的小任务,小数据就不适合加这类特征了

ML——求解无约束最优化问题的优化方法

本文介绍求解无约束最优化问题的优化方法:梯度下降法(Gradient Descent)、牛顿法(Newton’s Method)和拟牛顿法(Quasi-Newton Methods)

  • 共轭梯度法也是一种无约束的参数优化方法,详情见ML——共轭梯度法和最速下降法

无约束参数优化方法概览

目标

$$
\begin{align}
\theta^{\star} = \mathop{\arg\max}_{\theta}L(\theta)
\end{align}
$$

直接法

使用直接法需要满足两个条件
  • \(L(\theta)\) 为关于 \(\theta\) 的凸函数
  • \(\nabla L(\theta)=0\) 有解析解(又名闭式解,指的是有限个常见运算的组合给出的形式)
求解
  • 目标函数直接对参数求导后令目标函数导数为0: $$\nabla L(\theta)=0$$

迭代法

  • 包括梯度下降法和牛顿法,牛顿法又可以拓展为拟牛顿法

梯度下降法

更详细的说明参考ML——最小二乘与梯度下降中的介绍

  • 梯度下降法通过每次迭代沿着梯度下降最快的方向(梯度的负方向)前进一个 \(\Delta \theta\) 长度
  • \(\Delta \theta\) 为步长 \(\alpha\) (参数)乘以梯度的模(变化率)的方法,实现对极大(小)值的一步步逼近

牛顿法

数学中的牛顿法

  • 牛顿法的本质是求函数值 \(f(x)\) 为零(\(f(x)=0\))时参数(自变量 \(x\))的值
  • 本质上说,牛顿法是用逼近的方法来解方程的一种方法
算法流程
  • 对于确定的方程 \(f(x)=0\),我们的目标是求解自变量 \(x\) 的值
  • 1.初始值定义为 \(x=x_{0}\)
  • 2.牛顿法通过迭代每次从当前点 \((x=x_k,y=f(x_k))\) 沿着斜率 \(f’(x) = \frac{\partial f(x)}{\partial x}\) 出发做一条直线,并求出其表达式 \(y-f(x_k) = (x-x_k)\cdot f’(x)\)
  • 3.求出该直线与x轴的交点 \(x_{k+1}=x_{k}-\frac{f(x_{k})}{f’(x_{k})}\)
  • 4.设置下一次迭代的点为 \(x=x_{k+1}\)
  • 5.重复2到4,直到斜率小于某个阈值 \(\epsilon\) 时停止迭代
  • 6.迭代停止时 \(x=x_{k+1}\) 就是方程的近似解
  • 迭代过程图示化如下:
    迭代公式推导
  • 上述迭代流程中迭代公式 \(x_{k+1}=x_{k}-\frac{f(x_{k})}{f{}’(x_{k})}\) 的推导如下:

最优化方法中的牛顿法

  • 最优化方法的目标是学习函数 \(f(\theta)\) 的极小/大值(若 \(f(\theta)\) 是凸函数,则为最小/大值)
  • 可以证明,目标函数(凸函数)取最优点(最大/小值)时,目标函数的导数 \(\frac{\partial f(\theta)}{\partial \theta}=0, 其中\theta=\theta^{\star}\)
  • 基于这个事实,在知道目标函数的导数 \(f{}’(\theta)=\frac{\partial f(\theta)}{\partial \theta}\) 的表达式后,我们可以列出方程 \(f{}’(\theta)=0\)
    • 此时方程的解 \(\theta^{\star}\) 就是原始目标函数的最优解
  • 解上述方程 \(\frac{\partial f(\theta)}{\partial \theta}=0\) 时我们即可使用数学中的牛顿法
算法流程
  • 具体算法步骤与数学中的算法流程小节一致,不同的地方在于此时迭代公式变为 \(\theta_{k+1}=\theta_{k}-\frac{f{}’(\theta_{k})}{f{}’{}’(\theta_{k})}\)
  • 在具体的实现中,我们一般会直接推导出每一步的迭代公式,按照公式迭代即可得到最优解

迭代公式推导

  • 根据上述事实,此时我们的目标函数为 \(f(\theta)\),目标方程方程为 \(f{}’(\theta)=0\)
  • 此时迭代公式为$$\theta_{k+1}=\theta_{k}-\frac{f{}’(\theta_{k})}{f{}’{}’(\theta_{k})}$$
  • 当参数数量不止一个时, \(\theta\) 表示一个向量,此时迭代公式为$$\theta_{k+1}=\theta_{k}-H_{k}^{-1}\nabla_{\theta}f(\theta_{k})$$
    • 其中 \(H_{k}^{-1}\) 为海森矩阵 \(H_{k}\) 的逆, \(H_{k}=H(\theta_{k})\)
    • \(H_{k}^{-1}\) 和 \(\frac{1}{f{}’{}’(\theta_{k})}\) 分别是多维和一维参数时目标函数的二阶导
    • 海森矩阵是目标函数对参数的二阶导数, \(H(\theta)=\left [ \frac{\partial^{2}f}{\partial \theta^{i}\partial \theta^{j}} \right ]_{n\times n}\)
  • 推导步骤和上面的数学中的迭代公式推导一致

牛顿法与梯度下降法的一种简单推导方法

  • 用泰勒展开来推导,详情待更新(参考<<百面>>P149)

迭代法的思想

  • 最小化目标函数
    $$
    \begin{align}
    \delta_{t} &= \mathop{\arg\min}_{\delta}L(\theta_{t} + \delta) \\
    \theta_{t+1} &= \theta_{t} + \delta_{t} \\
    \end{align}
    $$
  • 注意,如果这里是max最大化目标函数的话,对应的是梯度上升法,此时后面推导的步骤中加入L2正则项时为了使得 \(\left | \delta \right |_{2}^{2}\) 的值最小,正则项的权重应该为负数,这样整体目标函数最大时正则项才能取得最小值,最终推导得到的结果也将变成梯度上升的表达式,(\(\alpha > 0\) 时对应的参数迭代公式变成加好而不是减号)
  • 但是实际上最大化目标函数可以价格负号转变为最小化目标函数,所以其实掌握最小化目标函数的优化方法即可

一阶法——梯度下降法

  • 对目标函数在 \(L(\theta_{t} + \delta)\) 处做一阶泰勒展开
    $$
    \begin{align}
    L(\theta_{t} + \delta) = L(\theta_{t}) + \nabla L(\theta_{t})^{T}\delta \\
    \end{align}
    $$
  • 由于上式在 \(\delta\) 非常小时才成立,所以我们一般加上加入L2正则项(L2正则项可以保证 \(\delta\) 的值不会太大),为了保证 \(\left | \delta \right |_{2}^{2}\) 的值最小,要求 \(\alpha > 0\),才能保证目标函数最小时正则项也对应最小 (梯度上升法中要求 \(\alpha < 0\) 或者需要在正则项前面的系数加上负号,才能保证目标函数最大时正则项最小)
    $$
    \begin{align}
    L(\theta_{t} + \delta) = L(\theta_{t}) + \nabla L(\theta_{t})^{T}\delta + \frac{1}{2\alpha}\left | \delta \right |_{2}^{2} \\
    \end{align}
    $$
  • 直接对上式求导=0得
    $$
    \begin{align}
    \delta_{t} &= \mathop{\arg\min}_{\delta}L(\theta_{t} + \delta) \\
    &= \mathop{\arg\min}_{\delta}(L(\theta_{t}) + \nabla L(\theta_{t})^{T}\delta + \frac{1}{2\alpha}\left | \delta \right |_{2}^{2}) \\
    &= -\alpha \nabla L(\theta_{t})
    \end{align}
    $$
  • 于是梯度下降法的更新表达式为
    $$
    \begin{align}
    \theta_{t+1} &= \theta_{t} + \delta_{t} \\
    &= \theta_{t} - \alpha \nabla L(\theta_{t})
    \end{align}
    $$

二阶法——牛顿迭代法

  • 对目标函数在 \(L(\theta_{t} + \delta)\) 处做二阶泰勒展开
    $$
    \begin{align}
    L(\theta_{t} + \delta) = L(\theta_{t}) + \nabla L(\theta_{t})^{T}\delta + \frac{1}{2}\delta^{T}\nabla^{2}L(\theta_{t})\delta \\
    \end{align}
    $$
  • 直接对上式求导=0得
    $$
    \begin{align}
    \delta_{t} &= \mathop{\arg\min}_{\delta}L(\theta_{t} + \delta) \\
    &= \mathop{\arg\min}_{\delta}(L(\theta_{t}) + \nabla L(\theta_{t})^{T}\delta + \frac{1}{2}\delta^{T}\nabla^{2}L(\theta_{t})\delta) \\
    &= -\nabla^{2} L(\theta_{t})^{-1} \nabla L(\theta_{t}) \\
    &= -H(\theta_{t})^{-1}\nabla L(\theta_{t}) \\
    \end{align}
    $$
  • 于是梯度下降法的更新表达式为
    $$
    \begin{align}
    \theta_{t+1} &= \theta_{t} + \delta_{t} \\
    &= \theta_{t} - \nabla^{2} L(\theta_{t})^{-1} \nabla L(\theta_{t})
    \end{align}
    $$

比较梯度下降法与牛顿法

  • 一般来说,牛顿法收敛速度快
    • 一种解释是梯度下降法用一次平面去拟合局部区域牛顿法是用二次曲面去拟合局部区域 ,所以后者能得到更好的拟合效果,迭代的方向也就越精确
    • 另一种解释是梯度下降只能看到当前目标函数的下降方向,牛顿法可以看到当前当前目标函数的下降方向,同时还能看到一阶导数的变化趋势,所以拟合更快
  • 梯度下降法中有个超参数 \(\alpha\)
    • 牛顿法中海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果(这里的步长与梯度下降中的 \(\alpha\) 步长不一样,梯度下降中的 \(\alpha\) 是超参数,表示每次向着负梯度移动的长度,而牛顿法中没有超参数)
    • 为了防止震荡,这个步长 \(\alpha\) 也可以随着迭代次数不断减小
  • 梯度下降法可能造成震荡
    • 越接近最优值时,步长 \(\alpha\) 应该不断减小,否则会在最优值附近来回震荡
    • <<统计学习方法>>第一版附录A中, \(\alpha\) 是不断变化的,能保证不会造成震荡
  • 牛顿法在多变量时需要求海森矩阵H的逆,比较复杂,时间和空间上有要求,不如梯度下降法来的容易

拟牛顿法

  • 解决牛顿法求取海森矩阵 \(H\) 的逆 \(H^{-1}\) 时比较耗时间的难题
  • 用一个近似矩阵 \(B\) 代替海森矩阵 \(H\) 的逆 \(H^{-1}\)
  • 不同算法近似矩阵 \(B\) 的计算有差异
  • 常见的拟牛顿法:BFGS,L-BFGS和OWL-QN等
    • <<统计学习方法>>中讲解了三个拟牛顿算法: DFP,BFGS和Broyden类算法

总结

归纳自<<统计学习方法>>

相同迭代公式

  • 目标函数为 \(f(\theta)\),最优化方法的终极目标是求 \(f(\theta)\) 的最大值点(或极大值点)
  • 目标函数的一阶导数
    • 参数一维时为: \(f{}’(\theta)=\frac{\partial f(\theta)}{\partial \theta}\)
    • 参数多维时为: \(\nabla f(\theta)\)
  • 目标函数的二阶导数
    • 参数一维时为: \(f{}’{}’(\theta)\)
    • 参数多维时为:(海森矩阵) \(H(\theta)=\left [ \frac{\partial^{2}f}{\partial \theta^{i}\partial \theta^{j}} \right ]_{n\times n}\)
  • 梯度下降法,牛顿法和拟牛顿法的迭代参数均可表示为下面的迭代形式:
    $$\theta_{k+1}=\theta_{k}+\lambda_{k}p_{k}$$
  • 均通过一阶导数 \(\left | \nabla f(\theta) \right |<\epsilon\) 为收敛判断条件
    • 在<<统计学习方法>>中,梯度下降法还可以通过 \(\left | \theta_{k+1}-\theta_{k+} \right |<\epsilon\) 或 \(\left | f(\theta_{k+1})-f(\theta_{k+}) \right |<\epsilon\) 来判断收敛

梯度下降法

  • \(p_{k}=\nabla f(x)\)
  • \(\lambda_{k}\) 是步长,满足
    $$f(\theta_{k}+\lambda_{k}p_{k})=\min_{\lambda \geq 0}f(\theta_{k}+\lambda p_{k})$$

牛顿法

  • \(p_{k}=-H_{k}^{-1}\nabla f(\theta)\)
  • \(\lambda_{k}=1\) 是固定长度的,详情见数学中的牛顿法的推导,每次迭代到斜率与横轴的交点
    $$\lambda_{k}=1$$

拟牛顿法

  • 核心思想是找一个容易计算的近似矩阵(可以迭代计算,而不是每次重新计算逆矩阵的矩阵)替代原始牛顿法中的海森矩阵 \(H\) (\(B\))或者海森矩阵的逆矩阵 \(H^{-1}\) (\(G\))
DFP算法
  • 使用 \(G_{k}\) 逼近海森矩阵的逆矩阵 \(H^{-1}\)
  • \(p_{k}=-G_{k}\nabla f(\theta)\)
    • 关于 \(G_{k}\) 的计算:
      • 初始化 \(G(0)\) 为正定对称矩阵
      • \(G_{k+1}=G_{k}+\frac{\delta_{k}\delta_{k}^{T}}{\delta_{k}^{T}y_{k}}-\frac{G_{k}y_{k}y_{k}^{T}G_{k}}{y_{k}^{T}G_{k}y_{k}}\)
        • \(\delta_{k}=\theta_{k+1}-\theta_{k}\)
        • \(y_{k}=\nabla f(\theta_{k+1})-\nabla f(\theta_{k})\)
  • \(\lambda_{k}\) 是步长,满足
    $$f(\theta_{k}+\lambda_{k}p_{k})=\min_{\lambda \geq 0}f(\theta_{k}+\lambda p_{k})$$
BFGS算法
  • 使用 \(B_{k}\) 逼近海森矩阵 \(H_{k}\)
  • \(p_{k}=-B_{k}^{-1}\nabla f(\theta)\)
    • 关于 \(B_{k}\) 的计算:
      • 初始化 \(B(0)\) 为正定对称矩阵
      • \(B_{k+1}=B_{k}+\frac{y_{k}y_{k}^{T}}{y_{k}^{T}\delta_{k}}-\frac{B_{k}\delta_{k}\delta_{k}^{T}B_{k}}{\delta_{k}^{T}B_{k}\delta_{k}}\)
        • \(\delta_{k}=\theta_{k+1}-\theta_{k}\)
        • \(y_{k}=\nabla f(\theta_{k+1})-\nabla f(\theta_{k})\)
  • \(\lambda_{k}\) 是步长,满足
    $$f(\theta_{k}+\lambda_{k}p_{k})=\min_{\lambda \geq 0}f(\theta_{k}+\lambda p_{k})$$
Broyden类算法(Broyden’s algorithm)
  • 使用 \(G_{k}\) 逼近海森矩阵的逆矩阵 \(H^{-1}\)
  • 在BFGS中取 \(G^{BFGS}=B^{-1}\)
  • 利用DFP和BFGS二者的线性组合选择合适的海森矩阵的逆矩阵 \(H^{-1}\) 的替代矩阵
    $$G_{k+1}=\alpha G^{DFP}+(1-\alpha)G^{BFGS}$$
  • 可以证明 \(G\) 此时是正定的
  • \(0\leq \alpha \leq 1\)
  • 这样得到的一类拟牛顿法都称为Broyden类算法

ML——训练集-验证集-测试集

训练集(training set),验证集(validation set)和测试集(test set)


统计学习方法:

  • 训练集: 用于模型训练
  • 验证集: 用于模型选择
  • 测试集: 用于模型评估(原文:用于最终对学习方法的评估)

个人理解:

  • 训练集: 用于模型拟合的数据样本
  • 验证集: 用于模型的选择
    • 不参与训练过程
    • 可用于超参数的调整
    • 可用于判断模型是否过拟合(用于决策何时停止训练过程)
    • 可多次使用
  • 测试集: 用于模型的评估
    • 不参与训练过程
    • 不可用于超参数的调整
    • 只可以使用一次

一些场景说明

做kaggle题目时

  • 不用测试集,因为数据集本来就少,测试集不能用于优化或者选择模型,只能用于评估
  • 此时测试集可以理解为kaggle题目中未知的部分数据
  • 此时从验证集中划分一部分验证集

写论文时

  • 需要训练集用于训练,验证集用于模型选择
  • 并且最终需要测试集用于评估模型和与其他人的模型对比

核心:验证集和测试集不能参与训练模型,测试集不能参与模型选择
模型训练时不能让模型看见验证集
在模型确定前都不能让模型看见测试集


关于K折交叉验证法

  • 统计学习方法中的描述: 交叉验证中每次划分为两部分,一部分用于训练模型,另一部分用于测试模型
  • 理解:上面的两部分,一部分为训练集,另一部分为验证集,在这里面没有测试集

关于网格搜索

  • 用来调超参数的一部分正好称为验证集
  • 除了验证集外,加入写论文做实验需要和其他模型作比较的话需要使用测试集(和验证集以及训练集都不相交)

关于数据划分的比重

  • 训练集:测试集 = 7:3
  • 训练集:验证集:测试集 = 6:2:2
  • 数据量非常多时(比如百万级别),验证集和测试集的比重可以适当缩小,因为验证集的主要目的是选择较好的模型,而测试集的目的是为了测试模型的效果,如果1万条数据足以验证模型的效果,则没必要非得给20万条数据

ML——贝叶斯优化

本文持续更新,主要主要介绍贝叶斯优化

  • 参考链接:
    • 一文详解贝叶斯优化(Bayesian Optimization)原理 - 下里巴程序员的文章 - 知乎
    • 贝叶斯优化/Bayesian Optimization - 代忠祥的文章 - 知乎

关于贝叶斯优化

  • 贝叶斯优化(Bayesian Optimization,简称BO)主要用于解决超参数优化问题,目标是找到一组使得目标函数最大或者最小的超参数
  • BO的最大优势是可以使用非常少的步骤找到一个还不错的超参数组合,而且不需要知道目标函数(模型)的梯度
  • BO使用的场景特点:
    • 需要优化的函数(模型)是非常复杂的
    • 需要优化的函数(模型)对指定的变量(一般指超参数)没有梯度信息(求不出梯度)
  • BO不适合使用的场景包括:
    • 离散问题,即参数是离散的,则不适合使用BO
    • 参数太多,即参数维度过高,此时不适合使用BO
  • 和BO的适用场景和进化算法(如CEM等)比较相似

贝叶斯优化的一般步骤

  • 贝叶斯优化(Bayesian Optimization)算法是一个序列决策过程(Sequential Decision-making Problem),其核心框架是SMBO (Sequential Model-Based Optimization),而贝叶斯优化狭义上特指代理模型为高斯过程回归模型的SMBO,SMBO的一般算法思路如下:
    • 第一步:初始化采样n组参数 \(\{x_1,x_2,…,x_n\}\)
    • 第二步:针对每组参数,观察目标函数(待优化模型)的值(这一步一般需要训练模型或者模拟环境仿真,是成本比较高的操作),将得到的结果组合生成数据集 \(D=\{(x_1,y_1),(x_2,y_2),…,(x_n,y_n)\}\)
    • 第三步:根据数据集D拟合(训练)一个代理模型(Surrogate Model),该代理模型的功能是通过输入 \(x_i\) 预测输出 \(y_i\)
    • 第四步:根据采集函数(Acquisition Function,简称AC Function),选择一个最优参数 \(x_i\)
    • 第五步:观察目标函数(待优化模型)在参数 \(x_i\) 下的输出值 \(y_i\),并将 \((x_i,y_i)\) 添加到数据集D中
    • 循环执行第三步到第五步,直到达到指定的迭代次数
    • 最终:输出数据集D中最优的参数 \(x^*\)

代理模型

  • 代理模型一般是非常容易计算的,或者有梯度的,给出任意的 \(x_i\) 能快速预估 \(y_i\) 的
  • 常见的代理模型可以是:高斯过程回归、随机森林等等。其中,贝叶斯优化狭义上特指代理模型为高斯过程回归模型的SMBO
  • 高斯过程回归可参考:
    • 如何通俗易懂地介绍 Gaussian Process? - 石溪的回答 - 知乎
    • 快速入门高斯过程(Gaussian process)回归预测 - 摸鱼大王二百五的文章 - 知乎

采集函数

  • 通常做法是设计一个采集函数A,对每个采样点x进行打分,分数越高的点越值得被采样
  • 一般来说,采集函数需要满足下面的要求:
    • 在已有的采样点处采集函数的值更小,因为这些点已经被探索过,再在这些点处计算函数值对解决问题没有什么用
    • 探索:在置信区间更宽(方差更大)的点处采集函数的值更大,因为这些点具有更大的不确定性,更值得探索
    • 利用:对最大(小)化问题,在函数均值更大(小)的点处采集函数的值更大,因为均值是对该点处函数值的估计值,这些点更可能在极值点附近
  • 常用的AC Function包括下面几种:
    • Probability of Improvement:
    • Expected Improvement:
    • Entropy Search:
    • Upper Confidence Bound:

ML——采样方法

本文介绍几种采样的方法


计算机能做什么样的采样

Uniform

  • 本质上来讲,计算机只能实现对均匀分布(Uniform Distribution)的采样

numpy.random模块功能介绍

numpy.random是用来实现随机数生成的库

  • 生成随机数random
  • 生成某个随机数的随机样本random_sample
  • 对序列做随机shuffle,choice等

numpy.random模块的采样

numpy.random模块下实现了很多常见分布的采样函数(他们本质上都是计算机通过多次均匀分布采样实现的)

单变量分布
  • beta:beta分布
  • binomial:二项分布
  • chisquare:卡方分布
  • exponential:指数分布
  • 还有更多…
多变量分布
  • dirichlet : Multivariate generalization of Beta distribution. 狄利克雷分布
  • multinomial: Multivariate generalization of the binomial distribution. 多项分布
  • multivariate_normal: Multivariate generalization of the normal distribution. 多变量正太(高斯)分布
标准分布
  • standard_cauchy: Standard Cauchy-Lorentz distribution.
  • standard_exponential: Standard exponential distribution.
  • standard_gamma: Standard Gamma distribution.
  • standard_normal: Standard normal distribution.
  • standard_t: Standard Student’s t-distribution.

复杂分布的采样方式

在实践中,往往有很多复杂的分布,复杂到我们无法直接对他进行采样
有些时候我们甚至不知道目标函数的分布函数

逆变换采样

Inverse Transform Sampling

  • 目标函数: \(p(x)\)

  • 相关补充:

    • 求函数的累积分布函数 \(\Phi(x) = \int_{- \infty}^{x}p(t)d_{t}\)
    • 求累计分布函数的逆函数(反函数) \(\Phi^{-1}(x)\)
  • 采样步骤:

    • 均匀分布采样: \(u_{i} \sim U(0,1)\)
    • 计算: \(x_{i} = \Phi^{-1}(u_{i})\),其中 \(\Phi^{-1}(\cdot)\) 是 \(p(x)\) 的累积分布函数(CDF)的逆函数
    • \(x_{i}\) 服从 \(p(x)\) 分布
  • 优缺点:

    • 优点:
      • 仅需进行一个均匀分布采样即可
    • 缺点:
      • 需要求解累积分布函数的逆函数
      • 累积分布函数的逆函数不一定容易求解,有些甚至无法求解
  • 证明:

    • 示意图如下:
    • 图中纵轴就是均匀分布采样的结果,然后丛纵轴对应到的累计分布函数 \(\Phi(x)\) 的曲线上概率越大的地方实际上也就是累积分布函数的导数(原始分布函数 \(p(x)\))最大的地方
    • 这个对应过程等价于我们将 \(x\) 轴和 \(y\) 轴互换,也就是求累积分布函数的逆函数即可

拒绝采样

别名: Accept-Reject Sampling, 接受-拒绝采样

  • 目标函数: \(p(x)\)

  • 相关补充:

    • (参考分布寻找) : 寻找一个容易采样的分布 \(q(x)\),满足 \(p(x) \leq M\cdot q(x)\)
    • 一般选择正太分布等
    • \(M > 1\),从后面的证明可以知道, M越小越好
  • 采样步骤:

    • 参考分布采样: \(x_{i} \sim q(x)\)
    • 均匀分布采样: \(u_{i} \sim U(0,1)\)
    • 判断是否接受: 如果 \(u_{i} < \frac{p(x_{i})}{M\cdot q(x_{i})}\),则接受采样,否则拒绝本次采样(丢弃本次采样的 \(x_{i}\))
    • \(x_{i}\) 服从 \(p(x)\) 分布(不包括被拒绝的样本)
  • 证明:

    • 由采样步骤得到,最终得到的分布服从$$q(x)\cdot \frac{p(x)}{M\cdot q(x)} = \frac{1}{M}p(x)$$
    • 对上述分布进行归一化即可得到采样的样本服从 \(p(x)\)
    • 从 \(\frac{1}{M}p(x)\) 这里也可以看出来采样的效率由M值的大小决定,M越小,采样效率越高
  • 优缺点:

    • 优点:
      • 复杂分布变成简单分布采样+一个均匀分布,有时候甚至可以将参考分布也使用均匀分布
    • 缺点:
      • 参考分布 \(q(x)\) 的选择很难的
      • 不合适的参考分布可能导致采样效率低下
  • 解决 \(q(x)\) 难以寻找的一种解决方案: 自适应拒绝采样(Adaptive Rejection Sampling)

    • 只适用于目标函数为凸函数
    • 使用分段线性函数来覆盖目标函数
    • 下面是示意图片(图片来源: https://www.jianshu.com/p/3fb6f4d39c60)

重要性采样

Importance Sampling

  • 重要性采样与前面两者不同,重要性采样解决的问题是在求一个函数的关于原始分布的期望时
  • 目标定义: \(\mathbb{E}_{x\sim p(x)}[f(x)] = \int_{x}f(x)p(x)d_{x}\)
  • 直接对 \(p(x)\) 采样可能存在的两个问题:
    • \(p(x)\) 可能难以采样
    • \(p(x)\) 采样到的样本大多都在 \(f(x)\) 比较小的地方,即 \(f(x)\) 与 \(p(x)\) 的差别太大导致有限次采样无法正确评估原始期望,采样次数不够大的话偏差可能很大
      • 这里一种解决方案是采样足够多的次数,多花点时间保证所有样本量足够,降低偏差
  • 解决方案:
    • 引入一个容易采样的参考分布 \(q(x)\),满足
      $$
      \begin{align}
      \mathbb{E}_{x\sim p(x)}[f(x)] &= \int_{x}f(x)p(x)d_{x} \\
      &= \int_{x}f(x)\frac{p(x)}{q(x)}q(x)d_{x} \\
      &= \int_{x}f(x)w(x)q(x)d_{x} \\
      \end{align}
      $$
    • 其中 \(w(x) = \frac{p(x)}{q(x)}\) 称为样本 \(x\) 的重要性权重(Importance Weight),不同样本的重要性权重不同
    • 与直接从 \(p(x)\) 中采样相比,相同采样次数,最终得到期望偏差会更小,因为 \(p(x)\) 会增大在 \(f(x)\) 大但是 \(p(x)\) 极小处的样本被采样的概率,然后调低这个样本的权重
  • 示意图片:

总结

  • 逆采样和拒绝采样都是在通过简单分布采样来采样原始分布的样本,最终的样本就是服从原始分布的样本 \(x_{i}\sim p(x)\)
  • 重要性采样本质上是通过简单分布来采样和重要性权重来估计某个函数在原始分布上的期望 \(\mathbb{E}_{x\sim p(x)}[f(x)] = \int_{x}f(x)p(x)d_{x}\)
  • 对于高维空间中的随机向量,拒绝采样和重要性采样经常难以找到合适的参考分布,容易导致采样效率低下(样本的接受概率太小或者重要性权重太低),此时可以考虑马尔可夫蒙特卡罗采样法(MCMC),MCMC中常见的有两种,MH(Metropolis-Hastings)采样法和Gibbs采样法,关于MCMC详情可参考我的博客ML——MCMC采样

RS——FMM模型

本文主要介绍FFM(FFM, Field-aware Factorization Machine)


FFM模型

  • FFM最初概念来自Yu-Chin Juan(阮毓钦,毕业于中国台湾大学,现在美国Criteo工作)与其比赛队员,他们借鉴了Michael Jahrer的论文中的field概念提出了FM的升级版模型

Field的概念

  • FFM把相同性质的特征归于同一个Field,
    • 比如“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中
  • 简单来说,就是同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等

模型推导

  • FM 对每个特征 \(x_i\) 学习一个 \(k\) 维隐向量 \(v_i\),二次项参数数量为 \(nk\)
  • FFM 对每个特征 \(x_i\) 和每个域(field) \(f_j\) 学习一个 \(k\) 维隐向量 \(v_{i,f_{j}}\),二次项参数数量为 \(nfk\)
    • 假设样本的特征有 \(n\) 个
    • 假设filed有 \(f\) 个
  • 建模方程
    $$y(x) = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_{i, f_j}, \mathbf{v}_{j, f_i} \rangle x_i x_j \label{eq:ffm}\tag{4}$$
    • 值得注意的是,上面的公式中, \(\mathbf{v}_{i, f_j}\) 的第二个下标是 \(f_j\),不是 \(f_i\),表示的是, 同一个特征 \(x_{i}\) 在对不同的域(Field) \(f_j\) 中的特征 \(x_j\) 组合时,FFM考虑到 \(x_j\) 的域不同,应该用不同的组合方式,所以使用不同的隐向量
    • FM中 \(x_i\) 的隐向量为 \(v_i\)
    • FFM中 \(x_i\) 的隐向量有多个,确切的说是隐矩阵, 对每个不同的域Field(包括 \(x_i\) 自身所在的域), 都有一个隐向量 \(v_{i,f_{j}}\), 和不同类型的特征组合时,我们选择他们对应域的隐变量与之相乘
  • 当前模型的二次项一共有 \(\frac{n(n-1)}{2}\) 项, 计算复杂度为 \(O(n^2)\) 与FM化简前相同, FFM这里不能化简, 所以训练和预测复杂度计算复杂度为 \(O(n^2)\)

FFM需要关注的细节

  • 样本归一化, FFM默认进行样本归一化, 有个参数pa.norm设置为真即可;若此参数设置为假,很容易造成数据inf溢出,进而引起梯度计算的nan错误
    * 因此,样本层面的数据是推荐进行归一化的
    • [待更新],样本归一化的具体操作,样本归一化的作用是什么?
  • 特征归一化,这里由于样本归一化后categorical的特征会变得非常小
  • 省略零值特征, 从建模方程可以看出, 零值特征对FFM模型完全没有贡献,包含零值特征的一切组合均为零

RS——FM-因子分解机

本文主要介绍因子分解机(FM, Factorization Machine)


FM模型

  • 最早于2010年提出,目标是解决稀疏特征下的特征组合问题

模型推导

  • 假设训练数据为: \(\{(x, y)\}\)
    • \(x\) 特征维度为n(所有特征One-Hot编码后Concat的总维度), 初始时维度比较小,但是特征中含有特殊的字符串或者对象类型等,我们使用One-Hot编码来拓展每个特殊特征(如果一个特征有m个可能的取值,那么One-Hot编码下每个特征将被扩展为m个维度,累计计算x是所有One-Hot的维度和)
      • 由于用One-Hot来编码,所以实际上特征是非常稀疏的(某些特征很多样本都为0,只有少数的样本为1)
      • 在FM中,特征 \(x\) 的所有取值都为0或者1 ,因为都是One-Hot的结果做Concat得到的;在使用FM作为组件的模型(比如DeepFM等)中,输入FM的部分也只是稀疏特征的One-Hot编码
      • 如果有连续特征想要输入FM怎么办?可采用连续特征离散化的方法(比如等频分桶)
    • \(y_{i}\) 是样本的标签,表示是否点击(Clicked?), 1表示点击,0表示未点击
  • 一般模型建模
    $$y(x) = w_0+ \sum_{i=1}^n w_i x_i \label{eq:poly}\tag{1}$$
    • 未挖掘到特征之间的关联关系,
      • 如“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响
      • 如“化妆品”类商品与“女”性,“球类运动配件”的商品与“男”性,“电影票”的商品与“电影”品类偏好等
  • FM建模
    $$ y(x) = w_0+ \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n w_{ij} x_i x_j $$
    • n是样本的特征数量
    • \(x_{i}\) 是样本的第 \(i\) 个特征 ,不是第 \(i\) 个样本
    • \(w_{0}, w_{i}, w_{ij}\) 都是模型参数
    • 显然模型组合特征的参数数量为 \(\frac{n(n-1)}{2}\),且任意两个参数独立
  • 存在问题: 在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的
    • 原因: 每个参数 \(w_{ij}\) 的训练需要大量 \(x_{i}\) 和 \(x_{j}\) 都非零的样本;由于样本数据本来就比较稀疏,满足“ \(x_{i}\) 和 \(x_{j}\) 都非零”的样本将会非常少。训练样本的不足,很容易导致参数 \(w_{ij}\) 不准确,最终将严重影响模型的性能
  • 解决问题的灵感
    • 基于模型的协同过滤中,一个User-Item的评分(rating)矩阵可以分解为User和Item两个矩阵,每个用户和商品都可以用一个隐向量表示
  • FM解决问题的方法:
    • 用一个对称矩阵 \(W\) 代表所有二次项参数 \(w_{ij}\),矩阵的两边对称的是参数,中间填充正实数
    • 矩阵 \(W\) 可分解为
      $$W=V^{T}V$$
      • \(V\) 的第 \(j\) 列就是第 \(j\) 维特征的隐向量
      • \(V\) 是 \(k x n\) 维的向量(\(k << n\))
      • 此时有
        $$w_{ij} = \boldsymbol{v}_i^T \boldsymbol{v}_j$$
        $$ y(x) = w_0+ \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \boldsymbol{v}_i^T \boldsymbol{v}_j x_{i} x_{j} $$
      • \(v_{i}\cdot v_{j}\) 是两个隐向量的内积
      • 此时 \(w_{ij}\) 和 \(w_{mj}\) 之间不在是独立的,他们有相同的内积项 \(v_{j}\),这意味着所有包含“ \(x_{i}\) 的非零组合特征”(存在某个 \(j\neq i\),使得 \(x_{i}x_{j}\neq 0\))的样本都可以用来学习隐向量 \(v_{i}\) (从而学习到 \(w_{ij}\)), 这很大程度上避免了数据稀疏性造成的影响
        • 问题: 以前不能用来学习吗?
        • 回答: 以前的时候 \(w_{ij}\) 参数只能靠 \(x_{i}, x_{j}\) 均为1的样本 \(x\) 来训练,现在 \(w_{ij}\) 能由 \(v_{j}, v_{j}\) 生成,而 \(x_{i}\) 不为0的所有 \(x\) 都可以用来训练 \(v_{i}\),(当然,这里还需要存在某个 \(j\neq i\),使得 \(x_{i}x_{j}\neq 0\), 只要当前样本不是只有 \(x_{i}\) 这个维度为1,这个条件肯定是成立的)
  • 当前的式子运算复杂度是 \(O(kn^2)\),这意味着我们训练和预测时计算 \(y(x)\) 的值都需要 \(O(n^2)\) 的时间
  • 考虑到上面的公式主要是复杂在二次项的计算,我们考虑对二次项进行化简

$$
\sum_{i=1}^{n-1}\sum_{j=i+1}^n(v_i^T v_j)x_ix_j = \frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n(v_i^T v_j)x_ix_j-\sum_{i=1}^n(v_i^T v_i)x_ix_i\right)
$$

$$
\begin{align}
&=\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n\sum_{l=1}^kv_{il}v_{jl}x_ix_j-\sum_{i=1}^n\sum_{l=1}^k v_{il}^2x_i^2\right)\\
&=\frac{1}{2}\sum_{l=1}^k\left(\sum_{i=1}^n(v_{il}x_i)\sum_{j=1}^n(v_{jl}x_j)-\sum_{i=1}^nv_{il}^2x_i^2\right)\\
&=\frac{1}{2}\sum_{l=1}^k\left(\left(\sum_{i=1}^n(v_{il}x_i)\right)^2-\sum_{i=1}^n (v_{il}x_i)^2\right)\\
\end{align}
$$

  • 上式中:
    • 现在二次项的复杂度是 \(O(nk)\),最终模型的计算复杂度也是 \(O(nk)\),注意这里是计算复杂度,不是参数数量(虽然FM模型的二次项参数数量碰巧也是 \(nk\) 个)
    • 意味着我们可以在线性时间内对FM模型进行训练和预测 ,是非常高效的
    • \(v_i, v_j\) 分别表示 \(\boldsymbol{v}_i, \boldsymbol{v}_j\)

参数数量

  • 整体模型的参数一共是 \(1+n+nk\) 个
    • 偏执项一个 \(w_{0}\)
    • 一次项 \(n\) 个 \((w_{1},\dots,w_{n})\)
    • 二次项 \(nk\) 个 \(v_{ij}\),其中 \(i=1,2,\dots,n\), \(j=1,2,\dots,k\)

和其他模型的对比

  • FM较为灵活,通过一些合适的特征变换,可以用来模拟二阶多项式核的(SVM ,MF模型 ,SVD++模型)等
  • 相比SVM的二阶多项式而言,FM在样本稀疏的情况下有优势?什么优势?[待更新],
    • 能想到的其中一个优势是FM训练/预测是线性复杂度,而二阶多项式核SVM需要计算核矩阵[待更新,关于核矩阵的理解?],所以复杂度是 \(O(n^2)\)
  • MF相当于只有 \(u,i\) 两类特征的FM模型[待更新:MF的详细推导]
    • 而FM模型中我们还可以加入任意多的特征,比如user的历史购买平均值,item的历史购买平均值等,但是MF只能局限在两类特征中
    • 为什么MF相当于只有 \(u,i\) 两类特征的FM模型?
      • 证明,将MF中的每一项评分(rating)改写为:
        $$r_{ui} \sim \beta_{u} + \gamma_i + x_u^Ty_i$$
      • 显然可得结论
  • SVD++与MF类似,都是矩阵分解方法,在特征的扩展性上也不如FM模型[待更新: SVD++的推导和理解]
  • FFM是FM的改进模型,加入了Field的概念,参考RS——FMM模型

RS——WCE-YouTube推荐论文

本文主要介绍WCE

原始论文:[Youtube] Deep Neural Networks for YouTube Recommendations (Youtube 2016)


WCE

  • Weighted Cross Entropy,加权交叉熵,也叫做Weighted LR,Weighted Logistic Regression
  • 用于解决回归问题
    • 主要是存在大量负样本(值为0)的回归问题
    • 比如视频浏览时长问题(点击率就比较低)
  • 训练时使用损失函数:
    $$
    loss = \sum_i w_i y_ilog(p_i) + (1-y_i)log(1-p_i)
    $$
    • 其中 \(p_i = \frac{1}{1+e^{-\theta^{T}\boldsymbol{x}}}\)
    • \(w_i\) = 回归值(如观看时长)
    • \(y_i\) = 是否为正值(即是否点击,未点击表示观看时长为0,视为负样本)
    • 对任意样本,我们真实想要的预估目标是一个视频被点击且观看的概率 \(pred = wp\)
  • serving时使用下面的定义来表示回归值:
    $$
    pred = e^{\theta^{T}\boldsymbol{x}}
    $$
    • 对于原始的CE损失函数,有 \(Odds = \frac{p}{1-p} = e^{\theta^{T}\boldsymbol{x}}\) (补充:Odds表示样本为正的概率除以样本为负的概率, \(log(Odds) = \theta^{T}\boldsymbol{x}\) )就是logit
    • 当前损失函数下,正负样本的比例(或权重)发生了变化,实际上 \(Odds = \frac{p}{1-p} = e^{\theta^{T}\boldsymbol{x}}\) 表示的值不再是原始样本中正负样本的比例,而是带权重的比例,详情看后续的证明
  • 可以证明上面的方法会造成预估值有偏

WCE改进

  • 改进后的损失函数
    $$
    loss = \sum_i w_i y_ilog(p_i) +\log(1-p_i)
    $$
  • 改进前方案是有偏的,修改为上面的损失函数后, \(pred = Odds = e^{\theta^{T}\boldsymbol{x}}\) 是无偏的
  • 证明:
    • 假设在原始的CE损失函数下,正负样本的比例为A:B,此时有 \(p = \frac{A}{A+B}\) 【这里只是假设训练时遇到特征值完全相同的多个样本(有正有负),模型在遇到serving时遇到同一个特征值样本时,应该预估样本为正的概率为多少?】
      • 原始CE下,样本为正的概率就是正样本数/总样本数
    • 那么在上述加权的损失函数下,相当于正负样本的比例为 \(wA:B+A\),此时有 \(p’ = \frac{wA}{wA+B+A}\)
      • 因为权重被修改了,可以证明样本不变,增加权重等价于权重不变,增加样本(重复采样)
      • \(wA:B+A\) 的原因是因为正样本被加了 \(w\) 倍的权重,而负样本则被增加了A个(原始的CE函数中正样本不会累加 \(log(1-p)\) 作为损失,但改进后的WCE会
    • 我们真实想要的预估值是: \(pred = wp = w * \frac{A}{A+B}\)
      • 可以表述为样本为正的概率乘以样本为正时的值(用户点击视频的概率*用户点击视频后观看的概率)
    • 经推导有:
      $$
      pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p’}{1-p’} = \frac{\frac{wA}{wA+B+A}}{1-\frac{wA}{wA+B+A}} = w * \frac{A}{A+B} = wp
      $$
      • 注意,我们需要的是 \(pred = wp\) 而不是 \(pred = wp’\)
        • 因为 \(p’\) 是被我们修改权重后得到的模型输出(均值)
      • 真实serving时,模型的输出值 \(p’\) 是不用的,只使用 \(pred = e^{\theta^{T}\boldsymbol{x}}\) 就可以了
      • 其他:
        • 对于原始CE,有:
          $$
          pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p}{1-p} = \frac{\frac{A}{A+B}}{1-\frac{A}{A+B}} = \frac{A}{B} = \frac{p}{1-p}
          $$
        • 对于YouTube的WCE,有:
          $$
          pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p’’}{1-p’’} = \frac{\frac{wA}{wA+B}}{1-\frac{wA}{wA+B}} = w * \frac{A}{B} \approx w * \frac{A}{A+B} = wp
          $$
          • 约等于符号成立的前提是正样本占比特别少 ,此时 \(\frac{A}{B} \approx \frac{A}{A+B}\)
          • 也就是说,在正样本占比特别少时,使用YouTube的WCE也是没问题的,但是为了保证无偏,建议使用改进后的WCE

扩展问题

  • 在面对回归问题是,WCE相对MSE真的有提升吗?

其他

  • WCE也可以用于分类问题中,目的是让模型更关注某些特殊样本

其他参考链接

  • 揭开YouTube深度推荐系统模型Serving之谜
1…565758…66
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

659 posts
53 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4