Алгоритм прямого-обратного хода

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгоритм «прямого-обратного» хода — алгоритм для вычисления апостериорных вероятностей последовательности состояний при наличии последовательности наблюдений. Иначе говоря, алгоритм, который вычисляет вероятность специфической последовательности наблюдений. Алгоритм применяется в трёх алгоритмах скрытых Марковских моделей.

Краткий обзор

Алгоритм включает три шага:

  1. вычисление прямых вероятностей
  2. вычисление обратных вероятностей
  3. вычисление сглаженных значений

Прямые и обратные шаги часто называют «прямым проходом по сообщению» и «обратным проходом по сообщению», где сообщениями выступают ряд последовательных наблюдений. Формулировка происходит из способа, которым алгоритм обрабатывает данную последовательность наблюдений. Сначала алгоритм продвигается с первого наблюдения в последовательности идя в последнее, а затем возвращаясь назад к первому. При каждом наблюдении в вероятностях последовательности, которые будут использоваться для вычислений при следующем наблюдении, вычислены. Во время обратного прохода алгоритм одновременно выполняет шаг сглаживания. Сглаживание — это процесс вычисления распределения вероятностей значений переменных в прошлых состояниях при наличии свидетельств вплоть до нынешнего состояния. Этот шаг позволяет алгоритму принимать во внимание все прошлые наблюдения, чтобы вычислять более точные результаты.

Формальное описание

Далее будем рассматривать в качестве базовой матрицы эмпирическую матрицу вероятностных значений, а не распределения вероятности. Мы преобразовываем распределения вероятности, связанные с данной скрытой Марковской моделью в матричный вид следующим образом. Матрица переходных вероятностей P(Xt|Xt1) (для) данной случайной переменной Xt, представляющая все возможные состояния в скрытой марковской модели, будет представлена матрицей T. В этой матрице индекс строки i обозначает начальное состояние, а индекс столбца j — конечное состояние . Например, ниже представлена система, для которой вероятность остаться в том же состоянии после каждого шага равна 70 %, а вероятность перейти к другому состоянию равна 30 %. Тогда матрица вероятностей переходов выглядит следующим образом: T=(0.70.30.30.7)

Точно так же мы представим вероятности новых состояний для данных наблюдаемых состояний, заданных как свидетельств, в матрице наблюдений Ot, где каждый диагональный элемент содержит вероятность нового состояния, учитывая наблюдаемое состояния в момент t. Отметим, что t указывает специфическое наблюдение в последовательности наблюдений. Все другие элементы в матрице будут нулями. В примере, описанном ниже, первое наблюдаемое доказательство (t=1) — «зонтик». Поэтому O1 был бы определен как: O1=(0.90.00.00.2)

Исходя из этого описания мы можем вычислить следующую прямую вероятность. Пусть набор прямых вероятностей будет сохранён в ещё одной матрице f1:t+1. Здесь 1:t+1 указывает на то, что вычисленные вероятности зависят от всех прямых вероятностей от 1 до t+1, включая текущую матричную вероятность, которую мы опишем как f1:t. Следовательно, f1:t+1 равно произведению транспонированной матрицы с текущими прямыми вероятностями и матрицей наблюдения для следующего свидетельства в потоке наблюдения. После этого получается матрица, которая требует нормализации, то есть полученные значения должны быть разделены на сумму всех значений в матрице. Коэффициент нормализации задан α. Вычисление прямых вероятностей описано формулой: f1:t+1=αOt+1TTf1:t

Можем представить вычисление обратной вероятности bk+1:t, которое начинается с конца последовательности аналогичным способом. Пусть конец последовательности будет описан индексом k, начинающийся с 0. Поэтому выполнение от k к t=0 и вычисляя каждую обратную вероятность может быть описано следующей формулой: bk+1:t=TOk+1bk+2:t

Отметьте, что мы используем не транспонированную матрицу T и что значение элементов изменилось. Также отметим, что в качестве окончательного результата мы не используем обычное матричное произведение, а поточечное. Эта операция умножает каждую переменную в одной матрице с соответствующей переменной в другой. Третий и конечный шаг — это вычисление сглаженных вероятностей svk. Сглаженные вероятности полученные поточечным произведением Формула определена как svk=αbk+1:tf1:k Ниже показан следующий пример.

Пример

За основу взят пример из книги Russel & Norvig 2003 стр 540. Просмотрим следующую последовательность наблюдений (зонтик, зонтик, нет зонтика, зонтик, зонтик). Предположим что вероятность дождя, составляют 90 %, если зонтик наблюдается, и 10 %, если зонтик не наблюдается. Вероятность же отсутствия дождя 20 % и 80 % соответственно. Кроме того, предположим, что вероятность, что погода останется — 70 %, и 30 %, что погода изменится. Следующие матрицы взятые из «мира» зонтиков описывают численно, вышеупомянутые наблюдения 𝐎𝟏=(0.90.00.00.2)𝐎𝟐=(0.90.00.00.2)𝐎𝟑=(0.10.00.00.8)𝐎𝟒=(0.90.00.00.2)𝐎𝟓=(0.90.00.00.2)𝐓=(0.70.30.30.7)𝐓𝐓=(0.70.30.30.7)

