أساسيات تعلم الآلة1949تأسيسي9 دقيقة قراءة

طريقة مونتي كارلو

The Monte Carlo Method

Metropolis, N. · Ulam, S. — Journal of the American Statistical Association

المشكلة

في مجالات مثل انتشار النيوترونات وديناميكا الموائع والميكانيكا الإحصائية، تظهر باستمرار تكاملات عالية الأبعاد وعمليات عشوائية معقدة لا يوجد لها حل تحليلي مغلق. المشكلة أن الأساليب العددية التقليدية — كشبكات التكامل — تتضخم تكلفتها أُسِّياً كلما زاد عدد الأبعاد (ما يُعرف بلعنة الأبعاد)، فتصبح عاجزة بمجرد أن تتجاوز المسألة بضعة متغيرات.

الإسهام

طرح متروبوليس وأولام فكرة مختلفة جذرياً: بدلاً من محاولة حساب كل شيء، حاكِ المنظومة بتوليد متتاليات من الأعداد العشوائية ثم خُذ متوسط ما تحصل عليه. بهذا تتحوّل التكاملات المستعصية إلى قيم متوقعة يمكن تقديرها بسحب عيّنات. الميزة الحاسمة أن معدل التقارب — O(1/√n) — يتوقف على عدد العيّنات فحسب ولا علاقة له بعدد الأبعاد، ما يعني تجاوز كلياً. وضعت هذه الورقة الأساس النظري لما صار أوسع الأساليب الحوسبية استخداماً في العلوم.

الأثر

تُشكّل طرق مونتي كارلو اليوم العمود الفقري لمجالات واسعة: في تُستخدم سلاسل ماركوف مونتي كارلو البايزي، ومحاكاة المسارات في التعلم المعزّز، والإسقاط العشوائي للاستدلال التقريبي. وفي التمويل تُسعَّر بها الخيارات وتُنمذَج المخاطر، وفي الفيزياء تُحاكى بها الشبكات الكمية ونقل الجسيمات، وفي الطب يُخطَّط بها العلاج الإشعاعي. من ورقة 1949 خرجت سلاسل ماركوف مونتي كارلو متروبوليس-هيستنغز وكل أساليب الاعتيان الحديثة التي نعرفها.

تخيّل أنك رامٍ معصوب العينين أمام لوحة مربعة رُسم عليها هدف دائري. لا ترى الهدف، لكنك تطلق سهاماً عشوائياً نحو اللوحة، وصديقك يقول لك بعد كل رمية: «أصبتَ» أو «أخطأتَ».

بعد ألف سهم وجدت أن 314 منها أصابت الهدف. مساحة اللوحة 1 م²، إذن مساحة الهدف تقارب 0.314 م² — وبهذا تكون قد قدّرت π/4 بلا أي حساب هندسي.

هذه هي طريقة : حوّل مسألة قياسٍ صعبة إلى لعبة رمي عشوائي وعَدّ. كلما زاد عدد السهام اقترب تقديرك من الجواب الحقيقي.

المشكلة: حين يستحيل الحصول على إجابة دقيقة

في عام 1946 كان الفيزيائي ستانيسلاڤ أولام يتعافى من مرض، وأثناء لعبه الورق (سوليتير) خطر له سؤال بسيط: ما الفوز؟ حاول الحساب بالتوافيق فاستسلم بسرعة — عدد ترتيبات الورق الممكنة هائل لدرجة لا يمكن التعامل معها. عندها ومضت الفكرة: بدلاً من أن أحسب، دعني ألعب مئة جولة وأعدّ كم مرة أفوز.

نفس المشكلة — رياضيات واضحة لكن حوسبة مستحيلة — كانت تؤرّق فيزيائيي مختبر لوس ألاموس النووي. كانوا يحتاجون إلى محاكاة سلوك النيوترونات وهي تتشتّت وتُمتَص وتتضاعف داخل المواد الانشطارية. كل نيوترون يسلك مساراً يعتمد على تصادمات عشوائية في فضاء عالي ، ولا توجد صيغة تحليلية تستطيع الإحاطة بكل ذلك.

