【问题标题】:Human directed search人工搜索
【发布时间】:2013-09-17 19:46:21
【问题描述】:

献给所有机器学习的人。

我想知道的是如何借助用户偏好/点击形式的输入来搜索高维数据。

假设我有一个从特征向量生成图像的程序。该程序随机抽取 N 个向量样本,生成它们对应的图像,并在计算机屏幕上以网格的形式显示这些图像。接下来,用户点击他认为“最佳”的图像(在显示的 N 个图像中,并根据某些给定标准)。该程序现在生成另一个图像样本,将这些图像显示给用户,并重复该过程。

给定这样的系统,你会使用什么算法来找到“最佳”特征向量(和相应的图像)......在我正在研究的情况下,特征向量是长度为 512 的二进制值,并且网格是 3x3(每次迭代选取 9 个向量)。此外,用户偏好或“最佳”是一个非常主观的衡量标准。

【问题讨论】:

    标签: search machine-learning pattern-matching artificial-intelligence bayesian


    【解决方案1】:

    由于问题空间很大,训练集的规模很小(正如 kudkudak 所说),我认为您需要强调利用迄今为止发现的知识。 Thomson 采样将平衡探索与利用,但我担心您需要多次迭代才能使其发挥作用。

    您可以尝试翻转所选向量的 n 个随机位,然后在下一轮翻转 n-1 位,等等,而不是 Thomson 采样。这将是一个非常贪婪的算法,很可能最终会达到局部最小值,但目标是对于其他任何事情似乎都有些牵强(我认为)。

    在这个问题上与遗传算法有明显的相似之处,交叉和变异具有探索/利用的作用。您可能会在那里找到一些灵感。

    【讨论】:

    • 是的,我意识到遗传算法可能是一个解决方案。例如,我发现了这个:jhlabs.com/java/art.html(使用 GA 生成艺术)。
    • 我对我的答案进行了编辑,作为一种可能的机制,使我的模型更具剥削性。
    【解决方案2】:

    这是我目前的方法:

    基本上,我目前正在做的是构建一个Naive Bayes Classifier(它可能看起来很复杂,但实现起来相当简单)。对于每个特征的每个可能状态(512 个特征 * 2 个状态 = 1024),我分配了一个 Beta 先验,它估计了这个特定特征状态将导致用户“点击”的概率。当用户点击图片时,我会更新我的先验。

    现在的问题是,如何生成一个包含 9 个样本向量的新列表以显示给用户?好吧,我意识到这是一个Multi-Armed Bandit 问题。为此,Thompson Sampling 是一种易于使用的方法。对于每个向量和每个特征,我选择概率为 p 的状态(0 或 1),其中 p 与所选状态为最佳的概率成正比(即,导致我的朴素贝叶斯分类器的最大似然) .为此,我只是从 Beta 分布中对处于状态 0 的特征以及处于状态 1 的特征进行采样。然后我根据哪个样本最大来设置特征。

    这在某种程度上有效。

    重大警告:

    我所做的主要问题是我假设我的功能是独立的。不仅如此,部分原因是这些特征不是独立的,当我遍历这个时,分布会发生变化(部分地使以前的数据无效)。最后,我使用 Thompson 采样的方式可能不是最好的。

    现在在哪里?

    我的大问题是,一旦我有了朴素贝叶斯分类器,我该如何消除独立性假设?有了这个更新的模型,我还能做 Thompson 抽样之类的事情吗?

    探索与利用

    汤普森抽样有助于平衡探索与利用。但由于我有 9 张图片可供选择,因此其中一些肯定更具剥削性。这是我必须保留当前模型的一个想法,但要使其更具剥削性。如果我们知道某个特征被设置的概率(基于 Thompson 采样),我们可以通过对该概率进行指数加权来使算法更具开发性。即:Pnew = p^w / (p^w + (1-p)^w)... 由于我显示 9 张图像,我也许可以选择 w=[1..9]... 我们必须估计 p(一个 beta 随机变量大于另一个的概率)。为此,我可以使用矩匹配来估计正态分布,并从中确定概率。这被描述为Here - in CrossValidated StackExchange。为了进一步增强这一点,我可能会保留上一次迭代中选择的图像(只提供 8 张新图像)。

    【讨论】:

      【解决方案3】:

      我可能无法正确理解您的问题。我在这里看到您的问题的 2 种解释,或者您正试图在每个 3x3 网格中或从所有图像中找到最佳特征向量(图像)。我会尝试提出一些适用于这两种情况的方法。

      由于维数高,而且训练集可能很小,这似乎很难。使用较小的向量会容易得多,您可以尝试应用降维算法(如 PCA、自动编码器)。

      我想到的一种方法是进行 ELO 评级,即使这不是最终答案,您也可以随时使用它(例如作为特征向量的另一个条目)。

      如果可能的话,我会首先降低维度。然后将用户点击转换为(v_1, v_2), y 形式的训练集,其中 y 表示 v_1 图像或 v_2 图像更好(因此它是 1 或 0)。然后我们可以尝试为此训练一个分类器。它假设在每 3x3 中最好的特征向量获胜,并且其他示例不影响仅“成对”进行的决策,这是非常明智的。

      为了找到最好的,我们可以比较所有 n^2 对,看看哪个特征向量得分最高。对于完美学习的模型,应该有一个比其他模型更好(传递关系)。


      另一个想法是训练神经网络模型,它会为每个特征向量分配实数。现在对于每个训练示例(从 3x3 中选择最好的),我们可以获得 8 个比较,并查看特征向量的预测“分数”是否符合用户的偏好。对于训练错误:我们可以天真地要求神经网络使它们仅相差一个。或者我们可以利用 ELO 并通过 ELO 的差异来衡量差异。这使用了整个训练集的知识,应该会得到更好的结果

      【讨论】:

      • 我的问题是:我有长度为 512 的特征向量(所以 2^512 的可能性)。每个生成一个图像。我随机选择 9 个特征向量,并将生成的图像显示给用户。用户单击他认为“最佳”的图像。然后我再生成 9 个向量,希望在所有 2^512 种可能性中更接近用户的偏好。
      • 我喜欢你关于 ELO 评级的想法。这真有趣。我也许可以将其合并到我的朴素贝叶斯分类器中。我喜欢它,因为它有助于处理向用户显示的图像的分布发生变化并变得“更好”(使旧数据失效)的事实。
      • 我目前的方法见下文。
      • 对,这是一个完全不同的问题。尽管如此,我还是会留下我的答案,也许它会有用。您的方法非常聪明,但它本质上将特征视为独立的,我目前不知道如何修改它以摆脱这种假设。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多