شبكة واحدة: JAX والعيون الافتراضية
Loading...
The app: one network in Python and JAX

شبكة واحدة

شبكة واحدة للوحة وللمحادثة بأكملها

شبكة حقيقية، بُنيت هنا ودُرّبت هنا: رقع اللوحة، والعمق الذي يوحي به الطلاء، وكل حرف من هذه المحادثة، في مساحة مشتركة واحدة. لا يوجد شيء مُدرب مسبقاً.

اللوحة، رقعة برقعة

تنظر الشبكة إلى اللوحة في رقع صغيرة، لكل منها إضاءتها ولونها ومكانها الخاص، وتتعلم تلك الكلمات. نفس الأوزان تقرأ حروف الخيط.

التطبيق كاملاً، بلغة Python و JAX

هذه الصفحة والبرنامج أدناه يمثلان شبكة واحدة. البرنامج هو التطبيق الكامل: نافذة GTK4، وتدرجات JAX، واللوحة، والخيط، والعمق الذي يتنبأ به والمساحة المشتركة. قم بنسخه أو حفظه، ثم قم بتشغيله على جهازك الخاص.

بقع الطلاء
—
الكلمات التي يتعلمها
—
الحروف التي يقرأها
—
الملفات التي يجب إبقاؤها معاً
net_gtk.py
net_gtk.py

ماذا تفعل النافذة

  • قم بالتدريب لمدة 300 أو 2000 خطوة، أو توقف في منتصف الطريق؛ يعمل التعلم في خيط منفصل لتبقى النافذة نشطة.
  • انقر فوق أي رقعة من اللوحة وستخبرك بالكلمات التي تملكها لتلك الرقعة.
  • اسألها بالكلمات — ذهبي دافئ، أزرق داكن — وستضيء الرقع التي يقع عليها السؤال.
  • أعطها بضعة حروف وستدرج الحروف التي تتوقعها تالياً، مع النسب المئوية.
  • الصق كتابتك الخاصة واضغط على "تعلم هذا بدلاً من ذلك": تحصل الحروف الجديدة على صفوف جديدة في نفس الجدول، ولا يتم التخلص من أي شيء كانت تعرفه.
  • رسمان أسفل اللوحة: العمق الذي تتوقعه، والمساحة الواحدة حيث تكون النقاط هي الطلاء والمربعات هي الكلمات.
  • احفظ أوزانها في net_weights.json وقم بتحميلها مرة أخرى في المرة القادمة.

كيفية التشغيل

مجلد واحد، ملف واحد، ولوحة تسمى painting.jpg إذا كانت لديك واحدة. على Linux، في ذلك المجلد:

  1. تثبيت حزم Python python3 -m pip install jax numpy pillow
  2. تثبيت GTK4 وروابط Python الخاصة بها sudo apt install python3-gi gir1.2-gtk-4.0
  3. فتح النافذة python3 net_gtk.py

على Windows، الطريقة المختصرة هي MSYS2: قم بتنفيذ pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4، ثم python -m pip install jax numpy pillow، ثم python net_gtk.py في نفس طرفية MSYS2.

على macOS: قم بتنفيذ brew install pygobject3 gtk4، ثم python3 -m pip install jax numpy pillow، ثم python3 net_gtk.py.

لا يوجد شاشة عرض؟ python3 net_gtk.py --selftest يقوم بالتدريب في الطرفية ويطبع نفس الأرقام.

تم القياس عن طريق تشغيل هذا الملف في طرفية باستخدام JAX، على هذه اللوحة وهذا الخيط: 400 خطوة ← 67% من الرقع تجد كلماتها الخاصة (خطأ الصورة 0.68)، 2000 خطوة ← 95% (0.53)، 5000 خطوة ← 97% (0.45). ينتهي خطأ العمق عند 0.0003 وينخفض خطأ الحروف من 3.05 إلى 2.90.

لا يمكن للمتصفح تشغيل Python، لذا تعرض هذه التبويب الملف بدلاً من النافذة — الشبكة نفسها تعمل مباشرة في الأعلى. الكلمات التي يتعلمها هي تلك التي يمكن للوحة تعليمها: هذه اللوحة لا تحتوي على اللون الأزرق، لذا فإن أي سؤال عن اللون الأزرق يقع على بقع ذهبية بدلاً من ذلك. رأس الحرف يعرف ترتيب الحروف، وليس المعنى.

