期望最大化和深度学习

机器算法验证 神经网络
2022-03-24 19:03:10

大多数论文将学习定义为在给定某些函数的情况下最大化期望。

在此处输入图像描述

  • 期望最大化是否适用于文献中的大多数深度学习模型?

  • 学习可以推广到EM 算法吗?

  • 大多数模型都可以被视为概率函数,但什么时候不是这样呢?

  • 我们可以将每个深度学习模型表达为 EM 训练算法的一部分吗?

4个回答

(这篇文章的原始版本,我将其文本保留在行下方以供参考,引起了很多争议和一些来回,似乎主要是围绕解释和歧义的问题,所以我更新了一个更直接的回答)

OP似乎在问:

深度学习模型是 EM 算法的特例吗?

不,他们不是。深度学习模型是通用的函数逼近器,可以使用不同类型的目标函数和训练算法,而 EM 算法在训练方法和目标函数方面是一种非常具体的算法。

从这个角度来看,使用深度学习来模拟 EM 算法是可能的(虽然不是很常见)。见这篇论文

大多数(深度学习)模型都可以被视为概率函数,但什么时候不是这样呢?

概率分布函数必须满足某些条件,例如总和为一(如果考虑概率密度函数,条件会略有不同)。深度学习模型通常可以近似函数——即比对应于概率分布和密度的函数类别更大的函数。

它们何时对应于概率密度和分布?任何时候它们近似的函数不满足概率论的公理。例如,输出层具有激活的网络可以取负值,因此不满足概率分布或密度的条件。tanh

深度学习模型可以通过三种方式对应概率分布P(x)

  • 使用深度学习直接学习概率分布。也就是说,让您的神经网络学习的形状。这里满足成为概率密度或分布的条件。y=P(x)P(x)

  • 让深度学习模型学习一个通用函数(不满足成为概率分布的条件)。做出假设,例如误差是正态分布的,然后使用模拟从该分布中采样。有关如何做到这一点的示例,请参见此处。y=f(x)P(y|x)

  • 让深度学习模型学习一个通用函数(不满足成为概率分布的条件) - 然后将模型的输出解释为表示,其中狄拉克函数y=f(x)P(y|x)= δ[yf(x)]δ. 最后一种方法有两个问题。关于狄拉克三角洲是否构成有效的分布函数存在一些争论。它在信号处理和物理学界很流行,但在概率和统计人群中并不流行。从概率和统计的角度来看,它也没有提供任何有用的信息,因为它无论如何都没有提供量化输出的不确定性,这违背了在实践中使用概率模型的目的。


期望最大化是否适用于文献中的大多数深度学习模型?

并不真地。有几个关键区别:

  • 深度学习模型通过最小化损失函数来工作。不同的损失函数用于不同的问题,然后使用的训练算法侧重于最小化适合手头问题的特定损失函数的最佳方法。另一方面,EM 算法是关于最大化似然函数这里的问题不仅仅是我们在最大化而不是最小化(毕竟两者都是优化问题),而是 EM 规定了要优化的特定函数,而深度学习可以使用任何损失函数,只要它兼容使用训练方法(通常是梯度下降的一些变体)。
  • EM 通过最大化这些参数的可能性来估计统计方法中的参数。所以我们事先选择了模型(例如,具有均值和方差的高斯模型),然后我们使用 EM 找到这些参数的最佳值(例如,的哪些值最适合我们的数据)。深度学习模型是非参数的,它们不对数据的形状或分布做出任何假设。相反,它们是通用逼近器,给定足够的神经元和层,应该能够拟合任何函数。μσ2μσ2
  • 与前一点密切相关的事实是,深度学习模型只是函数逼近器,它可以逼近任意函数,而不必考虑施加在概率分布函数上的任何约束。MLE 模型,甚至是非参数分布估计器,都将受到概率定律和对概率分布和密度的约束。

现在某些类型的深度学习模型可以被认为等同于 MLE 模型,但真正发生在幕后的是我们专门要求神经网络学习概率分布,而不是通过选择某些激活函数来学习更一般的任意函数并对网络的输出添加一些约束。这意味着它们充当 MLE 估计器,而不是它们是 EM 算法的特例。

学习是否被认为是 EM 算法的一部分?

我会说这是相反的。有可能某个地方的某个人提出了一个与 EM 算法等效的深度学习模型,但这会使 EM 算法成为深度学习的一个特例,而不是相反,因为要让它起作用,您必须使用深度学习 + 附加约束来使模型模仿 EM。


