تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

قبل بضعة أشهر، زملائنا من جوجل أُجرِي في Kaggle مسابقة لإنشاء مصنف للصور التي تم الحصول عليها بطريقة مثيرة اللعبة "رسم سريع!" واحتل الفريق، الذي ضم مطور ياندكس رومان فلاسوف، المركز الرابع في المسابقة. في التدريب على التعلم الآلي في شهر يناير، شارك رومان أفكار فريقه، والتنفيذ النهائي للمصنف، والممارسات المثيرة للاهتمام لخصومه.


- أهلاً بكم! اسمي روما فلاسوف، اليوم سأخبركم عن Quick، Draw! تحدي التعرف على رسومات الشعار المبتكرة.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

كان هناك خمسة أشخاص في فريقنا. لقد انضممت مباشرة قبل الموعد النهائي للدمج. لم يحالفنا الحظ، لقد اهتزنا قليلاً، لكننا اهتزنا من موقف المال، واهتزوا هم من موقف الذهب. وحصلنا على المركز الرابع المشرف.

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

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

كانت المنافسة مهمة أيضًا حيث حصل إيفجيني باباخنين على أستاذ كبير، وحصل إيفان سوسين على ماجستير، وظل رومان سولوفييف أستاذًا كبيرًا، وحصل أليكس بارينوف على ماجستير، وأصبحت خبيرًا، والآن أنا بالفعل أستاذ.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

ما هذا سريع، رسم؟ هذه خدمة من جوجل. كان هدف Google هو نشر الذكاء الاصطناعي وأرادت من خلال هذه الخدمة إظهار كيفية عمل الشبكات العصبية. تذهب إلى هناك، وتنقر على "دعونا نرسم"، وستنبثق صفحة جديدة حيث يتم إخبارك: ارسم خطًا متعرجًا، لديك 20 ثانية للقيام بذلك. أنت تحاول رسم خط متعرج في 20 ثانية، كما هو الحال هنا، على سبيل المثال. إذا نجحت، تقول الشبكة أن الأمر متعرج وعليك المضي قدمًا. لا يوجد سوى ستة من هذه الصور.

إذا فشلت شبكة Google في التعرف على ما رسمته، فسيتم وضع إشارة متقاطعة على المهمة. سأخبرك لاحقًا بما سيعنيه في المستقبل سواء تم التعرف على الرسم بواسطة الشبكة أم لا.

جمعت هذه الخدمة عددًا كبيرًا إلى حد ما من المستخدمين، وتم تسجيل جميع الصور التي رسمها المستخدمون.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

تمكنا من جمع ما يقرب من 50 مليون صورة. ومن هنا تم تشكيل موعد التدريب والاختبار لمسابقتنا. بالمناسبة، يتم تمييز كمية البيانات في الاختبار وعدد الفئات بالخط العريض لسبب ما. سأخبركم عنهم بعد قليل.

وكان تنسيق البيانات على النحو التالي. هذه ليست مجرد صور RGB، ولكنها، بشكل عام، سجل لكل ما فعله المستخدم. الكلمة هي هدفنا، ورمز البلد هو المكان الذي ينتمي إليه مؤلف رسومات الشعار المبتكرة، والطابع الزمني هو الوقت. تُظهر العلامة التي تم التعرف عليها فقط ما إذا كانت الشبكة قد تعرفت على الصورة من Google أم لا. والرسم نفسه عبارة عن تسلسل، وهو تقريب لمنحنى يرسمه المستخدم بالنقاط. والتوقيتات. هذا هو الوقت المناسب لبداية رسم الصورة.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

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

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

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

كيف تبدو الصور؟ هذه هي فئة "الطائرة" وأمثلة منها مع التسميات المعترف بها وغير المعترف بها. وكانت نسبتهم في مكان ما حوالي 1 إلى 9. وكما ترون، فإن البيانات صاخبة للغاية. أعتقد أنها طائرة. إذا نظرت إلى غير معترف به، في معظم الحالات يكون مجرد ضجيج. حتى أن أحدهم حاول كتابة كلمة "طائرة"، ولكن على ما يبدو باللغة الفرنسية.

