Friday 16 February 2018

فورست لستم


كاشف & # 039؛ s مل و ن المدونة.
بيانات الفوركس و لستم - (تنسورفلو) الشبكات العصبية.
عملت على بيانات الفوركس واستخدمت الشبكات العصبية للتنبؤ بالسعر المستقبلي لزوج العملات EUR_USD أو توليد الاتجاه المستقبلي.
الخطوات التي يتم تنفيذها لإعداد البيانات التي تم تنزيلها:
وكانت البيانات التي تم تنزيلها في شكل جسون مع العملة المضمنة (عالية، منخفضة، فتح، إغلاق، حجم، الوقت، كاملة) الميزات التي تم تحليل البيانات جسون ووضعها في بانداس داتافريم، وتم حفظها أيضا في ملف كسف ميزات أخرى مثل قصيرة وطويلة سما، بولينجر باند، النسبة المئوية للتغيير، والاختلافات في ارتفاع منخفض وفتح إغلاق وأضيفت أيضا إلى البيانات ثم تم تقسيم هذه البيانات إلى مجموعة التدريب واختبار تم تغذية بيانات التدريب إلى الشبكة العصبية المتكررة (لستم)
3 طبقات لستم، مع التسرب وأخيرا مع إخراج التنشيط الخطي من 1 الخلايا العصبية.
فور لوس & # 8220؛ يعني تربيع إرور & # 8221؛ تم استخدامه، وللمحسن & # 8220؛ رمسبروب & # 8221؛ كان مستعملا.
تفاصيل النموذج أدناه:
تم إجراء تعديلات أخرى على النموذج أيضا، والتي لا أريد أن أذكر هنا، وإلا فإن التفاصيل ستكون ساحقة بالنسبة لك.
بعد تدريب البيانات لمدة 30 حقبة، تم إسقاط الخسارة وصولا الى 0.0114، والتي يمكنك ان ترى هنا:
بدا السعر المفتوح المتوقع ل EUR_USD (باستخدام بيانات الاختبار) شيئا من هذا القبيل:
يبدو الرسم البياني للبيانات الفعلي (الخط الأزرق) والخط البياني المتوقع (الخط الأخضر) كما يلي:
في ما يلي بعض الرسوم البيانية التي تستخدم نفس البيانات:
باستخدام مجموعة مختلفة من الميزات، طبقات الخلايا العصبية لستم، وعهدا، يمكنك الحصول على نوع مختلف من النتائج. ذلك يعتمد على استراتيجية التداول الخاصة بك ما الذي تريد فعلا لإنجازه وما هي الميزات التي تريد دمجها. الفاصل الزمني للبيانات التي تم جمعها ومدى البيانات أيضا يلعب دورا حاسما للغاية في الحصول على نتائج جيدة وفقا لأهداف التداول الخاصة بك.
نلهو مع استخدام لستم (الشبكات العصبية) مع بيانات الفوركس، وتقييم جميع المخاطر بنفسك قبل القيام الصفقات الفعلية.

فورست لستم
سحب طلبات 0.
تاريخ جيثب اليوم.
جيثب هي موطن لأكثر من 20 مليون مطورين يعملون معا لاستضافة ومراجعة التعليمات البرمجية، وإدارة المشاريع، وبناء البرمجيات معا.
استنساخ مع هتبس.
استخدام جيت أو الخروج مع سفن باستخدام ورل على شبكة الإنترنت.
سعر تداول الترددات العالية باستخدام لستم ريكورسيف نيورال نيتوركس.
في هذا المشروع نحاول استخدام الشبكة العصبية المتكررة مع ذاكرة طويلة الأجل على المدى القصير للتنبؤ الأسعار في البورصة عالية التردد. هذا البرنامج ينفذ مثل هذا الحل على البيانات من سجل أوبنبوك في نيويورك الذي يسمح لإعادة إنشاء كتاب أجل الحد لأي وقت معين. كل شيء موصوف في ورقتنا: project. pdf.
لاستخدام هذا البرنامج واحد لديه للحصول على البيانات أولا. نحن بحاجة إلى ملف openbookultraAA_N20180403_1_of_1 من نيس. ويمكن تحميلها من بروتوكول نقل الملفات: //ftp. nyxdata/Historical٪20Data٪20Samples/TAQ٪20NYSE٪20OpenBook/ باستخدام بروتوكول نقل الملفات. قم بفك ضغطها ونسخها إلى المجلد سرك / نيس-رن.
برنامج مكتوب في بيثون 2.7 مع استخدام مكتبة كيراس - تعليمات التثبيت لتثبيته واحد قد تحتاج ثيانو تثبيت وكذلك نومبي، سسيبي، بيامل، HDF5، h5py، كودن (ليس كل حاجة فعلا). ومن المفيد لتثبيت أيضا أوبينبلاس.
نحن نستخدم نومبي، سسيبي، ماتلوتليب و بيمونغو في هذا المشروع لذلك سيكون من المفيد أن يكون لهم تثبيت.
لتشغيل البرنامج الأول تشغيل nyse. py لإنشاء الرموز ثم main. py (إنشاء رموز مجلد ضروري):
لحفظ البيانات إلى مونغودب واحد لديه لتثبيته أولا مونغو تثبيت.
ابحث في الشفرة، قد يكون من الضروري عدم إزالة بعض الخطوط لتمكين ميزات مختلفة.
لاستخدام كودا و أوبنبلاس إنشاء ملف.
/.theanorc وملء مع هذا المحتوى:
رخصة ميت (ميت)
حقوق الطبع والنشر (ج) 2018 كارول دزيتكوسكي.
يتم منح الإذن، مجانا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج")، للتعامل في البرنامج دون قيود، بما في ذلك سبيل المثال لا الحصر حقوق استخدام ونسخ وتعديل ودمج أو نشر أو توزيع أو ترخيص و / أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتم توفير البرامج لهم بذلك، مع مراعاة الشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر المذكور أعلاه وإشعار الإذن هذا في جميع النسخ أو أجزاء كبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمانات من أي نوع، صريحة أو ضمنية، بما في ذلك على سبيل المثال لا الحصر ضمانات قابلية التسويق والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال المؤلفون أو أصحاب حقوق الطبع والنشر تكون مسؤولة عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في أي إجراء من العقود أو الضرر أو غير ذلك، الناشئة عن، أو خارج أو فيما يتعلق بالبرنامج أو استخدام أو غيرها من المعاملات في البرمجيات.
&نسخ؛ 2018 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.

