الرؤية الحاسوبية2020متوسط11 دقيقة قراءة

تباين الزخم للتعلّم التمثيلي البصري غير الخاضع للإشراف

Momentum Contrast for Unsupervised Visual Representation Learning

He, K. · Fan, H. · Wu, Y. · Xie, S. · Girshick, R. — CVPR

المشكلة

حقّق تعلّم التمثيلات بلا إشراف نجاحات كبيرة في معالجة اللغة الطبيعية (word2vec وBERT)، لكن في الرؤية الحاسوبية ظلّ الخاضع للإشراف على ImageNet هو المهيمن. أظهر التعلّم التبايُني نتائج واعدة لكنه اصطدم بمعضلة أساسية: النموذج يحتاج عدداً كبيراً من العيّنات السلبية المتسقة ليتعلّم جيداً. الأساليب من طرف لطرف (مثل SimCLR) تتطلب دُفعات ضخمة — غالباً 4096 أو 8192 — لأن العيّنات السلبية تأتي من الدُّفعة الحالية فقط. أما أساليب بنك الذاكرة فتُخزّن تمثيلات من دورات تدريبية سابقة، لكنها تتقادم بسرعة مع تحديث فتفقد اتساقها. لا الأسلوب الأول يحلّ المشكلة دون تكلفة حوسبية هائلة، ولا الثاني يضمن جودة العيّنات.

الإسهام

يُعيد MoCo صياغة التعلّم التبايُني بوصفه عملية بحث في قاموس: مُرمِّز للاستعلام، ومُرمِّز مفاتيح يُحدَّث ، وطابور من المفاتيح المُرمَّزة يفصل حجم القاموس عن حجم الدُّفعة. أوزان مُرمِّز المفاتيح هي متوسط متحرك أُسِّي لأوزان مُرمِّز الاستعلام (بزخم مقداره 0.999)، مما يحافظ على اتساق المفاتيح حتى مع تقدّم التدريب. يتّسع لـ 65,536 مفتاحاً ويتخلّص من الأقدم أولاً بأسلوب FIFO — أي عيّنات سلبية أكثر بكثير مما تستوعبه أي دُفعة. بهذا التصميم البسيط ضاهى MoCo التدريب المسبق الخاضع للإشراف أو تفوّق عليه في 7 مهام رصد وتجزئة، مُقلّصاً الفجوة بين التعلّم بإشراف والتعلّم بلا إشراف في تمثيل الصور.

الأثر

أثبت MoCo أن السمات البصرية المُتعلَّمة بلا إشراف تنتقل بكفاءة مكافئة — أو أعلى — من نظيراتها الخاضعة للإشراف في مهام الرصد والتجزئة. قدّم فكرة التي تبنّتها لاحقاً BYOL وSimSiam وDINO. كما ألهمت آلية الطابور أساليب أخذ عيّنات سلبية فعّالة في المجال بأسره. امتدّت الفكرة في MoCo v2 وv3 لتشمل محوِّلات الرؤية. وبالتوازي مع SimCLR، أطلق MoCo ثورة التعلّم ذاتي الإشراف في الرؤية الحاسوبية التي جعلت التسميات اختيارية في التدريب المسبق.

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

الفجوة: الرؤية الحاسوبية لم تشهد بعد لحظتها الفارقة كما فعلت اللغة مع BERT

بحلول عام 2019 كانت معالجة اللغة الطبيعية قد عبرت عتبة مهمة: نماذج مثل BERT تعلّمت تمثيلات قوية من نصوص بلا تسميات، ثم نُقلت هذه التمثيلات إلى مهام أخرى مع قدر ضئيل من . في المقابل، ظلّت الرؤية الحاسوبية تراوح مكانها: الوصفة السائدة كانت لا تزال «درِّب مسبقاً على ImageNet بتسميات بشرية ثم اضبط النموذج». وتسمية ملايين الصور عملية مكلفة وبطيئة ومحصورة بفئات محددة سلفاً.

