哪些顺序输入问题最适合每个问题?输入维度是否决定了哪个更好匹配?需要“更长记忆”的问题是否更适合 LSTM RNN,而周期性输入模式(股市、天气)的问题是否更容易由 HMM 解决?
似乎有很多重叠;我很好奇两者之间存在哪些细微差别。
哪些顺序输入问题最适合每个问题?输入维度是否决定了哪个更好匹配?需要“更长记忆”的问题是否更适合 LSTM RNN,而周期性输入模式(股市、天气)的问题是否更容易由 HMM 解决?
似乎有很多重叠;我很好奇两者之间存在哪些细微差别。
隐马尔可夫模型 (HMM) 比循环神经网络 (RNN) 简单得多,并且依赖于可能并不总是正确的强假设。如果假设是正确的,那么您可能会看到 HMM 的性能更好,因为它开始工作时不那么挑剔。
如果你有一个非常大的数据集,RNN 可能会表现得更好,因为额外的复杂性可以更好地利用数据中的信息。即使 HMM 假设在您的情况下是正确的,这也可能是正确的。
最后,对于序列任务,不要仅限于这两个模型,有时更简单的回归(例如 ARIMA)可以胜出,有时其他复杂的方法(例如卷积神经网络)可能是最好的。(是的,CNN 可以应用于某些类型的序列数据,就像 RNN 一样。)
与往常一样,了解哪种模型最好的最好方法是制作模型并在保留的测试集上测量性能。
状态转换只依赖于当前状态,而不依赖于过去的任何东西。
这个假设在我熟悉的很多领域都不成立。例如,假设您正试图根据运动数据预测一天中的每一分钟一个人是醒着还是睡着。一个人从睡着到清醒的机会越长,这个人处于睡着状态的时间就越长。RNN 理论上可以学习这种关系并利用它来获得更高的预测准确性。
您可以尝试解决这个问题,例如将先前的状态作为特征包含在内,或定义复合状态,但增加的复杂性并不总能提高 HMM 的预测准确性,而且它绝对不会帮助计算时间。
您必须预先定义状态总数。
回到 sleep 的例子,看起来好像我们只关心两个状态。然而,即使我们只关心预测awake与sleep,我们的模型也可能受益于计算额外的状态,如驾驶、淋浴等(例如,淋浴通常在睡觉之前发生)。同样,如果展示足够多的例子,RNN 理论上可以学习这种关系。
从上面看来,RNN 总是更胜一筹。不过,我应该指出,RNN 可能很难发挥作用,尤其是当您的数据集很小或序列很长时。我个人在让 RNN 对我的一些数据进行训练时遇到了麻烦,而且我怀疑大多数已发布的 RNN 方法/指南都针对文本数据进行了调整。当尝试在非文本数据上使用 RNN 时,我不得不执行比我关心的更广泛的超参数搜索,以便在我的特定数据集上获得良好的结果。
在某些情况下,我发现顺序数据的最佳模型实际上是 UNet 样式 ( https://arxiv.org/pdf/1505.04597.pdf ) 卷积神经网络模型,因为它更容易训练,并且能够考虑信号的完整上下文。
我们先来看看HMM和RNN的区别。
从这篇论文:关于隐藏马尔可夫模型和语音识别中的选定应用的教程中,我们可以了解到 HMM 应该具有以下三个基本问题:
问题 1(似然):给定一个 HMM λ = (A,B) 和一个观察序列 O,确定似然 P(O|λ)。
问题 2(解码):给定观察序列 O 和 HMM λ = (A,B),发现最佳隐藏状态序列 Q。
问题 3(学习):给定观察序列 O 和 HMM 中的状态集,学习 HMM 参数 A 和 B。
我们可以从这三个角度来比较 HMM 和 RNN。
HMM 中的似然性(图 A.5)
RNN 中的语言模型
在 HMM 中,我们通过以下方式计算似然度在哪里表示所有可能的隐藏状态序列,概率就是图中的真实概率。据我所知,在 RNN 中,等价物与语言建模中的困惑相反,其中而且我们没有对隐藏状态求和,也没有得到确切的概率。
在 HMM 中,解码任务是计算使用维特比算法确定哪个变量序列是某些观察序列的潜在来源,并且结果的长度通常等于观察值;而在 RNN 中,解码正在计算和长度通常不等于观察.
HMM 中的学习比 RNN 中的学习要复杂得多。在 HMM 中,它通常使用 Baum-Welch 算法(期望最大化算法的一种特殊情况),而在 RNN 中,它通常是梯度下降。
对于您的子问题:
哪些顺序输入问题最适合每个问题?
当您没有足够的数据时,使用 HMM,并且当您需要计算确切的概率时,HMM 也更适合(生成任务对数据的生成方式进行建模)。否则,您可以使用 RNN。
输入维度是否决定了哪个更好匹配?
我不这么认为,但是 HMM 可能需要更多时间来了解隐藏状态是否太大,因为算法的复杂性(向前向后和 Viterbi)基本上是离散状态数的平方。
需要“更长记忆”的问题是否更适合 LSTM RNN,而周期性输入模式(股市、天气)的问题是否更容易由 HMM 解决?
在 HMM 中,当前状态也受到先前状态和观察(受父状态)的影响,您可以尝试二阶隐马尔可夫模型以获得“更长的记忆”。
我想你几乎可以用RNN做
我发现了这个问题,因为我也想知道它们的异同。我认为声明隐马尔可夫模型(HMM)没有严格意义上的输入和输出是非常重要的。
HMM 是所谓的生成模型,如果你有一个 HMM,你可以从它原样生成一些观察结果。这与 RNN 有着根本的不同,因为即使你有一个训练有素的 RNN,你也需要输入它。
这很重要的一个实际例子是语音合成。潜在的隐马尔可夫状态是音素,发出的概率事件是声学。如果你训练了一个词模型,你可以根据需要生成尽可能多的不同实现。
但是对于 RNN,您至少需要提供一些输入种子才能获得输出。您可能会争辩说,在 HMM 中您还需要提供初始分布,所以它是相似的。但如果我们坚持语音合成的例子,那并不是因为初始分布是固定的(总是从单词的第一个音素开始)。
如果您一直使用相同的输入种子,则使用 RNN 可以获得经过训练的模型的确定性输出序列。使用 HMM,您不需要,因为转换和排放始终是从概率分布中采样的。