فورست لستم
نوصي بالترقية إلى أحدث إصدارات سفاري أو غوغل كروم أو فيريفوكس.
سحب طلبات 0.
تاريخ جيثب اليوم.
جيثب هي موطن لأكثر من 20 مليون مطورين يعملون معا لاستضافة ومراجعة التعليمات البرمجية، وإدارة المشاريع، وبناء البرمجيات معا.
استنساخ مع هتبس.
استخدام جيت أو الخروج مع سفن باستخدام ورل على شبكة الإنترنت.
قارن هذا الفرع هو حتى مع جغبافيز: سيد.
على المدى الطويل الذاكرة على المدى القصير الذاكرة الشبكة العصبية المتكررة للتنبؤ سلسلة الوقت النقد الاجنبى.
ويمكن تدريب النموذج على البيانات اليومية أو الدقيقة من أي زوج الفوركس. يمكن تحميل البيانات من هنا.
يجب على لستم-رن تعلم التنبؤ في اليوم التالي أو دقيقة استنادا إلى البيانات السابقة.
يتم تنفيذ الشبكة العصبية على ثينو.
هذا الرمز قيد التطوير.
&نسخ؛ 2018 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.

لاستم الشبكة العصبية للتنبؤ سلسلة الوقت.
الشبكات العصبية هذه الأيام هي & لدكو؛ انتقل إلى & رديقو؛ الشيء عندما نتحدث عن البدع الجديدة في تعلم الآلة. على هذا النحو، هناك العديد من الدورات والدروس هناك على الشبكات العصبية الفانيليا الأساسية، من دروس بسيطة لمقالات معقدة تصف عملهم في العمق.
وبالنسبة للشبكات الأعمق، يبدو أن هاجس مهام تصنيف الصور قد تسبب أيضا في ظهور برامج تعليمية على الشبكات العصبية التلافيفية الأكثر تعقيدا. هذا شيء عظيم، إذا كنت في هذا النوع من الشيء، بالنسبة لي ولكن أنا و [رسقوو]؛ م لا متحمس بشكل خاص من خلال تصنيف الصور. أنا أكثر اهتماما بكثير في البيانات مع الأطر الزمنية. وهذا هو المكان الذي تأتي الشبكات العصبية المتكررة (رنس) في متناول اليدين بدلا من ذلك (و أنا & [رسقوو]؛ م التخمين أنه من خلال قراءة هذه المادة سوف و رسكو؛ ليرة لبنانية تعرف أن الذاكرة على المدى القصير طويلة، لستم، والشبكات هي المتغيرات الأكثر شعبية ومفيدة من رنس. ، هناك الكثير من المقالات المفيدة تصف لستمس هناك يجب عليك التحقق أولا).
الآن في حين أن هناك الكثير من الأوراق البحثية العامة والمقالات على لستمس، ما أنا & [رسقوو]؛ وجدت أن كل شيء جدا من هذه التعامل مع الأعمال النظرية والرياضيات وراءها والأمثلة التي تعطي لا تظهر حقا تنبؤية نظرة إلى الأمام صلاحيات تدابير النقل البري الشامل (لستمس) من حيث السلاسل الزمنية. مرة أخرى، كل شيء عظيم إذا كنت & رسكو؛ تبحث لمعرفة الأعمال المعقدة من لستمس ولكن ليست مثالية إذا كنت ترغب فقط في الحصول على شيء وتشغيلها.
ما سأفعله هنا ثم يعطي كامل تعليمي رمز لحمي على استخدام لستمس للتنبؤ بعض السلاسل الزمنية باستخدام حزمة كيراس لبيثون [2.7].
فريندلي تحذير: إذا كنت تبحث عن مقال يتناول كيفية عمل لستم من منظور رياضي ونظري ثم أنا & [رسقوو]؛ م ستكون مخيبة للآمال أسوأ مما كنت بخيبة أمل آخر فتاة أنا مؤرخة. ولكن إذا كنت تبحث عن مقالة مع أمثلة الترميز العملية التي تعمل، والحفاظ على القراءة و هيليب؛
ملاحظة: يمكن العثور على التعليمات البرمجية الكاملة لهذا المشروع في صفحة الموضوعات جيثب.
موجة الخطيئة بسيطة.
دعونا نبدأ مع أبسط شيء يمكننا أن نفكر في أن سلسلة زمنية؛ الخاص بك ضربة القياسية وظيفة موجة الخطيئة. والسماح بإنشاء البيانات التي سوف تحتاج إلى نموذج العديد من التذبذبات من هذه الوظيفة لشبكة لستم لتدريب أكثر. أنا جعلت ورقة إكسل لجعل موجة الخطيئة مع السعة والتردد 1 (إعطاء تردد الزاوي من 6.28)، وكنت تستخدم وظيفة للحصول على نقاط البيانات أكثر من 5001 فترات زمنية مع دلتا الوقت 0.01. النتيجة (في حال كنت لا ترى سلسلة من موجات الخطيئة في حياتك) يشبه هذا.
مجموعة البيانات موجة الخطيئة تصور: فترات زمنية 5001.
لانقاذ لكم عناء جعل هذا نفسك أنا و [رسقوو]؛ يرجى التكرم بوضع البيانات لهذه السلسلة جدا في كسف أنني سوف تستخدم مثل التدريب / اختبار الملف هنا.
الآن لدينا البيانات، ما الذي نحاول فعلا تحقيقه؟ حسنا هذا بسيط نحن نريد لستم لمعرفة موجة الخطيئة من حجم نافذة مجموعة من البيانات التي سوف نقوم بإطعامه ومن ثم نأمل أن نطلب من لستم للتنبؤ N - الخطوات التالية في سلسلة، وسوف تبقي البصق خارج موجة الخطيئة.
سنبدأ بتحويل وتحميل البيانات من ملف كسف إلى الصفيف النامض الذي سيغذي لستم. طريقة عمل الطبقات كراس لستم هي من خلال اتخاذ في صفيف نامبي من 3 أبعاد (N، W، F) حيث N هو عدد من تسلسل التدريب، W هو طول تسلسل و F هو عدد من الميزات من كل تسلسل. اخترت أن أذهب مع طول تسلسل (قراءة حجم الإطار) من 50 الذي يسمح للشبكة حتى الحصول على لمحات من شكل موجة الخطيئة في كل تسلسل، ومن ثم نأمل أن يعلم نفسه لبناء نمط من تسلسل على أساس قبل نافذة تلقى. تسلسل نفسها هي انزلاق النوافذ، وبالتالي التحول بواسطة 1 في كل مرة، مما تسبب في تداخل مستمر مع النوافذ السابقة.
مثال على تسلسل طول 50.
هنا رمز لتحميل كسف بيانات التدريب في مجموعة نامبي على شكل مناسب:
بعد ذلك نحن بحاجة إلى بناء فعلا الشبكة نفسها. هذا هو جزء بسيط! على الأقل إذا كنت تستخدم كيراس أنها بسيطة مثل التراص الطوب ليغو. لقد استخدمت بنية شبكة [1، 50، 100، 1] حيث لدينا طبقة إدخال واحدة (تتكون من تسلسل حجم 50) الذي يتغذى في طبقة لستم مع 50 خلية عصبية، وهذا بدوره يغذي طبقة لستم أخرى مع 100 الخلايا العصبية التي ثم يغذي في طبقة طبيعية متصلة تماما من 1 الخلايا العصبية مع وظيفة التنشيط الخطي والتي سيتم استخدامها لإعطاء التنبؤ للخطوة القادمة.
في ما يلي شفرة وظائف إنشاء النموذج:
وأخيرا انها الوقت لتدريب الشبكة على البيانات ونرى ما نحصل عليه. لقد استخدمت دورة تدريبية واحدة فقط مع هذا لستم، والتي على عكس الشبكات التقليدية حيث كنت في حاجة الى الكثير من العصور للشبكة لتدريب على الكثير من الأمثلة التدريبية، مع هذه الحقبة 1 سوف لستم دورة من خلال جميع النوافذ تسلسل في مجموعة التدريب مرة واحدة . إذا كانت هذه البيانات لديها بنية أقل لذلك، فإن عددا كبيرا من العصور سيكون مطلوبا، ولكن كما أن هذه هي موجة الخطيئة مع نمط يمكن التنبؤ بها أن خرائط على وظيفة بسيطة 1 دورة تدريبية ستكون جيدة بما فيه الكفاية للحصول على تقريب جيد جدا من وظيفة الخطيئة الكاملة.
وضعنا كل هذا رمز التشغيل في وحدة run. py منفصلة وتشغيله مثل هذا:
إذا لاحظت أنك لاحظت أنك لاحظت في دالة load_data () أعلاه نقسم البيانات إلى مجموعات التدريب / الاختبار كما هو الحال في الممارسة المعتادة لمشاكل التعلم الآلي. ومع ذلك ما نحتاج إلى احترس من هنا هو ما نريد فعلا لتحقيقه في التنبؤ السلاسل الزمنية.
إذا كنا لاستخدام مجموعة الاختبار كما هو، فإننا سيتم تشغيل كل نافذة كاملة من البيانات الحقيقية للتنبؤ الخطوة القادمة. هذا جيد إذا كنا نتطلع فقط للتنبؤ خطوة واحدة إلى الأمام، ولكن إذا كنا نتطلع إلى التنبؤ أكثر من خطوة واحدة إلى الأمام، ربما تبحث للتنبؤ بأي اتجاهات أو وظائف الناشئة (على سبيل المثال وظيفة الخطيئة في هذه الحالة) باستخدام فإن مجموعة الاختبار الكاملة تعني أننا سوف نتوقع الخطوة الزمنية التالية ولكن بعد ذلك نتجاهل هذا التنبؤ عندما يتعلق الأمر بالخطوات الزمنية اللاحقة واستخدام البيانات الحقيقية فقط لكل خطوة زمنية.
يمكنك أن ترى أدناه الرسم البياني لاستخدام هذا النهج للتنبؤ خطوة واحدة فقط إلى الأمام في كل خطوة في الوقت المناسب:
ولكن إذا كنا نريد أن نفعل السحر الحقيقي والتنبؤ العديد من الخطوات في وقت مبكر نحن فقط استخدام النافذة الأولى من بيانات الاختبار كنافذة بدء. في كل خطوة الوقت نحن ثم البوب ​​أقدم دخول من الجزء الخلفي من النافذة وإلحاق التنبؤ للخطوة القادمة في المرة الأولى من النافذة، في جوهر تحويل النافذة على طول ذلك ببطء يبني نفسه مع التنبؤات، حتى النافذة هو الكامل من القيم المتوقعة فقط (في حالتنا، كما لدينا نافذة من حجم 50 وهذا سيحدث بعد 50 خطوة الوقت). ثم نحافظ على هذا الأمر إلى أجل غير مسمى، والتنبؤ خطوة المرة القادمة على التنبؤات من الخطوات السابقة في وقت سابق، على أمل أن نرى اتجاها ناشئا.
يوضح الرسم البياني أدناه سلسلة زمنية موجة الخطيئة التي يتم التنبؤ بها من خلال نافذة بداية أولية فقط من بيانات الاختبار الحقيقية ومن ثم يتم التنبؤ بها.
إيبوتشس = 1، حجم النافذة = 50.
تراكب مع البيانات الحقيقية يمكننا أن نرى أنه مع مجرد 1 عصر ومجموعة تدريب صغير معقول من البيانات وقد فعلت لستم بالفعل وظيفة جيدة لعنة جيدة من التنبؤ وظيفة الخطيئة. يمكنك أن ترى أنه كلما توقعنا المزيد والمزيد في المستقبل يزيد هامش الخطأ حيث يتم تضخيم الأخطاء في التنبؤات السابقة أكثر فأكثر عند استخدامها للتنبؤات المستقبلية. على هذا النحو نرى أن لستم لم يحصل على تردد الحق تماما وأنه ينجرف كلما نحاول التنبؤ به. ولكن كما وظيفة الخطيئة هو وظيفة سهلة جدا تتأرجح مع صفر الضوضاء فإنه يمكن التنبؤ بها إلى درجة جيدة.
بعد ذلك سنحاول أن نرى ما سيحدث عندما نحاول التنبؤ بالبيانات حول بيانات العالم الحقيقي الأكثر عشوائية (لا نقول أن موجة الخطيئة ليست في العالم الحقيقي، أعني بعد كل شيء، ما هو العالم الحقيقي الذي يمكننا أن نجعله البيانات الحقيقية لموجة الخطيئة والتنبؤ بها، وأنا دغريس و هيليب؛).
سوق الأسهم ليست بسيطة جدا.
توقعنا عدة مئات من الخطوات الزمنية لموجة الخطيئة على أساس نقطة تلو نقطة دقيقة. حتى نتمكن الآن فقط تفعل الشيء نفسه على سلسلة زمنية سوق الأسهم وجعل حمولة القرف من المال الحق؟
& لدكو؛ لا أحد يعرف إذا كان الأسهم ستعمل ترتفع، أسفل، جانبية أو في الدوائر الداعر & رديقو؛ - مارك حنا.
للأسف سلسلة الوقت الأسهم ليست وظيفة التي يمكن تعيينها. ويمكن وصفها بشكل أفضل أكثر كمشي عشوائي، الأمر الذي يجعل شيء التنبؤ كله أصعب بكثير. ولكن ماذا عن لستم تحديد أي الاتجاهات الخفية الكامنة؟ حسنا، دعنا نلقي نظرة.
هنا هو ملف كسف حيث أخذت سعر الإغلاق اليومي المعدل لمؤشر الأسهم S & P 500 من يناير 2000 & نداش؛ أغسطس 2018. لقد جردت كل شيء لجعله في نفس الشكل بالضبط كما لدينا البيانات موجة الخطيئة، ونحن سوف تشغيله الآن من خلال نفس النموذج استخدمنا على موجة الخطيئة مع نفس القطار / اختبار الانقسام.
هناك تغيير طفيف واحد ونحن بحاجة إلى جعل لبياناتنا ومع ذلك، لأن موجة الخطيئة هو بالفعل نمط تكرار لطيف بشكل جيد يعمل بشكل جيد تشغيل نقاط البيانات الخام من خلال الشبكة. ولكن تشغيل عوائد معدلة من مؤشر الأسهم من خلال شبكة من شأنها أن تجعل عملية التحسين القرف نفسه وليس التقارب إلى أي نوع من المثلى لهذه الأعداد الكبيرة. لذلك لمكافحة هذا سوف نتخذ كل ن حجم نافذة التدريب / اختبار البيانات وتطبيع كل واحد لتعكس النسبة المئوية للتغييرات من بداية تلك النافذة (وبالتالي فإن البيانات في النقطة i = 0 سيكون دائما 0). سنستخدم المعادلات التالية لتطبيعها وبعد ذلك إزالة التطبيع في نهاية عملية التنبؤ للحصول على رقم عالم حقيقي من التنبؤ:
n = قائمة عادية [نافذة] من التغيرات في الأسعار.
p = القائمة الخام [النافذة] من أسعار العودة اليومية المعدلة.
تطبيع:
دي التطبيع:
أضفنا دالة normalise_windows (window_data) إلى الشفرة وحدثنا دالة load_data (فلنام) لتضمين مكالمة شرطية واتخاذ طول التسلسل وتطبيع العلم load_data (فلنام، seq_len، normalise_window):
هذا الآن تطبيع النوافذ كما ذكر أعلاه، وبالتالي يمكننا الآن تشغيل بيانات المخزون لدينا من خلال شبكة لستم لدينا. لنرى كيف يفعل ذلك:
تشغيل البيانات على نقطة واحدة تلو نقطة التنبؤ كما ذكر أعلاه يعطي شيئا يطابق العائدات عن كثب. ولكن هذا هو خادعة! لماذا ا؟ حسنا إذا نظرتم عن كثب، يتكون خط التنبؤ من نقاط التنبؤ المفرد التي كان لها كامل قبل نافذة التاريخ الحقيقي وراءها. وبسبب ذلك، فإن الشبكة لا تحتاج إلى معرفة الكثير عن السلسلة الزمنية نفسها بخلاف كل نقطة على الأرجح لن تكون على الأرجح بعيدا عن النقطة الأخيرة. لذلك حتى لو كان يحصل على التنبؤ لنقطة الخطأ، فإن التنبؤ المقبل ثم عامل في التاريخ الحقيقي وتجاهل التنبؤ غير صحيح، ولكن مرة أخرى تسمح للخطأ أن يتم.
يمكننا أن نرى ما يحدث في الدماغ من لستم، ولكن أود أن تجعل حالة قوية أن لهذا التنبؤ ما هو أساسا المشي العشوائي (وكمسألة تتعلق، لقد جعلت المشي عشوائي تماما من البيانات الذي يحاكي نظرة مؤشر الأسهم، والشيء نفسه بالضبط يصدق هناك أيضا!) هو & لدكو؛ التنبؤ & رديقو؛ النقطة التالية مع توزيع غاوس أساسا، مما يسمح للتنبؤ العشوائي بشكل أساسي بأن لا ينحرف بشدة عن البيانات الحقيقية.
إذا ما الذي سننظر إليه إذا أردنا أن نرى ما إذا كان هناك حقا نمط أساسي يمكن تمييزه في تحركات الأسعار فقط؟ حسنا سوف نفعل نفس الشيء لمشكلة موجة الخطيئة والسماح للشبكة التنبؤ سلسلة من النقاط بدلا من مجرد واحد المقبل.
نستطيع أن نرى الآن أنه على عكس موجة الخطيئة التي تحمل على أنها تسلسل موجة الخطيئة التي كانت مطابقة تقريبا للبيانات الحقيقية، وتوقعاتنا بيانات المخزون تتقارب بسرعة كبيرة إلى نوع من التوازن.
إيبوتشس = 50، ويندو سيز = 50.
وبالنظر إلى التوازن لمثالين التدريب نحن & [رسقوو]؛ تشغيل (واحد مع 1 عصر واحد مع 50 الحقبة) يمكننا أن نرى هناك الاختلافات البرية بين البلدين. ويبدو أن هذا الاختلاف البري متعامد مع ما قد تتوقعه. وعادة ما يكون أعلى حقبة يعني نموذج أكثر دقة، ولكن في هذه الحالة يبدو تقريبا كما لو كان نموذج عصر واحد يميل نحو نوع من العودة التي تتبع عموما حركة سعر الوقت القصير.
لنفحص هذا الأمر بشكل أكبر من خلال تحديد تسلسل التنبؤات لدينا إلى 50 خطوة زمنية مستقبلية ثم تحويل نافذة البدء بمقدار 50 مرة في كل مرة، مما يؤدي في الواقع إلى إنشاء العديد من التنبؤات التسلسلية المستقلة لخطوات زمنية 50:
إبوشس = 1، حجم النافذة = 50، تسلسل التحول = 50.
أنا سوف أكون صادقة هنا و أقول أن النتيجة في الرسم البياني أعلاه قد فاجأني قليلا. كنت أتوقع أن تكون قادرة على إثبات أنه سيكون لعبة أحمق في محاولة للتنبؤ تحركات الأسعار في المستقبل من تحركات الأسعار التاريخية بحتة على مؤشر الأسهم (نظرا لوجود العديد من العوامل الكامنة التي تؤثر على تقلبات الأسعار اليومية، من والعوامل الأساسية للشركات الكامنة، والأحداث الكلية، والمشاعر المستثمرين وضجيج السوق و هيليب؛) ولكن التحقق من التنبؤات من اختبار محدود جدا أعلاه يمكننا أن نرى أن لكثير من الحركات، وخاصة الكبيرة منها، يبدو أن هناك تماما توافق في الآراء التنبؤات النموذجية وحركة الأسعار اللاحقة.
أنا & [رسقوو]؛ م الذهاب لوضع علامة تحذير سخيف كبيرة هنا ولكن! هناك العديد، أسباب كثيرة لماذا أعلاه لدكو؛ واعدة تبحث و رديقو؛ الرسم البياني يمكن أن يكون خاطئا. أخطاء أخذ العينات، الحظ النقي في حجم العينة الصغيرة و هيليب؛ لا شيء في هذا الرسم البياني ينبغي أن تؤخذ على القيمة الاسمية وتتبع عمياء في حفرة مص المال دون بعض سلسلة شاملة وشاملة من باكتيستس (التي هي خارج نطاق لهذه المادة). لقد تم تحذيرك.
إيبوتشس = 400، حجم النافذة = 50، تسلسل التحول = 50.
في الواقع عندما نلقي نظرة على الرسم البياني أعلاه من نفس المدى ولكن مع عصور زادت إلى 400 (التي ينبغي أن تجعل وضع نموذج دقيق) نرى أن الواقع هو الآن يحاول فقط هو التنبؤ زخم صعودي تقريبا في كل فترة زمنية!
ومع ذلك، مع ذلك آمل أن كل ما كنت حريصة الفصول الشباب تعلمت أساسيات ما يجعل شبكات لستم القراد وكيف يمكن استخدامها للتنبؤ وخريطة سلسلة زمنية، فضلا عن المزالق المحتملة للقيام بذلك!
يستخدم لستم غنية حاليا في عالم التنبؤ النص، منظمة العفو الدولية تطبيقات الدردشة، السيارات ذاتية القيادة و هيليب؛ والعديد من المجالات الأخرى. نأمل أن هذه المادة توسعت على التطبيقات العملية لاستخدام لستمس في نهج سلسلة زمنية وكنت قد وجدت أنه من المفيد.
لاستكمال، أدناه هو رمز المشروع الكامل الذي يمكنك أيضا العثور على صفحة جيثب:
وللمرجع، الجهاز الذي استخدمه لتشغيل بلدي نماذج الشبكة العصبية هو زياومي مي الدفتري الهواء 13 الذي أوصي كما أنه يحتوي على المدمج في بطاقة الرسومات نفيديا غيفورسي 940MX والتي يمكن استخدامها مع نسخة تينسورفلو غبو لتسريع النماذج المتزامنة مثل لستم.

