تخطَّ إلى المحتوى
6/30الفصل 6 من 30

جعله يتدرّب، وجعله يعمّم

شبكة من ست طبقات لا تتحرك خسارتها عن ln 2، تُصلَح قياسًا بعد آخر. ثم double descent: 5,000 معلمة على 40 نقطة.

في هذه الصفحة

الشبكة من الفصل 5 تعمل. لديها تسع معاملات، وتتعلم XOR، وتتطابق تدرّجاتها مع PyTorch حتى ست عشرة منزلة عشرية.

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

TEXT
step    1: loss 0.693147
step 5000: loss 0.693147
accuracy: 50.0 %

ذلك الرقم ليس اعتباطيًا. ln2=0.693147\ln 2 = 0.693147 هو binary cross-entropy لنموذج يخرج احتمالًا قدره 0.50.5 لكل شيء، و50 % تساوي رمية عملة على مجموعة بيانات متوازنة. بعد خمسة آلاف خطوة لم تتحرك الشبكة رقمًا واحدًا. لم ينهَر شيء، ولم يظهر أي تحذير، وما زالت الـ gradients صحيحة تمامًا.

هذا الفصل عن الفجوة بين شبكة تعمل تشغيلًا وشبكة تعمل فعليًا. وله نصفان يبدوان موضوعين مختلفين، لكنهما المهمة نفسها: جعل الخسارة تنخفض down، وجعلها تنخفض على بيانات لم يرها النموذج من قبل.

لماذا ماتت الشبكة ذات الطبقات الست

رابط إلى القسم: لماذا ماتت الشبكة ذات الطبقات الست

ابدأ بالنظر بدل التخمين. مرّر batch من المدخلات عبر الشبكة واطبع الانحراف المعياري للتفعيلات في كل طبقة، ثم الانحراف المعياري لـ gradients الأوزان:

profile.pyPYTHON
def profile(model, x):
    h = x
    for layer in model:
        h = layer(h)
        if isinstance(layer, (nn.Tanh, nn.ReLU)):
            print(f"activation std: {h.std().item():.4f}")
    model(x).sum().backward()
    for p in model.parameters():
        if p.dim() == 2:
            print(f"gradient std: {p.grad.std().item():.2e}")

ثلاث تهيئات، المعمارية نفسها، ست طبقات من tanh\tanh:

initialisationactivation std, layers 1→6
normal, std 0.010.010.0145 · 0.0016 · 0.0002 · 0.0000 · 0.0000 · 0.0000
normal, std 110.6573 · 0.9296 · 0.9585 · 0.9634 · 0.9637 · 0.9625
Xavier0.1579 · 0.1493 · 0.1353 · 0.1333 · 0.1325 · 0.1403
initialisationgradient std, first layer → last
normal, std 0.010.013.20e-06 · 4.97e-07 · … · 6.40e-06
normal, std 111.94e+03 · 2.28e+02 · 1.22e+02 · 4.43e+01 · 1.85e+01 · 7.30e+00
Xavier2.31e+00 · 4.50e-01 · 4.26e-01 · 3.89e-01 · 4.39e-01 · 4.73e-01

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

الصف الثاني هو الفشل المعاكس، ويستحق الفهم لأنه يخالف الحدس. التفعيلات تبدو سليمة — حول 0.96 — لكن ذلك هو tanh\tanh مشبعًا، مثبتًا قرب حدّه، تمامًا في النظام الذي قاس الفصل 5 أنه يفقد عاملًا يقارب عشرة آلاف في الـ gradient. ومع ذلك فالـ gradients هائلة: 1940 عند الطبقة الأولى. كلا الأمرين صحيح في الوقت نفسه. كل خطوة خلفية تضرب في WW^\top، ومع 128 مُدخلًا بتباين واحدي يكون لذلك العامل gain تقارب 12811\sqrt{128} \approx 11، وهي تطغى على الانكماش الناتج من tanh\tanh المشبع. تنمو الـ gradients هندسيًا في طريق العودة. هذا هو exploding gradient، وينتج قيم خسارة nan خلال خطوات قليلة في أي تدريب حقيقي.

الصف الثالث هو ما تريده: تفعيلات ثابتة تقريبًا في المقياس عبر العمق، وgradients ثابتة تقريبًا في المقياس عبر العمق. لا شيء يموت، ولا شيء ينفجر.

