حرّك درجة الحرارة، ثم مؤشّرات فكّ الترميز في عرض المُحوِّل العابر للمقرّرات، وتوقَّع — قبل أن تقرأ من لوحة الاحتمالات — كيف يحوّل الـsoftmax النهائي صفًّا من الـlogits إلى توزيع احتمالي، وكيف يُسطّحه رفعُ T، ولماذا يتجاهل فكُّ الترميز greedy قيمةَ T تمامًا، وماذا يفعل top-k بالاحتمالات الباقية.
آخر ما يفعله المُحوِّل هو تحويل صفٍّ من الدرجات إلى احتمالات كل رمز تالٍ، والمؤشّر الذي يشكّل هذه الاحتمالات هو درجة الحرارة. وهذا حسابٌ يمكنك التحقّق منه يدويًا: الـsoftmax توزيعٌ احتمالي حقيقي، فلا بدّ أن يجمع إلى 1؛ وقسمةُ كل درجة على نفس T عمليةٌ رتيبة، فتُسطّح الاحتمالات دون أن تُعيد ترتيبها أبدًا — ولهذا بالضبط لا يستطيع T أن يُغيّر فكَّ الترميز greedy، الذي يأخذ أعلى درجة واحدة.
افتح العرض (يقع في مقرر GenAI 101، وهذا الرابط يصل إليه). يفتح على هذه الحالة بالضبط، فزرّ «إعادة الضبط» يعيدك إلى هنا أيضًا. تحمل لوحة الخرج المؤشّرات الحيّة — درجة الحرارة، وأزرار المرشِّح، ومبدّل greedy/sample.
Temperature T -> 0.80 Filter -> none
Decoding -> sampling Candidates listed -> 15
راقب لوحة الاحتمالات — كل احتمال تتوقّعه مطبوع هناك. المرشّحات الـ15 للرمز التالي هي مرشّحات العرض نفسه؛ أنت تتحقّق ممّا يفعله بها الـsoftmax، لا من قيمها الفردية.
على الحالة الابتدائية (T = 0.80، المرشِّح none)، اقرأ لوحة الاحتمالات. هناك 15 مرشّحًا. الـsoftmax مُعرَّف ليكون توزيعًا احتماليًّا، فلا بدّ أن تجمع قيمه إلى عددٍ محدّد بالضبط. توقَّع مجموع كل الاحتمالات الـ15، ثم اقرأها واجمعها.
تجمع إلى 1.00 بالضبط. هذا ما يجعل الـsoftmax توزيعًا لا مجرّد قائمة درجات: e^(z_i/T) مقسومًا على مجموع كل e^(z_j/T) مُسوّى بحكم البناء، مهما كانت الـlogits.
الآن اسحب درجة الحرارة عبر ستّ محطّات — T = 0.3, 0.5, 0.8, 1.0, 1.5, 2.0 — ولاحظ في كل مرّة احتمال الرمز الأعلى. قسمةُ كل logit على T أكبر تُقارِب القيم الموزونة، فيخسر المرشّح المفضّل تفوّقه عند كل خطوة. توقَّع، عبر هذه المحطّات الستّ، كم من الانتقالات الخمس يهبط فيها الاحتمال الأعلى.
جميعها الـ5. يهبط الاحتمال الأعلى عند كل خطوة كلّما ارتفع T — وهذا هو التسطيح: عند T منخفض يكون الـsoftmax مُدبَّبًا وقريبًا من greedy، وكلّما كبر T انتشر نحو التوزيع المنتظم. لا يتغيّر الترتيب أبدًا، بل حدّته فقط.
بدّل فكّ الترميز إلى greedy (argmax). greedy يُصدر دائمًا الرمز الأعلى احتمالًا. الآن مرِّر T عبر 0.1, 0.5, 1.0, 2.0. ولأنّ القسمة على T لا تستطيع إعادة ترتيب الـlogits، فلا يمكن أن يتحرّك الـargmax. توقَّع كم رمزًا مختلفًا يُصدره greedy عبر درجات الحرارة الأربع.
واحد 1 بالضبط. الرمز المُصدَر متطابق عند T = 0.1 وT = 2.0 — درجة الحرارة تُغيّر الاحتمالات، لكنّ greedy لا يرمي النرد أبدًا، فهو ثابت إزاء T. تُوحي معظم شروح درجة الحرارة بعكس ذلك ضمنًا؛ والحساب يقول رمزًا واحدًا، دائمًا.
أعِد فكّ الترميز إلى sampling، ثم اختر المرشِّح top-k بـk = 3 (اترك T = 0.80). يُبقي top-k المرشّحات الثلاثة الأعلى احتمالًا، ويُصفّر البقية، ويُعيد تسوية الباقين ليصبح أخذ العيّنات منهم ممكنًا. توقَّع إلى كم تجمع هذه الاحتمالات الثلاثة الباقية بعد إعادة التسوية.
إلى 1.00 بالضبط من جديد. البتر وحده يترك الباقين الثلاثة يجمعون إلى أقلّ من 1، فيقسمهم العرض على مجموعهم — نفس التسوية التي في الـsoftmax الكامل، لكن على المجموعة المُبقاة فقط. يُعيد top-k تشكيل الرموز التي يمكن سحبها دون أن يكسر التوزيع أبدًا.
كل ما سبق ينتظرك في العرض. اسحب درجة الحرارة وراقب التوزيع كلّه يحتدّ ويُسطَّح، وبدّل بين greedy وsampling لترى الرمز المُصدَر يتجمّد أو يتحرّك، وبدّل top-k وtop-p لتراقب المرشّحات تتساقط والباقين يُعاد تسويتهم لحظيًّا.
- أكّدتَ أنّ الـsoftmax على كل المرشّحات الـ15 يجمع إلى 1.00 — توزيع حقيقي
- راقبتَ رفعَ T يُسطّح الاحتمالات، والاحتمال الأعلى يهبط في كل الخطوات الـ5 للمسح
- رأيتَ greedy يُصدر رمزًا 1، دون تغيّر عبر T = 0.1 … 2.0 — ثابتًا إزاء درجة الحرارة
- رشّحتَ بـtop-k وراقبتَ الباقين الثلاثة يُعاد تسويتهم إلى 1.00
- كل قيمة توقّعتها هي حساب الـsoftmax/top-k الخاص بالعرض نفسه — لا logit مُستردّ أو توضيحي