قام معظم المشاركين ببساطة بأخذ الشبكات، وسحب البيانات من تسلسل الخطوط هذا كصور RGB، ثم ألقوا بها في الشبكة. لقد رسمت بنفس الطريقة تقريبًا: أخذت لوحة من الألوان، ورسمت السطر الأول بلون واحد، والذي كان في بداية هذه اللوحة، والسطر الأخير مع آخر، والذي كان في نهاية اللوحة، وبينهما أنا محرف في كل مكان باستخدام هذه اللوحة. بالمناسبة، أعطى هذا نتيجة أفضل مما لو قمت بالرسم كما في الشريحة الأولى - باللون الأسود فقط.

جرب أعضاء الفريق الآخرون، مثل إيفان سوسين، أساليب مختلفة قليلاً في الرسم. باستخدام قناة واحدة، قام ببساطة برسم صورة رمادية، وبقناة أخرى رسم كل حد بتدرج من البداية إلى النهاية، من 32 إلى 255، ومع القناة الثالثة رسم تدرجًا على جميع الحدود من 32 إلى 255.

شيء آخر مثير للاهتمام هو أن Alex Parinov قام بتحميل المعلومات إلى الشبكة باستخدام رمز البلد.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

المقياس المستخدم في المسابقة هو متوسط ​​الدقة. ما هو جوهر هذا المقياس للمنافسة؟ يمكنك إعطاء ثلاثة تنبؤات، وإذا لم يكن هناك تنبئ صحيح في هذه الثلاثة، فستحصل على 0. إذا كان هناك تنبئ صحيح، فسيتم أخذ ترتيبه في الاعتبار. وسيتم احتساب النتيجة المستهدفة على أنها 1 مقسومًا على ترتيب توقعك. على سبيل المثال، قمت بعمل ثلاثة متنبئين، والصحيح هو الأول، ثم تقسم 1 على 1 وتحصل على 1. إذا كان المتنبئ صحيحًا وترتيبه هو 2، ثم تقسم 1 على 2، تحصل على 0,5. حسنًا ، إلخ.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

مع المعالجة المسبقة للبيانات - كيفية رسم الصور وما إلى ذلك - قررنا قليلاً. ما هي البنى التي استخدمناها؟ لقد حاولنا استخدام بنيات سميكة مثل PNASNet، وSENet، وبنيات كلاسيكية مثل SE-Res-NeXt، وهي تدخل بشكل متزايد في مسابقات جديدة. كان هناك أيضًا ResNet وDenseNet.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

كيف علمنا هذا؟ تم تدريب جميع النماذج التي أخذناها مسبقًا على imagenet. على الرغم من وجود الكثير من البيانات، 50 مليون صورة، إلا أنه إذا أخذت شبكة تم تدريبها مسبقًا على imagenet، فقد أظهرت نتائج أفضل مما لو قمت بتدريبها من الصفر.

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

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

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

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

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

في الواقع، لا أتذكر القيمة التي وصل إليها حجم الدفعة الخاصة به، ولكن المثير للاهتمام هو أنه كانت هناك فرق في Kaggle تستخدم نفس التقنية، وكان حجم الدفعة الخاصة بهم حوالي 10000. بالمناسبة، أطر العمل الحديثة للتعلم العميق، مثل PyTorch، على سبيل المثال، يسمح لك بالقيام بذلك بسهولة شديدة. تقوم بإنشاء الدفعة الخاصة بك وإرسالها إلى الشبكة ليس كما هي، بكاملها، ولكن تقسمها إلى أجزاء بحيث تتناسب مع بطاقة الفيديو الخاصة بك، وتحسب التدرجات، وبعد أن تقوم بحساب التدرج للدفعة بأكملها، قم بالتحديث الأوزان.

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

تم أيضًا استخدام العلامات الزائفة، والتي استخدمها في الغالب رومان سولوفييف. وقام بأخذ عينات من حوالي نصف بيانات الاختبار على دفعات، وقام بتدريب الشبكة على مثل هذه الدفعات.

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

كيف تم تعلم كل ذلك؟ أولاً، تم التقاط صور صغيرة الحجم، وتم تشغيل عدة عصور عليها، وقد استغرق هذا وقتًا طويلاً. ثم تم تقديم صور كبيرة الحجم، وتم تدريب الشبكة، ثم أكثر من ذلك، حتى لا يتم تدريبها من الصفر ولا تضيع الكثير من الوقت.

حول محسنات. استخدمنا SGD وآدم. وبهذه الطريقة كان من الممكن الحصول على نموذج واحد أعطى سرعة 0,941-0,946 على لوحة المتصدرين العامة، وهو أمر جيد جدًا.

