Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

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, 接受-拒绝采样 ,有时数学上也可以称为 Rejection 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——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)\) 的时间
  • 考虑到上面的公式主要是复杂在二次项的计算,我们考虑对二次项进行化简
1…305306307…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4