التهيئة الجيدة تصلح المقياس عند الخطوة صفر. لكنها لا تبقيه ثابتًا: الأوزان تتحرك، وبحلول الخطوة خمسة آلاف لا تعود حجة التباين الدقيقة منطبقة.

تفرض طبقات normalisation المقياس باستمرار. عند إعطاء متجه من التفعيلات، اطرح متوسطًا، واقسم على انحراف معياري، ثم طبّق مقياسًا متعلمًا γ\gamma وإزاحة β\beta كي تستطيع الطبقة إلغاء normalisation إذا تبيّن أن هذا ما تريده:

h^=hμσ2+ϵ,y=γh^+β\hat{h} = \frac{h - \mu}{\sqrt{\sigma^2 + \epsilon}}, \qquad y = \gamma\hat{h} + \beta

السؤال الحقيقي الوحيد هو على ماذا تأخذ المتوسط. Batch normalisation3 يأخذ μ\mu وσ\sigma عبر بُعد الـ batch، إحصائية واحدة لكل feature. Layer normalisation4 يأخذهما عبر الـ features، إحصائية واحدة لكل مثال.

يبدو ذلك الاختيار صغيرًا، لكنه يقرر تقريبًا كل ما يأتي بعده:

BatchNorm يجعل مخرج كل مثال يعتمد على الأمثلة الأخرى التي صادف وجودها في batch الخاصة به. في وقت التدريب يكون ذلك regulariser خفيفًا. في وقت الاستدلال لا توجد batch، لذلك عليه الاحتفاظ بمتوسط جارٍ للإحصاءات المجمعة أثناء التدريب — ما يعني أن الطبقة تتصرف بشكل مختلف في وضع التدريب ووضع التقييم، ونسيان تبديل الأوضاع من أكثر الأخطاء شيوعًا في المجال. كما يتدهور مع الـ batches الصغيرة، ويصبح محرجًا مع التسلسلات ذات الأطوال المتغيرة، لأن «المتوسط عبر الـ batch عند الموضع 40» يُحسب من أي عدد من التسلسلات صادف أن يكون بهذا الطول.

LayerNorm يطبّع كل مثال وحده. لا اعتماد على batch، لا إحصاءات جارية، السلوك نفسه في التدريب والاستدلال، غير مكترث بحجم batch، وغير مكترث بطول التسلسل. كل واحدة من هذه الخصائص تصبح مطلبًا لا ميزة لطيفة عندما تولّد token واحدًا في كل مرة لمستخدم واحد، وهو الموضع الذي ينتهي إليه الفصل 13.

لهذا فإن LayerNorm هو ما ستقابله مرة أخرى في الفصل 9 بلا تغيير: كتلة transformer تستخدمه، وتستخدمه للأسباب في العمود الأيمن، لا لأنه أفضل بصورة مجردة.

إصلاح شيء واحد في كل مرة، وهذه هي الـ skill الفعلية

رابط إلى القسم: إصلاح شيء واحد في كل مرة، وهذه هي الـ skill الفعلية

أربعة إصلاحات مرشحة للشبكة الميتة: Xavier initialisation، وLayerNorm، وresidual connections، وAdam بدلًا من SGD. الإغراء هو تطبيق الأربعة كلها والمضي قدمًا. افعل ذلك ولن تعرف أبدًا أيها كان مهمًا، وفي المرة التالية التي يحدث فيها الأمر لن تكون لديك طريقة — بل طقس فقط.

لذلك طبّقها واحدًا تلو الآخر. البذرة نفسها، البيانات نفسها، المعمارية نفسها، 800 خطوة:

what was addedfinal lossaccuracy
nothing0.693150.0 %
Xavier initialisation0.569260.4 %
LayerNorm0.623061.5 %
residual connections0.665156.6 %
Adam0.678758.7 %
all four0.0000100.0 %

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

امنح كل تشغيل ستة أضعاف الميزانية — 5000 خطوة بدلًا من 800 — فيتغير المشهد كليًا:

what was addedfinal loss @ 5000accuracy
nothing0.693150.0 %
Xavier initialisation0.0007100.0 %
LayerNorm0.0002100.0 %
residual connections0.665356.7 %
Adam0.690853.4 %
Xavier + Adam0.0000100.0 %
Xavier + LayerNorm0.0001100.0 %

