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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

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

مقدمه[ویرایش]

این الگوریتم می‌تواند درست‌نمایی بیشینه (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 مشاهده نشود در صورتی که این یک انتقال ممکن باشد، بنابراین احتمال این انتقال صفر محاسبه می‌شود که می‌تواند الگوریتم را به سمت جواب غلط پیش ببرد.

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

الگوریتم 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)}

پایان: درجه درست‌نمایی بیشینه را محاسبه می‌کنیم، اگر تغییر چندانی نکرد یا اینکه به تعداد مشخصی از تکرار رسیدیم، به الگوریتم خاتمه می‌دهیم.

پیوند به بیرون[ویرایش]

منابع[ویرایش]