الگوریتم باوم-ولچ

در مهندسی برق، علوم کامپیوتر، محاسبات آماری و بیوانفورماتیک، الگوریتم باوم-ولچ برای محاسبه پارامترهای مجهول مدل پنهان مارکوف بکار می‌رود.
## مقدمه
این الگوریتم می‌تواند درست‌نمایی بیشینه (Maximum likelihood) را برای پارامترهای انتقال و انتشار یک مدل پنهان مارکوف محاسبه کند. این الگوریتم جزو الگوریتم‌های یادگیری ماشین دسته‌بندی می‌شود. یعنی یک مجموعه داده از مشاهدات به عنوان داده های آموزشی در دسترس است و الگوریتم از روی این داده‌ها، پارامترهای مدل را تخمین می‌زند.

این الگوریتم به داده‌هایی که توسط الگوریتم‌های Forward و Backward تولید می‌شوند نیاز دارد. پارامترهای مدل را به صورت زیر در نظر می‌گیریم:

p_{kl} : احتمال انتقال از حالت k به حالت l

e_l(\alpha) : احتمال مشاهده الفبای \alpha در حالت l

## الگوریتم forward
ایده الگوریتم اینگونه است که:

P(X|M)=\sum_\pi P(X,\pi|M)

یعنی احتمال دیده شدن توالی X در مدل M برابر است با جمع احتمال دیده شدن توالی به شرط تمامی مسیرها که آن هم برابر است با

= \sum_\pi P(X|\pi,M)P(\pi|M)

بنابر این می‌توانیم روابط بازگشتی زیر را حساب کنیم:

f_k(i)=P(x_1\dots x_i,\pi_i=k)

f_k(i+1)=e_l(x_{i+1})\sum_{k\in Q}f_k(i)p_{kl}

ورودی این الگوریتم: مدل M با الفبای \Sigma احتمال‌های انتفال p و احتمال تولید الفبای e همچنین توالی‌ای از نشانه‌ها X

خروجی: احتمال تولید این توالی توسط مدل

این الگوریتم به صورت پویا متغیر f_l(i) را می‌سازد، که به معنی احتمال زیرتوالی X_1 تا X_i در حالت l است.

Input: HMM M = (\Sigma، Q, P, e) and sequence of symbols X

Output: probability P(X|M)

Initialization: (i=0): f_0(0)=1,f_k(0)=0  for k>0.

For all i=1\dots,L,l\in Q:

f_l(i)=e_l(x_i)\sum_{k\in Q}f_k(i-1)p_{kl}

Termination:P(X|M)=\sum_{k\in Q}f_k(L)p_{k0}

## الگوریتم backward
در الگوریتم backward رابطه بازگشتی برای محاسبه احتمال به صورت زیر است:

b_k(i)=P(x_{i+1}\dots x_L,\pi_i=k)
b_k(i)=\sum_{l\in Q}e_l(x_{i+1})b_l(i+1)p_{kl}

متغیر b_k(i) احتمال مشاهدی زیرتوالی X_i تا X_L است در صورتی که در حالت k قرار داشته باشیم.

Input: HMM M = (\Sigma، Q, P, e) and sequence of symbols X

Output: probability P(X|M)

Initialization: (i=L): b_k(L)=p_{k0} for all k.

For all i=L-1\dots,1,k\in Q:

b_k(i)=\sum_{l\in Q}e_l(x_{i+1})b_l(i+1)p_{kl}

Termination:P(X|M)=\sum_{l\in Q}(p_{0l}.e_l(x_1).b_l(1))

## شبه‌شماره
وقتی با داده‌های آموزش سر و کار داریم، گاهی اوقات داده ها همه حالات را پوشش نمی‌دهند مثلاً در مورد مسایل مدل پنهان مارکوف، احتمال دارد در مجموعه داده‌های آموزشی ما به دلایل مختلف انتقال از حالت i به حالت j مشاهده نشود در صورتی که این یک انتقال ممکن باشد، بنابراین احتمال این انتقال صفر محاسبه می‌شود که می‌تواند الگوریتم را به سمت جواب غلط پیش ببرد.

برای رفع این مشکل از شبه‌شماره‌ها( Pseudocount s) استفاده می‌کنیم. به این صورت که یک عدد کوچک را جای احتمال صفر، جایگزین می‌کنیم.
## الگوریتم baum-welch
الگوریتم باوم-ولچ یک الگوریتم تکرار شونده است. ابتدا پارامترهای مدل به صورت تصادفی انتخاب می‌شوند و سپس در هر تکرار سعی می‌شود این پارامترها طوری اصلاح شوند که مدل به داده‌های آموزشی نزدیک شود. می‌توان آنقدر الگوریتم را تکرار کرد که تغییر قابل ملاحظه‌ای در پارامترهای بدست آمده رخ ندهد.

**ورودی: ** مدل و داده‌های آموزشی x^1,x^2,\dots,x^n

**خروجی: **مدل با پارامترهای انطباق یافته

**شروع: **ماتریس‌های P و E را به صورت دلخواه مقداردهی می‌کنیم.

## بازگشت

قرار می‌دهیم: P_{kl}=0 , E_k(b)=0 یا اینکه با شبه‌شماره جایگزین می‌کنیم

برای تمامی توالی‌های x^j:

:f^j , b^j , P(x^j) را محاسبه می‌کنیم
:P_{kl} را به صورت روبرو بهبود می‌بخشیم \frac{1}{P(x^j)}\sum_if_k^j(i)p_{lk}e_l(x^j_{i+1})b_l^j(i+1)
:E_k(b) را نیز اینگونه بهبود می‌دهیم: \frac{1}{P(x^j)}\sum_{\{i|x_i^j=b}f_k^j(i)b_l^j(i)

شبه‌شماره‌ها را در صورت لزوم اعمال می‌کنیم.

قرار می‌دهیم: p_{kl}=\frac{P_{kl}}{\sum_{q\in Q}P_{kq}} , e_k(b)=\frac{E_k(b)}{\sum_{s\in \Sigma}E_k(s)}

**پایان:** درجه درست‌نمایی بیشینه را محاسبه می‌کنیم، اگر تغییر چندانی نکرد یا اینکه به تعداد مشخصی از تکرار رسیدیم، به الگوریتم خاتمه می‌دهیم.
## پیوند به بیرون
* An Interactive Spreadsheet for Teaching the Forward-Backward Algorithm (spreadsheet and article with step-by-step walkthrough)
* Formal derivation of the Baum-Welch algorithm 
* Implementation of the Baum-Welch algorithm
## منابع

* L. E. Baum, T. Petrie, G. Soules, and N. Weiss, ["A maximization technique occurring in the statistical analysis of probabilistic functions of Markov chains"](http://www.jstor.org/sici?sici=0003-4851(197002)41:1<164:AMTOIT>2.0.CO;2-V), Ann. Math. Statist., vol. 41, no. 1, pp. 164–171, 1970.

رده:الگوریتم‌های آماری
رده:الگوریتم‌های بیوانفورماتیک
رده:الگوریتم‌های تصادفی
رده:مدل‌های مارکوف