الآن تصبح الصورة حادة، وهذا تشخيص لا طقس.

التهيئة وحدها تصلحه. Normalisation وحدها تصلحه. كل منهما يعالج المرض الحقيقي — انهيار signal الأمامي إلى الصفر — وأي منهما كافٍ. عند 800 خطوة بدتا فقط كرصيد جزئي، لأنهما كانتا قد حلّتا المشكلة وما زالتا تتسلقان للخروج.

Residual connections وAdam لا يصلحانه، مهما كانت الميزانية. ليس لأنهما سيئان، بل لأنهما يعالجان مرضًا مختلفًا. تعطي residual connection للـ gradient مسارًا حول طبقة حاجبة؛ وهذا ذو قيمة كبيرة عندما يكون الـ gradient هو المشكلة، ولا يساوي شيئًا عندما يكون الـ signal الأمامي صفرًا أصلًا، لأن الاختصار حول طبقة ميتة ما زال يحمل قيمة ميتة. يعيد Adam قياس خطوة كل معامل بحسب تاريخه الخاص من الـ gradient؛ وهذا يساعد عندما تكون للـ gradients مقادير شديدة الاختلاف، ولا يستطيع إحياء شبكة لا يعتمد مخرجها على مُدخلها.

و«nothing» ما زال بالضبط 0.6931 بعد خمسة آلاف خطوة. ليس 0.6929. إنه ليس بطيئًا؛ إنه ميت، وهذا التمييز صار مرئيًا بطريقة لم يكن عليها من قبل، لأن لديك صفًا يقول إن إصلاحًا ما يعمل لتقارنه به.

من هنا فصاعدًا يستخدم هذا المقرر PyTorch. يجب أن يكون ذلك مستحقًا لا معلنًا فقط، لذلك إليك بالضبط ما يفعله مما تعرف أصلًا كيف تفعله.

المحسّن قاعدة لتحويل gradients إلى تحديثات للمعاملات. يستخدم gradient descent العادي الـ gradient. Momentum يستخدم متوسطًا جاريًا له، ما يخفف الضجيج ويبني سرعة في الاتجاهات التي تبقى متسقة:

optim_by_hand.pyPYTHON
v = beta * v + p.grad          
p -= lr * v                    

Adam5 يحتفظ بمتوسطين جاريين — للـ gradient ولـ gradient المربّع — ويقسم أحدهما على الجذر التربيعي للآخر، بحيث يحصل كل معامل على خطوة مقيسة بحسب مقدار gradient الحديث الخاص به:

optim_by_hand.pyPYTHON
m = b1 * m + (1 - b1) * g          # mean of the gradient          
v = b2 * v + (1 - b2) * g * g      # mean of the squared gradient  
m_hat = m / (1 - b1 ** t)          # bias correction: both averages start at zero
v_hat = v / (1 - b2 ** t)
p -= lr * m_hat / (v_hat.sqrt() + eps)   

عشرة أسطر. شغّل الاثنين مقابل torch.optim على المسألة نفسها لمدة 50 خطوة:

TEXT
SGD+momentum   by hand [2.7781870365142822, -1.0304985046386719]
               torch   [2.7781870365142822, -1.0304983854293823]   max |diff| = 1.19e-07
Adam           by hand [0.4893140196800232, -0.46317872405052185]
               torch   [0.48931416869163513, -0.46317875385284424]   max |diff| = 1.49e-07

مطابقان حتى دقة float32. torch.optim.Adam هو تلك الأسطر الخمسة، زائد عقود من العناية بالحالات الطرفية وC++ kernel. هذه هي الصفقة التي تعقدها من الآن فصاعدًا: ليست سحرًا بدل الفهم، بل سرعة مقابل أسطر كتبتها بالفعل.

التفسير المعتاد لـ Adam هو «adaptive per-parameter learning rates»، وهذا وصف لا سبب. السبب هو الهندسة، ويمكن قياسه.

