訓練一個隱馬爾可夫模型,多個訓練實例
我已經根據本教程 http://cs229.stanford.edu/section/cs229-hmm.pdf實現了一個離散 HMM
本教程和其他教程總是談到在給定觀察序列的情況下訓練 HMM。
當我有多個訓練序列時會發生什麼?我應該按順序運行它們,一個接一個地訓練模型嗎?
另一種選擇是將序列連接到一個序列並對其進行訓練,但隨後我將進行從一個序列的結尾到下一個序列的開始的狀態轉換,這是不真實的。
使用不同的序列連接或運行每次訓練迭代都不是正確的做法。正確的方法需要一些解釋:
通常使用EM 算法訓練 HMM. 這包括幾個迭代。每次迭代都有一個“估計”和一個“最大化”步驟。在“最大化”步驟中,您將每個觀察向量 x 與模型中的狀態 s 對齊,以便最大化某個似然度量。在“估計”步驟中,對於每個狀態 s,您估計 (a) 與 s 對齊的 x 向量的統計模型的參數和 (b) 狀態轉換概率。在接下來的迭代中,使用更新的統計模型等再次運行最大化步驟。該過程重複設定的次數或當似然度量停止顯著上升時(即,模型收斂到穩定的解)。最後,(至少在語音識別中)HMM 通常會有一個指定的“開始”
因此,如果您有多個訓練序列,在估計步驟中,您應該運行每個序列,使其初始觀察向量與初始狀態對齊。這樣,初始狀態的統計數據是從所有觀察序列的第一次觀察中收集的,並且通常觀察向量與每個序列中最可能的狀態對齊。在為訓練提供所有序列之後,您只會執行最大化步驟(和未來的迭代) 。在下一次迭代中,你會做完全相同的事情。
通過將每個觀察序列的開始與初始狀態對齊,您可以避免連接序列的問題,在這種情況下,您會錯誤地對一個序列的結尾和下一個序列的開始之間的轉換進行建模。並且通過在每次迭代中使用所有序列,您可以避免在每次迭代中提供不同的序列,正如響應者所指出的那樣,這並不能保證收斂。