لماذا نريد دائما أن نرى النسبة الذهبية؟ تمت محاولة التحليل التطوري (غير الناجح) باستخدام شبكات C ++ العصبية

في الآونة الأخيرة ، سألت نفسي: هل رغبتنا في رؤية النسبة الذهبية في كل مكان مرتبطة ببعض الأشياء الثقافية البحتة بطريقة أو بأخرى ، أم أن هناك نوعًا من النمط الأعمق المخفي في بنية دماغنا؟ لمعرفة ذلك ، قررت أن أفعل بعض الأشياء:

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

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

لمحاكاة التغيرات العشوائية في الدماغ أثناء التطور ، استخدمت الدالة rand_s () ، لأنها مستقرة بشكل تشفير ، وبالتالي ، ستعطي نتيجة "أكثر عشوائية". كما اعتدت كمعيار أن الشبكة العصبية حققت أصغر عدد من الأخطاء عندما علمت أنه عندما تنحرف المصفوفة في اتجاهات عشوائية بقيم صغيرة ، فإن منتجها بواسطة المتجه يتغير بنفس الوحدة النمطية تقريبًا.

بالنسبة لترميز البيانات في المتجه نفسه ، استخدمت متجهًا مكونًا من 28 بُعدًا لرقمين ثنائيين مكونين من 14 رقمًا ومجموعهما (بعد أول 14 حرفًا ، لا يوجد سوى 14 صفراً لملء البيانات) وموجه متجه 40 الأبعاد لرقمين في النظام مع نسبة ذهبية.

ملف الإدخال بالتنسيق التالي.

السطر الأول عبارة عن رقمين صحيحين مفصولين بمسافة ، والبعد للمتجه وعدد العناصر في مجموعة التدريب.

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

فيما يلي مقتطف من شفرة الشبكة العصبية المسؤولة عن تدريبها على عينة من بيانات المدخلات والنتائج الصحيحة المقابلة لها:

while (((d-mu)*(d-mu)>0.01)||(q<10)) // ,        ""    { s=0; //           for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } for (i=0;i<n;i++) { for (j=0;j<n;j++) { (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } //        for (i=0;i<n;i++) { s=s+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } //         s1=s+1; } while (s<s1) //      ,      ,    { s1=0; //      for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } }//  ()      rand_s(&p); k1 = (int) (p/((int) (UINT_MAX/n))); rand_s(&p); k2 = (int) (p/((int) (UINT_MAX/n))); //   ""  ,     rand_s(&p); h=((double) p/UINT_MAX)-0.5; //  h1=1; rand_s(&p); l=((int) ((double) p/UINT_MAX)*20); for (i=0;i<l;i++) { h1=h1/10; } h=h*h1; //,        for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j))+h*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } //       for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); }//           } } (*(a+k1*n+k2))=(*(a+k1*n+k2))+h; //           s1=0; d=0; for (k1=0;k1<n;k1++) { for (k2=0;k2<n;k2++) { for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+((*(a+i*n+j))+0.1)*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } } s1=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } } d=d+(s1-s)*(s1-s)/(n*m);//          } } mu=mu*((double) q/(q+1))+((double) d/(q+1));//         q=q+1; printf("%lf \n",mu);//         } 

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

قارنت الأخطاء في أنظمة الأرقام المختلفة باختبارات t المقترنة وهذا ما حصلت عليه.

المقارنة: النسبة الذهبية - النظام الثنائي
الفرضية: الخطأ في النسبة الذهبية هو في المتوسط ​​أقل.
النتائج:
ر = -22.033
مد = 999
ع <0.001
كوهين د = -0.697 (مع نسبة ذهبية ، الخطأ أقل)
99 ٪ فاصل الثقة لكوهين د:
من -inf إلى -0.615
اختبار الحالة الطبيعية لتوزيع Shapiro-Wilk:
W = 0.998 p = 0.382 (توزيعات تقريبية تقريبًا طبيعية)
إحصائيات وصفية:
النسبة الذهبية:
المتوسط ​​الحسابي: 0.365
الانحراف المعياري: 0.044
النظام الثنائي:
المتوسط ​​الحسابي: 0.414
الانحراف المعياري: 0.055

قررت الاحتفاظ بجميع البيانات المستخدمة في هذه الدراسة الحرفية الصغيرة الآن كدليل على أنني لم أسحب الأرقام من السقف. من يسأل ، يمكنني إرسالها.

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

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

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


All Articles