خذ خسارة يختلف انحناؤها بين الاتجاهات: شديدة في اتجاه، وضحلة في آخر. لدى SGD معدل تعلم عالمي واحد، لذلك يجب أن يختار قيمة صغيرة بما يكفي لتكون مستقرة في الاتجاه الأكثر انحدارًا — وتكون تلك القيمة عندئذ صغيرة جدًا للاتجاه الضحل، حيث يزحف التقدم. هذا ما يسبب الصورة الكلاسيكية لـ gradient descent وهو يتعرج نزولًا في وادٍ ضيق.

نسبتا انحناء، ثلاثة محسّنات، 300 خطوة، وكل محسّن مُنح أفضل معدل تعلم من مسح كي لا يكون أحد معاقًا:

curvature ratioSGDSGD + momentumAdam
10 : 1error 0.000002error 0.000000error 0.000000
1000 : 1error 1.925485error 0.001432error 0.000000
diverged at (1000:1)4 of 8 rates4 of 8 rates0 of 6 rates

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

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

هناك قطعتان أخريان تنتميان هنا، وكلتاهما سطر واحد. Gradient clipping يعيد قياس متجه الـ gradient كلما تجاوز norm الخاص به عتبة، ما يحول صف «الخسارة تقفز فجأة إلى قيمة هائلة» في جدول التشخيص إلى حدث عابر. وlearning rate schedules: warmup قصير من قريب الصفر خلال أول بضع مئات من الخطوات، لأن تقديرات التباين لدى Adam رديئة حتى ترى بعض الـ gradients، وخطوة كاملة الحجم مبنية على رداءتها قد تخرب تهيئة؛ ثم cosine decay نحو الصفر، لأن إنهاء التشغيل بحجم الخطوة نفسه الذي بدأت به يعني الارتعاش حول الحد الأدنى بدل الاستقرار فيه.

النصف الثاني: النموذج الذي يطابق تمامًا ولا يتنبأ بشيء

رابط إلى القسم: النصف الثاني: النموذج الذي يطابق تمامًا ولا يتنبأ بشيء

كل ما سبق كان عن إنزال الخسارة. الآن النصف الأصعب، لأن انخفاض الخسارة ليس الهدف — إنه بديل عن الهدف، وهذا البديل يفشل بطريقة محددة ومشهورة.

اثنتا عشرة نقطة من دالة ملساء مع قليل من الضجيج. لائم كثيرات حدود بدرجات متزايدة:

degreetrain RMSEtest RMSE
10.7644990.6985
30.2526050.3031
50.1644370.1568
90.0889600.2347
110.0000001.2094

الدرجة 11 عبر 12 نقطة تمر عبر كل واحدة منها بالضبط — خطأ التدريب صفر حتى ست منازل عشرية — وهي أسوأ بثماني مرات من الدرجة 5 على بيانات لم ترها. اطلب من الدرجة 3 والدرجة 11 التنبؤ عند x=3.25x = 3.25، خارج نطاق التدريب بقليل:

TEXT
degree  3: predicts   -1.053   (truth -0.012)
degree 11: predicts  +61.224   (truth -0.012)

واحد وستون، بينما الإجابة تقارب الصفر. لم يتعلم النموذج الدالة؛ تعلم النقاط الاثنتي عشرة، وبينها يفعل ما تفرضه الحسابات.

هذا هو overfitting، وعكسه — الدرجة 1، التي لا تستطيع تمثيل المنحنى أصلًا وسيئة في كل مكان — هو underfitting. تقسم الرواية الكلاسيكية الخطأ المتوقع للنموذج إلى ثلاثة أجزاء: bias، وهو الخطأ الناتج من كون النموذج متصلبًا أكثر من اللازم لتمثيل الحقيقة؛ وvariance، وهو الخطأ الناتج من كون النموذج مرنًا جدًا لدرجة يطارد معها الضجيج في هذه العينة بعينها؛ وضجيج غير قابل للاختزال، لا يصلحه شيء. النماذج البسيطة منحازة، والنماذج المرنة عالية التباين، والوصفة الكلاسيكية هي إيجاد النقطة الحلوة في الوسط — الدرجة 5 في الجدول أعلاه.