يمكن لأي شخص أن يتعلم أن رمز لستم-رن في بيثون (الجزء 1: رن)
خطوات الطفل إلى ذكريات الشبكة العصبية الأولى.
ملخص: أتعلم أفضل مع رمز اللعبة التي يمكن أن ألعب مع. هذا البرنامج التعليمي يعلم الشبكات العصبية المتكررة عن طريق مثال لعبة بسيطة جدا، وتنفيذ الثعبان القصير. الترجمة الصينية الترجمة الكورية.
سوف سقسقة (الجزء 2: لستم) عندما تكتمل فيiamtrask. لا تتردد في متابعة إذا كنت ترغب في قراءة ذلك وشكرا لجميع ردود الفعل!
فقط أعطني المدونة:
وقت التشغيل الإخراج:
الجزء 1: ما هي الذاكرة العصبية؟
قائمة الأبجدية إلى الأمام. يمكنك أن تفعل ذلك، نعم؟
قائمة الأبجدية إلى الوراء. هممم. وربما أكثر صرامة قليلا.
محاولة مع كلمات أغنية تعرف. لماذا يكون من الأسهل أن نتذكر إلى الأمام مما هو عليه أن نتذكر إلى الوراء؟ يمكنك القفز في منتصف الآية الثانية. هم. أيضا صعبة. لماذا ا؟
هناك سبب منطقي جدا لذلك. كنت قد لم تعلم الحروف الأبجدية أو كلمات أغنية مثل جهاز كمبيوتر تخزينها كمجموعة على القرص الصلب. تعلمتهم كتسلسل. كنت جيدة حقا في الفهرسة من حرف واحد إلى التالي. إنه نوع من الذاكرة المشروطة. لديك فقط عندما كنت مؤخرا جدا الذاكرة السابقة. انها أيضا الكثير مثل قائمة مرتبطة إذا كنت على دراية بذلك.
ومع ذلك، انها ليست لديك لم يكن لديك أغنية في الذاكرة الخاصة بك إلا عندما كنت الغناء. بدلا من ذلك، عند محاولة القفز مباشرة إلى منتصف الأغنية، لديك ببساطة صعوبة في العثور على هذا التمثيل في الدماغ (ربما أن مجموعة من الخلايا العصبية). يبدأ البحث في جميع أنحاء يبحث عن منتصف الأغنية، لكنه لم يحاول أن يبحث عن ذلك بهذه الطريقة من قبل، لذلك ليس لديها خريطة لموقع منتصف الآية الثانية. انها الكثير مثل الذين يعيشون في حي مع الكثير من الخلجان / مسدود دي الكيس. انها أسهل بكثير لتصور كيفية الوصول إلى منزل شخص ما باتباع جميع الطرق عاصف لأنك قد فعلت ذلك عدة مرات، ولكن معرفة بالضبط حيث قطع مباشرة عبر الفناء الخلفي لشخص ما هو صعب حقا. يستخدم عقلك بدلا من ذلك "الاتجاهات" التي يعرفها. من خلال الخلايا العصبية في بداية أغنية. (لمزيد من المعلومات عن أشياء الدماغ، انقر هنا)
مثل الكثير من قائمة مرتبطة، وتخزين الذاكرة مثل هذا فعال جدا. وسوف نجد أن خصائص مماثلة / مزايا موجودة في إعطاء الشبكات العصبية لدينا هذا النوع من الذاكرة كذلك. بعض العمليات / المشاكل / التمثيلات / عمليات البحث هي أكثر كفاءة بكثير إذا نمذجة على شكل تسلسل مع الذاكرة المشروطة على المدى القصير / الزائفة.
الذاكرة المسائل عندما البيانات الخاصة بك هو تسلسل من نوع ما. (وهذا يعني أن لديك شيئا لتذكر!) تخيل وجود شريط فيديو من كذاب الكرة. (هنا سأساعد هذا الوقت)
كل نقطة بيانات هي إطار الفيديو. إذا كنت ترغب في تدريب الشبكة العصبية للتنبؤ حيث ستكون الكرة في الإطار التالي، سيكون من المفيد حقا أن نعرف أين كانت الكرة في الإطار الأخير! البيانات المتسلسلة مثل هذا هو السبب في أننا نبني الشبكات العصبية المتكررة. لذلك، كيف تتذكر الشبكة العصبية ما رأته في خطوات الوقت السابقة؟
الشبكات العصبية مخبأة طبقات. عادة، تستند حالة طبقة خفية فقط على البيانات المدخلات الخاصة بك. لذلك، عادة ما يكون تدفق المعلومات الشبكة العصبية مثل هذا:
هذا واضح. بعض أنواع المدخلات تخلق أنواعا معينة من الطبقات المخفية. بعض أنواع الطبقات المخفية تخلق أنواعا معينة من طبقات الإخراج. انها كيندوف نظام مغلق. تغيير الذاكرة هذا. الذاكرة تعني أن الطبقة المخفية هي مزيج من بيانات الإدخال الخاصة بك في الوقت الحالي والطبقة المخفية من الجدول الزمني السابق.
(إنبوت + prev_hidden) - & غ؛ مخفي - & غ؛ انتاج.
لماذا الطبقة الخفية؟ حسنا، يمكننا أن نفعل ذلك من الناحية الفنية.
(إنبوت + prev_input) - & غ؛ مخفي - & غ؛ انتاج.
ومع ذلك، سنكون في عداد المفقودين. وأنا أشجعكم على الجلوس والنظر في الفرق بين هذين تدفق المعلومات. للحصول على تلميح مفيدة قليلا، والنظر في كيفية هذا يلعب بها. هنا، لدينا 4 تيمستيبس من الشبكة العصبية المتكررة سحب المعلومات من الطبقة الخفية السابقة.
(إنبوت + blank_hidden) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_hidden) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_hidden) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_hidden) - & غ؛ مخفي - & غ؛ انتاج.
وهنا، لدينا 4 تيمستيبس من الشبكة العصبية المتكررة سحب المعلومات من طبقة الإدخال السابقة.
(إنبوت + empty_input) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_input) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_input) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_input) - & غ؛ مخفي - & غ؛ انتاج.
ربما، إذا كنت ملونة الأشياء قليلا، فإنه سيكون أكثر وضوحا. مرة أخرى، 4 تيمستيبس مع تكرار طبقة مخفية:
(إنبوت + blank_hidden) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_ هيدن) - & غ؛ هيد دن - & غ؛ أوتبوت (إنبوت + prev_ هيد دن) - & غ؛ هاي د إن - & غ؛ أوتبوت (إنبوت + prev_ هاي د إن) - & غ؛ هاي d دي n - & غ؛ انتاج.
. و 4 تيمستيبس مع تكرار طبقة الإدخال.
(إنبوت + empty_input) - & غ؛ مخفي - & غ؛ أوتبوت (إنبوت + prev_ إنبوت) - & غ؛ هيد دن - & غ؛ أوتبوت (إنبوت + prev_ إنبوت) - & غ؛ هيد دن - & غ؛ أوتبوت (إنبوت + prev_ إنبوت) - & غ؛ هيد دن - & غ؛ انتاج.
التركيز على آخر طبقة مخفية (الخط 4). في تكرار طبقة خفية، ونحن نرى وجود كل المدخلات ينظر حتى الآن. في تكرار طبقة الإدخال، يتم تعريفها حصرا من خلال المدخلات الحالية والسابقة. هذا هو السبب في أننا نموذج تكرار مخفي. تكرار مخفي يتعلم ما يجب أن نتذكر في حين تكرار تكرار من الصعب السلكية لتذكر فقط داتابوانت السابقة على الفور.
الآن مقارنة وتباين هذين النهجين مع الأبجدية إلى الوراء ومناورات منتصف الأغنية. الطبقة المخفية تتغير باستمرار لأنها تحصل على المزيد من المدخلات. وعلاوة على ذلك، فإن الطريقة الوحيدة التي يمكن أن نصل إلى هذه الحالات الخفية هو مع تسلسل الصحيح من المدخلات. الآن بيان المال، والإخراج هو حتمي نظرا للطبقة الخفية، والطبقة المخفية يمكن الوصول إليها فقط مع تسلسل الصحيح من المدخلات. تبدو مألوفة؟
ما هو الفرق العملي؟ لنفترض أننا كنا نحاول التنبؤ بالكلمة التالية في أغنية معينة. و "تكرار طبقة المدخلات" سوف تنهار إذا كانت الأغنية عن طريق الخطأ نفس تسلسل كلمتين في أماكن متعددة. فكر في الأمر، إذا كانت الأغنية تحتوي على عبارات "أنا أحبك"، و "أنا أحب الجزر"، وكانت الشبكة تحاول التنبؤ بالكلمة التالية، كيف ستعرف ما يلي "أنا أحب"؟ يمكن أن يكون الجزر. من الممكن أن تكون انت. الشبكة بحاجة حقا لمعرفة المزيد عن أي جزء من الأغنية في. ومع ذلك، فإن "تكرار طبقة خفية" لا تنهار بهذه الطريقة. وهو يتذكر كل ما يرونه (مع الذكريات تصبح أكثر خفية لأنها تتلاشى في الماضي). لمشاهدة هذا الإجراء، اطلع على هذا. توقف وتأكد من هذا يشعر بالراحة في عقلك.
الجزء 2: رن - ذاكرة الشبكة العصبية.
الآن لدينا الحدس، دعونا الغوص أسفل طبقة (با دوم عثرة.). كما هو موضح في آخر باكبروباغاتيون، يتم تحديد طبقة المدخلات لدينا إلى الشبكة العصبية من قبل مجموعة بيانات المدخلات لدينا. ويستخدم كل صف من بيانات المدخلات لتوليد الطبقة المخفية (عن طريق الانتشار الأمامي). ثم يتم استخدام كل طبقة خفية لملء طبقة الإخراج (على افتراض طبقة واحدة فقط مخفية). كما رأينا للتو، الذاكرة تعني أن الطبقة الخفية هي مزيج من بيانات المدخلات والطبقة الخفية السابقة. كيف يتم ذلك؟ حسنا، مثل الكثير من الانتشار الأخرى في الشبكات العصبية، يتم ذلك مع مصفوفة. وتحدد هذه المصفوفة العلاقة بين الطبقة الخفية السابقة والطبقة الحالية.
شيء كبير أن تأخذ من هذه الصورة، وهناك ثلاثة فقط المصفوفات الوزن. اثنين منهم يجب أن تكون مألوفة جدا (نفس الأسماء أيضا). يقوم SYNAPSE_0 بنشر بيانات المدخلات إلى الطبقة المخفية. ينشر SYNAPSE_1 الطبقة المخفية إلى بيانات الإخراج. المصفوفة الجديدة (SYNAPSE_h المتكررة)، تنتشر من الطبقة الخفية (طبقة_1) إلى الطبقة المخفية في الجدول الزمني التالي (لا يزال طبقة_1). توقف وتأكد من هذا يشعر بالراحة في عقلك.
جيف أعلاه يعكس سحر الشبكات المتكررة، والعديد من الخصائص جدا، مهمة جدا. فإنه يصور 4 تيمستيبس. ويتأثر الأول حصريا ببيانات المدخلات. والثاني هو خليط من المدخلات الأولى والثانية. وهذا مستمر. يجب عليك أن تعترف، في بعض الطريق، شبكة 4 هو "كامل". من المفترض أن تيمستيب 5 يجب أن تختار أي ذكريات لإبقاء وأي منها الكتابة. هذا حقيقي جدا. انها فكرة الذاكرة "القدرة". كما قد تتوقع، طبقات أكبر يمكن أن تعقد المزيد من الذكريات لفترة أطول من الزمن. أيضا، وهذا هو عندما تتعلم الشبكة لنسيان الذكريات غير ذات الصلة وتذكر ذكريات مهمة. ما الشيء المهم الذي تلاحظه في الجدول الزمني 3؟ لماذا هناك أكثر الأخضر في طبقة خفية من الألوان الأخرى؟
لاحظ أيضا أن الطبقة المخفية هي الحاجز بين المدخلات والمخرجات. في الواقع، فإن الناتج لم يعد وظيفة نقية من المدخلات. الإدخال هو مجرد تغيير ما هو في الذاكرة، ويستند الإخراج حصرا على الذاكرة. آخر الوجبات الجاهزة للاهتمام. إذا لم يكن هناك مدخلات في الخطوات الزمنية 2،3، و 4، فإن طبقة خفية لا تزال تتغير من تيمستيب إلى تيمستيب.
أعرف أنني قد توقف. ولكن حقا تأكد من أنك حصلت على هذا الأخير الماضي.
الجزء 3: باكبروباغاتيون من خلال الوقت:
لذا، كيف تتعلم الشبكات العصبية المتكررة؟ راجع هذا الرسم. الأسود هو التنبؤ، والأخطاء هي أصفر مشرق، والمشتقات هي الخردل الملونة.
يتعلمون من خلال نشر تماما إلى الأمام من 1 إلى 4 (من خلال تسلسل كامل من طول التعسفي)، ومن ثم باكبروباغاتينغ جميع المشتقات من 4 إلى 1. يمكنك أيضا التظاهر بأنها مجرد شكل شبكة عصبية عادية على شكل مضحك، إلا أننا ' إعادة إعادة استخدام نفس الأوزان (نقاط الاشتباك العصبي 0،1، و ح) في أماكن كل منها. بخلاف ذلك، انها باكبروباغاتيون العادي.
الجزء 4: لدينا لعبة كود.
سنستخدم شبكة عصبية متكررة لنموذج الإضافة الثنائية. هل ترى التسلسل أدناه؟ ماذا تعني تلك الملونة في الساحات في الأعلى؟
1s الملونة في صناديق في الجزء العلوي يدل على "تحمل قليلا". انهم "تحمل واحد" عندما يتجاوز مجموع في كل مكان. هذا هو القليل من الذاكرة التي نحن ذاهبون لتعليم شبكتنا العصبية كيفية نموذج. انها سوف "تحمل واحد" عندما يتطلب المبلغ ذلك. (انقر هنا للتعرف على وقت حدوث ذلك)
لذلك، يتحرك بالإضافة الثنائية من اليمين إلى اليسار، حيث نحاول التنبؤ بعدد تحت الخط نظرا للأرقام فوق الخط. نحن نريد الشبكة العصبية للتحرك على طول تسلسل ثنائي وتذكر عندما كان قد حمل 1 وعندما لم يفعل ذلك، بحيث يمكن أن تجعل من التنبؤ الصحيح. لا تحصل على المحاصرين جدا في هذه المشكلة. الشبكة في الواقع لا يهتم كثيرا. مجرد الاعتراف بأننا سوف يكون اثنين من المدخلات في كل خطوة زمنية، (إما واحد أو صفر من كل عدد تبدأ المضافة). وسيتم نشر هذه المدخلات اثنين إلى طبقة خفية، والتي سوف تضطر إلى تذكر ما إذا كنا أم لا. وسوف يأخذ التنبؤ كل هذه المعلومات في الاعتبار للتنبؤ بت الصحيح في موقف معين (الخطوة الزمنية).
عند هذه النقطة، أوصي فتح هذه الصفحة في نافذتين بحيث يمكنك متابعة جنبا إلى جنب مع أرقام السطر في المثال التعليمات البرمجية في الأعلى. هذه هي الطريقة التي كتبت بها.
خطوط 0-2: استيراد التبعيات لدينا والبذر مولد رقم عشوائي. سوف نستخدم فقط نومبي ونسخ. نومبي هو الجبر مصفوفة. نسخ لنسخ الأشياء.
خطوط 4-11: لدينا اللاخطية ومشتقة. لمزيد من التفاصيل، يرجى قراءة هذا البرنامج التعليمي الشبكة العصبية.
السطر 15: سننشئ جدول بحث ينقسم من عدد صحيح إلى تمثيله الثنائي. والتمثيلات الثنائية تكون لدينا المدخلات والمخرجات البيانات لكل مشكلة الرياضيات نحاول الحصول على شبكة لحلها. سيكون جدول البحث هذا مفيدا جدا في التحويل من الأعداد الصحيحة إلى سلاسل البت.
السطر 16: هذا هو المكان الذي أضع فيه الحد الأقصى لطول الأرقام الثنائية التي سنضيفها. إذا كنت قد فعلت كل شيء الحق، يمكنك ضبط هذا لإضافة أعداد كبيرة جدا.
الخط 18: يحسب هذا أكبر عدد ممكن تمثيله مع الطول الثنائي الذي اخترناه.
السطر 19: هذا هو جدول البحث الذي يتنقل من عدد صحيح إلى تمثيله الثنائي. نحن نسخه إلى int2binary. هذا هو كيندوف أون-نيسيساري ولكن اعتقدت أنها جعلت الأمور أكثر وضوحا يبحث.
الخط 26: هذا هو معدل التعلم لدينا.
السطر 27: نحن نقوم بإضافة رقمين معا، لذلك سنقوم بتغذية سلاسل ثنائية بت حرف واحد في كل مرة. وبالتالي، نحن بحاجة إلى مدخلين إلى الشبكة (واحد لكل من الأرقام التي تضاف).
الخط 28: هذا هو حجم الطبقة الخفية التي سيتم تخزين بت حمل لدينا. لاحظ أن هذه الطريقة أكبر مما تحتاج إليه نظريا. Play with this and see how it affects the speed of convergence. Do larger hidden dimensions make things train faster or slower? More iterations or fewer?
Line 29: Well, we're only predicting the sum, which is one number. Thus, we only need one output.
Line 33: This is the matrix of weights that connects our input layer and our hidden layer. Thus, it has "input_dim" rows and "hidden_dim" columns. (2 x 16 unless you change it). If you forgot what it does, look for it in the pictures in Part 2 of this blogpost.
Line 34: This is the matrix of weights that connects the hidden layer to the output layer. Thus, it has "hidden_dim" rows and "output_dim" columns. (16 x 1 unless you change it). If you forgot what it does, look for it in the pictures in Part 2 of this blogpost.
Line 35: This is the matrix of weights that connects the hidden layer in the previous time-step to the hidden layer in the current timestep. It also connects the hidden layer in the current timestep to the hidden layer in the next timestep (we keep using it). Thus, it has the dimensionality of "hidden_dim" rows and "hidden_dim" columns. (16 x 16 unless you change it). If you forgot what it does, look for it in the pictures in Part 2 of this blogpost.
Line 37 - 39: These store the weight updates that we would like to make for each of the weight matrices. After we've accumulated several weight updates, we'll actually update the matrices. المزيد عن هذا لاحقا.
Line 42: We're iterating over 100,000 training examples.
Line 45: We're going to generate a random addition problem. So, we're initializing an integer randomly between 0 and half of the largest value we can represent. If we allowed the network to represent more than this, than adding two number could theoretically overflow (be a bigger number than we have bits to represent). Thus, we only add numbers that are less than half of the largest number we can represent.
Line 46: We lookup the binary form for "a_int" and store it in "a"
Line 48: Same thing as line 45, just getting another random number.
Line 49: Same thing as line 46, looking up the binary representation.
Line 52: We're computing what the correct answer should be for this addition.
Line 53: Converting the true answer to its binary representation.
Line 56: Initializing an empty binary array where we'll store the neural network's predictions (so we can see it at the end). You could get around doing this if you want. but i thought it made things more intuitive.
Line 58: Resetting the error measure (which we use as a means to track convergence. see my tutorial on backpropagation and gradient descent to learn more about this)
Lines 60-61: These two lists will keep track of the layer 2 derivatives and layer 1 values at each time step.
Line 62: Time step zero has no previous hidden layer, so we initialize one that's off.
Line 65: This for loop iterates through the binary representation.
Line 68: X is the same as "layer_0" in the pictures. X is a list of 2 numbers, one from a and one from b. It's indexed according to the "position" variable, but we index it in such a way that it goes from right to left. So, when position == 0, this is the farhest bit to the right in "a" and the farthest bit to the right in "b". When position equals 1, this shifts to the left one bit.
Line 69: Same indexing as line 62, but instead it's the value of the correct answer (either a 1 or a 0)
Line 72: This is the magic. Make sure you understand this line. To construct the hidden layer, we first do two things. First, we propagate from the input to the hidden layer (np. dot(X, synapse_0)). Then, we propagate from the previous hidden layer to the current hidden layer (np. dot(prev_layer_1, synapse_h)). Then WE SUM THESE TWO VECTORS. and pass through the sigmoid function.
So, how do we combine the information from the previous hidden layer and the input? After each has been propagated through its various matrices (read: interpretations), we sum the information.
Line 75: This should look very familiar. It's the same as previous tutorials. It propagates the hidden layer to the output to make a prediction.
Line 78: Compute by how much the prediction missed.
Line 79: We're going to store the derivative (mustard orange in the graphic above) in a list, holding the derivative at each timestep.
Line 80: Calculate the sum of the absolute errors so that we have a scalar error (to track propagation). We'll end up with a sum of the error at each binary position.
Line 83 Rounds the output (to a binary value, since it is between 0 and 1) and stores it in the designated slot of d.
Line 86 Copies the layer_1 value into an array so that at the next time step we can apply the hidden layer at the current one.
Line 90: So, we've done all the forward propagating for all the time steps, and we've computed the derivatives at the output layers and stored them in a list. Now we need to backpropagate, starting with the last timestep, backpropagating to the first.
Line 92: Indexing the input data like we did before.
Line 93: Selecting the current hidden layer from the list.
Line 94: Selecting the previous hidden layer from the list.
Line 97: Selecting the current output error from the list.
Line 99: this computes the current hidden layer error given the error at the hidden layer from the future and the error at the current output layer.
Line 102-104: Now that we have the derivatives backpropagated at this current time step, we can construct our weight updates (but not actually update the weights just yet). We don't actually update our weight matrices until after we've fully backpropagated everything. لماذا ا؟ Well, we use the weight matrices for the backpropagation. Thus, we don't want to go changing them yet until the actual backprop is done. See the backprop blog post for more details.
Line 109 - 115 Now that we've backpropped everything and created our weight updates. It's time to update our weights (and empty the update variables).
Line 118 - end Just some nice logging to show progress.

No comments:

Post a Comment