IoT و hackathon Azure Machine Learning: كيف قمنا بالمشروع خارج المنافسة


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


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

في البداية ، أردت أن أفعل كل شيء على Raspberry Pi 2 و Windows IoT . تم إعداد لوحة خاصة (في الصورة أدناه) بمقاييس التسارع الرقمية والتناظرية ، لكن لم يكن لدي الوقت لتجربتها عمليًا ، بعد أن قررت أن أفعل كل شيء على هاكاثون. تحسبًا لذلك ، التقطت أيضًا مستشعرنا ، والذي يسمح لك أيضًا بتعلم بيانات "أولية" حول التقلبات.



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



لم يكن لدى أي منا خبرة في استخدام التعلم الآلي من Azure ، لذلك كان هناك الكثير للقيام به! بفضل الزملاء ، ومن بينهم psfinaki ، لجهودهم!

تقرر التقسيم إلى 3 اتجاهات:
  • إعداد البيانات للتحليل
  • تحميل البيانات إلى السحابة
  • العمل مع Azure Machine Learning


كان إعداد البيانات هو الحصول عليها من مقياس التسارع ، ثم تقديمها في شكل متاح للتنزيل على السحابة. تم التخطيط للتحميل إلى السحابة من خلال Event Hub . حسنًا ، كان عليك فهم كيفية استخدام هذه البيانات في Azure Machine Learning.

بدأت المشاكل في جميع النقاط الثلاث.



لقد استغرق تكوين Windows IoT على Raspberry وقتًا طويلاً. لم تعط صورة على الشاشة. كان من الممكن حل هذا فقط عن طريق إدخال الأسطر التالية في config.txt:

hdmi_ignore_edid=0xa5000080
hdmi_drive=2
hdmi_group=2
hdmi_mode=16

هذا ضبط برنامج تشغيل الفيديو بالتنسيق والدقة والتردد المطلوب.



ومع ذلك ، فإن الوقت المستغرق في هذا الدرس أوضح أنه قد لا يكون لديك الوقت لتنظيم استلام البيانات من مقياس التسارع. لذلك ، تقرر استخدام المستشعر الذي احتفظت به.

تمت كتابة العديد من التطبيقات بالفعل للمستشعر. عرض أحدهم على الشاشة رسمًا بيانيًا للبيانات "الأولية":



كان من الضروري إنهاءها قليلاً من أجل إعداد البيانات لإرسالها إلى السحابة.

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



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

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

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

يسمى تعلم خوارزمية "تجربة". يتم تنفيذ جميع الإجراءات في محرر بصري:



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

هذا ما تبدو عليه التجربة النموذجية:



تبين أن نموذج القطار ، ونموذج النتيجة ، ونموذج التقييم هو الأكثر أهمية.
الأول ، باستخدام بيانات الإدخال ، يدرب الخوارزمية ، والثاني يختبر الخوارزمية المدربة على مجموعة البيانات ، والثالث يقيم نتيجة الاختبار.

البيانات المصدر في حالتنا هي ملف csv. ولكن ما الذي يجب تضمينه فيه؟

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

عند التفكير ، قررنا استخدام شرائح مؤقتة. على سبيل المثال ، أعطتنا جميع استطلاعات أجهزة الاستشعار لـ 256 مللي ثانية سطرًا واحدًا في جدول csv. يمكن تمييز هذه البيانات ، في عمود إضافي ، بطريقة أو بأخرى ، اعتمادًا على ما يحدث مع المستشعر. على سبيل المثال ، استخدمنا 0 للإشارة إلى الضوضاء (اهتزاز المستشعر بيديك ، والنقر ، وما إلى ذلك) و 1 للإشارة إلى الإشارة (هناك هاتف يهتز على المستشعر).

هذه هي الطريقة التي سجلنا بها تسلسل الاختبار:



بعد تلقي البيانات ، وإدراك ما يجب القيام به معهم ، بدأنا في تعلم النموذج الأول:



تبين أن الفطيرة الأولى كانت متكتلة:



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



ثم نعيد كتابة تسلسل التدريب لفترة طويلة ونظرنا في النتائج:



اتضح أن العمل مع تسجيل مدته ثانيتان (استطلاعات 2048) أقل مثالية. هذا سمح لنا بجعل صفوف CSV الجدول أكثر وضوحا. لكن النتيجة كانت لا تزال بعيدة عن أن تكون جيدة.

انتهى هذا في اليوم الأول.

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

لقد أمضينا النصف الأول من اليوم الثاني في دراسة نماذج مختلفة. كانت نتيجة العمل مثل هذه "الورقة": في



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

للعمل ، استخدمنا 3 مجموعات بيانات:
  1. مجموعة تدريب تحتوي على إشارة (خطوط ملف csv مميزة بعلامة 1) وضوضاء (خطوط بعلامة 0)
  2. مجموعة تحتوي على ضوضاء فقط (خطوط من 0)
  3. مجموعة تحتوي على الإشارة فقط (خطوط من 1)


تم تدريب النماذج أولاً ، ثم تم اختبارها وتقييمها في كل مجموعة من مجموعات البيانات. كانت النتائج مشجعة:



ونتيجة لذلك ، اخترنا خمسة من أصل تسعة نماذج للتصنيف الثنائي.

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



الطلب عبارة عن صفيف إدخال قيمته 2048 مأخوذة من المستشعر. تبدو الإجابة كالتالي:



التسميات المسجلة هي إما 0 أو 1. أي نتيجة التصنيف. الاحتمالات المحسوبة - رقم عشري يعكس صحة التقييم. كما أفهمها ، القيمة الأولى هي تقريب القيمة الثانية. أي أنه كلما اقتربت القيمة الثانية من 0 ، كانت النتيجة 0 أكثر احتمالا ، والعكس صحيح. كلما كانت القيمة أقرب إلى 1 ، كانت النتيجة 1 أكثر احتمالا.

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

والنتيجة هي ما يلي:







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

في هذا الوقت ، انتهى هاكاثون. لم يكن لدينا الوقت حتى لإظهار النتائج للخبراء ، حيث كانوا مشغولين في تقييم الإدخالات.

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

في يومين من العمل الشاق ، أكملنا المهمة ، ولو جزئياً. شكرا للزملاء من الفريق والخبراء الذين ساعدونا!

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

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

حسنًا وما زال ، من الضروري العمل على تشكيل تسلسلات التدريب من أجل فصل الإشارة عن الضوضاء بشكل أكثر وضوحًا.

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

Source: https://habr.com/ru/post/ar387857/


All Articles