The loss for every choice of w and b: darker is worse, × is the
best line. Each dot is one step. Gray arrow: straight downhill. Colored arrow: the step the
optimizer will take next. Click anywhere to start from there.The 20 data points and the line for the current w and b.
Dashed: the best line. With SGD, the ringed points are the batch for the next step.
The loss curve: how far the loss (MSE) is above the best line's MSE, after every step. The scale is
logarithmic, so each gridline is 10× smaller than the one above. Dashed: the bottom, 0.01 above
the best.
الفكرة كلّها.
النموذج في الصفحة خطّ مستقيم، y = w·x + b. فيه رقمان يمكنك تغييرهما:
• w هو الميل (slope)، أي مدى انحدار الخطّ.
• b هو الـ intercept، أي حيث يقطع الخطّ محور y.
اختر قيمة لـ w وقيمة لـ b فتحصل على خطّ واحد بالضبط. غيّر أيًّا منهما فتحصل على خطّ
مختلف. والـ loss هو متوسّط مربّع الخطأ على النقاط الـ 20. ويعني التدريب إيجاد أخفض بقعة، أي الـ ×.
لا يستطيع الـ optimizer أن يرى الخريطة كلّها. كلّ ما يعرفه هو أين يقف، والـ gradient: أيّ اتّجاه هو
الصعود هناك، وبأيّ انحدار. وكلّ optimizer في هذه الصفحة قاعدةٌ لتحويل هذه المعلومة الواحدة إلى خطوة.
القواعد الأربع. Gradient descent: الخطوة = −learning rate × gradient، والـ gradient محسوب من النقاط الـ 20
كلّها. SGD (stochastic gradient descent): القاعدة نفسها، لكنّ gradient كلّ خطوة يأتي من batch
صغيرة عشوائية من النقاط. إنّه أرخص وأكثر ضجيجًا. ولمجموعات البيانات الحقيقية ملايين النقاط، ولذلك هذا ما
يُستخدم فعلًا. Momentum: يحتفظ بـ velocity متجدّدة، 0.9 × الـ velocity القديمة + الـ gradient، ويخطو
على امتدادها. الاتّجاهات التي تتّفق خطوةً بعد خطوة تكتسب سرعة؛ والاتّجاهات التي تنقلب ذهابًا وإيابًا يلغي
بعضها بعضًا. Adam: هو momentum، مع حجم خطوة مستقلّ لكلّ weight. يقسم متوسّط gradient كلّ weight على الحجم
المعتاد للـ gradients الأخيرة لذلك الـ weight، فيتحرّك الاتّجاه الحادّ والاتّجاه الضحل كلاهما نحو learning
rate واحد في كلّ خطوة.
يستخدم Momentum وAdam هنا النقاط الـ 20 كلّها، فلا ترى إلّا قاعدتيهما. أمّا في التدريب الحقيقي فيستخدمان
الـ batches أيضًا.
أمور تستحقّ التجربة:
1. Gradient descent على Round bowl. عند الـ learning rate الافتراضي 0.03 يحتاج 54 خطوة
ليبلغ القاع (loss في حدود 0.01 من الأفضل). اسحب الـ learning rate إلى 0.5 فيبلغه في خطوة واحدة بالضبط.
وعند 1 يقفز فوق القاع تمامًا إلى الجهة المقابلة، ثمّ يعود، إلى الأبد.
2. Gradient descent على Stretched bowl. هذه البيانات نفسها مع x مقيسة بمقياس
أكبر بخمس مرّات، فيكون الـ loss أشدّ انحدارًا بكثير في w منه في b. يتعرّج المسار عبر
الاتّجاه الضيّق بينما يزحف على امتداد الاتّجاه الطويل. الاتّجاه الحادّ يحدّد السرعة القصوى: 0.04 هو أعلى
learning rate لا ينفجر هنا، مقابل 1 على الـ round bowl.
3. Adam على الـ stretched bowl نفسه. خطوته الأولى تتحرّك 0.2 بالضبط في w وb
كليهما، مهما كان انحدار كلّ منهما، فلا يتعرّج عبر الاتّجاه الضيّق. جرّب أيّ learning rate على الـ slider، على
أيّ من التضاريس الثلاث: Adam لا ينفجر أبدًا. وهذا التسامح، أكثر من السرعة المجرّدة، هو سبب كون Adam
الخيار الأوّل المعتاد.
4. Tilted valley: البيانات نفسها مُزاحة لتتمركز حول x = 3. الآن w وb
متشابكان، والوادي يمتدّ مائلًا. ينزل gradient descent إلى قاع الوادي بسرعة، ثمّ يزحف على امتداده: 455 خطوة.
يكتسب Momentum سرعةً على امتداد القاع ويحتاج إلى 120. ويحتاج Adam إلى 165: فأحجام خطواته الخاصّة
بكلّ weight لا تتوافق إلّا مع الأودية الممتدّة على امتداد محور، وهذا الوادي ليس كذلك.
5. SGD على الـ round bowl، مع تغيير الـ batch size. النقاط المطوّقة هي الـ batch للخطوة التالية، وسهم
الخطوة يتمايل بعيدًا عن الانحدار المستقيم. لا يستقرّ SGD تمامًا أبدًا، بل يرتجف حول القاع. بالقياس على
الخطوات من 2001 إلى 3000، كانت المسافة المعتادة فوق أفضل loss هي 0.0050 مع 1، و0.0013 مع 4،
و0.0002 مع 10. وbatch size قدره 1 على الـ stretched bowl ينفجر بعد 433 خطوة: فنقطة واحدة بعيدة قد تكون
أشدّ انحدارًا بكثير من المتوسّط.
6. Race all four من نقطة البداية نفسها، كلّ منها بالـ learning rate الخاصّ به. عدد الخطوات لبلوغ القاع
(gradient descent، SGD، momentum، Adam): على round bowl هي 54، 56، 14، 15؛ وعلى stretched bowl هي 32،
35، 44، 45؛ وعلى tilted valley هي 455، 472، 120، 165. لا يفوز أيّ optimizer في كلّ مكان.
7. راقِب loss curve أثناء السباق على الـ round bowl. على مدى 500 خطوة، مع العدّ فقط ما دام الـ loss
أعلى من الأفضل بأكثر من 0.0001: لا يرتفع loss الـ gradient descent ولو مرّة واحدة. ويرتفع loss الـ momentum
في 34 خطوة، وloss الـ Adam في 32؛ وكلّ نتوء هو تجاوزٌ للـ × على الخريطة. ويرتفع loss الـ SGD في 225
خطوة ولا يستقرّ أبدًا: بعد الخطوة 100 يظلّ يرتدّ تحت الخطّ المتقطّع مباشرةً، حتى 0.0087، بينما تستقرّ الثلاثة
الأخرى على القاع. هذا هو ضجيج الـ batch.