در مهندسی برق، علوم کامپیوتر، محاسبات آماری و بیوانفورماتیک، الگوریتم باوم-ولچ برای محاسبه پارامترهای مجهول مدل پنهان مارکوف بکار می‌رود.

مقدمه
-----

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

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

{\displaystyle p\_{kl}}: احتمال انتقال از حالت k به حالت l

{\displaystyle e\_{l}(\alpha )}: احتمال مشاهده الفبای \alpha  در حالت l

الگوریتم forward
----------------

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

{\displaystyle P(X|M)=\sum \_{\pi }P(X,\pi |M)}

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

{\displaystyle =\sum \_{\pi }P(X|\pi ,M)P(\pi |M)}

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

{\displaystyle f\_{k}(i)=P(x\_{1}\dots x\_{i},\pi \_{i}=k)}

{\displaystyle f\_{k}(i+1)=e\_{l}(x\_{i+1})\sum \_{k\in Q}f\_{k}(i)p\_{kl}}

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

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

این الگوریتم به صورت پویا متغیر {\displaystyle 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): {\displaystyle f\_{0}(0)=1,f\_{k}(0)=0} for k>0.

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

{\displaystyle f\_{l}(i)=e\_{l}(x\_{i})\sum \_{k\in Q}f\_{k}(i-1)p\_{kl}}

Termination:P(X|M)={\displaystyle \sum \_{k\in Q}f\_{k}(L)p\_{k0}}

الگوریتم backward
-----------------

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

{\displaystyle b\_{k}(i)=P(x\_{i+1}\dots x\_{L},\pi \_{i}=k)}
{\displaystyle b\_{k}(i)=\sum \_{l\in Q}e\_{l}(x\_{i+1})b\_{l}(i+1)p\_{kl}}

متغیر {\displaystyle b\_{k}(i)} احتمال مشاهدی زیرتوالی X\_{i} تا {\displaystyle X\_{L}} است در صورتی که در حالت k قرار داشته باشیم.

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

Output: probability P(X|M)

Initialization: (i=L): {\displaystyle b\_{k}(L)=p\_{k0}} for all k.

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

{\displaystyle b\_{k}(i)=\sum \_{l\in Q}e\_{l}(x\_{i+1})b\_{l}(i+1)p\_{kl}}

Termination:P(X|M)={\displaystyle \sum \_{l\in Q}(p\_{0l}.e\_{l}(x\_{1}).b\_{l}(1))}

شبه‌شماره
---------

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

برای رفع این مشکل از شبه‌شماره‌ها( Pseudocount s) استفاده می‌کنیم. به این صورت که یک عدد کوچک را جای احتمال صفر، جایگزین می‌کنیم.

الگوریتم baum-welch
-------------------

الگوریتم باوم-ولچ یک الگوریتم تکرار شونده است. ابتدا پارامترهای مدل به صورت تصادفی انتخاب می‌شوند و سپس در هر تکرار سعی می‌شود این پارامترها طوری اصلاح شوند که مدل به داده‌های آموزشی نزدیک شود. می‌توان آنقدر الگوریتم را تکرار کرد که تغییر قابل ملاحظه‌ای در پارامترهای بدست آمده رخ ندهد.

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

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

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

بازگشت
------

قرار می‌دهیم: {\displaystyle P\_{kl}=0,E\_{k}(b)=0} یا اینکه با شبه‌شماره جایگزین می‌کنیم

برای تمامی توالی‌های {\displaystyle x^{j}}:

{\displaystyle f^{j},b^{j},P(x^{j})} را محاسبه می‌کنیم
{\displaystyle P\_{kl}} را به صورت روبرو بهبود می‌بخشیم {\displaystyle {\frac {1}{P(x^{j})}}\sum \_{i}f\_{k}^{j}(i)p\_{lk}e\_{l}(x\_{i+1}^{j})b\_{l}^{j}(i+1)}
{\displaystyle E\_{k}(b)} را نیز اینگونه بهبود می‌دهیم: {\displaystyle {\frac {1}{P(x^{j})}}\sum \_{\{i|x\_{i}^{j}=b}f\_{k}^{j}(i)b\_{l}^{j}(i)}
شبه‌شماره‌ها را در صورت لزوم اعمال می‌کنیم.

قرار می‌دهیم: {\displaystyle 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 بایگانی‌شده در ۲۸ فوریه ۲۰۱۲ توسط Wayback Machine
* Implementation of the Baum-Welch algorithm

منابع
-----

* L. E. Baum, T. Petrie, G. Soules, and N. Weiss, <164:AMTOIT>2.0.CO;2-V "A maximization technique occurring in the statistical analysis of probabilistic functions of Markov chains", Ann. Math. Statist. vol. 41, no. 1, pp. 164–171, 1970.