الأدوات القياسية كلها تهاجم حد variance:

  • L2 regularisation (weight decay) تضيف λw2\lambda \lVert w \rVert^2 إلى الخسارة، ساحبة الأوزان نحو الصفر وجاعلة الدالة أكثر سلاسة. في الجدول أعلاه، أكبر معامل في الدرجة 11 هو ما يسبب الضرر؛ ومعاقبة الحجم تبطله.
  • L1 تضيف λwi\lambda \sum |w_i| بدلًا من ذلك. الفرق ليس تجميليًا: gradient الخاصة بـ L2 تتناسب مع الوزن، ولذلك تنكمش مع انكماشه، مقتربة من الصفر من دون الوصول، بينما gradient الخاصة بـ L1 ثابتة ±λ\pm\lambda وتستمر في الدفع حتى النهاية. لذلك تنتج L1 أوزانًا تساوي الصفر بالضبط — إنها تختار features. تنتج L2 أوزانًا صغيرة. استخدم L2 عندما تريد السلاسة، وL1 عندما تريد الندرة.
  • Dropout7 يصفّر مجموعة فرعية عشوائية من التفعيلات في كل خطوة تدريب، بحيث لا تستطيع أي وحدة الاعتماد على وجود أي وحدة معينة أخرى.
  • Early stopping يراقب خسارة التحقق ويتوقف عندما تبدأ بالصعود.
  • Data augmentation يصنّع أمثلة تدريب أكثر من الأمثلة التي لديك، فيعالج المشكلة من مصدرها: overfitting نقص في البيانات بقدر ما هو زيادة في المعاملات.
  • Cross-validation يقسم البيانات kk طرق ويدرّب kk مرات، ما يشتري تقديرًا موثوقًا لخطأ الاختبار عندما تكون لديك بيانات قليلة جدًا ولا تستطيع تخصيص مجموعة محجوزة.

Double descent، أو لماذا ليس القسم السابق القصة كلها

رابط إلى القسم: Double descent، أو لماذا ليس القسم السابق القصة كلها

والآن الحقيقة التي تكسر الصورة.

تقول قصة bias-variance إن زيادة المعاملات بعد النقطة الحلوة تعني generalisation أسوأ. لدى نماذج اللغة الحديثة معاملات أكثر بكثير مما تسمح به القواعد الكلاسيكية بالنسبة إلى البيانات التي تراها، ومع ذلك تعمم ببراعة. العبارتان صحيحتان، والتوفيق بينهما هو أنفع ما في هذا الفصل.

أربعون نقطة تدريب، ومدخلات ذات عشرين بُعدًا، وfeatures عشوائية من ReLU، وعدد features PP ممسوح من 2 إلى 5000 — مع اختيار حل minimum-norm كلما وُجدت حلول كثيرة تلائم البيانات:

PPP/nP/ntrain RMSEtest RMSEw\lVert w \rVert
100.250.88221.25201.89
200.500.59621.16342.59
300.750.38961.53234.15
380.950.17693.716310.25
401.000.00005.814014.83
421.050.00003.16239.35
601.500.00001.10582.78
2005.000.00000.66380.98
150037.500.00000.58590.33
5000125.000.00000.56640.18

اقرأه في ثلاثة أجزاء. حتى P/n=0.5P/n = 0.5 تنطبق القصة الكلاسيكية تمامًا: ينخفض الخطأ، ثم يبدأ في الارتفاع. عند P=n=40P = n = 40interpolation threshold، حيث لدى النموذج معاملات كافية تمامًا للمرور عبر كل نقطة تدريب — يبلغ خطأ الاختبار ذروته، عند 5.81، أسوأ بخمس مرات من النموذج الصغير. تلك الذروة هي التحذير الكلاسيكي، وهي حقيقية.

ثم يهبط مرة أخرى. ويواصل الهبوط، متجاوزًا P=5nP = 5n، ومتجاوزًا P=37nP = 37n، وصولًا إلى P=125nP = 125n، حيث خطأ الاختبار 0.5664 أفضل مما حققه أفضل نموذج ناقص المعاملات على الإطلاق. نموذج بـ 5000 معامل ملائم لـ 40 نقطة هو أفضل نموذج في الجدول.