回应评论:

  1. “最小化和最大化可以是一回事。”:同意,它们可以(几乎)等价——这是我在回复中指定的——这不是关于最大化与最小化,而是关于必须使用指定的特定目标函数通过 MLE,与能够使用与反向传播兼容的几乎任何损失函数相比。“这种情况下的损失函数是 E p_theta(x|z) 的期望值,其中 p_theta 是深度神经网络模型。” - 这也是可能的,但正如我稍后指出的那样,这将使 MLE 成为深度学习的一个特例,而不是相反。
  2. “在深度神经网络的情况下,参数是模型权重。我认为你的解释不正确” - 解释是正确的,但你也正确地认为参数这个词是模棱两可的,并且在不同的来源中以不同的方式使用。模型权重是一般意义上的参数,但在参数模型与非参数模型的严格意义上,它们与参数模型中的参数不同。在参数模型中,参数是有意义的,它们对应于时间序列中的均值、方差、季节性等……而深度学习模型中的参数没有任何意义,它们只是最网络存储信息的便捷方式。这就是为什么神经网络被批评为黑盒的原因——没有确定的方法来解释权重的含义。您可以考虑的另一种方式是总参数与有效参数的数量:在使用 EM 估计的真正参数模型中,固定参数个数与有效参数个数相同。在神经网络中,有效参数的数量可能会在训练期间发生变化(通过将权重减少到零,或通过使用 dropout 等......),即使参数的总数是事先定义的并且是固定的。这给我们带来了两种方法之间的真正区别:固定数量的有效参数意味着分布或函数的形状是事先确定的,而改变有效参数允许模型逼近更一般的,最终是任意的函数,每普遍逼近定理。即使参数的总数是事先定义的并且是固定的。这给我们带来了两种方法之间的真正区别:固定数量的有效参数意味着分布或函数的形状是事先确定的,而改变有效参数允许模型逼近更一般的,最终是任意的函数,每普遍逼近定理。即使参数的总数是事先定义的并且是固定的。这给我们带来了两种方法之间的真正区别:固定数量的有效参数意味着分布或函数的形状是事先确定的,而改变有效参数允许模型逼近更一般的,最终是任意的函数,每普遍逼近定理。
  3. “DNN 还尝试学习数据的概率分布,以便做出预测。” 只有当我们配置和约束它们学习概率分布时。但他们还可以学习除概率分布之外的其他东西。为此,您可以简单地指定一个多类神经网络,具有 4 个输出,使用 sigmoid 输出而不是 softmax 输出,并训练它来学习输出为 [1, 1, 1, 1] 的情况。由于输出的总和 > 1,这不是概率分布,而只是输入到类的任意映射。更一般地说,神经网络/深度学习模型只是通用函数逼近器,可以配置为估计概率分布函数的特定情况,但它们不限于这种情况。

正如 Cagdas Ozgenc 指出的那样,几乎任何监督学习问题或函数逼近问题都可以重铸为 MLE。

简而言之,没有。

期望最大化是一种解决统计问题的技术,包括“简单”的最大化(如果一些潜在变量已知)和对数似然的“简单”期望计算(如果参数已知)。然而,期望和最大化步骤的“如何”和“为什么”需要独创性,并且是特定于模型的。因此,虽然深度学习中的某些模型可能会以可能利用 EM 的方式呈现,但 EM 不是一种通用的优化技术,甚至对于经典的统计模型也不是。

EM 作为最小化/最大化

但是,EM 可以被认为是称为最小化-最大化 (MM) 算法的一类算法的成员。这些算法找到了一个替代物,它是目标函数的下界,但至少在一个点上很紧。代理项被最大化(它应该被构造成比原始函数更容易最大化),并重复该过程。找到这样的代理也需要独创性或结构,但它可以被认为是优化中的通用技术。所以从这个意义上说,EM 背后的理论是广泛适用的。

谷歌学者的快速搜索揭示了一些相关文献,尽管它似乎比随机梯度方法不常用,随机梯度方法不尝试构建代理。

关于期望最大化的简短概述:

  • 边际可能性

    通过参考边际似然的最大化,期望最大化与“常规”似然最大化形成对比

    p(X|θ)marginal likelihood L(θ|X)=zp(X,z|θ)likelihood L(θ|X,zThis z is missing data)dz=zp(X|θ,z)p(z|X,θ)dz

    因此,这与带有附加参数(例如缺失数据)的某个可能性的积分有关。z

  • 电磁算法

    在 EM 算法中,这个积分不是直接最大化的:

    θ^=arg maxθ(zp(X|θ,z)p(z|X,θ)dz)

    而是以迭代方式计算:

    θ^k+1=arg maxθ(zp(X|θ,z)p(z|X,θ^k)dz)

    这是通过选择初始并重复更新来完成的。请注意,现在优化使项保持固定(这有助于通过表达导数来最小化)。θ1p(z|X,θ)

不是所有的问题都是这样的。

因此,这种边际可能性仅适用于未观察到的数据问题例如,在寻找高斯混合(维基百科上的示例)时,可以考虑观察到的变量,它指的是测量所属的类(混合中的哪个成分)。z

有许多问题考虑边际似然性并直接评估参数以优化某些似然函数(或其他一些成本函数,但不是边缘化/期望值)。

代码示例

边际似然的使用并不总是与明确缺失的数据有关。

在下面的示例中(wikipedia 上的示例)在 R 中以数字方式计算出来。

在这种情况下,您没有明确的数据缺失案例(可能性可以直接定义,并且不需要是对缺失数据进行积分的边际可能性),但是有两个多元高斯分布的混合。这样做的问题是,人们不能像往常一样计算项的对数之和(这具有计算优势),因为并非项不是乘积,而是它们也涉及总和。虽然,可以使用近似值计算这些和的对数(这在下面的代码中没有完成,而是创建参数是为了有利并且不会产生无限值)。