قدّم مخرجاً واعداً — والفكرة بسيطة: قرِّب تمثيلات الأشياء المتشابهة من بعضها وأبعِد تمثيلات الأشياء المختلفة في فضاء . لكن مشكلتين عمليتين حالتا دون مجاراة التدريب المسبق الخاضع للإشراف:

  • قلّة العيّنات السلبية. الأساليب من طرف لطرف مثل SimCLR تستخدم الدُّفعة الحالية فقط كعيّنات سلبية. للحصول على عدد كافٍ تحتاج آلاف العيّنات في كل دُفعة — مما يستلزم عدداً كبيراً من المعالجات الرسومية وذاكرة هائلة.
  • تقادم العيّنات السلبية. أساليب بنك الذاكرة تُخزّن تمثيلات سابقة، لكن هذه التمثيلات رُمِّزت بنُسخ أقدم من الشبكة. ومع تطوّر المُرمِّز تصبح المفاتيح القديمة غير متسقة مع الجديدة، فيتدرّب النموذج على إشارات متناقضة.
افتح في المختبر
قارن بين الأساليب التبايُنية الثلاثة. لاحظ كيف يجمع MoCo بين قاموس كبير ومفاتيح متسقة.
تستيقظ التجربة عند وصولك…

فكرة MoCo: قاموس ديناميكي مع مُرمِّز زخم

يُعيد MoCo صياغة التعلّم التبايُني بوصفه عملية . تخيّله كأنك تبني محرك بحث للصور:

لديك استعلام (تمثيل لصورة جديدة) وقاموس من المفاتيح (تمثيلات لصور أخرى). المطلوب أن يتطابق الاستعلام مع المفتاح الوحيد الذي يمثّل الصورة نفسها (لكن بتعزيز مختلف) وألّا يتطابق مع أي مفتاح آخر. وكلّما كان القاموس أكبر وأكثر اتساقاً، كانت التمثيلات المُتعلَّمة أجود.

يُحقّق MoCo ذلك بثلاثة مكوّنات:

  • مُرمِّز الاستعلام fqf_q — يُدرَّب بالطريقة المعتادة عبر .
  • مُرمِّز الزخم fkf_k — أوزانه لا تُحدَّث بالتدرّجات، بل هي لأوزان مُرمِّز الاستعلام.
  • طابور من المفاتيح المُرمَّزة — مخزن مؤقت يعمل بنظام يحتفظ بمفاتيح من الدُّفعات الأخيرة، فيفصل حجم القاموس عن .
افتح في المختبر
انقر على كل مكوّن لتعرف دوره. اسحب شريط الزخم لترى تأثيره على اتساق المفاتيح.
تستيقظ التجربة عند وصولك…

مُرمِّز الزخم: التحديث البطيء هو سرّ الاتساق

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

حلّ MoCo: حدِّث مُرمِّز المفاتيح ببطء شديد باستخدام المتوسط المتحرك الأُسِّي. بعد كل خطوة تدريبية تصبح مُعاملات مُرمِّز المفاتيح θk\theta_k مزيجاً مُرجَّحاً من قيمها السابقة ومُعاملات مُرمِّز الاستعلام الجديدة θq\theta_q:

θkmθk+(1m)θq\theta_k \leftarrow m \cdot \theta_k + (1 - m) \cdot \theta_q
تحديث الزخم — النبض الأساسي لـ MoCom = مُعامِل الزخم (0.999). في كل خطوة يحتفظ θ_k بنسبة 99.9% من قيمته السابقة ويمتصّ 0.1% فقط من مُرمِّز الاستعلام. بهذا يتطوّر مُرمِّز المفاتيح بسلاسة دون قفزات مفاجئة — فتكون جميع المفاتيح في الطابور صادرة عن مُرمِّزات شبه متطابقة.
افتح في المختبر
اسحب شريط الزخم بين 0 و1. لاحظ كيف يُبقي الزخم العالي تطوّر المُرمِّز سلساً، بينما يُسبّب الزخم المنخفض تذبذبات حادة.
تستيقظ التجربة عند وصولك…

الطابور: ذاكرة متجدّدة من العيّنات السلبية

التعلّم التبايُني يحتاج عيّنات سلبية — وبأعداد كبيرة. كلّما زاد عدد العيّنات السلبية صعبت مهمة التمييز، مما يُجبر المُرمِّز على تعلّم سمات أفضل وأغنى. لكن كيف تحصل على 65,536 عيّنة سلبية حين حجم دُفعتك 256 فقط؟