هذا هو double descent،89 وآليته مرئية في العمود الأخير. بمجرد أن P>nP > n توجد إعدادات معاملات لا نهائية تلائم بيانات التدريب بالضبط، وأيها تحصل عليه يعتمد على كيفية اختيارك. يختار حل minimum-norm الأصغر، وw\lVert w \rVert يبيّن معنى ذلك: يبلغ الذروة عند 14.83 بالضبط عند العتبة — حيث يوجد حل استيفاء واحد تمامًا وأنت عالق به مهما كان متطرفًا — ثم ينخفض رتيبًا مع نمو PP، لأن زيادة المعاملات تعني مزيدًا من حلول الاستيفاء للاختيار منها، ما يعني أن أصغر حل متاح يصبح أصغر. عند P=5000P = 5000 يكون norm يساوي 0.18، أصغر بثمانين مرة منه عند العتبة.

إذن المعاملات الإضافية لا تضيف تعقيدًا. إنها تضيف اختيارًا، وقاعدة الاختيار تنفق ذلك الاختيار على البساطة. الـ regularisation ليس في دالة الخسارة؛ بل في الخوارزمية. لدى gradient descent من تهيئة صغيرة انحياز موثق نحو حلول صغيرة الـ norm، ولهذا يظهر هذا السلوك في الشبكات الحقيقية المدربة بالطريقة العادية، لا في الجبر الخطي أعلاه فقط.

النتيجة العملية، التي يعتمد عليها الفصل 10: «لدى النموذج معاملات أكثر من البيانات، لذلك سيحدث overfit» ليست حجة صالحة. كانت قاعدة جيدة عندما كانت النماذج تعيش إلى يسار العتبة. كل ما هو مهم الآن يعيش بعيدًا إلى يمينها، حيث تنعكس القاعدة.

أدوات هذا الفصل كافية لتدريب شبكة تعمل على بيانات يمكنك وضعها في جدول: صفوف من الأرقام، وعمود من الوسوم.

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

الفصل 7 يبني tokenizer.


بالنسبة إلى residual connections المستخدمة أعلاه، راجع He وآخرين، Deep Residual Learning for Image Recognition (arXiv:1512.03385). يعرض Building makemore Part 3: Activations & Gradients, BatchNorm من Andrej Karpathy تشخيص مخطط التفعيلات على نموذج حقيقي، وهو أفضل معالجة عملية للنصف الأول من هذا الفصل. أما محاضرات Yaser Abu-Mostafa في Learning From Data، المحاضرات 8 و11–13، فتقدم نظرية generalisation الكلاسيكية كما ينبغي، بما في ذلك الأجزاء التي ضغطها هذا الفصل في فقرة واحدة.

  1. Glorot, X. and Bengio, Y. Understanding the difficulty of training deep feedforward neural networks. AISTATS (2010). حجة حفظ التباين المعاد عرضها في الصندوق أعلاه.

  2. He, K., Zhang, X., Ren, S. and Sun, J. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. arXiv:1502.01852 (2015).

  3. Ioffe, S. and Szegedy, C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. arXiv:1502.03167 (2015). لاحظ أن تفسير «internal covariate shift» في العنوان تعرّض منذ ذلك الحين لاعتراضات كبيرة؛ الطبقة تعمل، أما الرواية الأصلية عن السبب فمحل نزاع.

  4. Ba, J. L., Kiros, J. R. and Hinton, G. E. Layer Normalization. arXiv:1607.06450 (2016).

  5. Kingma, D. P. and Ba, J. Adam: A Method for Stochastic Optimization. arXiv:1412.6980 (2014).

  6. Loshchilov, I. and Hutter, F. Decoupled Weight Decay Regularization. arXiv:1711.05101 (2017).

  7. Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I. and Salakhutdinov, R. Dropout: A Simple Way to Prevent Neural Networks from Overfitting. JMLR 15, pp. 1929–1958 (2014).

  8. Belkin, M., Hsu, D., Ma, S. and Mandal, S. Reconciling modern machine-learning practice and the classical bias–variance trade-off. PNAS 116(32), pp. 15849–15854 (2019). الورقة التي سمّت الظاهرة.

  9. Nakkiran, P., Kaplun, G., Bansal, Y., Yang, T., Barak, B. and Sutskever, I. Deep Double Descent: Where Bigger Models and More Data Hurt. arXiv:1912.02292 (2019). تُظهر الأثر في شبكات عميقة حقيقية، وعلى محور زمن التدريب وكذلك محور حجم النموذج.

هل أنت مستعد لتترك الاختيار لـ LIA؟

ابنِ بكل نماذج الذكاء الاصطناعي في مكان واحد — ابدأ مجانًا اليوم.