مجمع لـ Python و JAX أعلاه

يحتوي المربع على التمرير الأمامي للشبكة الواحدة. يقوم المجمع بقراءته، والتحقق منه، وكتابته مرتين: Python لـ JAX، و JavaScript التي تعمل في هذا التبويب. شجرة واحدة، نهايتان خلفيتان.

الرموز (Tokens)
—
العقد في الشجرة
—
الدوال
—
لغة Python لـ JAX
JavaScript، يتم التشغيل هنا

ما الذي يتم حسابه

    يقارن التحقق هذه الأرقام مع نفس البرنامج الذي تم تشغيله في numpy و JAX باستخدام نفس الأوزان المحددة مسبقاً — تم قياسها قبل وجود هذه البطاقة، وليست تخمينية.

    ما تسمح به اللغة

    • def name(a, b): مع جسم مُزاح، name = ...، و return ...
    • الأرقام، والأسماء، والأقواس، والناقص الأحادي، و + - * / @ لضرب المصفوفات.
    • .T للتدوير (transpose)، واستدعاءات tanh, sqrt, exp, log, sum, mean, maximum.
    • أي شيء آخر يوقف المجمع مع تحديد السطر والعمود بدلاً من التخمين.

    هذا مجمع حقيقي للغة صغيرة، وليس بيئة تشغيل Python: لا توجد حلقات تكرار، ولا فئات، ولا استيرادات. التمرير الأمامي للشبكة الواحدة يتناسب داخله، ولهذا السبب يمكن للنص نفسه أن يصبح JAX على جهازك و JavaScript في هذا التبويب.

    عيون افتراضية: لا ترى سوى البكسلات

    عين موجهة نحو شاشة: تلتقط الصورة ولا شيء غير ذلك - لا صفحة، لا بيانات، ولا شبكة. ومن هذه البكسلات وحدها، تجد الحواف والزوايا وكيف تنزلق كل نقطة عندما تتحرك العين جانبياً، ومن خلال ذلك تعيد بناء أماكن تواجد كل شيء في الفضاء.

    ما تراه العين الزوايا باللون الأزرق، والحركة باللون البرتقالي
    الحواف تدرجات سوبل (Sobel gradients)
    الحركة تدفق لوكاس-كاناد (Lucas–Kanade flow)
    الغرفة التي أعاد بناءها اسحب للتدوير
    الإطارات المرئية
    0
    الزوايا
    0
    مُتتبع
    0
    متوسط الحركة
    —
    تم العثور على العمق
    —
    نقاط في الفضاء
    0
    إطار واحد
    —

    العمق هو هندسة حقيقية، ولكن فقط حتى حجم خطوة العين، وفقط حيثما توجد أنسجة في الصورة - فالطلاء المسطح لا يعطي شيئاً للتمسك به. رؤية مكان وجود الجدار ليست معرفة أنه جدار، ولا يوجد شيء هنا يبتكر عالماً: الغرفة في الأعلى هي البكسلات مقاسة.

    فكرتك، وما ستظل بحاجة إليه

    • العيون الموجهة نحو الشاشة هي واجهة حقيقية: النموذج الذي يقرأ الشاشة كما يفعل الشخص لا يحتاج إلى إضافة (plugin) لكل برنامج - فكل ما هو مرئي يعد مدخلاً بالفعل.
    • من إطارين لعين متحركة تحصل على الهندسة، وهو بالضبط ما يجب أن يتوافق معه نموذج العالم؛ وهذا الجزء تقوم به هذه البطاقة بشكل فعلي.
    • العالم المولد في الوقت الفعلي يحتاج أيضاً إلى نموذج يبتكر ما لم يره أحد، ويحافظ على اتساقه أثناء دورانك، ويعمل في أجزاء من الثانية - وهذا غير موجود في هذه التبويب، ولا يمكن لصفحة أن تدربه.
    • الحد الصادق: هذه العين تستعيد أماكن الأشياء، وليس معناها. سرعة الرؤية ليست هي الفهم، وأحدهما أسهل بكثير من الآخر.

    الصورة: مسح للنطاق العام للوحة العشاء الأخير لليوناردو دا فينشي، ويكيميديا كومنز.