جواب MoCo: طابور. كل دُفعة تُنتج مفاتيح مُرمَّزة عبر مُرمِّز الزخم، فتُدرَج هذه المفاتيح في الطابور وتُزال الأقدم. حجم الطابور مستقل تماماً عن حجم الدُّفعة — يمكنك بناء قاموس يضمّ 65,536 مفتاحاً بينما تتدرّب بدُفعة من 256 عيّنة على معالج رسومي واحد.

الأمر أشبه بأرشيف كاميرات مراقبة: تحتفظ بتسجيلات الأيام القليلة الأخيرة (الطابور)، وكلّما وصلت تسجيلات جديدة حذفت الأقدم. في أي لحظة يمكنك البحث في تسجيلات أكثر بكثير ممّا يُسجَّل الآن.

افتح في المختبر
شاهد كيف تدخل مفاتيح جديدة إلى الطابور وتخرج القديمة. يبقى القاموس كبيراً ومُحدَّثاً باستمرار.
تستيقظ التجربة عند وصولك…

دالة خسارة InfoNCE: اعثر على المفتاح الصحيح

بعد اكتمال البنية يحتاج النموذج إلى إشارة تدريبية تُوجّهه. يستخدم MoCo دالة خسارة — وهي شكل من أشكال الخسارة التبايُنية يُشبه مسألة تصنيف. لدينا استعلام qq ومفتاح إيجابي واحد k+k^+ (الصورة نفسها لكن بتعزيز مختلف) وKK مفتاح سلبي {k0,k1,}\{k^-_0, k^-_1, \ldots\} من الطابور. على النموذج أن يُحدّد المفتاح الإيجابي من بينها. هي ببساطة بأسلوب على درجات التشابه:

Lq=logexp(qk+/τ)exp(qk+/τ)+i=0K1exp(qki/τ)\mathcal{L}_q = -\log \frac{\exp(q \cdot k^+ / \tau)}{\exp(q \cdot k^+ / \tau) + \sum_{i=0}^{K-1} \exp(q \cdot k^-_i / \tau)}
خسارة InfoNCE — التعلّم التبايُني بوصفه تصنيفاًq·k = التشابه بالضرب النقطي · τ = الحرارة (0.07) تتحكم في حدّة التوزيع · البسط يُكافئ التطابق مع المفتاح الإيجابي · المقام يُعاقب على التطابق مع أي مفتاح سلبي · هذه دالة log-softmax لدرجة المفتاح الإيجابي الصحيح

كيف نقرأ هذه الصيغة بشكل حدسي؟ تقول : «اجعل بين الاستعلام ومفتاحه المطابق أكبر ما يمكن، واجعله مع جميع المفاتيح الأخرى أصغر ما يمكن.» مُعامل τ\tau يتحكّم في مدى حدّة التوزيع — قيمة منخفضة (0.07) تجعل النموذج أكثر حسماً فلا يقبل إلا بفائز واضح.

هذا في جوهره تصنيف Softmax بين (K+1)(K+1) فئة، حيث «الفئة» الصحيحة هي المفتاح الإيجابي بين KK مفتاح سلبي. مع K=65,536K = 65{,}536 على النموذج أن يختار الصورة الصحيحة من بين 65,537 مُرشّحاً — مهمة تمييز بالغة الصعوبة تستلزم سمات غنية وتفصيلية.

افتح في المختبر
اسحب الاستعلام نحو المفتاح الإيجابي أو بعيداً عنه. لاحظ كيف تتغيّر قيمة الخسارة مع تغيّر توزيع التشابه.
تستيقظ التجربة عند وصولك…

دورة التدريب الكاملة

لنستعرض الآن المراحل الكاملة لتدريب MoCo. في كل دُفعة:

الخطوة 1 — التعزيز. خذ كل صورة xx وأنشئ نسختين مُعزَّزتين عشوائياً: xqx_q لمُرمِّز الاستعلام وxkx_k لمُرمِّز الزخم. تشمل عمليات القصّ العشوائي واضطراب الألوان والانعكاس الأفقي والتحويل إلى التدرّج الرمادي.

