NMF میکوشد ماتریسِ نامنفی V را با حاصلضربِ دو عاملِ نامنفی W وH تقریب بزند. این صفحه فقط عاملهای دستی را در هم ضرب نمیکند:پنج دورِ بهروزرسانیِ ضربی واقعاً اجرا میشوند و خطای بازسازی قبل و بعدِ هر نیمگام ثبت میشود. کاهشِ خطای این مثال،به معنیِ معنای موضوعها یا رسیدن به بهترین جوابِ جهانی نیست.
ماتریسِ ورودی و شروعِ مثبت
V سه سطرِ [۳،۱،۰]،[۱،۳،۱] و[۰،۱،۳] دارد. W با شکل۳×۲ از سطرهای[۱،۰٫۵]،[۰٫۵،۱] و[۱،۱] شروع میشود؛ H با شکل۲×۳ از[۱،۰٫۵،۰٫۸] و[۰٫۵،۱،۰٫۲]. مقدارها کاملاً آموزشیاند؛ متنِ مشتری،ویژگیِ تماس یا خروجیِ یک مدلِ آماده نیستند.
هدفِ انتخابشده مجموعِ مربعِ تمامِ خانههای V−WH است. این تابع با generalized KL در نسخهٔ دیگرِ NMF یکی نیست و نرمالسازیِ احتمالی ندارد. مقدارِ آغازینِ همین خطا۱۳٫۵۹۵ است؛ شکلِ عاملها و واحدِ ورودی در تفسیرِ مقدار نقش دارند.
اول H،سپس W با H تازه
در نیمگامِ H،صورت WᵀV و مخرج WᵀWH است؛ نسبتِ خانهبهخانه در Hِ قبلی ضرب میشود. بعد W با صورت VHᵀ و مخرج WHHᵀ اصلاح میشود،اما H در این نیمگام همان نسخهٔ تازه است. استفادهٔ بیاعلان از Hِ قدیمی،دفترِ اجرای متفاوتی میسازد.
H_new = H * ((W.T @ V) / (W.T @ W @ H)) W_new = W * ((V @ H_new.T) / (W @ H_new @ H_new.T))
در این نمایش،@ ضربِ ماتریسی و * و / عملِ خانهبهخانهاند. فایل برای هر دور،صورتها،مخرجها و تمامِ عاملهای تازه را ثبت میکند. NumPy۲٫۳٫۵ِ موجود اجرا شده؛ scikit-learn،مدل موضوعی یا کتابخانهٔ NMF آماده اجرا نشده است.
خطای هر نیمگام را جدا ببینیم
در دورِ اول،خطا پس از H حدود۱۱٫۸۳۶۲ و پس از W حدود۹٫۸۴۸۹ میشود. بعد از پنج دورِ کامل،حدود۸٫۹۰۷۵ است. همهٔ ده نیمگامِ این fixture نسبت به مرحلهٔ قبلی غیرافزایشیاند؛ عددهای کاملِ ممیزشناور در JSON حفظ شدهاند.
یک تابعِ حلقهایِ مستقل هم ضربِ ماتریسی و مجموع مربعِ اختلافها را حساب میکند. نتایج با تلورانس مطلق۱۰بهتوان−۱۲ مقایسه میشوند. این کنترل فقط چاپِ همان loss از دو نامِ متفاوت نیست؛ محاسبهٔ مرجع از حلقههای صریح،کنار عملگرهای NumPy اجرا میشود.
صفرِ اولیه چگونه قفل میشود؟
در آزمونِ جدا،خانهٔ W[0,0] را در شروع صفر میکنیم و یک گامِ واقعی با مخرجهای معتبر اجرا میکنیم. آن خانه صفر میماند،چون در ضریبِ تازه ضرب میشود. پس مقداردهیِ اولیه و صفرها روی مسیر اثر دارند؛ تغییرِ آنها را بیاثر فرض نکنید.
اگر مخرجی صفر شود،wrapper این مثال خطا میدهد و epsilon پنهانی اضافه نمیکند. افزودن عدد کوچک میتواند انتخابِ اجراییِ دیگری باشد،اما همان معادلهٔ بدون تغییر نیست. ورودیِ منفی،NaN،شکلِ ناسازگار و نمونهٔ مخرجِ صفر واقعاً در چهار آزمون رد شدهاند. ماتریسها در این فایل کوچک و کراندارند.
عاملهای متفاوت،بازسازیِ برابر
بعد از پنج دور،D قطری با۲ و۰٫۵ را در نظر میگیریم. ستونهای W در D و سطرهای H در وارونِ D ضرب میشوند؛ حاصلِ بازسازی برابر میماند،در حالی که عددهای دو عامل تغییر کردهاند. کد این برابری را واقعاً کنترل میکند. بنابراین مقدارِ خامِ یک عامل را بدون قرارداد،احتمال یا درصدِ موضوع ننامید.
چند گامِ کاهشِ loss نه یکتایی عاملها را ثابت میکند،نه stationary بودن و نه بهینهٔ جهانی را. دادهٔ این مثال برچسب و آزمونِ معنایی ندارد؛ از آن کیفیتِ خوشه،موضوعِ تماس یا اثرِ فروش نتیجه نمیگیریم. زمانسنجی و مقایسهٔ سرعت هم اجرا نشده است.
تفاوت با دو آموزشِ نزدیک
مدلسازیِ موضوعی عاملهای آموزشیِ دستی را برای فهمِ سند و واژه بازسازی میکند؛ اینجا خودِ update و loss اجرا میشود. SVD نیز قیودِ عامل و روشِ تجزیهٔ دیگری دارد. ادامه در مبانی هوش مصنوعی؛ این تمرین وجودِ سرویس NMF،تحلیل موضوعی یا روشِ داخلیِ خاصی در محصول اپرا را اعلام نمیکند.
فایل تمرین و منبع
کد مستقلِ تمرین و کنترلها؛ Python · ورودیها و تمام خروجی واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.