library(MASS)

# data example
set.seed(1)
x1 <- mvrnorm(100, mu=c(1,1), Sigma=diag(1,2))
x2 <- mvrnorm(30,  mu=c(3,3), Sigma=diag(sqrt(0.5),2))
x <- rbind(x1,x2)
col <- c(rep(1,100),rep(2,30))
plot(x,col=col)

# Likelihood without integrating over z 
Lsimple <- function(par,X=x) {
  tau <- par[1]
  mu1 <- c(par[2],par[3])
  mu2 <- c(par[4],par[5])
  sigma_1 <- par[6]
  sigma_2 <- par[7]

  likterms <-    tau*dnorm(X[,1],mean = mu1[1], sd = sigma_1)*
                     dnorm(X[,2],mean = mu1[2], sd = sigma_1)+
             (1-tau)*dnorm(X[,1],mean = mu2[1], sd = sigma_2)*
                     dnorm(X[,2],mean = mu2[2], sd = sigma_2)
  logLik = sum(log(likterms))
  -logLik
}

# Marginal likelihood integrating over z
LEM <- function(par,X=x,oldp=oldpar) {
  tau <- par[1]
  mu1 <- c(par[2],par[3])
  mu2 <- c(par[4],par[5])
  sigma_1 <- par[6]
  sigma_2 <- par[7]

  oldtau <- oldp[1]
  oldmu1 <- c(oldp[2],oldp[3])
  oldmu2 <- c(oldp[4],oldp[5])
  oldsigma_1 <- oldp[6]
  oldsigma_2 <- oldp[7]

  f1 <-     oldtau*dnorm(X[,1],mean = oldmu1[1], sd = oldsigma_1)*
                   dnorm(X[,2],mean = oldmu1[2], sd = oldsigma_1)
  f2 <- (1-oldtau)*dnorm(X[,1],mean = oldmu2[1], sd = oldsigma_2)*
                   dnorm(X[,2],mean = oldmu2[2], sd = oldsigma_2)
  pclass <- f1/(f1+f2)

  ### note that now the terms are a product and can be replaced by a sum of the log
  #likterms <-    tau*dnorm(X[,1],mean = mu1[1], sd = sigma_1)*
  #                   dnorm(X[,2],mean = mu1[2], sd = sigma_1)*(pclass)*
  #           (1-tau)*dnorm(X[,1],mean = mu2[1], sd = sigma_2)*
  #                   dnorm(X[,2],mean = mu2[2], sd = sigma_2)*(1-pclass)
  loglikterms <-   (log(tau)+dnorm(X[,1],mean = mu1[1], sd = sigma_1, log = TRUE)+
                             dnorm(X[,2],mean = mu1[2], sd = sigma_1, log = TRUE))*(pclass)+
                 (log(1-tau)+dnorm(X[,1],mean = mu2[1], sd = sigma_2, log = TRUE)+
                             dnorm(X[,2],mean = mu2[2], sd = sigma_2, log = TRUE))*(1-pclass)
  logLik = sum(loglikterms)
  -logLik
}


# solving with direct likelihood
par <- c(0.5,1,1,3,3,1,0.5)
p1 <- optim(par, Lsimple, 
          method="L-BFGS-B",
          lower = c(0.1,0,0,0,0,0.1,0.1),
          upper = c(0.9,5,5,5,5,3,3),
          control = list(trace=3, maxit=10^3)) 
p1

# solving with LEM 
# (this is done here indirectly/computationally with optim,
# but could be done analytically be expressing te derivative and solving)
oldpar <- c(0.5,1,1,3,3,1,0.5)

for (i in 1:100) {
  p2 <- optim(oldpar, LEM, 
             method="L-BFGS-B",
             lower = c(0.1,0,0,0,0,0.1,0.1),
             upper = c(0.9,5,5,5,5,3,3),
             control = list(trace=1, maxit=10^3))  
  oldpar <- p2$par
  print(i)
}
p2

# the result is the same:
p$par
p2$par

鉴于之前的技术答案,一个哲学观点可能有助于消除 ME 与深度学习之间的歧义:学习的概念

在深度学习中,有多个层,每一层都是一个学习步骤。在第一步中,数据输入被“转换”(或学习)为合成的中间输出(稍微高级一点的抽象,松散地说)。然后在每一步中,输入被逐步学习(或“转换”)为更高的抽象特征,人类可能理解也可能不理解。粗略地说,这些层的组合将为您近似“公式”,我们不需要事先指定任何模型或假设。这与认知科学中的“学习”概念相同:从输入中构建更高的抽象

在 ME 方法中,抽象没有增加。

一个例子是 NLP 中的词嵌入,其中词被逐步转换为具有越来越抽象的数字向量,这样最终,数字向量实际上可以表示句法(语法)和语义(逻辑)含义。这种通过构建抽象特征来处理歧义(在语言或其他用例中)的能力是深度学习与许多其他统计方法的明显区别。