الخطوة 2 — الترميز. مرِّر xqx_q عبر مُرمِّز الاستعلام fqf_q للحصول على الاستعلام qq. ومرِّر xkx_k عبر مُرمِّز الزخم fkf_k للحصول على المفتاح k+k^+. مُرمِّز المفاتيح يعمل بدون حساب تدرّجات — لا تمرّ عبره أي تدرّجات.

الخطوة 3 — المقارنة. احسب خسارة InfoNCE: يجب أن يتطابق qq مع k+k^+ ولا يتطابق مع أي من مفاتيح الطابور الـ KK.

الخطوة 4 — تحديث مُرمِّز الاستعلام. نفِّذ الانتشار العكسي عبر دالة الخسارة وحدِّث θq\theta_q بالانحدار التدريجي العشوائي (SGD).

الخطوة 5 — تحديث مُرمِّز الزخم. طبِّق تحديث المتوسط المتحرك الأُسِّي: θk0.999θk+0.001θq\theta_k \leftarrow 0.999 \cdot \theta_k + 0.001 \cdot \theta_q.

الخطوة 6 — تحديث الطابور. أدرِج المفاتيح الجديدة k+k^+ من هذه الدُّفعة، وأزل المفاتيح الأقدم.

افتح في المختبر
تابع خطوة بخطوة دورة تدريب MoCo كاملة.
تستيقظ التجربة عند وصولك…

الفكرة نفسها بلغة الكود

الكود الكاذب لـ MoCo — الخوارزمية الكاملة في نحو 30 سطراًpython

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

# f_q: مُرمِّز الاستعلام    f_k: مُرمِّز الزخم (نفس البنية)
# queue: مصفوفة بأبعاد [K, C]   K = 65536, C = 128
# m: الزخم = 0.999   tau: الحرارة = 0.07

for x in loader:                        # كل صورة
    x_q = augment(x)                    # قصّ عشوائي + اضطراب ألوان + ...
    x_k = augment(x)                    # تعزيز عشوائي مختلف

    q = f_q(x_q)                        # الاستعلام: [N, C]، التدرّجات مُفعَّلة
    q = normalize(q, dim=1)

    with torch.no_grad():
        k = f_k(x_k)                    # المفتاح: [N, C]، بلا تدرّجات
        k = normalize(k, dim=1)

    # التشابه الإيجابي: Nx1
    l_pos = torch.bmm(q.unsqueeze(1), k.unsqueeze(2)).squeeze(-1)
    # التشابه السلبي: NxK  (الطابور يحوي K مفتاحاً من دُفعات سابقة)
    l_neg = q @ queue.clone().T

    logits = torch.cat([l_pos, l_neg], dim=1) / tau   # Nx(1+K)
    labels = torch.zeros(N, dtype=torch.long)         # الإيجابي في الموضع 0
    loss = F.cross_entropy(logits, labels)

    loss.backward()                     # تحديث f_q فقط
    optimizer.step()

    # تحديث الزخم لـ f_k
    for p_q, p_k in zip(f_q.parameters(), f_k.parameters()):
        p_k.data = m * p_k.data + (1 - m) * p_q.data

    # تحديث الطابور (FIFO)
    queue = torch.cat([k, queue[:K - N]], dim=0)

النتائج: الفجوة تتقلّص

قُيِّم MoCo بأسلوبين: (تجميد المُرمِّز وتدريب مُصنِّف خطي فوقه فقط) و**** (الضبط الدقيق على مهام لاحقة مثل و على PASCAL VOC وCOCO).

في التقييم الخطي على ImageNet بهيكل ResNet-50 حقّق MoCo دقة 60.6% — وهي نتيجة مُنافِسة لـ SimCLR الذي احتاج 8 أضعاف حجم الدُّفعة.

المفاجأة الحقيقية جاءت من نقل التعلّم: في رصد الكائنات على PASCAL VOC تفوّق تدريب MoCo المسبق على التدريب المسبق الخاضع للإشراف بفارق +0.5 AP. وفي مهام الرصد والتجزئة على COCO ضاهى MoCo التدريب الخاضع للإشراف أو تجاوزه في جميع المقاييس. كان هذا أول دليل مُقنع على أن التدريب المسبق البصري بلا إشراف قد يتفوّق على التدريب بإشراف في المهام التطبيقية.

