ML 101
M6 · تجربة
تجربة عملية
راقب gradient واحدًا يتدفّق إلى الوراء

مرِّر شبكة صغيرة عبر تمرير أمامي وتمرير خلفي وخطوة تحديث واحدة في المِنصّة، وتوقَّع — قبل أن تقرأ من الشاشة — المُخرَج ŷ والخطأ، وتدرّجًا واحدًا لوزن ∂L/∂w، والقيمة الجديدة للوزن بعد خطوة نزول تدرّجي واحدة.

خطوة نزول تدرّجي واحدة
w \leftarrow w - \eta\,\dfrac{\partial L}{\partial w}

الانتشار الخلفي ليس سوى محاسبة قاعدة السلسلة: أيّ قيمة مخزّنة يعيد كل تدرّج استخدامها. التمرير الأمامي يحسب القيم ويخزّنها؛ والتمرير الخلفي يعيد استخدامها ليحسب ∂L/∂w لكل وزن؛ ثم تدفع خطوة نزول تدرّجي واحدة كل وزن إلى أسفل المنحدر، w ← w − η ∂L/∂w. وأداء الثلاثة على شبكة واحدة ملموسة، بأرقام يمكنك التحقّق منها، هو ما يحوّل الانتشار الخلفي من صيغة إلى شيء تراه.

1 / 8
ML 101
M6 · تجربة
جهّز التجربة
شبكة صغيرة واحدة

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

اضبط هذه القيم
Depth -> 1 Width -> 2 Activation -> sigmoid Loss -> MSE Data -> one row x = [1, 0] y = 1 W[1] = [[1,0],[0,0]] b[1] = [0,0] W[2] = [[1,1]] b[2] = [0]

وحدة المُخرَج دائمًا sigmoid، فيبقى ŷ احتمالًا. يُظهر المُتدرِّج قيم التمرير الأمامي، وتطبع الشبكة ∂L/∂w بجانب كل وزن، وتطبع خطوة التحديث كل وزن جديد — كل رقم تتوقّعه موجود هناك.

2 / 8
ML 101
M6 · تجربة
الخطوة 1 من 4
التمرير الأمامي: المُخرَج

انتقل إلى Output ŷ في المُتدرِّج. عند x = [1, 0] تكون التنشيطات القبلية المخفيّة z[1] = [1, 0]، فيكون a[1] = [σ(1), σ(0)] = [0.7311, 0.5]، ثم z[2] = 1·0.7311 + 1·0.5 = 1.2311. توقَّع ŷ = σ(1.2311)، ثم اقرأه.

المتوقّع

يقرأ المُخرَج ŷ = 0.7740 — رقم واحد في (0, 1). هذا هو التمرير الأمامي كله: طبقةً طبقة، قيم تدخل واحتمال واحد يخرج.

3 / 8
ML 101
M6 · تجربة
الخطوة 2 من 4
التمرير الأمامي: الخطأ

انتقل إلى Loss L. الهدف هو y = 1 والخطأ هو MSE، ويُكتَب L = (ŷ − y)² لهذا الصفّ الواحد. توقَّع L من ŷ = 0.7740، ثم اقرأه.

المتوقّع

يقرأ الخطأ L = 0.0511 — وهو (0.7740 − 1)². عددٌ قياسيّ واحد يلخّص كم ابتعد هذا التنبّؤ عن الهدف؛ والتمرير الخلفي موجود ليجعله أصغر.

4 / 8
ML 101
M6 · تجربة
الخطوة 3 من 4
التمرير الخلفي: gradient واحد

انظر الآن إلى الشبكة القابلة للتحرير، عند وزن المُخرَج W[2]11. يعيد التمرير الخلفي استخدام a[1]1 = 0.7311 المخزّنة: التدرّج هو ∂L/∂W[2]11 = δ[2] · a[1]1، مع دلتا المُخرَج δ[2] = 2(ŷ−y)·ŷ(1−ŷ) = −0.0791. توقَّع ∂L/∂W[2]11، ثم اقرأه بجانب الوزن.

المتوقّع

تطبع الشبكة ∂L/∂W[2]11 = -0.0578. القيمة السالبة تعني أنّ رفع هذا الوزن يخفض الخطأ — ولاحظ أنّه أعاد استخدام قيمة خزّنها التمرير الأمامي مسبقًا بدل إعادة حسابها. إعادة الاستخدام هذه هي جوهر الانتشار الخلفي كله.

5 / 8
ML 101
M6 · تجربة
الخطوة 4 من 4
التحديث: خطوة واحدة نحو الأسفل

اضبط معدّل التعلّم على η = 1 (مؤشّر Learning rate عند 0 على مقياسه اللوغاريتمي) وانتقل إلى التحديث. يحرّك النزول التدرّجي الوزن عكس تدرّجه: W[2]11 ← W[2]11 − η ∂L/∂W[2]11 = 1 − 1·(−0.0578). توقَّع W[2]11 الجديد، ثم اقرأه.

المتوقّع

تطبع خطوة التحديث W[2]11 ← 1.0578. ولأنّ التدرّج كان سالبًا ارتفع الوزن، وخطوة كهذه لكل وزن دفعةً واحدة هي بالضبط ما يفعله التدريب — آلاف المرّات.

6 / 8
ML 101
M6 · تجربة
دورك الآن
افتح المِنصّة

كل ما سبق ينتظرك في المِنصّة. اكتب أيّ أوزان في الشبكة، ومرِّر عبر الأمامي والخلفي وراقب كل تدرّج يعيد استخدام قيمة مخزّنة، ثم طبّق التحديثات وراقب الخطأ يهبط. بدّل التنشيط إلى ReLU أو كدّس طبقات مخفيّة لترى التدرّجات تتلاشى.

7 / 8
ML 101
M6 · تجربة
خلاصة
ما أنجزتَه
  • شغّلتَ تمريرًا أماميًّا حتى المُخرَج ŷ = 0.7740
  • قرأتَ خطأ MSE L = 0.0511 للهدف y = 1
  • راقبتَ التمرير الخلفي يُنتج تدرّجًا واحدًا، ∂L/∂W[2]11 = -0.0578، بإعادة استخدام قيمة مخزّنة
  • أخذتَ خطوة نزول تدرّجي واحدة عند η = 1: W[2]11 ← 1.0578
  • كل قيمة توقّعتها هي حساب العرض الأمامي والخلفي نفسه، لا صورة تقريبية
8 / 8