إذا قمت بتجميع النماذج بطريقة ما، فسوف تحصل على حوالي 0,951. إذا استخدمت أسلوبًا آخر، فستحصل على النتيجة النهائية البالغة 0,954 على اللوحة العامة، تمامًا كما حصلنا. ولكن أكثر عن ذلك لاحقا. بعد ذلك، سأخبرك كيف قمنا بتجميع النماذج، وكيف تمكنا من تحقيق هذه السرعة النهائية.

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

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

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

حول كيفية تجميع نماذجنا. في بداية العرض قلت يجب الانتباه إلى كمية البيانات في الاختبار وعدد الفصول. إذا أضفت 1 إلى عدد الأهداف في مجموعة الاختبار وقسمته على عدد الفئات، فستحصل على الرقم 330، وهذا ما كتب في المنتدى - أن الفئات في الاختبار متوازنة. يمكن استخدام هذا.

بناءً على ذلك، توصل رومان سولوفييف إلى مقياس، أطلقنا عليه اسم Proxy Score، والذي يرتبط جيدًا بلوحة المتصدرين. النقطة المهمة هي: أنك تقوم بالتنبؤ، وتأخذ أعلى 1 من المتنبئين وتحسب عدد الكائنات لكل فئة. بعد ذلك، اطرح 330 من كل قيمة وأضف القيم المطلقة الناتجة.

تم الحصول على القيم التالية. لقد ساعدنا هذا ليس في إنشاء لوحة صدارة استقصائية، بل في التحقق من صحتها محليًا واختيار المعاملات لمجموعاتنا.

مع المجموعة، يمكنك الحصول على هذه السرعة. ماذا يمكنني أن أفعل؟ لنفترض أنك استخدمت المعلومات التي تفيد بأن الفئات في الاختبار الخاص بك متوازنة.

وكانت التوازنات مختلفة. مثال على واحد منهم - الموازنة بين اللاعبين الذين احتلوا المركز الأول.

ماذا فعلنا؟ لقد كانت موازنتنا بسيطة للغاية، وقد اقترحها يفغيني باباخنين. قمنا أولاً بفرز توقعاتنا حسب أعلى 1 واخترنا المرشحين منهم - بحيث لا يتجاوز عدد الفصول 330. ولكن بالنسبة لبعض الفئات، ينتهي بك الأمر مع أقل من 330 متنبئًا. حسنًا، دعنا أيضًا نفرز حسب أعلى 2 وأعلى 3 ، وسوف نقوم أيضًا باختيار المرشحين.

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

استخدم الجميع نهجًا زائدًا أو ناقصًا لتدريب الشبكات، ولكن لم يستخدم الجميع التوازن. باستخدام التوازن، يمكنك الذهاب إلى الذهب، وإذا كنت محظوظا، ثم إلى المال.

كيفية المعالجة المسبقة للتاريخ؟ قام الجميع بمعالجة التاريخ مسبقًا، زائد أو ناقص، بنفس الطريقة - صنع ميزات مصنوعة يدويًا، ومحاولة تشفير التوقيتات بألوان مختلفة، وما إلى ذلك. تحدث أليكسي نوزدرين-بلوتنيتسكي، الذي احتل المركز الثامن، عن هذا.

تصنيف الرسومات المكتوبة بخط اليد. تقرير في ياندكس

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

ثم أخذ الفرق بناءً على الإحداثيات، وحساب متوسطه كله بناءً على التوقيتات. وقد توصل إلى مصفوفة طويلة إلى حد ما. لقد طبق عليها التفاف 1D عدة مرات للحصول على مصفوفة بحجم 64xn، حيث n هو العدد الإجمالي للنقاط، ويتم عمل 64 من أجل تغذية المصفوفة الناتجة إلى طبقة أي شبكة تلافيفية تقبل عدد القنوات - 64. حصل على مصفوفة 64xn، ومن ثم كان من الضروري إنشاء موتر بحجم معين بحيث يكون عدد القنوات يساوي 64. قام بتطبيع جميع النقاط X، Y في النطاق من 0 إلى 32 لإنشاء مصفوفة موتر بحجم 32x32. لا أعرف لماذا أراد 32x32، لقد حدث الأمر بهذه الطريقة. وفي هذا الإحداثي وضع جزءًا من هذه المصفوفة بحجم 64xn. لقد انتهى الأمر للتو بموتر 32x32x64 يمكنك وضعه بشكل أكبر في شبكتك العصبية التلافيفية. هذا كل ما أردت أن أقوله.

المصدر: www.habr.com

إضافة تعليق