المنهج التقليدي — تقسيم الفضاء إلى شبكة دقيقة وتقييم كل نقطة فيها — ينهار تماماً في الأبعاد العالية. تكامل من 10 أبعاد بعشر نقاط لكل محور يتطلّب 101010^{10} عملية حسابية. ضاعِف الأبعاد فقط وستحتاج 102010^{20}. هذا التضخّم الأُسِّي هو ما يُسمّى لعنة الأبعاد.

افتح في المختبر
حرّك مؤشر الأبعاد وراقب كيف تتضخّم نقاط الشبكة أُسِّياً في حين تظل عيّنات مونتي كارلو ثابتة.
تستيقظ التجربة عند وصولك…

الفكرة الجوهرية: استبدل الحسابَ بالمحاكاة

تقوم طريقة مونتي كارلو على ملاحظة بسيطة وعميقة في الوقت ذاته: أي تكامل يمكن صياغته كقيمة متوقعة، وأي قيمة متوقعة يمكن تقديرها بأخذ متوسط عيّنات عشوائية.

لنأخذ مثالاً: تريد حساب التكامل I=abf(x)dxI = \int_a^b f(x)\, dx. يمكنك إعادة صياغته كالتالي: I=(ba)E[f(X)]I = (b - a) \cdot \mathbb{E}[f(X)] حيث XX متغير عشوائي يتبع منتظماً على الفترة [a,b][a,b]. الآن اسحب nn نقطة عشوائية x1,x2,,xnx_1, x_2, \ldots, x_n من هذه الفترة واحسب:

I^n=(ba)1ni=1nf(xi)\hat{I}_n = (b - a) \cdot \frac{1}{n} \sum_{i=1}^{n} f(x_i)

بمقتضى يقترب هذا المتوسط من التكامل الحقيقي كلما زاد nn. بكلمات أخرى: لقد حوّلت مسألة تفاضل وتكامل إلى مسألة إحصائية — والإحصاء لا يكترث بعدد الأبعاد.

I^n=(ba)1ni=1nf(xi)nabf(x)dx\hat{I}_n = (b - a) \cdot \frac{1}{n} \sum_{i=1}^{n} f(x_i) \xrightarrow{n \to \infty} \int_a^b f(x)\, dx
مُقدِّر مونتي كارلو — من العيّنات العشوائية إلى التكاملاتاسحب n نقطة عشوائية منتظمة، قيِّم الدالة f عند كل منها، ثم خُذ المتوسط. الناتج يتقارب نحو التكامل الحقيقي، والخطأ يتقلّص بمعدل 1/√n بصرف النظر عن عدد الأبعاد.

الأمر يشبه استطلاع الرأي: لا تحتاج أن تسأل كل مواطن — يكفي أن تختار ألف شخص عشوائياً وتأخذ متوسط إجاباتهم لتحصل على جيد لرأي السكان ككل. التكامل هنا يلعب دور «المتوسط العام» للدالة، وكل نقطة عشوائية تُقيَّم عندها الدالة تمثّل شخصاً واحداً في الاستطلاع.

مونتي كارلو عملياً: تقدير π

المثال الكلاسيكي هو تقدير π: ارسم دائرة نصف قطرها 1 داخل مربع ضلعه 2. مساحة الدائرة π ومساحة المربع 4، فالنسبة بينهما π/4. ألقِ نقاطاً عشوائية منتظمة داخل المربع، واحسب نسبة ما يقع منها داخل الدائرة (x2+y21x^2 + y^2 \le 1)، ثم اضرب الناتج في 4.

لاحظ في العرض أدناه كيف يتأرجح التقدير بشدة في البداية ثم يبدأ بالاستقرار تدريجياً حول 3.14159… مع كل دفعة جديدة من العيّنات. هذا هو قانون الأعداد الكبيرة وأنت تراه يعمل — كل عيّنة تُضيف معلومة، والضوضاء تتلاشى بالتوسيط.

افتح في المختبر
اضغط «اعتيان» لإلقاء النقاط. راقب تقدير π وهو يتقارب. «إعادة» للبدء من جديد.
تستيقظ التجربة عند وصولك…

