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

از testwiki
نسخهٔ تاریخ ۱ اوت ۲۰۲۴، ساعت ۱۵:۰۸ توسط imported>آلفای مهر (مقدمه)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

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

مقدمه

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

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

pkl : احتمال انتقال از حالت k به حالت l

el(α) : احتمال مشاهده الفبای α در حالت l

الگوریتم forward

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

P(X|M)=πP(X,π|M)

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

=πP(X|π,M)P(π|M)

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

fk(i)=P(x1xi,πi=k)

fk(i+1)=el(xi+1)kQfk(i)pkl

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

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

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

الگو:چپ‌چینInput: HMM M = (Σ، Q, P, e) and sequence of symbols X

Output: probability P(X|M)

Initialization: (i=0): f0(0)=1,fk(0)=0 for k>0.

For all i=1,L,lQ:

fl(i)=el(xi)kQfk(i1)pkl

Termination:P(X|M)=kQfk(L)pk0 الگو:پایان چپ‌چین

الگوریتم backward

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

bk(i)=P(xi+1xL,πi=k) bk(i)=lQel(xi+1)bl(i+1)pkl

متغیر bk(i) احتمال مشاهدی زیرتوالی Xi تا XL است در صورتی که در حالت k قرار داشته باشیم. الگو:چپ‌چین Input: HMM M = (Σ، Q, P, e) and sequence of symbols X

Output: probability P(X|M)

Initialization: (i=L): bk(L)=pk0 for all k.

For all i=L1,1,kQ:

bk(i)=lQel(xi+1)bl(i+1)pkl

Termination:P(X|M)=lQ(p0l.el(x1).bl(1)) الگو:پایان چپ‌چین

شبه‌شماره

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

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

الگوریتم baum-welch

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

ورودی: مدل و داده‌های آموزشی x1,x2,,xn

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

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

بازگشت

قرار می‌دهیم: Pkl=0,Ek(b)=0 یا اینکه با شبه‌شماره جایگزین می‌کنیم

برای تمامی توالی‌های xj:

fj,bj,P(xj) را محاسبه می‌کنیم
Pkl را به صورت روبرو بهبود می‌بخشیم 1P(xj)ifkj(i)plkel(xi+1j)blj(i+1)
Ek(b) را نیز اینگونه بهبود می‌دهیم: 1P(xj){i|xij=bfkj(i)blj(i)

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

قرار می‌دهیم: pkl=PklqQPkq,ek(b)=Ek(b)sΣEk(s)

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

پیوند به بیرون

منابع

الگو:پانویس