افتح في المختبر
قارن أداء MoCo بالتدريب المسبق الخاضع للإشراف عبر معايير الرصد والتجزئة.
تستيقظ التجربة عند وصولك…

دراسات الاستئصال: ما العوامل المؤثرة فعلاً؟

أجرى المؤلفون دراسة استئصال منهجية لثلاثة عوامل رئيسية:

  • حجم الطابور (K). زيادة الطابور من 1024 إلى 65,536 تُحسّن الدقة باطراد. عيّنات سلبية أكثر تعني مهمة أصعب، ومهمة أصعب تعني سمات أفضل. بعد 65 ألفاً تستقرّ المكاسب.
  • الزخم (m). القيمة المُثلى هي m=0.999m = 0.999. قيمة منخفضة جداً (0.9) تُفقد المفاتيح اتساقها فينهار التدريب. قيمة مرتفعة جداً (0.9999) تجعل مُرمِّز المفاتيح بالكاد يتحرّك فيفقد القدرة على التكيّف.
  • جدول التدريب. 200 تُعطي نتائج أفضل بكثير من 100. السبب أن التحديث البطيء بالزخم يعني أن مُرمِّز المفاتيح يحتاج وقتاً أطول حتى يتقارب.

الأثر: ما الذي أشعله MoCo

امتدّ أثر أفكار MoCo في المجال بطرق لم يتوقّعها مؤلفوه:

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

SimCLR سلك الطريق المعاكس — لا مُرمِّز زخم ولا طابور، بل دُفعات ضخمة فقط. التوتّر بين كفاءة MoCo وبساطة SimCLR دفع المجال إلى تقدّم سريع.

MoCo v2 (2020) تبنّى تعزيزات SimCLR الأقوى ورأس إسقاط MLP، فارتفعت دقة ImageNet إلى 71.1%. ثم مدّد MoCo v3 (2021) الإطار ليشمل . وبنت DINO وSwAV وVICReg وBarlow Twins جميعها على رؤى مستقاة من MoCo.

  1. 2018

    تمييز الحالات (InstDisc)

    اقترح Wu وآخرون معاملة كل صورة بوصفها فئة مستقلة — وكان هذا أول أسلوب يعتمد بنك الذاكرة. أثبت نجاح الفكرة لكن المفاتيح كانت تتقادم مع تحديث المُرمِّز.

  2. 2018

    التشفير التنبُّئي التبايُني (CPC)

    قدّم Van den Oord وآخرون دالة خسارة InfoNCE وفكرة التنبّؤ بالتمثيلات المستقبلية عبر المقارنة التبايُنية. نجح الأسلوب عبر الصوت والنص والصور.

  3. 2020

    MoCo (هذه الورقة)

    مُرمِّز الزخم + الطابور = قاموس كبير ومتسق. أول عمل يُضاهي التدريب المسبق الخاضع للإشراف في نقل التعلّم لمهام الرصد والتجزئة.

  4. 2020

    SimCLR

    أثبت Chen وآخرون أن التعلّم التبايُني البسيط يعمل بشكل مُبهر — لكنه يحتاج دُفعات بحجم 4096 أو أكثر. قدّموا تعزيزات أقوى ورأس إسقاط MLP.

  5. 2020

    BYOL

    تخلّص Grill وآخرون من العيّنات السلبية كلياً. أبقوا على مُرمِّز الزخم وأضافوا رأس تنبّؤ إلى فرع الاستعلام. وأثبتوا أن عدم التماثل يمنع الانهيار.

  6. 2021

    DINO

    دمج Caron وآخرون التقطير الذاتي مع مُعلّم الزخم على محوِّلات الرؤية. واكتشفوا أن محوِّلات الرؤية ذاتية الإشراف تتعلّم التجزئة الدلالية تلقائياً دون توجيه.

لماذا يُعدّ هذا العمل مهماً

المرجعHe, Fan, Wu, Xie, Girshick. Momentum Contrast for Unsupervised Visual Representation Learning. CVPR, 2020.

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