xueyuediana 2019-09-21
高斯判别分析(GDA)
对于高维空间中的一般似然和先验函数,很难用贝叶斯定理进行推断。但是,如果使用已知的分布函数对它们建模是可行的,我们可以设法通过分析轻松地解决它们。考虑一个分类问题,将对象分组为苹果或橙子。假设分布p(x | y = apple)和p(x | y = orange)都可以用多元高斯分布建模。对于100×100的图像,x将包含100×100×3的特征(像素颜色RGB)。这是多元高斯分布的通用公式。
使用训练数据集,我们从每个图像中相同的空间位置(i,j)计算每个特征的平均值。下面的μ0将是一个30000维向量,包含这些特征的均值,对象是苹果。在计算μ1时,我们对orange重复同样的过程。
这里是定义
然而,我们简化了这个问题,所以我们对条件概率p(x|y=0)和p(x|y=1)共享相同的协方差矩阵。这个矩阵将使用来自组合数据(苹果和桔子)的图像来计算。由于这种简化,两个条件分布的形状是相同的。如下图所示,在划分类时,我们可以很容易地在两种模式之间画出一个决策边界。
我们可以删除我们的简化并分别计算两个协方差矩阵。但是,决策边界将是非线性的。实际上,受Σ形状的影响,它会变得非常复杂。
贝叶斯线性回归
如果用高斯分布对先验和似然进行建模是可行的,我们会这样做,因为后验是高斯分布的,可以很容易地进行分析计算。
让我们举一个使用贝叶斯定理和线性回归来建立模型的例子。我们的目标是使用MAP 找到模型参数θ 。
通过将先验和似然性都建模为高斯,MAP变为
上面的后验实际上是高斯分布的,即使它不是很明显。我们想要找到对应的均值μ和协方差Σ。
首先,我们可以将高斯定义扩展为
通过将其与方程进行比较,我们发现μ和Σ为:
预测分布
为了做出预测,我们可以将后验分布边缘化,即∫p(y|w)p(w)dw
同样,我们可以通过分析来解决积分问题
使用贝叶斯推断(下图),随着预测与已知的圈内训练数据的距离越来越远,不确定性也会增加。
对于点估计算法,我们不会估计预测的确定性。
主动学习
主动学习使用当前的训练数据集在决定下一步应该测量什么(x₀→y₀)。
让我们逐步进行
高斯分布的熵为
我们对x₀的选择将最大程度地降低后验熵
拉普拉斯逼近
如前所述,我们可以使用高斯分布对先验和似然进行建模来计算后验分布。但不一定都是高斯函数。但我们仍然可以假设后验函数是高斯分布的并使用拉普拉斯近似计算分布。利用拉普拉斯近似,我们假设后验函数为高斯函数:
让我们用MAP计算后验并将f定义为
让我们注意,上面优化MAP与优化f相同。分子中的指数函数是单调函数。
我们可以用泰勒展开式将f近似到二阶
拉普拉斯近似的秘密在于z的选择,我们将使用从MAP中优化得到的权值w*作为z,如前所述,优化MAP与优化f是一样的,因此f ' (z)应该等于0。后验分布可以进一步简化为
即
我们可以认识到,这符合多元高斯分布的定义,其中
如果我们使用逻辑回归σ(yᵢxᵢᵀw) 计算p,则Σ的负逆将为:
这是最终的算法,其中λ是可调正则化因子
在步骤(1)中,我们可以使用梯度方法或其他优化方法来找到优化的w *。然后,我们可以使用步骤(2)中的公式计算后验的协方差Σ。我们的后验模型(第3步)将是具有在(1)和(2)中计算的均值和协方差的高斯模型。
多元高斯条件分布
设x为n维向量,可以使用下面的高斯分布用n均值和协方差矩阵建模。
我们可以将x分成2个子向量x₁ 和x₂。我们也相应地细分Σ。
现在,我们要用上面的子分量来表示条件概率p(x₁| x₂)。
这为我们做出预测奠定了基础。假设x₂ 是训练数据集中的数据。一般的概念是,如果我们想对一个新的数据点进行新的预测,我们会发现它与现有的训练数据点相似。然后,我们使用训练数据集的标签推断结果。
直觉
考虑我们有两个人的体重和身高(person₁(150,66)和person₂(200,72))。让我们使用此信息构建一个高斯模型。首先,我们使用身高信息来建立协方差矩阵,以量化person₁和person₂的相似性。然后,可以用均值为175(即两个人的均值)的高斯分布对两个人的体重进行建模。
如果我们从该高斯分布中抽取样本,那么这两个人的期望值应分别为150和200。我们的下一个主要任务是构建一个以身高作为预测体重的输入的函数。
首先,我们扩展上面的高斯分布,对person₃和person₄进行两个体重预测(f₁和f₂)。利用这四个人的身高信息,我们计算了一个新的协方差矩阵。这个矩阵量化了这四个人之间的相关性。我们可以从新的分布样本中对person₃和person₄的未知体重进行预测。
如果我们可以对高度值hᵢ进行大范围的预测呢?
当从Ɲ采样时,我们得到了一个将身高(从h₁到h n)映射到体重的函数,就像上面的蓝线一样,即使它看起来很奇怪或是错误的。我们可以重复采样来产生许多函数。这就是为什么高斯过程被认为是在函数上产生分布的原因。
例如,下面的左图演示了另一个高斯过程的5个这样的采样函数(5条曲线以不同的颜色)。
然而,我们对特定的函数不感兴趣。不过,如果我们画了足够多的函数,我们应该能很好地了解x的每个值的期望预测是什么以及它的可能范围是什么。右上方的图表显示了预期的预测,阴影区域在一个标准差之内。我们不再做点估算了。对于特定的x,我们计算期望预测(蓝线)及其方差(预测中的可能范围)。如上所示,随着我们远离已知的训练数据点,我们的预测的不确定性增加了。
高斯过程公式
其中f是从训练数据生成的分布。f *是我们要预测的。给定训练数据,我们想计算条件分布
让我们将f * 建模为
根据之前计算的条件分布,我们可以将f*与f联系起来
μ和μ*分别是f和f *的均值(在我们的示例中,μ= 175)。
如果数据经过预处理并符合特定条件,则可以进一步简化此公式。例如,如果我们的训练数据集足够大,并且我们正在预测范围与f相似的数据,则可以假定μ = μ*。此外,如果f以零为中心,我们可以将方程进一步简化为
然而,求K的逆在数值上是不稳定的。因此,我们可以先用cholesky分解来分解k,然后用线性代数来解决问题。
总之,我们使用身高信息来建立协方差矩阵来量化people之间的相关性。我们将此矩阵分解为子组件,并使用其重新创建训练数据集中已知标签的体重分布。
贝叶斯线性回归与高斯过程
让我们来看看贝叶斯线性回归和高斯过程之间的相似性。贝叶斯线性回归对模型参数w进行高斯分布建模。标签y是另一个以Xw为均值的高斯分布,其方差来自方差为σ²的噪声。对于高斯过程,方差来自于噪声和协方差矩阵K。
在此处的示例中,让我们进一步将预测y简化为零中心。当我们比较这两个预测时,它们非常相似。区别在于一种使用协方差矩阵,另一种使用核。简而言之,高斯过程可以概念化为核化的贝叶斯线性回归。不是计算xᵢxⱼᵀ,我们将其替换为核。
这里总结了如何使用这两种方法进行新的预测y₀
在基于高斯的方法中,我们对每个类的数据分布进行建模(即p(x | y))。然后,我们可以在数据分类中创建决策边界。支持向量机分类器采用不同的方法,不需要发现分布。它通过线性回归和hinge损失将数据点分为两个相应的类别之一。在视觉上,SVM在分离两个类时保持最大的边界。
在上面的SVM示例中,如果wᵀxⁱ<0,则x属于绿色。否则,它属于红色。当应用hinge损失时,我们只关心接近相反类的点(支持向量)。远离边际边界的点的成本为零,因为我们已经正确地对其进行了分类,并且它们不接近决策边界。SVM仅惩罚错误的预测或接近错误的预测。SVM成本函数中的第一项是hinge损失。
当yⁱwᵀxⁱ < 1时,它为每个点x增加一个损失。这些是违反边界约束的点。第二项是l2正则化。
SVM的目标可以写成下面的优化问题。它以最小的w最大化xw ≥ 1(对于y = 1)。
出于这个目标,SVM最大化了其决策边界的余量。而且,训练后的w将垂直于此决策边界。
SVM希望xᵀw≥1(对于y = 1),并且要使w最小。这个条件相当于p‖w‖ ≥ 1(其中p是x在w上的投影)。
为了最小化‖w‖,我们希望尽可能地增加p。其中一个支持向量(蓝)沿w的投影如下图所示。在下面的左图中,没有优化决策边界。它的边界比它所能达到的要小。为了增加p,我们可以顺时针旋转w。
如上所示,它还显着地增加了边界。当我们的SVM目标试图降低w时,右边的图表显示了它与增加margin的效果是一样的。也就是说,我们的SVM目标具有与最大化决策边界margin相同的效果。
综上所述,如果u和v是两个类边界之间可能距离最短的支持向量,那么SVM w*的最优解将位于uv上,且该解的margin最大。
为了避免过度拟合,我们调整正则化因子λ以减轻训练数据中的噪声。下图显示了有无正则化对决策边界的影响。如果我们在数据中存在噪音,则正则化可以帮助我们消除离群值。
SVM with kernels
我们可以进一步修改SVM,使用核输出作为输入
一般来说,为了训练一个机器学习模型,我们首先对输入特征进行标准化,使模型更容易训练。
让我们学习更多的归一化技术。这些技术与深度学习(DL)的关系可能比机器学习(ML)更密切。
批归一化
为什么我们只有在深层网络的每一层中归一化输入时才对输入执行归一化呢?
归一化中使用的均值和方差是由mini-batch计算得到的。假设深度学习(DL)中的每个后续层或多或少都是i.i.d。这是一个非常大胆的假设,通常并不正确。但是在许多计算机视觉问题中,这可以在模型训练中带来了巨大的改进。
批归一化引入可训练的参数γ和β。如果上面的γ=σ和β=μ,则可以取消此归一化。在训练开始时,我们初始化γ= 1和β= 0以充分利用早期训练中的归一化。最终,这些参数将在训练中学习,以确定它应该是什么值。
有一件事我们需要小心。每一层都用训练数据的均值和方差进行训练。因此,在推理过程中,我们继续使用训练数据集的均值和方差。这维护了我们用来训练模型的统计数据。
权重归一化
在批量标准化中,我们将输入标准化为不同维度的相同比例。在权重归一化中,我们将权重归一化,而不是归一化到下一层的输入。这是尝试改善优化过程的条件并提高解决方案收敛性的尝试。
现在,我们将权重训练分为学习w的大小和向量方向。也就是说,我们不是直接训练w,而是训练一个标量g和一个单位向量,使v得到w。
这使我们能够控制w的大小,并提供了另一种方式来通过控制w的大小来控制训练的稳定性。
从某些角度看,批归一化假设到下一层的特征从一个训练数据点到另一个训练数据点具有相同的分布。因此,我们使用从批次样本计算出的均值和方差对数据进行归一化。虽然它适用于卷积神经网络(CNN),但对于RNN或强化学习而言,在时序模型中每个层或后续层中的哪些特征可能高度相关是个问题。权重归一化与mini-batch或输入假设无关。因此,它更适合于循环神经网络和强化学习。
层归一化
层归一化是解决RNN中批归一化缺点的另一种归一化方法。这里要问的关键问题是将使用哪些数据来计算归一化特征中的均值和方差。
在批归一化中,它是根据批次样品中的每个特征计算的。在层归一化中,它是根据数据点的特征计算的。
请注意,一个层的输出的变化往往会导致下一个层的总输入的高度相关的变化,特别是对于其输出可以改变很多的relu单元。这表明,通过固定每一层内总输入的均值和方差,可以减少“协变量偏移”问题。因此,我们计算同一层中所有隐藏单元的层归一化统计…
简而言之,在训练下一层时,层归一化希望使下一层的统计数据保持一致。