ما سرعة التقارب؟

مُقدِّر مونتي كارلو — مقاساً بالانحراف المعياري — يتقلّص بمعدل 1/n1/\sqrt{n}. عملياً هذا يعني:

  • لـتنصيف الخطأ تحتاج إلى أربعة أضعاف العيّنات.
  • لإضافة خانة عشرية واحدة من الدقة تحتاج إلى مئة ضعف.

يبدو هذا بطيئاً، وهو كذلك بالفعل في بُعد واحد. لكن النقطة الجوهرية هي: هذا المعدل لا يتغيّر مهما زاد عدد الأبعاد. تكامل ذو بُعد واحد وتكامل ذو ألف بُعد كلاهما يتقارب بمعدل 1/n1/\sqrt{n}. في المقابل، أساليب الشبكات تحتاج في ألف بُعد إلى 10300010^{3000} نقطة. مونتي كارلو يحتاج العدد نفسه من العيّنات سواء كنت في بُعد واحد أو في ألف.

Standard Error=σn\text{Standard Error} = \frac{\sigma}{\sqrt{n}}
معدل تقارب مونتي كارلوσ هو الانحراف المعياري للدالة f(X). الخطأ يتوقّف على عدد العيّنات n فحسب ولا علاقة له بعدد الأبعاد. هذا الاستقلال عن البُعدية هو ما يمنح مونتي كارلو قوّته الاستثنائية.
افتح في المختبر
قارن بين توسّع أساليب الشبكات ومونتي كارلو مع زيادة الأبعاد. جرّب التبديل بين 2 و5 و10 أبعاد لترى حجم الفارق.
تستيقظ التجربة عند وصولك…

المشي العشوائي: حين يجب أن تستكشف العيّنات

ليست كل مسألة تناسب نموذج «ارمِ سهاماً وعُدّ». في بعض الحالات تحتاج إلى استكشاف الفضاء خطوة بخطوة — كنيوترون يرتدّ داخل المادة، أو جزيء يتحرّك عشوائياً في غاز.

ببساطة هو أن تبدأ من نقطة ما، تختار اتجاهاً ومسافة عشوائيين، تنتقل إليهما وتسجّل ما تجد، ثم تكرّر. بعد عدد كبير من الخطوات يكون هذا المشي قد غطّى منطقة واسعة من الفضاء، والملاحظات التي جمعتها تمنحك صورة إحصائية عن سلوك المنظومة.

هكذا فعل متروبوليس وأولام لمحاكاة سلاسل النيوترونات: كل نيوترون ينطلق من مصدر، يقطع مسافة عشوائية، يصطدم بذرة، ثم يحدث أحد ثلاثة أشياء — يتشتّت (يرتدّ في اتجاه جديد)، أو يُمتَص (يتوقف)، أو يُسبِّب انشطاراً (فتخرج نيوترونات جديدة). بتكرار هذه المحاكاة آلاف المرات حصلوا على إحصائيات التفاعل المتسلسل من غير أن يحلّوا المعادلات التفاضلية المعقدة التي تحكمه.

افتح في المختبر
راقب جسيماً يتحرّك بخطوات عشوائية. فعّل «وضع النيوترون» لمشاهدة أحداث التشتّت والامتصاص والانشطار.
تستيقظ التجربة عند وصولك…

اعتيان أذكى: تقليل التبايُن

معدل 1/n1/\sqrt{n} يبدو ثابتاً ولا مجال لتحسينه، لكن هناك عامل مخفي يمكن التحكّم به: σ، وهو الانحراف المعياري لِما تعتينه. إذا نجحت في تقليل σ دون أن تغيّر القيمة المتوقعة، فإن كل عيّنة ستحمل قدراً أكبر من المعلومات وستصل إلى تقارب أسرع بعدد السحوبات نفسه.

