النتائج 1 إلى 10 من 10
- 30-04-2018, 10:11 PM #1
الجيل الثالث الشبكات العصبية: شبكات عميقة للكاتب فلاديمير بيرفنكو
محتويات
-1 الجيل الثاني من الشبكات العصبية
1.1. هندسة الاتصالات
2.1. أنواع الشبكات العصبية الرئيسية
1.2.1. الشبكات متعددة الطبقات المتصلة بالكامل (MLF) متعددة اللغات (Perceptron متعددة الطبقات)
2.2.1. شبكة الاردن
3.2.1. شبكة علمان
4.2.1. الشبكة الوظيفية القاعدة القاعدية (RBF)
5.2.1. تكميم المتعلم الديناميكي ، شبكات DLVQ
6.2.1. شبكة هوبفيلد
3.1. أساليب التدريب
1.3.1. القواعد الرئيسية لتعلم الشبكات العصبية
1.1.3.1. تصحيح الاخطاء
2.1.3.1. حكم بولتزمان
3.1.3.1. حكم هب
4.1.3.1. التعلم التنافسي
4.1. سلبيات
-2 تعلم عميق
1.2. خلفية
2.2. Autoencoders. Autoencoder وتقييد آلة بولتزمان. الاختلافات والميزات
1.2.2. Autoencoder
2.2.2. آلة بولتزمان المقيدة ، RBM
3.2. مكدسة الأوتاسيكوسيرس الشبكات. Stackеd Autoencoder SAE، مكدسة آلة بولتزمان المقيدة (مكدسة الإدارة القائمة على النتائج)
4.2. تدريب الشبكات العميقة (DN). مراحل. خصوصيات
-3 محتويات
1.3. لغة R
2.3. تنويعات التنفيذ والقضايا الموجهة
3.3. تحضير البيانات للتجربة
1.3.3. مصدر معلومات
2.3.3. بيانات المدخلات (Predictors)
1.2.3.3. مؤشر حركة الاتجاه Welles Wilder - ADX (HLC) ، n
2.2.3.3. aroon (HL، n)
3.2.3.3. مؤشر قناة السلع - (CCI (HLC، n
4.2.3.3. (chaikinVolatility (HLC، n
5.2.3.3. مذبذب زاود مومنتوم - CMO (ميد ، ن)
6.2.3.3. مؤشر MACD
7.2.3.3.( OsMA (Med، nFast، nSlow، nSig
8.2.3.3. مؤشر القوة النسبية -( RSI (Med، n
9.2.3.3. (Stochastic Oscillator - stoch (HLC، nFastK = 14، nFastD = 3، nSlowD = 3
10.2.3.3. مؤشر الزخم العشوائي - (SMI (HLC، n = 13، nFast = 2، nSlow = 25، nSig = 9
11.2.3.3. التقلب (يانغ وتشانغ) - التقلب (OHLC ، n ، calc = "yang.zhang" ، N = 96)
3.3.3. بيانات المخرجات (الهدف)
4.3.3. بيانات المقاصة
5.3.3. تدريب واختبار تشكيل عينة
6.3.3. موازنة الطبقة
7.3.3. تجهيزها
4.3. نماذج البناء والتدريب والاختبار
1.4.3. الحسابات المتوازية
-4 التنفيذ (المؤشر والمستشار الخبير)
1.4. التدريب وحفظ النموذج
2.4. تركيب وإطلاق النظام
3.4. طرق وطرق تحسين الخصائص النوعية
المقدمة
ستنظر هذه المقالة في الأفكار الرئيسية لهذا الموضوع مثل Deep Learning و Deep Network دون عمليات حسابية معقدة في شروط المواطن العادي.
تؤكد التجارب مع البيانات الحقيقية (أو لا) المزايا النظرية للشبكات العصبية العميقة على الشبكات الضحلة عن طريق التعريف المتري والمقارنة. المهمة في متناول اليد هي التصنيف. يجب علينا إنشاء مؤشر ومستشار خبير يستند إلى نموذج الشبكة العصبية العميقة والعمل بالتزامن وفقا لخطة العميل / الخادم ومن ثم اختبارها.
يفترض القارئ أن يكون لديه فكرة عادلة عن المفاهيم الأساسية المستخدمة في الشبكات العصبية.
1. شبكات الجيل الثاني العصبية
تم تصميم الشبكات العصبية لمعالجة مجموعة واسعة من المشاكل المرتبطة بمعالجة الصور.
فيما يلي قائمة بالمشاكل التي يتم حلها عادةً عن طريق الشبكات العصبية:
- تقريب الوظائف بمجموعة من النقاط (الانحدار) ؛
- تصنيف البيانات حسب المجموعة المحددة من الفئات ؛
- تجميع البيانات مع تحديد فئات النموذج الأولي غير المعروفة ؛
- ضغط المعلومات
- استعادة البيانات المفقودة
- الذاكرة الترابطية
- الأمثل ، والتحكم الأمثل الخ
- من القائمة أعلاه سيتم مناقشة "تصنيف" فقط في هذه المقالة.
1.1. هندسة الاتصالات
تتأثر طريقة معالجة المعلومات بشكل كبير بسبب غياب أو وجود حلقات ردود الفعل في الشبكة. إذا لم تكن هناك ردود فعل مرتجعة بين العصبونات (أي أن الشبكة تحتوي على بنية من الطبقات المتسلسلة حيث يتلقى كل عصبون معلومات فقط من الطبقة السابقة) ، فإن معالجة المعلومات في الشبكة تكون أحادية الاتجاه. تتم معالجة إشارة الإدخال عن طريق تسلسل من الطبقات ويتم تلقي الاستجابة في عدد من براغي مساوية لعدد الطبقات.
وجود حلقات ردود الفعل يمكن أن تجعل ديناميكية الشبكة العصبية (في هذه الحالة تسمى المتكررة) غير متوقعة. في الواقع ، يمكن للشبكة "التكرار للأبد" ولا تنتج استجابة أبدًا. في الوقت نفسه ، وفقا ل Turing ، لا توجد خوارزمية لشبكة متكررة تعسفية لتحديد ما إذا كانت عناصرها ستدخل في حالة توازن (مشكلة التوقف).
بشكل عام ، فإن حقيقة أن الخلايا العصبية في الشبكات المتكررة تشارك في معالجة المعلومات مرات عديدة ، تسمح لهذه الشبكات بمعالجة المعلومات على مستوى أعمق بطرق مختلفة. في هذه الحالة ، يجب اتخاذ تدابير خاصة حتى لا تتكرر الشبكة إلى الأبد. على سبيل المثال ، استخدم اتصالات متناظرة ، كما هو الحال في شبكة Hopfield أو حدّد عدد التكرار بالقوة.
1.2. أنواع الشبكات العصبية الرئيسية
بعد أن بدأت مع الشبكات العصبية ، قطعت الشبكات العصبية شوطا طويلا في تطورها. اليوم ، هناك عدد كبير من الشبكات العصبية تتنوع في البنية وتستخدم أساليب التدريب.
الاكثر شهرة هي:
1.2.1. الشبكات متعددة الطبقات المتصلة بالكامل (MLF) متعددة اللغات (Perceptron متعددة الطبقات)
1.2.2. الشبكات الأردنية هي شبكات متكررة جزئياً ومماثلة لشبكات "ألمان".
يمكن معالجته كشبكة موجّهة مع عصبونات سياق إضافية في طبقة الإدخال.
يتم تغذية هذه الخلايا العصبية السياق من قبل أنفسهم (ردود فعل مباشرة) ومن الخلايا العصبية المدخلات. الخلايا العصبية السياق الحفاظ على الحالة الراهنة للشبكة. في شبكة الأردن ، يجب أن يكون عدد السياق والخلايا العصبية المدخلة هو نفسه.
1.2.3. شبكات Elman
هي شبكات متكررة جزئياً ومماثلة لشبكات الأردن. الفرق بين شبكتين Elman والأردن هو أن الخلايا العصبية في سياق شبكة إلمان لا تغذيها الخلايا العصبية الخرجية ، بل الخلايا الخفية. الى جانب ذلك ، لا توجد ردود فعل مباشرة في الخلايا العصبية السياق.
في شبكة إلمان ، يجب أن يكون عدد السياق والخلايا العصبية المخفية هو نفسه. الميزة الرئيسية لشبكات Elman هي أن عدد الخلايا العصبية السياقية لا يتم تحديده من خلال عدد المخرجات كما هو الحال في الشبكة الأردنية ولكن عدد الخلايا العصبية المخفية ، مما يجعل الشبكة أكثر مرونة. يمكن بسهولة إضافة الخلايا العصبية المخفية أو اتخاذها على عكس عدد من المخرجات.
1.2.4. شبكة دالة الأساس الشعاعي (RBF) -
هي شبكة عصبية متقدمة إلى الأمام تحتوي على طبقة وسيطة (مخفية) من الخلايا العصبية المتناظرة شعاعيًا. يقوم مثل هذا العصبون بتحويل المسافة من ناقل مدخلات محدد إلى مركز المراسلة الخاص به عن طريق بعض القوانين غير الخطية التي اعتُبِرت غوسيًا.
تتميز شبكات RBF بالعديد من المزايا على الشبكات المتقدمة للتغذية متعددة الطبقات. بادئ ذي بدء ، فإنها تحاكي (غير متأكد من كلمة) وظيفة غير خطية عشوائية مع طبقة وسيطة واحدة فقط ، مما يوفر على المطور ضرورة اتخاذ قرار بشأن عدد الطبقات. بعد ذلك ، يمكن تحسين المعلمات في المجموعة الخطية في طبقة المخرجات بمساعدة طرق معروفة على نطاق واسع للتحسين الخطي. هذا الأخير يعمل بسرعة وليس لديهم صعوبات مع الحد الأدنى المحلي الذي يتداخل بشكل كبير في backpropagation. هذا هو السبب في أن شبكة RBF تتعلم أسرع بكثير من استخدام backpropagation.
عيوب RBF: هذه الشبكات لها خصائص استنتاجية ضعيفة وتبين أنها مرهقة عندما يكون متجه الإدخال كبيرًا.
1.2.5. دينامية التعلم المتجه الكمي DLVQ
الشبكات تشبه إلى حد بعيد خرائط التنظيم الذاتي (SOM). على عكس SOM ، DLVO قادرة على التعلم تحت إشراف وتفتقر إلى علاقة الجوار بين النماذج. تكاثر المتجه استخدام أوسع من التجميع.
1.2.6. Hopfield Network
هي شبكة متصلة بالكامل مع مصفوفة اتصال متناظرة. أثناء التشغيل ، تتلاقى ديناميكيات هذه الشبكات مع إحدى حالات التوازن. حالات الاتزان هذه هي الحد الأدنى المحلي للوظائف المعروفة باسم طاقة الشبكة. يمكن استخدام مثل هذه الشبكة كنظام ذاكرة ترابطية للمحتوى ، كعامل تصفية وللتصدي لبعض تحديات التحسين.
على عكس العديد من الشبكات العصبية التي تعمل حتى تحصل على استجابة في عدد معين من البراعة ، تعمل شبكات Hopfield حتى تصل إلى حالة التوازن عندما تكون الحالة التالية للشبكة هي نفسها تمامًا كالشبكة السابقة. في هذه الحالة ، تكون الحالة الأولية عبارة عن نمط مدخلات وفي حالة التوازن يتم استلام صورة المخرجات. يتطلب تدريب شبكة Hopfield نمط تدريب ليتم عرضه على طبقات الإدخال والإخراج في وقت واحد.
على الرغم من الخصائص الجذابة ، إلا أن شبكة Hopfield الكلاسيكية بعيدة عن كونها مثالية. لديه ذاكرة محدودة ، حوالي 15 ٪ من عدد الخلايا العصبية في الشبكة N ، في حين أن أنظمة الذاكرة المعنونة يمكن تخزين ما يصل إلى 2N من الصور المختلفة ، وذلك باستخدام N بت.
إلى جانب ذلك ، فإن شبكات Hopfield غير قادرة على التعرف على ما إذا كانت الصورة قد تشردت أو تحولت فيما يتعلق بموقعها المخزن الأولي. هذه العوائق الأخرى تحدد إدراك شبكة Hopfield كنموذج نظري مناسب للدراسة بدلاً من أداة عملية لاستخدام كل يوم.
العديد من الآخرين (شبكة Hemming المتكررة ، شبكة Grossberg ، شبكات نظرية الرنين التكيفي (ART-1 ، ART-2) الخ) لم تذكر في هذه المقالة لأنها خارج نطاق اهتمامنا.
1.3. أساليب التدريب
القدرة على تعلم أشياء جديدة هي السمة الرئيسية للدماغ البشري. في حالة الشبكات العصبية الاصطناعية ، فإن التعلم هو عملية تكوين بنية الشبكة (بنية الروابط بين العصبونات) وأوزان الروابط المشبكية (التي تؤثر على إشارات المعامل) للحصول على حل فعال للمهمة الموجودة. يتم عادة تدريب الشبكة العصبية على عينة بيانات. تتبع عملية التدريب خوارزمية معينة وعندما تستمر ، يجب أن يتحسن تفاعل الشبكة مع إشارات الدخل.
هناك ثلاثة نماذج تعليمية رئيسية: تحت إشراف ، بدون إشراف ، ومجتمعة. في الحالة الأولى ، تُعرف الإجابات الصحيحة لكل مثال إدخال وتحاول الأوزان تقليل الخطأ. التعلم بدون إشراف يسمح بتصنيف العينات من خلال شرح البنية الداخلية وطبيعة البيانات. في التدريب المشترك يتم استخدام كل من الأساليب المذكورة أعلاه.
1.3.1. القواعد الرئيسية لتعلم الشبكات العصبية
هناك أربعة قواعد تعليمية أساسية تعتمد على بنية الشبكة المرتبطة بها: تصحيح الأخطاء ، قانون بولتزمان ، حكم هب والتعلم التنافسي.
1.3.1.1. تصحيح الاخطاء
يحتوي كل مثال إدخال على قيمة إخراج مرغوبة محددة (قيمة الهدف) ، والتي قد لا تتطابق مع القيمة الحقيقية (المتوقعة). تستخدم قاعدة تعلم تصحيح الأخطاء الفرق بين الهدف والقيم المتوقعة للتكيف المباشر للأوزان من أجل تقليل الخطأ. يتم التدريب فقط في حالة وجود نتيجة خاطئة. هذه القاعدة التعليمية لديها العديد من التعديلات.
1.3.1.2. قاعدة بولتزمان
قاعدة بولتزمان هو قاعدة تعلم عشوائية قياسا على مبادئ الديناميكا الحرارية. وينتج عن ذلك تعديل معاملات وزن الخلايا العصبية وفقا للتوزيع الاحتمالي المرغوب. يمكن اعتبار قاعدة بولتزمان كحالة معزولة للتصحيح عن طريق الخطأ حيث يشير الخطأ إلى وجود اختلاف في الارتباط بين الحالات في وضعين.
1.3.1.3. قاعدة هب
قاعدةهب هي أشهر خوارزمية تعليم الشبكات العصبية. فكرة هذه الطريقة هي أنه إذا كانت الخلايا العصبية على جانبي المشبك تنشط بشكل متزامن ومنتظم ، فإن قوة الوصلة المشبكية تزداد. من الخصائص المهمة هنا أن تغير الوزن المشبكي يعتمد فقط على نشاط العصبونات المرتبطة بهذا المشبك. هناك العديد من الاختلافات في هذه القاعدة التي تختلف في خصوصيات في تعديل الوزن متشابك.
1.3.1.4. التعلم التنافسي
على عكس قاعدة هب للتعلم ، حيث يمكن أن ينشط عدد من الخلايا العصبية في وقت واحد ، هنا تتنافس الخلايا العصبية الخراجية مع بعضها البعض. إن الخلايا العصبية المخرجة ذات القيمة القصوى للمبلغ الموزون هي "الفائز" و "الفائز يأخذ كل شيء". يتم تعيين نواتج الخلايا العصبية الخرج الأخرى إلى غير نشطة. عند التعلُّم ، يتم فقط تعديل قيم أوزان "الفائز" التي تستهدف استهداف القرب من مثيل الإدخال الحالي.
هناك الكثير من خوارزميات التعلم التي تعالج مشاكل مختلفة. واحدة من أكثر الخوارزميات الحديثة فاعلية ، هي واحدة منها. المبدأ وراء ذلك هو أن تغير الوزن متشابك يحدث مع النظر في التدرج المحلي للوظيفة الخطأ.
الفرق بين الاستجابات الحقيقية والصحيحة للشبكة العصبية التي تم تقييمها في طبقة الخرج تم نشرها - نحو تيار الإشارات (الشكل 5). وبهذه الطريقة يمكن لكل عصبون تحديد مساهمة وزنها في الخطأ التراكمي للشبكة. أبسط قواعد التعلم هي أشد طرق النسب ، وهي تغير الوزن المشبكي بالتناسب مع مساهمتها في الخطأ التراكمي.
من المؤكد أن هذا النوع من التعلم العصبي الشبكي لا يضمن أفضل نتيجة تعلم حيث أن هناك دائما احتمال أن الخوارزمية قد وصلت إلى الحد الأدنى المحلي. هناك تقنيات خاصة تسمح بإزالة الحل الموجود من نقطة متطرفة محلية. إذا كانت الشبكة العصبية بعد عدة تطبيقات من هذه التقنية لها نفس القرار ، فيمكن استنتاج أن الحل الموجود هو الأكثر احتمالا.
1.4. سلبيات
الصعوبة الرئيسية لاستخدام الشبكات العصبية هي ما يسمى بـ "لعنة البعدية". عندما يتم زيادة أبعاد المدخلات وعدد الطبقات ، فإن تعقيد الشبكة ووقت التعلم يتزايدان بشكل مضاعف والنتيجة المستلمة ليست دائماً مثالية.
صعوبة أخرى لاستخدام الشبكات العصبية هي أن الشبكات العصبية التقليدية غير قادرة على شرح كيفية حلها للمهام. في بعض مجالات التطبيق مثل الطب هذا التفسير هو أكثر أهمية من النتيجة نفسها. غالباً ما يكون التمثيل الداخلي للنتائج معقداً لدرجة أنه من المستحيل تحليله باستثناء الحالات الأبسط التي لا تهم في العادة.
2. التعلم العميق
تمر اليوم نظرية وممارسة التعلم الآلي "بثورة عميقة" ، ناجمة عن التنفيذ الناجح لأساليب التعلم العميق ، التي تمثل الشبكات العصبية من الجيل الثالث. على عكس شبكات الجيل الثاني الكلاسيكية المستخدمة في 80s-90s من القرن الماضي ، تحل نماذج التعلم الجديدة عددا من المشاكل التي تقيد التوسع والتنفيذ الناجح للشبكات العصبية التقليدية.
الشبكات التي تم تدريبها باستخدام خوارزميات التعلم العميق لم تفرق ببساطة أفضل الطرق البديلة في الدقة ولكن في بعض الحالات كشفت عن أساسيات فهم معلومات المدخلات. إن التعرف على الصور ونص تحليل المعلومات هي ألمع الأمثلة.
اليوم ، تعتمد الطرق الصناعية الأكثر تقدمًا لرؤية الكمبيوتر والاعتراف بالكلام على الشبكات العميقة. عمالقة صناعة تكنولوجيا المعلومات مثل Apple و Google و Facebook يستخدمون الباحثين لتطوير الشبكات العصبية العميقة.
2.1. خلفية
فاز فريق من طلاب الدراسات العليا الذين يدرسون في جامعة تورنتو بقيادة الأستاذ جيفري هينتون بالجائزة الأولى في مسابقة برعاية ميرك. باستخدام مجموعة بيانات محدودة ، تصف التركيب الكيميائي لـ 15 جزيء ، تمكنت مجموعة G. Hinton من إنشاء وتطبيق نظام برنامج خاص يحدد أي من هذه الجزيئات من المرجح أن يكون دواء فعال.
كانت خصوصية هذا العمل أن المطورين استخدموا شبكة عصبية اصطناعية تعتمد على التعلم العميق. ونتيجة لذلك ، تمكن النظام من إجراء عمليات حسابية وبحوث تستند إلى مجموعة محدودة للغاية من بيانات المصدر ، في حين يتطلب تدريب الشبكة العصبية عادة كمية كبيرة من المعلومات التي يتم وضعها في النظام.
كان انجاز فريق هينتون مثير للإعجاب بشكل خاص لأن الفريق قرر الدخول في المسابقة في الدقيقة الأخيرة. إضافة إلى ذلك ، تم تطوير نظام التعلم العميق دون معرفة محددة حول كيفية ارتباط الجزيئات بأهدافها. كان التنفيذ الناجح للتعلم العميق إنجازًا آخر في تطوير الذكاء الاصطناعي للأحداث 2012 الحافل بالأحداث.
لذلك في صيف عام 2012 ، قدم جيف دين وأندرو ي. نغ من Google نظامًا جديدًا للتعرف على الصور بمعدل دقة يبلغ 15،8٪ ، حيث تم تدريب نظام مجموعة من 16000 عقدة استخدموا شبكة ImageNet تحتوي على مكتبة تضم 14 مليون صورة 20000 كائن مختلف. في العام الماضي ، تفوق برنامج وضعه علماء سويسريون على الإنسان في التعرف على صور إشارات المرور. حدد البرنامج الفائز بدقة 99.46 في المئة من الصور في مجموعة من 50،000 ؛ وكانت أعلى درجة في مجموعة من 32 مشاركًا بشريًا 99.22 بالمائة ، وكان متوسط البشر 98.84 بالمائة. في تشرين الأول / أكتوبر 2012 ، قام ريتشارد ف. رشيد ، منسق برامج مايكروسوفت العلمية في مؤتمر عُقد في تيانجين بالصين بتكنولوجيا الترجمة الفورية من الإنجليزية إلى لغة الماندارين مصحوبة بمحاكاة لصوته الخاص.
وتستند جميع هذه التقنيات التي تظهر اختراقاً في مجال الذكاء الاصطناعي إلى أسلوب التعلم العميق إلى حد معين. إن الإسهام الرئيسي في نظرية التعلم العميق يقوم به البروفيسور هينتون ، وهو حفيد جورج بول الكبير ، وهو عالم إنجليزي ، مؤسس جبر بول الذي يكمن وراء الحواسيب المعاصرة.
تستكمل نظرية التعلم العميق الطرق العادية لتعلم الآلة باستخدام خوارزميات خاصة لتحليل معلومات المدخلات في العديد من مستويات العرض التقديمي. تكمن خصوصية الأسلوب الجديد في أن التعلم العميق يدرس الموضوع حتى يجد مستويات عرض معلومات كافية كافية لمراعاة جميع العوامل التي يمكن أن تؤثر على معايير الكائن موضع البحث.
بهذه الطريقة ، تتطلب الشبكة العصبية القائمة على مثل هذا النهج معلومات مدخلات أقل للتعلم ، وتكون الشبكة المدربة قادرة على تحليل المعلومات بدقة أعلى من الشبكات العصبية المعتادة. ويذكر البروفيسور هينتون وزملاؤه أن تقنيتهم مفيدة بشكل خاص للبحث عن الخصائص المميزة في مصفوفة المعلومات متعددة الأبعاد والمصممة بشكل جيد.
تستخدم تقنيات الذكاء الاصطناعي (AI) ، وخاصة التعلم العميق ، على نطاق واسع في أنظمة مختلفة ، بما في ذلك المساعد الشخصي الذكي Apple Siri استنادًا إلى تقنيات الاتصالات Nuance وعناوين التعرف في Google Street View. ومع ذلك ، يقدر العلماء النجاح في هذا المجال بعناية شديدة لأن تاريخ إنشاء الذكاء الاصطناعي مليء بالوعود وخيبات الأمل المتفائلة.
في الستينيات ، اعتقد العلماء أن الأمر سيستغرق 10 سنوات فقط لإنشاء ذكاء اصطناعي متميز بالكامل. ثم في ثمانينيات القرن العشرين ، كانت هناك موجة من الشركات الشابة تقدم "ذكاءً اصطناعياً جاهزاً" يليه "العصر الجليدي" في هذا المجال ، والذي استمر حتى وقت قريب. توفر القدرات الحسابية الواسعة المتاحة حاليًا في الخدمات السحابية مستوى جديدًا من تنفيذ الشبكات العصبية القوية باستخدام قاعدة نظريّة وخوارزميّة جديدة.
تجدر الإشارة إلى أن الشبكات العصبية ، حتى الجيل الثالث منها مثل الشبكات العصبية التلافيفية ، autassociators ، آلات بولتزمان ، ليس لها أي شيء مشترك مع الخلايا العصبية البيولوجية باستثناء الاسم.
ينفّذ نموذج التعلم الجديد فكرة التعلم على مرحلتين. في المرحلة الأولى ، يتم استخراج معلومات حول البنية الداخلية للبيانات المدخلة من مجموعة كبيرة من البيانات غير المنسقة باستخدام autoassociator من خلال التدريب غير المدروس على طبقة تلو الأخرى. بعد ذلك ، وباستخدام هذه المعلومات في شبكة عصبية متعددة الطبقات ، فإنه يمر عبر التدريب الخاضع للإشراف بطرق معروفة باستخدام البيانات المنسقة. في الوقت نفسه ، يجب أن يكون حجم البيانات غير المنسقة أكبر حجم ممكن. يمكن أن تكون البيانات المنسقة أصغر حجمًا بكثير. في حالتنا ليس من الأهمية الفورية.
2.2. Autoencoders. Autoencoder وتقييد آلة بولتزمان. الاختلافات والميزات
2.2.1. Autoencoder
كان autassociator الأول (АА) هو Fukushima neocognitron .
يتم تقديم هيكلها في Fig.7.
الغرض من (autassociator (АА هو استلام عند الإخراج كصورة دقيقة من الإدخال قدر الإمكان.
هناك نوعان من توليد وتوليف. تنتمي آلة بولتزمان المقيدة إلى النوع الأول ويمثل autoencoder النوع الثاني.
Autoencoder هو شبكة عصبية ذات طبقة واحدة مفتوحة. باستخدام خوارزمية تعلم غير خاضعة للرقابة ونشر مرة أخرى ، يقوم بتعيين قيمة مستهدفة تساوي متجه الإدخال ، أي y = x.
ويرد مثال على autoencoder على Fig.8.
يحاول Autoencoder إنشاء الدالة h (x) = x. وبعبارة أخرى ، تحاول أن تجد تقريبًا لوظيفة تضمن أن التغذية المرتدة للشبكة العصبية تساوي تقريبًا قيم معلمات الدخل. ولكي يكون حل المشكلة غير بديهي ، يجب أن يكون عدد الخلايا العصبية في الطبقة المفتوحة أقل من بُعد بيانات المدخلات (كما في الصورة).
يسمح بضغط البيانات عندما يتم تمرير إشارة الدخل إلى خرج الشبكة. على سبيل المثال ، إذا كان متجه الإدخال عبارة عن مجموعة من مستويات السطوع لصورة بحجم 10 × 10 بكسل (100 سمة) ، فإن عدد الخلايا العصبية للطبقة المخفية هو 50 ، فإن الشبكة تضطر إلى تعلم ضغط الصورة. يعني المتطلب h (x) = x أنه بناءً على مستويات تنشيط خمسين خلية عصبية من الطبقة المخفية ، فإن طبقة الخرج هي استعادة 100 بيكسل من الصورة الأولية. مثل هذا الانضغاط ممكن إذا كانت هناك ترابط مخفي أو ارتباط مميز أو أي بنية على الإطلاق. بهذه الطريقة يذكّر تشغيل autoencoder طريقة تحليل المكون الأساسي (PCA) بمعنى أنه يتم تقليل بيانات الإدخال.
والمثير للدهشة أن التجارب التي أجراها Bengio et al. (2007) ، أظهرت أنه عند التدريب مع أصل الانحدار العشوائي ، فإن شبكات التزويد الذاتي غير الخطية مع عدد الخلايا العصبية المخفية أكبر من عدد المدخلات (وتسمى أيضا "superabundant") كان لها عرض مفيد في ضوء خطأ المطابقة للشبكة التي أخذ هذا العرض من المدخلات.
في وقت لاحق ، عندما ظهرت فكرة التفاوت ، تم استخدام autoencoder المتناثر على نطاق واسع.
إن autoencoder المتناثر هو autoencoder يحتوي على عدد من الخلايا العصبية المخفية أكبر بكثير من البعد المدخلات ولكن لديهم تنشيط متفرق. التنشيط المتقطع هو عندما يكون عدد الخلايا العصبية غير النشطة في الطبقة المخفية أكبر بكثير من عدد الخلايا النشطة. إذا وصفنا الندرة بشكل غير رسمي ، فيمكن اعتبار العصبون نشطًا إذا كانت قيمة وظيفته قريبة من 1. إذا كانت هناك دالة سينيّة قيد الاستخدام ، فعندئذ بالنسبة للخلايا العصبية الخاملة ، يجب أن تكون قيمتها قريبة من الصفر (للوظيفة الزائدية يجب أن تكون القيمة قريبة من -1).
هناك اختلاف من autocoder يسمى denoising autoencoder (فنسنت وآخرون ، 2008). هذا هو نفس autoencoder ولكن تدريبها لديه بعض الخصائص. عند تدريب هذه الشبكة ، يتم إدخال البيانات "التالفة" (يتم استبدال بعض القيم بـ 0). في نفس الوقت ، هناك بيانات "صحيحة" للمقارنة مع بيانات الإخراج. بهذه الطريقة يستطيع autoencoder استعادة البيانات التالفة.
2.2.2. آلة بولتزمان المقيدة ، RBM.
لن نركز على تاريخ آلة بولتزمان المقيدة (RBM). كل ما نحتاج إلى معرفته هو أنها بدأت مع الشبكات العصبية المتكررة مع ردود الفعل التي كان من الصعب جدا تدريبها. بسبب صعوبة التعلم هذه ، ظهرت نماذج متكررة أكثر تقييدًا بحيث يمكن تطبيق خوارزميات التعلم البسيطة. كانت الشبكة العصبية Hopfield واحدة من هذه النماذج. كان جون هوبفيلد الشخص الذي قدم مفهوم طاقة الشبكة بعد مقارنة ديناميات الشبكة العصبية بالديناميكا الحرارية.
وكانت الخطوة التالية على الطريق إلى الإدارة القائمة على النتائج هي آلات بولتزمان العادية. وهي تختلف عن شبكة هوبفيلد في الطبيعة العشوائية وتنقسم عصبوناتها إلى مجموعتين تصف الحالات المرئية والخفية (على غرار نموذج ماركوف المخفي). تختلف ماكينة بولتزمان المقيدة عن الماكينة العادية في غياب الاتصالات بين الخلايا العصبية لطبقة واحدة.
يمثل الشكل 9 هيكل الإدارة القائمة على النتائج.
خصوصية هذا النموذج هو أنه في الحالات الحالية من الخلايا العصبية لمجموعة واحدة ، فإن حالات الخلايا العصبية لمجموعة أخرى ستكون مستقلة عن بعضها البعض. الآن يمكننا الانتقال إلى بعض النظريات حيث يكون لهذه الخاصية الدور الرئيسي.
- 30-04-2018, 11:37 PM #2
التفسير والهدف
يتم تفسير الإدارة المستندة إلى النتائج المماثلة لنموذج ماركوف المخفي. لدينا عدد من الحالات التي يمكننا ملاحظتها (الخلايا العصبية المرئية) وعدد من الحالات المخفية التي لا يمكننا رؤيتها مباشرة (الخلايا العصبية الخفية). يمكننا التوصل إلى استنتاج قائم على الاحتمالات حول الدول الخفية التي تعتمد على الدول التي يمكننا ملاحظتها. بعد أن يتم تدريب هذا النموذج ، سنحصل على فرصة لاستخلاص استنتاجات فيما يتعلق بالدول المرئية التي تدرك أن الأشخاص المختبئين يتبعون نظرية بايز. يسمح ذلك بتوليد البيانات من توزيع الاحتمالات المستخدم لتدريب النموذج.
وبهذه الطريقة يمكننا صياغة هدف تدريب نموذج: يجب تعديل معلمات النموذج بالطريقة بحيث يكون المتجه المستعاد من الحالة الأولية أقرب إلى الأصل. المتجدد المستعاد هو متجه يستقبله استدلال احتمالي من الحالات المخفية ، التي وردت بدورها باستدلال احتمالي من حالات مرئية ، أي من المتجه الأصلي.
خوارزمية التدريب هي Divergence CD-k
هذه الخوارزمية اخترعها البروفيسور هينتون في عام 2002 وهي بسيطة بشكل ملحوظ. الفكرة الرئيسية هي أن قيم التوقع الرياضي يتم استبدالها بقيم محددة. قدم فكرة Gibbs أخذ العينات.
تبدو CD-k:
- يتم تعيين حالة الخلايا العصبية مرئية تساوي نمط الإدخال.
- يتم رسم احتمالات حالات الطبقة المخفية ؛
- كل عصبون من الطبقة المخفية يتم تعيين الحالة "1" مع احتمال مساوٍ لحالتها الحالية ؛
- يتم رسم احتماليات حالات الطبقة المرئية على أساس الطبقة المخفية ؛
- إذا كان التكرار الحالي أقل من k ، فارجع إلى الخطوة 2 ؛
- يتم رسم احتمالات حالات الطبقة المخفية ؛
- في محاضرات هنتون يبدو الأمر كما يلي:
وبعبارة أخرى ، كلما قمنا بعمل أخذ العينات ، كلما كان التدرج أكثر دقة. ويقول الأستاذ إن النتيجة التي تم الحصول عليها من أجل CD-1 ، أي تكرار واحد فقط لأخذ العينات ، هي بالفعل جيدة.
2.3. مكدسة الأوتاسيكوسيرس الشبكات. Stackеd Autoencoder SAE، مكدسة آلة بولتزمان المقيدة (مكدسة الإدارة القائمة على النتائج)
لاستخراج التجريدات عالية المستوى من مجموعة البيانات المدخلة ، يتم الجمع بين autassociators في شبكة.
يمثل الشكل 11 بنية autocoder مكدسة وشبكة عصبية ، والتي تمثل معاً شبكة عصبية عميقة بأوزان تم تهيئتها بواسطة autocoder مكدس
في Fig.12 ، هناك نمط من RBM مكدسة (SRBM) وشبكة عصبية ، والتي تمثل معا شبكة عصبية عميقة مع الأوزان التي وضعتها SRBM.
تؤكد هذه الرسوم التوضيحية لهياكل الشبكة العميقة على حقيقة أن المعلومات يتم استخراجها من أسفل إلى أعلى.
2.4. تدريب الشبكات العميقة (DN). مراحل. خصوصيات
تتألف شبكات التدريب العميق من مرحلتين. في المرحلة الأولى ، تتلقى شبكة (autoassociator (SAE أو SRBM ، اعتمادًا على نوع DN تدريبًا غير خاضع للإشراف على مصفوفة بيانات غير منسَّقة. بعد ذلك ، تبدأ طبقة الخلايا العصبية المخفية من MLP العادي بواسطة أوزان الطبقة المخفية التي يتم تلقيها بعد التدريب. يمثل الشكل 11 والشكل 12 نمطًا لعمليات التعلم والنقل. بعد تدريب أول ЕЕ / RBM ، تصبح الأوزان العصبية للطبقة المخفية مدخلات للطبقة الثانية الخ. وبهذه الطريقة ، يتم استخراج المعلومات عن البنية (خط ، كفاف ، طقطق ، الخ) من البيانات.
المرحلة الثانية هي الوقت المناسب لضبط MLP (التدريب تحت الإشراف) على مجموعة البيانات المنسقة باستخدام طرق معروفة. أثبتت الممارسة أن مثل هذه التهيئة تحدد أوزان الخلايا العصبية للطبقات المخبأة لـ MLP إلى الحد الأدنى العالمي ، وتستغرق عملية الضبط التالية وقتًا قصيرًا للغاية.
علاوة على ذلك ، بالنسبة إلى الشبكات العميقة ذات عدد الطبقات الأكبر من ثلاثة ، اقترح D. Hinton أنه يجب إجراء الضبط الدقيق على مرحلتين. في المرحلة الأولى ، يجب تدريب طبقتين علويتين فقط والثانية على بقية الشبكة.
تجدر الإشارة إلى أن SRBM لديه نتائج أقل استقرارا للتدريب غير خاضعة للرقابة من SAE.
ملحوظة. في كثير من الأحيان يتم الخلط بين هذه الشروط. يتم تحديد SRBM مع شبكة المعتقدات العميقة DBN. وعلى الرغم من حقيقة أن الإدارة المستندة إلى النتائج المستمدة من نظام DBN ، فهي هياكل مختلفة تماماً. A DBN هي شبكة عصبية متعددة الطبقات ، مع أوزان الخلايا العصبية من الطبقات المخفية التي تم تهيئتها بشكل عشوائي بواسطة الأنماط الثنائية.
3. التجارب العملية
سيتم تنفيذ شبكات عميقة في R.
3.1. لغة R
التاريخ. R هي لغة برمجة وبيئة للحسابات الإحصائية والرسوم البيانية ، التي تم تطويرها في عام 1996 من قبل علماء نيوزيلنديين روس إهاكا وروبرت جنتلمان في جامعة أوكلاند.
R هو مشروع GNU وهو برمجيات حرة وفلسفته تتجه إلى المبادئ التالية:
حرية إطلاق برامج لأي غرض (حرية 0) ؛
الحرية في تعلم كيفية عمل البرنامج وتكييفه حسب الاحتياجات الخاصة (حرية 1) ؛
حرية توزيع نسخ لمساعدة الآخرين (الحرية 2) ؛
حرية تحسين البرنامج وترك المجتمع يستفيد من التحسينات.
في المنظور التاريخي ، R هو بديل لتنفيذ S. تم تطوير هذا الأخير من قبل جون تشامبرز وزملائه في شركة Bell Labs في عام 1976. واليوم ، لا يزال R يتم تحسينه من قبل فريق R Development Core بما في ذلك John Chambers.
لتكرار التجارب ، ستحتاج إلى تثبيت R و Rstudio. معلومات حول مكان التنزيل وكيف يمكن العثور عليه على الإنترنت. إذا كان هناك أي أسئلة ، يمكننا مناقشتها في التعليقات على المقالة.
مزايا r:
اليوم R هو المعيار في الحسابات الإحصائية.
يتم تطويره ودعمه من قبل المجتمع العلمي العالمي للجامعات.
مجموعة واسعة من الحزم لجميع المجالات المتقدمة من استخراج البيانات. الوقت بين نشر الفكرة وتنفيذها في حزمة R عادة لا يعد ذلك أسبوعين.
وأخيرا وليس آخرا ، فهو مجاني تماما. قال مطور شهير لنظام التشغيل المجاني مرة: "البرامج مثل الجنس - أفضل عندما تكون حرة".
3.2. تنويعات التنفيذ والقضايا الموجهة
هناك طريقتان ممكنتان للتنفيذ.
أول واحد ينطوي على استخدام برامج فريدة من قبل جون هينتون لماتلاب. لذلك مطلوب "R.matlab". تحتوي هذه الحزمة على أساليب writeMat () و readMat () لقراءة ملفات MAT وكتابتها. وهو يتيح الاتصال (تنفيذ الكود ، إرسال واستلام الأشياء ، إلخ) من Matlab v6 والإصدارات الأعلى محليًا أو على المضيف البعيد في رابط الخادم العميل. التفاصيل يمكن العثور عليها في وصف الحزمة. هذا هو الطريق لأولئك الذين يستخدمون مريحة Matlab. لم أحاول استخدام هذه الطريقة ولكن هناك إمكانية لربط Matlab و MQL بهذه الطريقة.
الطريقة الثانية للتنفيذ هي استخدام حزم R حول هذا الموضوع. سنقوم باستكشافها.
هناك ثلاث حزم أعرف أنها مرتبطة بموضوع هذا المقال:
"deepnet" هي حزمة بسيطة تقوم بتنفيذ نماذج DN SAE و DN SRBM. طول مجموعة البيانات المدخلة في التعلم الخاضع للإشراف وغير المراقب هو نفسه. لا يعطي فرصة لإجراء ضبط دقيق للنظام على مرحلتين. تستخدم لاستكشاف واختبار النماذج في البداية.
"darh" هي حزمة متطورة وواسعة النطاق لنمذجة DN SRBM. هناك نموذج لـ DN SAE لكنني فشلت في إطلاقه. هذه الحزمة للمستخدمين ذوي الخبرة ، لأنها تسمح بإنشاء وتوليف نموذج أي مستوى التعقيد. وهو يعتمد على البرامج الفريدة التي تقدمها Hinton في لغة m MatLab.
"H2O" عبارة عن حزمة شاملة لتدريب الشبكات العميقة (ليس فقط عليها) على مجموعات كبيرة من البيانات (> 1 Гб) مكتوبة في ملفات csv.
في التجارب التالية سنستخدم حزمة "deepnet".
3.3. تحضير المدخلات والبيانات المستهدفة للتجربة
اليوم تعدين البيانات لديه أمر عمل معين:
اختيار بيانات المدخلات (دراسة ، تحليل ، تحضير أولي ، تقييم). كسر البيانات في مجموعات التدريب والتحقق والاختبار (العينات) ؛
تدريب نموذج على مجموعة بيانات التدريب واختيار نموذج / نموذج على نموذج التحقق ؛
تقييم جودة النموذج / النموذج على عينة الاختبار وتحديد بارامترات النماذج المثلى أو أفضل نموذج خارج المجموعة بواسطة تدابير معينة ؛
السماح للنموذج / النماذج ببدء العمل.
المرحلة الأولى هي الأكثر استهلاكا للوقت ومهمة للغاية بالنسبة للنتيجة النهائية. لكي نكون منصفين ، هذه المرحلة ليست رسمية ، وعموما ، إنها تقريبًا عبارة عن شكل فني. يعتمد الكثير على خبرة الباحث. ومع ذلك! من الأهمية بمكان الحصول على التقييمات الكمية لمجموعة البيانات المدخلة لاختيار أهمها. الاختيار التلقائي لأفضل المتغيرات لنموذج معين هو أفضل في هذه الحالة. يوفر R وظائف واسعة لمواجهة التحديات في جميع المراحل.
لا تعتبر بيانات المصدر مهمة فقط ، ولكنها تحتوي أيضًا على الكثير من الجوانب التي يجب وضعها في الاعتبار. إنه يستحق مقالة منفصلة. وبما أن الهدف من هذه المقالة هو معرفة شيء معقد بكلمات بسيطة للغاية ، فسوف نناقش النقاط المهمة ولكن لن نتناول الكثير من التفاصيل.
3.3.1. مصدر معلومات
بالنسبة لتصنيفنا ، نحتاج إلى مجموعة من المتغيرات المستقلة (المدخلات) ومتغير الهدف. وبما أن الميزة الرئيسية للشبكات العميقة هي قدرتها على التعلم السريع على عينات مدخلات كبيرة ، دعنا نخلق مجموعة من بيانات المدخلات تضم 17 متنبئًا (11 مؤشرًا). يحتوي ZigZag على دور للمتغير الهدف. تحميل في ناقلات البيئة R من فتح ، عالية ، منخفضة ، إغلاق يقتبس 4000 أشرطة عميق. وتناقش طريقة القيام بذلك أدناه في وصف كتابة المؤشر. في هذه المرحلة ليست مهمة. سيتم تنفيذ جميع الحسابات الإضافية في R.
بناء مصفوفة من 4 متجهات ومتوسط سعر وحجم هيئة شريط. تحويلها إلى وظيفة:
كود PHP:pr.OHLC <- function (o, h, l, c)
{
#Unite quote vectors into a matrix having previously expanded them
#Indexing of time series of vectors in R starts with 1.
#Direction of indexing is from old to new ones.
price <- cbind(Open = rev(o), High = rev(h), Low = rev(l), Close = rev(c))
Med <- (price[, 2] + price[, 3])/2
CO <- price[, 4] - price[, 1]
#add Med and CO to the matrix
price <- cbind(price, Med, CO)
}
كود PHP:> head(price)
Open High Low Close Med CO
[1,] 1.33848 1.33851 1.33824 1.33844 1.338375 -4e-05
[2,] 1.33843 1.33868 1.33842 1.33851 1.338550 8e-05
[3,] 1.33849 1.33862 1.33846 1.33859 1.338540 1e-04
[4,] 1.33858 1.33861 1.33856 1.33859 1.338585 1e-05
[5,] 1.33862 1.33868 1.33855 1.33855 1.338615 -7e-05
[6,] 1.33853 1.33856 1.33846 1.33855 1.338510 2e-05
قائمة المؤشرات. تم اختيار المؤشرات عشوائياً ، بدون تفضيلات للحصول على أقصى فرق بين أحجام المدخلات.
يتم حساب جميع المؤشرات باستخدام حزمة "TTR" التي تحتوي على العديد من المؤشرات.
3.3.2.1. مؤشر حركة الاتجاه (Welles Wilder - ADX (HLC، n) - 4 Dip، Din، DX، ADX)
احسب وشاهد كيف يبدو في أول 200 شريط:
كود PHP:> library(TTR)
> adx<-ADX(price, n = 16)
> plot.ts(head(adx, 200))
كود PHP:> summary(adx)
DIp DIn DX ADX
Min. :15.90 Min. : 5.468 Min. : 0.00831 Min. : 5.482
1st Qu.:41.21 1st Qu.: 33.599 1st Qu.: 8.05849 1st Qu.:14.046
Median :47.36 Median : 43.216 Median :16.95423 Median :18.099
Mean :47.14 Mean : 46.170 Mean :19.73032 Mean :19.609
3rd Qu.:53.31 3rd Qu.: 55.315 3rd Qu.:27.97471 3rd Qu.:23.961
Max. :80.12 Max. :199.251 Max. :81.08751 Max. :52.413
NA's :16 NA's :16 NA's :16 NA's :31
3.3.2.2.( aroon (HL، n - مخرج واحد (مذبذب)
احسب وشاهد أول 200 شريط من متغير واحد فقط "مذبذب"
كود PHP:> ar<-aroon(price[ , c('High', 'Low')], n = 16)[ ,'oscillator']
> plot(head(ar, 200), t = "l")
> abline(h = 0)
كود PHP:> summary(ar)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-100.00 -56.25 -18.75 -7.67 43.75 100.00 16
كود PHP:> cci<-CCI(price[ ,2:4], n = 16)
> plot.ts(head(cci, 200))
> abline(h = 0)
كود PHP:> summary(cci)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-469.10 -90.95 -18.74 -14.03 66.91 388.20 15
3.3.2.4. (Chaikin Volatility - chaikinVolatility (HLC، n - خرج-1
كود PHP:> chv<-chaikinVolatility(price[ , 2:4], n = 16)
> summary(chv)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-0.67570 -0.29940 0.02085 0.12890 0.41580 5.15700 31
> plot(head(chv, 200), t = "l")
> abline(h = 0)
3.3.2.5. مذبذب زاود مومنتوم - CMO (Med, n) - خرج-1
كود PHP:> cmo<-CMO(price[ ,'Med'], n = 16)
> plot(head(cmo, 200), t = "l")
> abline(h = 0)
كود PHP:> summary(cmo)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-97.670 -32.650 -5.400 -6.075 19.530 93.080 16
كود PHP:> macd<-MACD(price[ ,'Med'], 12, 26, 9)[ ,'macd']
> plot(head(macd, 200), t = "l")
> abline(h = 0)
كود PHP:> summary(macd)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-0.346900 -0.025150 -0.005716 -0.011370 0.013790 0.088880 25
كود PHP:> osma<-macd - MACD(price[ ,'Med'],12, 26, 9)[ ,'signal']
> plot(head(osma, 200), t = "l")
> abline(h = 0)
كود PHP:> summary(osma)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-0.10560 -0.00526 0.00034 0.00007 0.00646 0.05922 33
- 01-05-2018, 01:07 AM #3
3.3.2.8. مؤشر القوة النسبية - RSI(Med,n) - خرج-1
كود PHP:> rsi<-RSI(price[ ,'Med'], n = 16)
> plot(head(rsi, 200), t = "l")
> abline(h = 50)
كود PHP:> summary(rsi)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
5.32 37.33 47.15 46.53 55.71 84.82 16
كود PHP:> stoh<-stoch(price[ ,2:4], 14, 3, 3)
> plot.ts(head(stoh, 200))
كود PHP:> summary(stoh)
fastK fastD slowD
Min. :0.0000 Min. :0.01782 Min. :0.02388
1st Qu.:0.2250 1st Qu.:0.23948 1st Qu.:0.24873
Median :0.4450 Median :0.44205 Median :0.44113
Mean :0.4622 Mean :0.46212 Mean :0.46207
3rd Qu.:0.6842 3rd Qu.:0.67088 3rd Qu.:0.66709
Max. :1.0000 Max. :0.99074 Max. :0.97626
NA's :13 NA's :15 NA's :17
كود PHP:> smi<-SMI(price[ ,2:4],n = 13, nFast = 2, nSlow = 25, nSig = 9)
> plot.ts(head(smi, 200))
كود PHP:> summary(smi)
SMI signal
Min. :-82.185 Min. :-78.470
1st Qu.:-33.392 1st Qu.:-31.307
Median : -9.320 Median : -8.839
Mean : -8.942 Mean : -8.985
3rd Qu.: 15.664 3rd Qu.: 14.069
Max. : 71.878 Max. : 63.865
NA's :25 NA's :33
كود PHP:> vol<-volatility(price[ ,1:4],n = 16,calc = "yang.zhang", N =96)
> plot.ts(head(vol, 200))
كود PHP:> summary(vol)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000599 0.001858 0.002638 0.003127 0.004015 0.012840 16
استخدمها لتشكيل مصفوفة وكتابة المعلمات أعلاه في وظيفة واحدة مع معلمة رسمية واحدة ، والتي ستكون مطلوبة للتحسين.
حساب مصفوفة معلمات الإدخال باستخدام الصيغة:
كود PHP:In<-function(p = 16){
adx<-ADX(price, n = p);
ar<-aroon(price[ ,c('High', 'Low')], n=p)[ ,'oscillator'];
cci<-CCI(price[ ,2:4], n = p);
chv<-chaikinVolatility(price[ ,2:4], n = p);
cmo<-CMO(price[ ,'Med'], n = p);
macd<-MACD(price[ ,'Med'], 12, 26, 9)[ ,'macd'];
osma<-macd - MACD(price[ ,'Med'],12, 26, 9)[ ,'signal'];
rsi<-RSI(price[ ,'Med'], n = p);
stoh<-stoch(price[ ,2:4],14, 3, 3);
smi<-SMI(price[ ,2:4],n = p, nFast = 2, nSlow = 25, nSig = 9);
vol<-volatility(price[ ,1:4],n = p,calc="yang.zhang", N=96);
In<-cbind(adx, ar, cci, chv, cmo, macd, osma, rsi, stoh, smi, vol);
return(In)
}
كود PHP:> X<-In()
> tail(X)
DIp DIn DX ADX ar cci chv
[3995,] 46.49620 36.32411 12.28212 18.17544 25.0 168.0407 0.1835102
[3996,] 52.99009 31.61164 25.26952 18.61882 37.5 227.7030 0.3189822
[3997,] 58.11948 28.16241 34.72000 19.62515 37.5 145.2337 0.3448520
[3998,] 56.00323 30.48687 29.50206 20.24245 37.5 118.5831 0.3068059
[3999,] 55.96197 28.78737 32.06467 20.98134 37.5 116.5376 0.3517668
[4000,] 54.97777 26.85440 34.36713 21.81795 62.5 160.0767 0.6169701
cmo macd osma rsi fastK
[3995,] 29.71342 -0.020870825 0.01666593 52.91932 0.8832685
[3996,] 41.89526 -0.009654368 0.02230591 61.49793 0.8833819
[3997,] 30.98237 -0.002051532 0.02392699 58.94513 0.7259475
[3998,] 33.84813 0.003454534 0.02354645 58.00549 0.7930029
[3999,] 38.84892 0.009590136 0.02374564 60.63806 0.8367347
[4000,] 54.71698 0.019303110 0.02676689 66.64815 0.9354120
fastD slowD SMI signal vol
[3995,] 0.7773581 0.7735064 -35.095406 -47.27712 0.003643196
[3996,] 0.7691688 0.7761507 -26.482951 -43.11828 0.003858942
[3997,] 0.8308660 0.7924643 -19.699762 -38.43458 0.003920541
[3998,] 0.8007775 0.8002707 -13.141932 -33.37605 0.003916109
[3999,] 0.7852284 0.8056239 -6.569699 -28.01478 0.003999789
[4000,] 0.8550499 0.8136852 2.197810 -21.97226 0.004293766
3.3.3. بيانات المخرجات (الهدف)
الآن نحن بصدد تشكيل الإخراج (البيانات المستهدفة). كما ذكرنا من قبل ، سوف نستخدم زجزاج.
سنستخدم ZigZag بعرض القناة 37 نقطة كبيرة. سيتم حساب ZigZag حسب متوسط السعر. يمكن حساب المؤشر وفقاً لأسعار HL ، إلا أن متوسط السعر هو الأفضل لأن المؤشر أكثر استقرارًا في هذه الحالة. بعد استخراج الإشارة (0 - شراء ، 1 -Sell) ، قم بتحويلها إلى مصفوفة إدخال ، والتي تفترض نموذج الشبكة.
اكتب وظيفة:
كود PHP:Out<-function(ch=0.0037){
# ZigZag has values on each bar and not only in the points
zz<-ZigZag(price[ ,'Med'], change = ch, percent = F, retrace = F, lastExtreme = T);
n<-1:length(zz);
# On the last bars substitute the undefined values for the last known ones
for(i in n) { if(is.na(zz[i])) zz[i] = zz[i-1];}
#Define the speed of ZigZag changes and move one bar forward
dz<-c(diff(zz), NA);
#If the speed >0 - signal = 0(Buy), if <0, signal = 1 (Sell) otherwise NA
sig<-ifelse(dz>0, 0, if else(dz<0, 1, NA));
return(sig);
}
حساب الاشارات.
كود PHP:> Y<-Out()
> table(Y)
Y
0 1
1567 2423
عند فصل البيانات إلى التدريب واختبار العينات ، سوف نقوم بتصحيح هذا الوضع.
3.3.4. تنضيف البيانات
قم بمسح مجموعات البيانات الخاصة بنا من البيانات غير المعرفة. المقاصة في هذه الحالة تعني جولة أوسع من المهام. ويشمل ذلك إزالة "المتغيرات صفر تقريبًا" والمتغيرات المرتفعة تمامًا بالإضافة إلى بعض المهام الأخرى التي لن نناقشها هنا.
اكتب وظيفة وامسح البيانات
كود PHP:Clearing<-function(x, y){
dt<-cbind(x,y);
n<-ncol(dt)
dt<-na.omit(dt)
return(dt);
}
> dt<-Clearing(X,Y); nrow(dt)
[1] 3957
3.3.5. تدريب واختبار تشكيل عينة
هناك عدة طرق لكسر البيانات المصدر في عينات التدريب والاختبار. سنستخدم التقسيم العشوائي المنتظم لبيانات المصدر في القطار واختبار واحد بنسبة 8/10. من المهم أن تكون العينات متفاوتة ، مما يعني أن نسبة الحالات الطبقية في القطار وعينات الاختبار يجب أن تتوافق مع نسبة الطبقة في مجموعة بيانات المصدر. سيكون من المفيد أيضًا تصحيح عدم المساواة الطبقي في مجموعة البيانات المصدر. هناك طريقتان للقيام بذلك - إما التسوية بواسطة الطبقة الأكبر أو الصغيرة. نظرًا لأننا بحاجة إلى المزيد من الأمثلة ، فسوف نستقر على المستوى الأعلى "1". في هذه الحالة ، سنستخدم حزمة "الإقحام".
دعونا نكوّن مجموعة متوازنة جديدة حيث يكون عدد مثيلات كل من الفئتين متماثلاً ويساوي الرقم الأكبر.
3.3.6. موازنة الطبقة
يوجد أدناه الدالة التي تحدد عدد الفئات حسب الجانب الأكبر (إذا كان الاختلاف أكبر من 15ظھ) وترجع إلى مصفوفة متوازنة
كود PHP:Balancing<-function(DT){
#Calculate a table with a number of classes
cl<-table(DT[ ,ncol(DT)]);
#If the divergence is less than 15%, return the initial matrix
if(max(cl)/min(cl)<= 1.15) return(DT)
#Otherwise level by the greater side
DT<-if(max(cl)/min(cl)> 1.15){
upSample(x = DT[ ,-ncol(DT)],y = as.factor(DT[ , ncol(DT)]), yname = "Y")
}
#Convert رƒ (factor) into a number
DT$Y<-as.numeric(DT$Y)
#Recode رƒ from 1,2 into 0,1
DT$Y<-ifelse(DT$Y == 1, 0, 1)
#Convert dataframe to matrix
DT<-as.matrix(DT)
return(DT);
}
أوجد نسبة المتجه الأكبر إلى الأصغر وإذا كان أقل من الحد الأول المحدد ، قم بالخروج. إذا كانت النسبة أكبر ، قم بحساب الدالة ، بعد وضع ر… و y على حدة. يجب أن يتم تحويل Y مسبقًا إلى عامل.
هذا هو المتطلب إلى المعلمات الرسمية للدالة upSample (). نظرًا لأننا لا نحتاج إلى متغير الهدف كعامل ، فإننا نعيده إلى رقم رقمي مع القيمتين 0 و 1. يرجى ملاحظة أنه عندما نقوم بتحويل متغير رقمي (0،1) إلى عامل ، فإننا نتلقى متغيرات نصية "0 " و 1". عند التحويل العكسي إلى متغيرات رقمية ، نحصل على 1 و 2 (!). نقوم باستبدالها بـ 0 و 1. يتم تحويل مجموعة البيانات الخاصة بنا من "إطار البيانات" إلى "مصفوفة" الفئة. احسبها:
كود PHP:dt.b<-Balancing(dt)
x<-dt.b[ ,-ncol(dt.b)]
y<-dt.b[ , ncol(dt.b)]
تقسيمه إلى عينات تدريب واختبار
الحصول على مؤشرات من العينات تدريب واختبار من حزمة "rminer" باستخدام وظيفة holdout ().
كود PHP:> library('rminer')
> t<-holdout(y, ratio = 8/10, mode = "random")
3.3.7. التجهيز
يحتوي مصدر بيانات الإدخال لدينا على متغيرات بنطاقات قيمة مختلفة. أساسا ، الشبكات العميقة هي شبكات منتظمة مع طريقة غريبة لتهيئة الأوزان.
يمكن للشبكات العصبية أن تتلقى المتغيرات المدخلة في المدى (-1 ؛ 1) أو (0 ، 1). تطبيع متغيرات المدخلات في نطاق [-1 ، 1].
لهذا الغرض تستخدم الدالة preProcess () من حزمة "الإقحام". يرجى ملاحظة أنه يجب حساب معلمات المعالجة المسبقة على مجموعة بيانات التدريب وحفظها لمزيد من المعالجة المسبقة لمجموعة بيانات الاختبار وبيانات المدخلات الحديثة.
كود PHP:> spSign<-preProcess(x[t$tr, ], method = "spatialSign")
> x.tr<-predict(spSign, x[t$tr, ])
> x.ts<-predict(spSign, x[t$ts, ])
3.4. نماذج البناء والتدريب والاختبار
سنقوم ببناء وتدريب نموذج DN SAE. صيغة نموذج ووصف المتغيرات:
كود PHP:sae.dnn.train(x, y, hidden = c(10), activationfun = "sigm", learningrate = 0.8, momentum = 0.5, learningrate_scale = 1, output = "sigm", sae_output = "linear",
numepochs = 3, batchsize = 100, hidden_dropout = 0, visible_dropout = 0)
المعلمات الرسمية:
ر… عبارة عن مصفوفة لبيانات الإدخال ؛
y هو متجه أو مصفوفة للمتغيرات المستهدفة ؛
hidden هو ناقل مع عدد من الخلايا العصبية في كل طبقة مخفية. افتراضيا رپ (10) ؛
activationfun هي وظيفة من تنشيط الخلايا العصبية الخفية. يمكن أن يكون "sigm" ، "linear" ، "tanh". افتراضيا "sigm" ؛
learningrate هو مستوى التدريب لنسب التدرج. افتراضيا = 0.8؛
momentum هو زخم للنزول التدرج. افتراضيا = 0.5 ؛
learningrate_scale يمكن مضاعفة مستوى التدريب التعلقي_المترقب بهذه القيمة بعد كل عملية تكرار. افتراضيا = 1.0؛
numepochs هو عدد من التكرارات للتدريب. افتراضيا = 3؛
batchsize هو حجم كمية صغيرة من البيانات التي يتم تدريبها. افتراضيا = 100؛
output هو وظيفة التنشيط للخلايا العصبية الإخراج يمكن أن يكون "sigm" ، "خطي" ، "softmax". افتراضيا "sigm" ؛
sae_output هو وظيفة التنشيط للخلايا العصبية الخرجية من SAE ، يمكن أن يكون "sigm" ، "linear" ، "softmax". افتراضيا "خطي" ؛
hidden_dropout هو جزء يمكن حذفه للطبقات المخفية. افتراضيا = 0؛
visual_dropout يعد visual_dropout جزءًا قابلاً للطبقة من طبقة (الإدخال) المرئية. افتراضيا = 0.
سنقوم بإنشاء نموذج بالأبعاد التالية (17 ، 100 ، 100 ، 100 ، 1) ، وتدريبه ، وملاحظة وقت التعلم ومراقبة التوقعات.
كود PHP:> system.time(SAE<-sae.dnn.train(x= x.tr, y= y[t$tr], hidden=c(100,100,100), activationfun = "tanh", learningrate = 0.6, momentum = 0.5, learningrate_scale = 1.0, output = "sigm", sae_output = "linear", numepochs = 10, batchsize = 100, hidden_dropout = 0, visible_dropout = 0))
begin to train sae ......
training layer 1 autoencoder ...
training layer 2 autoencoder ...
training layer 3 autoencoder ...
sae has been trained.
begin to train deep nn ......
deep nn has been trained.
user system elapsed
12.92 0.00 13.09
كما نرى ، يحدث على مرحلتين. في البداية يحصل autocoder المدربين طبقة طبقة ثم الشبكة العصبية.
تم تعيين عدد صغير من أوقات التدريب وعدد هائل من الخلايا العصبية الخفية في ثلاث طبقات عن قصد. استغرقت العملية بأكملها 13 ثانية!
دعونا تقييم التوقعات على مجموعة اختبار من تنبئ.
كود PHP:> pr.sae<-nn.predict(SAE, x.ts);
> summary(pr.sae)
V1
Min. :0.2649
1st Qu.:0.2649
Median :0.5881
Mean :0.5116
3rd Qu.:0.7410
Max. :0.7410
كود PHP:> pr<-ifelse(pr.sae>mean(pr.sae), 1, 0)
> confusionMatrix(y[t$ts], pr)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 316 128
1 134 378
Accuracy : 0.7259
95% CI : (0.6965, 0.754)
No Information Rate : 0.5293
P-Value [Acc > NIR] : <2e-16
Kappa : 0.4496
Mcnemar's Test P-Value : 0.7574
Sensitivity : 0.7022
Specificity : 0.7470
Pos Pred Value : 0.7117
Neg Pred Value : 0.7383
Prevalence : 0.4707
Detection Rate : 0.3305
Detection Prevalence : 0.4644
Balanced Accuracy : 0.7246
'Positive' Class : 0
تطبيع آخر 500 شريط إدخال البيانات ، وتلقي توقعات من الشبكة العصبية المدربة وتحويلها إلى إشارات -1 = (بيع) و 1 = (شراء)
كود PHP:> new.x<-predict(spSign,tail(dt[ ,-ncol(dt)], 500))
> pr.sae1<-nn.predict(SAE, new.x)
> pr.sig<-ifelse(pr.sae1>mean(pr.sae1), -1, 1)
> table(pr.sig)
pr.sig
-1 1
235 265
> new.y<-ifelse(tail(dt[ , ncol(dt)], 500) == 0, 1, -1)
> table(new.y)
new.y
-1 1
201 299
> cm1<-confusionMatrix(new.y, pr.sig)
> cm1
Confusion Matrix and Statistics
Reference
Prediction -1 1
-1 160 41
1 75 224
Accuracy : 0.768
95% CI : (0.7285, 0.8043)
No Information Rate : 0.53
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.5305
Mcnemar's Test P-Value : 0.002184
Sensitivity : 0.6809
Specificity : 0.8453
Pos Pred Value : 0.7960
Neg Pred Value : 0.7492
Prevalence : 0.4700
Detection Rate : 0.3200
Detection Prevalence : 0.4020
Balanced Accuracy : 0.7631
'Positive' Class : -1
إن معامل الدقة ليس سيئًا ، على الرغم من أننا مهتمون أكثر بالربح ، وليس بالمعامل.
اختبار الربح لآخر 500 شريط باستخدام إشاراتنا المتوقعة والحصول على منحنى الرصيد:
كود PHP:> bal<-cumsum(tail(price[ , 'CO'], 500) * pr.sig)
> plot(bal, t = "l")
> abline(h = 0)
تم حساب الرصيد دون الأخذ في الاعتبار فروق الأسعار والانعكاسات والحقائق الأخرى للسوق المباشرة.
الآن قارن مع التوازن الذي كان يمكن الحصول عليه من الإشارات المثالية من ZZ. الخط الأحمر هو التوازن بواسطة إشارات الشبكة العصبية:
كود PHP:> bal.zz<-cumsum(tail(price[ , 'CO'], 500) * new.y)
> plot(bal.zz, t = "l")
> lines(bal, col = 2)
هناك احتمالات للتحسين.
اكتب وظيفتين لتسهيل وظيفتين مساعدتين Estimation() Testing(). الأول سيولد معاملات الدقة / خطأ والرصيد الثاني التوازن بال / بالز.
وهو يتيح الحصول على نتيجة مباشرة لتغيير بعض معلمات الشبكة ومعرفة العوامل التي تؤثر على جودة الشبكة.
بعد كتابة وظيفة اللياقة البدنية ، يمكن العثور على معلمات الشبكة المثلى باستخدام خوارزمية (جينية) تطورية دون أي اضطرابات في عملية التداول. لن نخصص وقتًا لها في هذه المقالة وسننظر فيها بالتفصيل في وقت آخر.
يوجد أدناه الدالة Estimation () حساب المعاملات Err / Accuracy:
كود PHP:Estimation<-function(X, Y, r = 8/10, m = "random", norm = "spatialSign",
h = c(10), act = "tanh", LR = 0.8, Mom = 0.5,
out = "sigm", sae = "linear", Ep = 10, Bs = 50,
CM=F){
#Indices of the training and test data set
t<-holdout(Y, ratio = r, mode = m)
#Parameters of preprocessing
prepr<-preProcess(X[t$tr, ], method = norm)
#Divide into train and test data sets with preprocessing
x.tr<-predict(prepr, X[t$tr, ])
x.ts<-predict(prepr, X[t$ts, ])
y.tr<- Y[t$tr]; y.ts<- Y[t$ts]
#Train the model
SAE<-sae.dnn.train(x = x.tr , y = y.tr , hidden = h,
activationfun = act,
learningrate = LR, momentum = Mom,
output = out, sae_output = sae,
numepochs = Ep, batchsize = Bs)
#Obtain a forecast on the test data set
pr.sae<-nn.predict(SAE, x.ts)
#Recode it into signals 1,0
pr<-ifelse(pr.sae>mean(pr.sae), 1, 0)
#Calculate the Accuracy coefficient or classification error
if(CM) err<-unname(confusionMatrix(y.ts, pr)$overall[1])
if(!CM) err<-nn.test(SAE, x.ts, y.ts, mean(pr.sae))
return(err)
}
X- مصفوفة من تنبؤات المدخلات الخام
Y - متجه للمتغير المستهدف
r - نسبة القطر / الاختبار
m - طريقة تشكيل العينة (عشوائية أو لاحقة)
norm - وضع معلمات الإدخال تطبيع ([-1، 1] = "spatialSign"؛ [0، 1] = "نطاق")
h - متجه مع عدد من الخلايا العصبية في الطبقات المخفية
act- وظيفة تفعيل الفعل للخلايا العصبية المخفية
LR - مستوى التدريب
ذœذ¾ذ¼ - زخم
out - وظيفة التنشيط للخارج
sae - تفعيل وظيفة autoencoder
Ep - عدد مرات التدريب
Bs - حجم العينة الصغيرة
ذ،M– متغير منطقي ، إذا كانت دقة الطباعة TRUE. عدا ذلك
وكمثال على ذلك ، سنقوم بحساب خطأ التصنيف على مجموعة البيانات غير المتوازنة dt بواسطة الشبكة مع ثلاث طبقات مخفية تحتوي كل منها على 30 خلية عصبية:
كود PHP:> Err<-Estimation(X = dt[ ,-ncol(dt)], Y = dt[ ,ncol(dt)], h=c(30, 30, 30), LR= 0.7)
begin to train sae ......
training layer 1 autoencoder ...
training layer 2 autoencoder ...
training layer 3 autoencoder ...
sae has been trained.
begin to train deep nn ......
deep nn has been trained.
> Err
[1] 0.1376263
كود PHP:Testing<-function(dt1, dt2, r=8/10, m = "random", norm = "spatialSign",
h = c(10), act = "tanh", LR = 0.8, Mom = 0.5,
out = "sigm", sae = "linear", Ep = 10, Bs=50,
pr = T, bar = 500){
X<-dt1[ ,-ncol(dt1)]
Y<-dt1[ ,ncol(dt1)]
t<-holdout(Y, ratio = r, mode = m)
prepr<-preProcess(X[t$tr, ], method = norm)
x.tr<-predict(prepr, X[t$tr, ])
y.tr<- Y[t$tr];
SAE<-sae.dnn.train(x = x.tr , y = y.tr , hidden = h,
activationfun = act,
learningrate = LR, momentum = Mom,
output = out, sae_output = sae,
numepochs = Ep, batchsize = Bs)
X<-dt2[ ,-ncol(dt2)]
Y<-dt2[ ,ncol(dt2)]
x.ts<-predict(prepr, tail(X, bar))
y.ts<-tail(Y, bar)
pr.sae<-nn.predict(SAE, x.ts)
sig<-ifelse(pr.sae>mean(pr.sae), -1, 1)
sig.zz<-ifelse(y.ts == 0, 1,-1 )
bal<-cumsum(tail(price[ ,'CO'], bar) * sig)
bal.zz<-cumsum(tail(price[ ,'CO'], bar) * sig.zz)
if(pr) return(bal)
if(!pr) return(bal.zz)
}
dt1 - مصفوفة المدخلات ومتغير الهدف المستخدم لتدريب الشبكة ؛
dt2 - مصفوفة المدخلات والمتغيرات المستهدفة المستخدمة لاختبار الشبكة ؛
pr - المتغير المنطقي ، إذا كانت TRUE تطبع التوازن بواسطة إشارات التنبؤ ، وبخلاف ZigZag ؛
bar - عدد الأشرطة الأخيرة المستخدمة في حساب الرصيد.
احسب التوازن على آخر 500 شريط من مجموعة البيانات dt عند التدريب على مجموعة البيانات المتوازنة dt.b بواسطة الشبكة العصبية مع نفس المعلمات المذكورة أعلاه:
كود PHP:> Bal<-Testing(dt.b, dt, h=c(30, 30, 30), LR= 0.7)
begin to train sae ......
training layer 1 autoencoder ...
training layer 2 autoencoder ...
training layer 3 autoencoder ...
sae has been trained.
begin to train deep nn ......
deep nn has been trained.
> plot(Bal, t = "l")
> abline(h = 0)
إذا قارنا النتيجة مع الرصيد الذي تم الحصول عليه سابقا ، يمكننا أن نرى تحسنًا كبيرًا. هذه ليست أكثر نقطة مثيرة للاهتمام هنا على الرغم من.
إذا ألقينا نظرة على مؤامرة السعر على آخر 500 شريط ، فيمكننا أن نرى ما هي الأجزاء المقبولة من شبكتنا (150-350 بار).
كود PHP:> plot(tail(price[ ,'Close'], 500), t = "l")
> abline(v = c(150,350), col=2)
ملاحظة: عند فك ترميز مخرجات التنبؤ ، استخدمنا نسخة مبسطة أكبر / أقل من المتوسط ، على الرغم من أنه يمكن استخدام إصدارات أخرى.
إذا كانت القيم أكبر من 0.6 أو أقل من 0.4 ، يتم قطع الجزء غير المستقر من 0.4-0.6. يمكن الحصول على حدود الطبقة أكثر دقة في المعايرة. هذا سوف يتم مناقشته لاحقا.
سوف تتغير الدالة Testing () الخاصة بنا قليلاً إذا تم إدخال معلمة إضافية. سيسمح لنا ذلك باختيار طريقة لفك شفرة ("يعني" أو "60/40") والتحقق من القيم المتوقعة لأثر ذلك على التوازن.
كود PHP:Testing.1<-function(dt1, dt2, r = 8/10, m = "random", norm = "spatialSign",
h = c(10), act = "tanh", LR = 0.8, Mom = 0.5,
out = "sigm", sae = "linear", Ep = 10, Bs = 50,
pr = T, bar = 500, dec=1){
X<-dt1[ ,-ncol(dt1)]
Y<-dt1[ ,ncol(dt1)]
t<-holdout(Y, ratio = r, mode = m)
prepr<-preProcess(X[t$tr, ], method = norm)
x.tr<-predict(prepr, X[t$tr, ])
y.tr<- Y[t$tr];
SAE<-sae.dnn.train(x = x.tr , y = y.tr , hidden = h,
activationfun = act,
learningrate = LR, momentum = Mom,
output = out, sae_output = sae,
numepochs = Ep, batchsize = Bs)
X<-dt2[ ,-ncol(dt2)]
Y<-dt2[ ,ncol(dt2)]
x.ts<-predict(prepr, tail(X, bar))
y.ts<-tail(Y, bar)
pr.sae<-nn.predict(SAE, x.ts)
#Variant +/- mean
if(dec == 1) sig<-ifelse(pr.sae>mean(pr.sae), -1, 1)
#Variant 60/40
if(dec == 2) sig<-ifelse(pr.sae>0.6, -1, ifelse(pr.sae<0.4, 1, 0))
sig.zz<-ifelse(y.ts == 0, 1,-1 )
bal<-cumsum(tail(price[ ,'CO'], bar) * sig)
bal.zz<-cumsum(tail(price[ ,'CO'], bar) * sig.zz)
if(pr) return(bal)
if(!pr) return(bal.zz)
}
حساب وتقييم التوازن مع الطرق الأولى والثانية لفك.
من أجل تكرار النتائج ، قم بتعيين مولد رقم شبه عشوائي في نفس الموضع.
كود PHP:> set.seed<-1245
> Bal1<-Testing.1(dt.b, dt, h = c(30, 30, 30), LR = 0.7, dec = 1)
begin to train sae ......
training layer 1 autoencoder ...
training layer 2 autoencoder ...
training layer 3 autoencoder ...
sae has been trained.
begin to train deep nn ......
deep nn has been trained.
> set.seed<-1245
> Bal2<-Testing.1(dt.b, dt, h = c(30, 30, 30), LR = 0.7, dec = 2)
begin to train sae ......
training layer 1 autoencoder ...
training layer 2 autoencoder ...
training layer 3 autoencoder ...
sae has been trained.
begin to train deep nn ......
deep nn has been trained.
> plot(Bal2, t = "l")
> lines(Bal1, col = 2)
من الواضح أن التوازن في الطريقة الثانية 60/40 يبدو أفضل. هناك مساحة للتحسين في هذا الجانب أيضا.
هنا هو آخر شيء للتحقق. نظريا ، مجموعة من الشبكات العصبية المتعددة تعطي نتائج أفضل وأكثر استقرارا. سنقوم باختبار مجموعة تتكون من عدة شبكات ، يتم تدريبهم على نفس العينات على الرغم من أنه يمكن تدريبهم على عينات مستقلة. نتيجة لتوقعات الفرقة هو متوسط ​​بسيط لتوقعات جميع الشبكات. هناك طرق أخرى أكثر تعقيدًا في المتوسط.
سنقوم بتحسين وظيفتنا Testing () بإضافة معلمة أخرى - ans = 1 تحدد عدد الشبكات في المجموعة.
3.4.1. الحسابات المتوازية
بما أن العمليات الحسابية من قبل العديد من النماذج المستقلة يمكن موازيتها بسهولة ، فإننا سنستخدم الفرصة التي توفرها لغة R وإنشاء مجموعة تتكون من عدة نوى للمعالج أو أجهزة كمبيوتر لشبكات محلية بغض النظر عن أنظمة التشغيل التي تمتلكها هذه الأجهزة.
لذلك نحن بحاجة إلى "foreach" وحزم "doParallel موازية". فيما يلي وظيفة بسيطة للغاية ستطلق العنقود لجميع مراكز المعالج.
كود PHP:library(doParallel)
library(foreach)
puskCluster<-function(){
cores<-detectCores()
cl<-makePSOCKcluster(cores)
registerDoParallel(cl)
clusterSetRNGStream(cl)
return(cl)
}
بعد إطلاق المجموعة وجميع الحسابات المطلوبة ، يجب أن نتذكر إيقافها:
كود PHP:cl<-puskCluster()
stopCluster(cl)
كود PHP:SAE<-foreach(times(ans), .packages = "deepnet") %dopar%
sae.dnn.train(x = x.tr , y = y.tr , hidden = h,
activationfun = act,
learningrate = LR, momentum = Mom,
output = out, sae_output = sae,
numepochs = Ep, batchsize = Bs)
حيث الأوقات (ans) عبارة عن عدد من الشبكات التي نريد الحصول عليها و. حزم تشير إلى الحزمة لأخذ الدالة المحسوبة.
والنتيجة لها شكل من أشكال القائمة وتحتوي على عدد الشبكات المدربة التي نحتاجها.
ثم نطلب التنبؤ من كل شبكة ونحسب المتوسط.
كود PHP:pr.sae<-(foreach(i = 1:ans, .combine = "+") %do% nn.predict(SAE[[i]], x.ts))/ans
حساب التوازن الذي تم الحصول عليه من المجموعات المكونة من 3 و 4 شبكات عصبية مع نفس المعلمات الموجودة أعلاه واستخدام طريقة فك التشفير 60/40. مقارنة مع النتائج على شبكة عصبية واحدة. لتقييم فعالية الحسابات الموازية ، زيادة عدد الحقب إلى 300 والوقت عملية الحصول على التنبؤ.
1. واحد الشبكة العصبية:
كود PHP:> system.time(Bal21<-Testing.1(dt.b, dt, h = c(30, 30, 30), LR = 0.7, dec = 2, Ep=300))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.000057
####loss on step 20000 is : 0.000043
training layer 2 autoencoder ...
####loss on step 10000 is : 0.000081
####loss on step 20000 is : 0.000086
training layer 3 autoencoder ...
####loss on step 10000 is : 0.000072
####loss on step 20000 is : 0.000066
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.069451
####loss on step 20000 is : 0.079629
deep nn has been trained.
user system elapsed
115.78 0.00 116.96
> plot(Bal21, t = "l")
> abline(h = 0)
كود PHP:> system.time(Bal41<-Testing.2(dt.b, dt, h = c(30, 30, 30), LR = 0.7, Ep=300, dec = 2, ans=3))
user system elapsed
0.22 0.06 233.64
> lines(Bal41, col=4)
كود PHP:> system.time(Bal44<-Testing.2(dt.b, dt, h = c(30, 30, 30), LR = 0.7, Ep=300, dec = 2, ans=4))
user system elapsed
0.13 0.03 247.86
> lines(Bal44, col=2)
أقول ذلك ، لا توجد مزايا كبيرة في الميزان. في الرسم البياني أدناه ، تشير الخريطة الزرقاء إلى 3 شبكات ، وهي الشبكة الحمراء - 4 شبكات والشبكة السوداء - شبكة واحدة.
بشكل عام ، تعتمد النتيجة على العديد من المعلمات ، بدءا من بيانات المدخلات والمخرجات ، وطريقة تطبيعها ، وعدد الطبقات المخفية وعدد الخلايا العصبية في تلك الطبقات ، ومستوى التدريب ، وعدد مرات التدريب وغيرها الكثير.
آخر ثلاثة أمثلة. احسب التوازن على آخر 1000 شريط بثلاث شبكات عصبية بأعداد مختلفة من الخلايا العصبية المخفية في ثلاث طبقات مخفية.
كود PHP:> system.time(Bal0<-Testing.1(dt.b, dt, h = c(30, 30, 30), LR = 0.7, dec = 2, Ep=300, bar=1000))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.000054
####loss on step 20000 is : 0.000044
training layer 2 autoencoder ...
####loss on step 10000 is : 0.000078
####loss on step 20000 is : 0.000079
training layer 3 autoencoder ...
####loss on step 10000 is : 0.000090
####loss on step 20000 is : 0.000072
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.072633
####loss on step 20000 is : 0.057917
deep nn has been trained.
user system elapsed
116.09 0.02 116.26
> max(Bal0)
[1] 0.04725
> plot(Bal0, t="l")
> tail(Bal0,1)
[1] 0.03514
كود PHP:> system.time(Bal0<-Testing.1(dt.b, dt, h = c(13, 8, 5), LR = 0.7, dec = 2, Ep=300, bar=1000))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.005217
####loss on step 20000 is : 0.004846
training layer 2 autoencoder ...
####loss on step 10000 is : 0.051324
####loss on step 20000 is : 0.046230
training layer 3 autoencoder ...
####loss on step 10000 is : 0.023292
####loss on step 20000 is : 0.026113
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.057788
####loss on step 20000 is : 0.056932
deep nn has been trained.
user system elapsed
64.04 0.01 64.24
Warning message:
In sae$encoder[[i - 1]]$W[[1]] %*% t(train_x) + sae$encoder[[i - :
longer object length is not a multiple of shorter object length
> lines(Bal0, col="blue")
الشكل الثالث:
كود PHP:> system.time(Bal0<-Testing.1(dt.b, dt, h = c(50, 50, 50), LR = 0.7, dec = 2, Ep=300, bar=1000))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.000018
####loss on step 20000 is : 0.000013
training layer 2 autoencoder ...
####loss on step 10000 is : 0.000062
####loss on step 20000 is : 0.000048
training layer 3 autoencoder ...
####loss on step 10000 is : 0.000053
####loss on step 20000 is : 0.000055
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.096490
####loss on step 20000 is : 0.084860
deep nn has been trained.
user system elapsed
186.18 0.00 186.39
> lines(Bal0, col="red")
> max(Bal0)
[1] 0.0543
- 01-05-2018, 01:38 AM #4
وأظهرت النتائج أن البديل الثالث هو الأفضل من بين الثلاثة مع أقصى ربح قدره 543 نقطة. لقد غيرنا فقط عدد الخلايا العصبية الخفية وأدى ذلك إلى تحسن كبير. يجب أن يتم البحث عن المعلمات المثلى من خلال الخوارزميات التطورية. هذا متروك للقارئ لاستكشاف.
يجب الانتباه إلى أن خوارزمية المؤلف لم يتم تنفيذها بالكامل في هذه الحزمة.
4. التنفيذ (المؤشر والمستشار الخبير)
الآن سنقوم بكتابة برنامج للمؤشر و Expert Advisor باستخدام شبكة عميقة لتلقي إشارات التداول.
هناك طريقتان لهذا التنفيذ:
الاول. يتم تنفيذ تدريب الشبكة العصبية في Rstudio يدويا. بعد الحصول على نتائج مقبولة ، احفظ الشبكة في الكتالوج المناسب. ثم قم بتشغيل EA ومؤشر على الرسم البياني. سوف EA تحميل الشبكة المدربة. يعد المؤشر ناقل بيانات إدخال جديدة على كل شريط جديد ويمررها إلى EA. تقدم EA بيانات الشبكة ، وتتلقى إشارة ثم تعمل على ذلك. تستمر EA مع أنشطتها المعتادة مثل أوامر الفتح والإغلاق ، وما إلى ذلك. الهدف من هذا المؤشر هو إعداد البيانات الجديدة للدخول إلى EA ونقلها إلى كل شريط جديد ، والأهم من ذلك ، توقع الإشارات الحالية بواسطة الشبكة على الرسم البياني. تُظهر الممارسة أن التحكم المرئي هو الطريقة الأكثر فعالية لتقييم الشبكة العصبية.
الطريق الثاني. إطلاق EA والمؤشر على الرسم البياني. في أول إطلاق ، يمر المؤشر إلى EA مجموعة كبيرة من البيانات المدخلة والمخرجات. EA تطلق التدريب والاختبار واختيار أفضل الشبكات العصبية. بعد أن يستمر هذا العمل كما في الطريقة الأولى.
سنقوم بكتابة مؤشر الارتباط -AA بعد الخوارزمية الأولى. EA مع الحد الأدنى من الأقواس والرتوش.
لماذا هو صعب جدا؟ تسمح طريقة التنفيذ هذه بتوصيل العديد من المؤشرات الموضوعة على رموز / أطر زمنية مختلفة إلى EA واحد والعمل معها بالتالي. لذلك ، فإن EA يجب أن تمر بعملية تحديث بسيطة. سوف نتحدث عنها لاحقا.
أدناه هو هيكل التفاعل بين المؤشر و EA:
4.1. التدريب وحفظ النموذج
باستخدام المؤشر الموضوعة على الرسم البياني لمصلحتنا ، احصل على بيانات المصدر الضرورية. لذلك ، ضع المؤشر على المخطط ، بعد تعيين متغير إدخال send = false ، بمعنى أنه ليس من المفترض أن يتم إرسال التمثيل المرئي إلى الخادم. عند الإطلاق الأول على هذا الرمز أو الإطار الزمني ، فإن المؤشر هو إنشاء الدلائل / Symbol / TF / Test_Data / التالية في ملف البيانات الخاص بالطرف (/ MQL4 / Files).
يعطي مثل هذا التنظيم من الدلائل فرصة عدم وضع نتائج التجربة معًا في التدريب الأولي للنماذج وعدم الكتابة فوق البيانات القديمة بأخرى جديدة. سيتم تخزين نتائج وسيط في الدليل / Symbol / TF / Test_Data / وسيتم وضع النموذج الذي ستستخدمه EA للعمل في / Symbol / TF / (يجب وضعه يدويًا). ستكون النتيجة نفسها عند الإطلاق الأول على رمز جديد أو الإطار الزمني لـ EA.
لذا ، بالنسبة ل EURUSD ، М30 ، هناك 4000 شريط في 14.10.2014. نحن بحاجة إلى dt [] dataframe.
فئات الرصيد:
كود PHP:> dt.b<-Balancing(dt)
> table(dt.b[ ,ncol(dt.b)])
0 1
2288 2288
كود PHP:> system.time(bal<-Testing.1(dt.b, dt, h = c(50, 50, 50), LR = 0.7, dec = 2, Ep=500, bar=500))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.000017
####loss on step 20000 is : 0.000015
####loss on step 30000 is : 0.000015
training layer 2 autoencoder ...
####loss on step 10000 is : 0.000044
####loss on step 20000 is : 0.000041
####loss on step 30000 is : 0.000039
training layer 3 autoencoder ...
####loss on step 10000 is : 0.000042
####loss on step 20000 is : 0.000042
####loss on step 30000 is : 0.000036
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.089417
####loss on step 20000 is : 0.043276
####loss on step 30000 is : 0.069399
deep nn has been trained.
user system elapsed
267.59 0.08 269.37
> plot(bal, t="l")
كود PHP:> SAE1<-SAE
> system.time(bal<-Testing.1(dt.b, dt, h = c(50, 50, 50), LR = 0.7, dec = 2, Ep=300, bar=500))
begin to train sae ......
training layer 1 autoencoder ...
####loss on step 10000 is : 0.000020
####loss on step 20000 is : 0.000016
training layer 2 autoencoder ...
####loss on step 10000 is : 0.000050
####loss on step 20000 is : 0.000050
training layer 3 autoencoder ...
####loss on step 10000 is : 0.000051
####loss on step 20000 is : 0.000043
sae has been trained.
begin to train deep nn ......
####loss on step 10000 is : 0.083888
####loss on step 20000 is : 0.083941
deep nn has been trained.
user system elapsed
155.32 0.02 156.25
> lines(bal, col=2)
وكما نرى ، فإن الشبكة العصبية التي تم تدريبها في 300 حقب ، أظهرت نتيجة أفضل من الشبكة التي تم تدريبها في 500 فترة.
وقت التدريب الأخير مناسب لإعادة التدريب السريع خلال جلسة التداول في هذا الإطار الزمني.
لمزيد من العمل على مخطط حقيقي ، نحتاج إلى شيئين: نموذج مدرّب "SAE" ومعلمات تطبيع "prepr" لبيانات الإدخال. حفظها في الدليل ذات الصلة ، في حالتي هذا هو "D: / Alpari المحدودة MT4 / MQL4 / الملفات / EURUSD / M30 / Test_2014-10-14". يتم تعريف هذا ويعمل كعمل عامل ، إذا فتحت في Rstudio منطقة العمل "i_SAE_EURUSD_30.Rdata" المحفوظة بواسطة المؤشر.
كود PHP:save(SAE, prepr, file="SAE.model")
بعد تحميل الملف "SAE.model" ، يقوم EA بتحميل هذه الكائنات إلى منطقة العمل لاستخدامها في العمل. عند هذه النقطة يتم الانتهاء من الجزء اليدوي من العمل ، يمكنك وضع مؤشر EA على الرسم البياني واختباره في الوقت الحقيقي.
لتقييم فعالية عمل EA ، هناك حاجة لمعايير كمية. لا يعتبر معامل الدقة مناسبًا تمامًا لهذا الغرض.
متوسط النسبة المتوقعة للرصيد المتلقاة بواسطة ZigZag ونسبة التوازن في الشريط الأخير إلى عدد الأشرطة. في حالتنا هذه هو التوازن بواسطة ZigZag:
كود PHP:sig.zz<-ifelse(tail(dt[ , ncol(dt)], 500) == 0, 1, -1)
bal.zz<-cumsum(tail(price[ , 'CO'], 500) * sig.zz)
Kzz<-mean(bal.zz / bal)
> Kzz
[1] 0.9173312
إذا رأينا ما يبدو عليه مع مرور الوقت ، يمكننا أن نرى أنه بالنسبة للأشهر 50-100 الأولى ، هذا مؤشر غير مستقر ، على الرغم من أنه في وقت لاحق يصبح ثابتًا تقريبًا. الإحصاءات أدناه:
كود PHP:> plot(bal/bal.zz, t="l")
> summary(bal/bal.zz)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-15.2500 0.7341 0.7844 0.9173 0.8833 55.0000
والثاني أكثر دقة لأنه يوضح عدد نقاط الربح الموجودة لشريط واحد على امتداد شريط N طويلًا.
على سبيل المثال ، للتوازن حسب توقعات الشبكة العصبية على امتداد 500 بار:
كود PHP:> Kb<-tail(bal,1)/length(bal)*10^Dig
> Kb
[1] 11.508
كود PHP:> Kbz<-tail(bal.zz,1)/length(bal)*10^Dig
> Kbz
[1] 13.784
سيعرض EA المعلمات التالية على الرسم البياني: العملية التي تم تنفيذها OP ، الدقة - K ، هي Kb محددة في وقت سابق ، Kmax - نفس المعلمة كـ Kb ولكنها محددة على الميزان المرتفع وتعطي فكرة عن مدى اختلاف هذا المعامل على الشريط الأخير من الحد الأقصى.
4.2. تركيب وإطلاق النظام
في الأرشيف المرفق SAE.zip يمكنك العثور على:
-1- مؤشر i_SAE.mq4 ، ضعه على المجلد ~ / MQL4 / Indicators /
-2- و e_SAE.mq4 EA ، وضعت على المجلد ~ / MQL4 / الخبراء /
-3- مكتبة mt4Rb7.dll ، وضعت على ~ / MQL4 / المكتبات / المجلد.
-4- الملف رأس mt4Rb7.mqh ، وضعت على المجلد ~ / MQL4 / تضمين /. تم تطوير المكتبة وملف رأس الصفحة وتم توفيرها من قبل Bernd Kreuss. يتضمن الاسم فهرس التغيير الأخير (b7).
عندما يكون هناك الكثير من الإصدارات التي تحمل نفس الأسماء ، فهناك بعض الإختلالات التي تستغرق الكثير من الوقت لتصحيحها.
-5- البرامج النصية على R: i_SAE.r (نص المؤشر الرئيسي) ، i_SAE_fun.r (وظائف النص البرمجي للمؤشر) ، e_SAE.r (EA script) ، e_SAE_init.r (نص التهيئة EA) ، SAE_SetDir.r (نص التوثيق والتحقق من الدلائل الضرورية). ونظرًا لأن النصوص البرمجية لا تعتمد على الرمز ، ولا من خلال timefreame ، يمكن أن تكون موجودة في دليل منفصل. في حالتي هذه هي "C: Rdata / SAE /". يحتوي الدليل "C: Rdata /" على نصوص مختلفة غير متصلة بأي مشروع معين. إذا وضعت نصوصًا في مجلد مختلفًا عن برنامجي ، فقم بإجراء تصحيحات ملائمة في المؤشر و EA التي تكون صحيحة على طريقة البرامج النصية.
-6- SAE.model هو ملف ذو نموذج "SAE" ومعلمات التطبيع "prepr". تم تدريب النموذج على EURUSD (M30) ، آخر موعد 14.10.14. تم وصف عملية التدريب أعلاه.
أيضا لا ننسى الطريق إلى الدليل حيث تم تخزين لغة R على جهاز الكمبيوتر الخاص بك.
يفضل الترتيب التالي لبدء العمل. ضع EA على الرسم البياني. إذا قررت وضع EA على رمز آخر ، فسيتم تحديد منفذ مختلف عن الخوادم التي تم إطلاقها مسبقًا. على سبيل المثال ، المنفذ 8886 (بالمنفذ الافتراضي 8888).
ملحوظة. هذه طريقة غير فعالة على الإطلاق. كل خادم لديه حجم 120-130 ميجا بايت. هذا ما هي الأشياء اليوم.
بعد تهيئة EA العادية ، سيظهر التنبيه "لا توجد نتائج حسابية! الرمز". ثم قم بتثبيت المؤشر مع المعلمة الخارجية send = true ومنفذ الخادم المحدد الذي يتم توصيل المؤشر به (انظر أعلاه). إذا كان كل شيء يعمل بشكل صحيح ، ستظهر "عملية" البيانات الحقيقية ، الدقة ، K و Kmax في سلسلة الخرج وسيبدأ التداول.
يمكن تسهيل التحكم الفعال في العملية بشكل أفضل من إدارة مهام Windows. إذا لم يظهر Rterm في القائمة بعد إطلاق EA أو المؤشر ، فإن عملية R تعطلت. السبب الرئيسي لمثل هذه الاضطرابات هو خطأ في بناء الجملة في البرامج النصية ، وعدم تطابق طول المتلقي MQL المتلقي والناقل المستخرج من Rterm.
يمكن تصحيح البرامج النصية في Rstudio عن طريق تشغيل البرامج النصية بخط من البداية إلى النهاية.
لسوء الحظ لم أتمكن من إطلاق EA في المختبر ، لذلك يجب اختباره على حساب تجريبي.
4.3. طرق وطرق تحسين الخصائص النوعية
قم بتغيير مجموعة المؤشرات المستخدمة عند الإدخال.
تغيير طريقة تطبيع بيانات الإدخال.
تحسين المعلمات من "المشرف" والمؤشرات عند الإدخال.
تغيير ترميز متغير المدخلات للمصفوفة مع عمودين. معايرة إشارة التنبؤ.
قم بتحسين معلمات الشبكة (عدد الخلايا العصبية في الطبقات المخفية ، عدد الطبقات ، مستوى التعلم ، عدد الحقب).
استنتاج
قمنا بإنشاء نماذج شبكة عميقة وتدريبها واختبارها مع تهيئة أوزان الخلايا العصبية في الطبقات المخفية من SAE. تعمل الشبكات على إعادة التدريب بسرعة كبيرة وتسمح بإعادة تدريبها دون تعطيل عملية التداول.
النتائج التي تظهرها الشبكات العصبية هي متوسطة من حيث المقاييس. النتيجة المثالية لم تكن الهدف الأولي.
باستخدام هذا النموذج والتقييم الدائم لمعامل الفعالية ، يمكن إعادة تدريب النموذج وتحسينه دون تعطيل عملية التداول.
المرفق:
- SAE.zip - indicator, EA and accompanying files.
- 01-05-2018, 05:03 PM #5
موضوع متعوب عليه .... يحتاج الى صفاء ذهن وتركيز عالي للفهم
جزاك الله كال خير اخي لمسنطح ... ومزيد من المواضيع القيمة
بالتوفيق
- 02-05-2018, 12:13 AM #6
عزيزي جاني شد عضلي وانا اقرا اهنيك وياليت تبسط الأمور اكثر
- 02-05-2018, 12:50 AM #7موضوع متعوب عليه .... يحتاج الى صفاء ذهن وتركيز عالي للفهم
جزاك الله كال خير اخي لمسنطح ... ومزيد من المواضيع القيمة
بالتوفيقعزيزي جاني شد عضلي وانا اقرا اهنيك وياليت تبسط الأمور اكثر
على فكرة طرحت الموضوع على الكاتب الاصلي للمقالات فقال انه لا مانع لديه تبقى مشكلة اللغة في المناقشة وطرح الاسئلة وانا افكر كيف احل هات المعظلة
- 02-05-2018, 04:56 PM #8
هل سنحصل على مؤشر؟
- 03-05-2018, 02:59 AM #9هل سنحصل على مؤشر؟
مشكلة الخبير والمؤشر ان تدريب وانشاء الشبكة يدوي بينما في المقال الاخر فهو الي 100%
سؤالك هاذا دلالة على انك لم تتمعن في المقال
- 04-11-2019, 07:56 PM #10
المجهود المبذول فى هذا الموضوع واضح ولكن للأسف هناك أخطاء جوهرية فى الترجمه خصوصا فيما يتعلق بتوصيف الشبكه, فعلى سبيل المثال إذا قلنا عن خلية خفية انها خلية إدخال فسدت الشبكه بالكامل