Прежде, чем мы начнём вычислять прямые вероятности, мы должны описать две специальные переменные, первую прямую вероятность и k+2 обратную вероятность. Первая прямая вероятность в t=0 определена предшествующей из случайной переменной. k+2 обратная вероятность определена «истинной» матрицей. Поэтому следует:

𝐟𝟏:𝟎=(0.50.5)

𝐛𝐤+𝟐:𝐭=(1.01.0)

Теперь мы выполним итерации, пройдя по всем значениям t, и вычислим прямые вероятности. Следующие матрицы мы получаем из формулы нахождения прямой вероятности описанной выше. Некоторые вычисления могут быть менее точными из-за ограниченного числа десятичных знаков, используемых в этом примере.

𝐟𝟏:𝟏=α(0.90.00.00.2)(0.70.30.30.7)(0.50000.5000)=α(0.45000.1000)=(0.81820.1818)

𝐟𝟏:𝟐=α(0.90.00.00.2)(0.70.30.30.7)(0.81820.1818)=α(0.56450.0745)=(0.88340.1165)

𝐟𝟏:𝟑=α(0.10.00.00.8)(0.70.30.30.7)(0.88340.1165)=α(0.06530.2772)=(0.19060.8093)

𝐟𝟏:𝟒=α(0.90.00.00.2)(0.70.30.30.7)(0.19060.8093)=α(0.33860.1247)=(0.73080.2691)

𝐟𝟏:𝟓=α(0.90.00.00.2)(0.70.30.30.7)(0.73080.2691)=α(0.53310.0815)=(0.86730.1326)

Теперь, когда мы определили прямые вероятности, мы продолжаем вычислять обратные вероятности. Описанные ниже матрицы мы получаем из формулы нахождения обратной вероятности как описано выше.

𝐛𝟓:𝟓=(0.70.30.30.7)(0.90.00.00.2)(1.00001.0000)=(0.59840.0543)=(0.91680.0831)

𝐛𝟒:𝟓=(0.70.30.30.7)(0.90.00.00.2)(0.91680.0831)=(0.73080.2691)=(0.85930.1407)

𝐛𝟑:𝟓=(0.70.30.30.7)(0.10.00.00.8)(0.85930.1407)=(0.01780.0845)=(0.17390.8260)

𝐛𝟐:𝟓=(0.70.30.30.7)(0.90.00.00.2)(0.17390.8260)=(0.14050.0189)=(0.88140.1185)

𝐛𝟏:𝟓=(0.70.30.30.7)(0.90.00.00.2)(0.88140.1185)=(0.46000.0462)=(0.90870.0912)

Наконец мы вычислим сглаженные значения вероятности. Упорядочение матриц следует за формулой вычисления сглаженных значений выше.

𝐬𝐯𝟓=α(1.00001.0000)×(0.86730.1326)=α(0.86730.1326)=(0.86730.1326)

𝐬𝐯𝟒=α(0.91680.0831)×(0.73080.2691)=α(0.66990.0223)=(0.96770.0322)

𝐬𝐯𝟑=α(0.85930.1407)×(0.19060.8093)=α(0.16370.1138)=(0.58990.4101)

𝐬𝐯𝟐=α(0.17390.8260)×(0.88340.1165)=α(0.15360.0962)=(0.61480.3852)

𝐬𝐯𝟏=α(0.88140.1185)×(0.81820.1818)=α(0.72110.0215)=(0.97100.0289)

Более простое решение этой проблемы — перебор всех возможных последовательностей наблюдаемых событий и скрытых состояний с их вероятностями, используя две матрицы перехода. Совместная вероятность двух последовательностей вычисляется путём умножения соответствующих вероятностей. У этого алгоритма есть временная сложность O(TNT) где T — длина последовательностей, и N — число символов в алфавите состояний . Это затруднительно, поскольку число возможных скрытых последовательностей узла обычно чрезвычайно высоко. У алгоритма прямого-обратного хода временная сложность составляет O(N2T). Существуют улучшения алгоритма, позволяющие производить вычисления в области памяти постоянного размера. Кроме того, для растущего t разработаны алгоритмы эффективного вычисления f1:t+1 с помощью онлайн сглаживания с фиксированным лагом, такое как сглаживание (FLS) алгоритм Russel & Norvig 2003 стр 552

Применение

Алгоритм «вперёд назад» лежит в основе вычислительных методов, применяемых во многих таких приложениях, где приходится иметь дело с последовательностями зашумленных результатов наблюдений, начиная от распознавания речи и заканчивая слежением за самолетами с помощью радара.

Псевдокод

   ForwardBackward(guessState, sequenceIndex):
   if sequenceIndex is past the end of the sequence, return 1
   if (guessState, sequenceIndex) has been seen before, return saved result
   result = 0
   for each neighboring state n:
       result = result + (transition probability from guessState to n given observation element at sequenceIndex)*ForwardBackward(n, sequenceIndex+1)
   save result for (guessState, sequenceIndex)
   return result

См. также

Ссылки

Шаблон:Стиль статьи