أقوى أداة لتحقيق ذلك هي الاعتيان بالأهمية (Importance Sampling). الفكرة: بدلاً من أن تعتين بشكل منتظم من كل مكان، ركّز عيّناتك في المناطق التي تكون فيها الدالة كبيرة — أي حيث «تُحدث فرقاً» — ثم عوِّض عن هذا التحيّز بإعادة ترجيح كل عيّنة. تخيّل مُستطلِع رأي ذكي يُكثر من سؤال سكان الولايات المتأرجحة (حيث الآراء أكثر تنوّعاً) ثم يعيد الترجيح ليعكس التوزّع الوطني الحقيقي.

رياضياً، بدلاً من سحب XUniform(a,b)X \sim \text{Uniform}(a,b)، تسحب من توزيع مقترح q(x)q(x) وتحسب:

I^n=1ni=1nf(xi)q(xi)\hat{I}_n = \frac{1}{n} \sum_{i=1}^{n} \frac{f(x_i)}{q(x_i)}

إذا كان q(x)f(x)q(x) \propto |f(x)| ينعدم تماماً — كل عيّنة تعطيك الإجابة الصحيحة بالضبط. في الواقع لا يمكن تحقيق هذا المثالي بدقة، لكن حتى تقريب خشن لشكل الدالة يُحقّق تحسينات كبيرة.

I^n=1ni=1nf(xi)q(xi),xiq\hat{I}_n = \frac{1}{n} \sum_{i=1}^{n} \frac{f(x_i)}{q(x_i)}, \quad x_i \sim q
مُقدِّر الاعتيان بالأهميةاسحب العيّنات من q(x) بدلاً من التوزيع المنتظم، وأعِد ترجيح كل عيّنة بـ 1/q(xᵢ) لتعويض الانحياز. كلما اقترب شكل q من شكل |f| قلّ التبايُن، ويتلاشى تماماً عند التطابق.
افتح في المختبر
بدّل بين الاعتيان المنتظم والاعتيان بالأهمية وراقب كيف يتقلّص الخطأ حين تتركّز العيّنات في المناطق ذات القيم العالية.
تستيقظ التجربة عند وصولك…

من مونتي كارلو إلى سلاسل ماركوف مونتي كارلو

كانت ورقة 1949 نقطة انطلاق. بعدها بأربع سنوات نشر متروبوليس وزملاؤه عملاً آخر غيّر المشهد: خوارزمية متروبوليس (1953). السؤال الذي أجابت عنه: كيف تسحب عيّنات من توزيع لا تستطيع الاعتيان منه مباشرةً — مثل توزيع بولتزمان لتشكيلات الجزيئات؟

المبدأ: صمِّم مشياً عشوائياً بحيث يزور، بعد عدد كافٍ من الخطوات، بنِسَب تتوافق مع احتمالاتها. في كل خطوة تقترح انتقالاً جديداً؛ إن كان يزيد الاحتمال تقبله مباشرة، وإن كان ينقصه تقبله باحتمال يساوي نسبة الاحتمالين. مع مرور الوقت يتقارب التوزيع الإحصائي للمشي نحو التوزيع المستهدف.

هذه هي مونتي كارلو (MCMC) — وبها انفتح باب الاستدلال البايزي والفيزياء الإحصائية، ولاحقاً منظومات الذكاء الاصطناعي الحديثة. في كل مرة ينتقي فيها أثناء التوليد، يكون مبدأ مونتي كارلو حاضراً في قلب العملية.

الفكرة بلغة البرمجة

تكامل مونتي كارلو وتقدير πpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import numpy as np

# --- 1. تقدير π بطريقة ربع الدائرة ---
def estimate_pi(n_samples=100_000):
    """ألقِ سهاماً عشوائية على مربع واحسب نسبة الإصابات داخل الدائرة."""
    x = np.random.uniform(0, 1, n_samples)
    y = np.random.uniform(0, 1, n_samples)
    inside = (x**2 + y**2) <= 1.0        # داخل ربع الدائرة؟
    return 4.0 * inside.mean()            # النسبة × 4 = تقدير π

print(f"π ≈ {estimate_pi():.5f}")         # عادةً ضمن 0.01 من 3.14159

# --- 2. تكامل مونتي كارلو العام ---
def mc_integrate(f, a, b, n=100_000):
    """قدِّر ∫_a^b f(x) dx بتوسيط تقييمات عشوائية."""
    x = np.random.uniform(a, b, n)
    return (b - a) * f(x).mean()

# مثال: ∫_0^1 x² dx  (الجواب الحقيقي = 1/3)
print(f"∫x² = {mc_integrate(lambda x: x**2, 0, 1):.5f}")

# --- 3. الاعتيان بالأهمية: التكامل ذاته بتبايُن أقل ---
def mc_importance(f, q_sample, q_pdf, n=100_000):
    """اعتَيِن من q بدل المنتظم؛ أعد الترجيح بـ 1/q."""
    x = q_sample(n)
    return (f(x) / q_pdf(x)).mean()

# ركّز الاعتيان حيث f كبيرة ← ضجيج أقل

إرث مونتي كارلو

ما بدأ كحيلة ذكية في الفيزياء النووية تحوّل إلى واحدة من أوسع الأدوات استخداماً في عالم الحوسبة. هكذا تفرّعت الفكرة عبر العقود:

  1. 1946

    لحظة إلهام أولام في لعبة الورق

    أثناء تعافيه من مرض، توصّل ستانيسلاڤ أولام إلى أن تجربة اللعب العشوائي تعطي تقديراً للاحتمالات أسرع بكثير من محاولة حسابها بالضبط.

  2. 1947

    فون نويمان يبرمج ENIAC

    نفّذ جون فون نويمان أوّل محاكاة مونتي كارلو حاسوبية على جهاز ENIAC ضمن دراسات تضاعف النيوترونات في مختبر لوس ألاموس.

  3. 1949

    متروبوليس وأولام ينشران «طريقة مونتي كارلو»

    أول ورقة علنية (غير سرية) عن طرق مونتي كارلو — والاسم مأخوذ من كازينو مونتي كارلو الشهير. وضعت الأساس النظري الذي بُنيت عليه الطريقة.

  4. 1953

    خوارزمية متروبوليس

    نشر متروبوليس وزملاؤه خوارزمية للاعتيان من توزيعات بولتزمان عبر مشي عشوائي بآلية قبول ورفض — وكانت هذه لحظة ولادة سلاسل ماركوف مونتي كارلو.

  5. 1970

    هيستنغز يعمّم الخوارزمية

    عمّم هيستنغز خوارزمية متروبوليس بحيث تعمل مع توزيعات اقتراح غير متماثلة، فنتجت خوارزمية متروبوليس-هيستنغز التي أصبحت ركيزة في الإحصاء التطبيقي.

  6. 1990

    MCMC تُحدث ثورة في الإحصاء البايزي

    بيّن غيلفاند وسميث أن MCMC تُحوِّل النماذج البايزية التي كانت مستعصية حسابياً إلى نماذج قابلة للتطبيق، ما أحدث تحولاً جذرياً في الإحصاء الحديث.

  7. 2015

    بحث شجرة مونتي كارلو يقود AlphaGo

    اعتمد AlphaGo على بحث شجرة مونتي كارلو — أي محاكاة آلاف المباريات عشوائياً لتقييم الحركات — فتغلّب على بطل العالم في لعبة Go وأثبت قدرة الذكاء الاصطناعي على التفوّق في الألعاب الاستراتيجية المعقدة.

  8. 2020

    مونتي كارلو في تدريب النماذج اللغوية

    أصبحت أساليب تدرُّج السياسة — وهي في جوهرها مُقدِّرات مونتي كارلو للمكافأة المتوقعة — أداةً أساسية في تدريب النماذج اللغوية الكبيرة عبر التعلم المعزّز من التغذية الراجعة البشرية (RLHF).

من سلاسل النيوترونات في المفاعلات النووية إلى سلاسل الرموز في النماذج اللغوية، الخيط واحد لم ينقطع: حين تكون المسألة أعقد من أن تُحلّ تحليلياً، حاكِها بالعشوائية ودع قانون الأعداد الكبيرة يتكفّل بالباقي.

المرجعMetropolis, N. and Ulam, S.. The Monte Carlo Method. Journal of the American Statistical Association, 1949.

مصطلحات هذه الورقة