شبکه های عصبی از ساده تا پیچیده به زبان ساده در مورد پیچیده: شبکه های عصبی چیست؟ طبقه بندی و تشخیص "تصاویر"

نکته خنده دار در مورد فناوری پیشرفته این است که هزاران سال قدمت دارد! برای مثال، حساب دیفرانسیل و انتگرال بیش از 300 سال پیش توسط نیوتن و لایب نیتس به طور مستقل اختراع شد. آنچه زمانی جادو به حساب می آمد اکنون به خوبی درک شده است. و البته همه ما می دانیم که هندسه چند هزار سال پیش توسط اقلیدس اختراع شد. ترفند این است که اغلب سال ها طول می کشد تا چیزی "محبوب" شود. شبکه های عصبی یک مثال عالی هستند. همه ما در مورد شبکه های عصبی و وعده های آنها شنیده ایم، اما به دلایلی برنامه های معمول مبتنی بر آنها را نمی بینیم. دلیل این امر این است که ماهیت واقعی شبکه های عصبی ریاضیات فوق العاده پیچیده است و درک و اثبات قضایای پیچیده ای که آن را پوشش می دهد ضروری است و شاید دانش تئوری احتمالات و تجزیه و تحلیل ترکیبی لازم باشد، نه از نظر فیزیولوژی و عصب شناسی.

انگیزه ایجاد هر فناوری برای شخص یا افراد، ایجاد یک برنامه قاتل با کمک آن است. همه ما اکنون می دانیم که DOOM چگونه کار می کند، یعنی. با استفاده از درختان BSP با این حال، جان کارمک آنها را در آن زمان اختراع نکرد، او در مقاله ای که در سال 1960 نوشته شده بود، در مورد آنها خواند. این مقاله تئوری فناوری BSP را تشریح کرد. جان گام بعدی را با درک چگونگی استفاده از درختان BSP برداشت و DOOM متولد شد. من گمان می کنم که شبکه های عصبی رنسانس مشابهی را در چند سال آینده تجربه کنند. رایانه ها به اندازه کافی سریع هستند که می توانند آنها را تقلید کنند، طراحان VLSI آنها را درست در سیلیکون ایجاد می کنند و صدها کتاب منتشر شده در این زمینه وجود دارد. و از آنجایی که شبکه‌های عصبی ریاضی‌ترین موجودی هستند که می‌شناسیم، آنها به هیچ نمایش فیزیکی وابسته نیستند و می‌توانیم آنها را با نرم افزاریا مدل های سیلیکونی واقعی ایجاد کنید. نکته اصلی این است که ماهیت یک شبکه عصبی یک مدل انتزاعی است.

از بسیاری جهات، محدودیت های محاسبات دیجیتال قبلاً درک شده است. البته، ما آنها را بهبود خواهیم داد و آنها را حتی سریع‌تر، کوچک‌تر و ارزان‌تر خواهیم کرد، اما رایانه‌های دیجیتال همیشه می‌توانند فقط اطلاعات دیجیتال را درک کنند، زیرا آنها بر اساس یک مدل محاسباتی باینری هستند. شبکه های عصبی، با این حال، بر اساس مدل های محاسباتی متفاوتی هستند. آنها بر اساس یک مدل احتمالی توزیع شده در سطح بالا هستند که برای یافتن راه حلی برای یک مشکل در راه مورد نیاز نیست. برنامه کامپیوتری; شبکه‌ای از سلول‌ها را مدل‌سازی می‌کند که می‌توانند راه‌حل‌های ممکن برای یک مشکل را به شیوه‌ای «بیولوژیکی‌تر» پیدا، شناسایی یا مرتبط کنند، مشکل را در قطعات کوچک حل کنند و نتایج را با هم جمع کنند. این مقاله مروری بر فناوری شبکه‌های عصبی است که در آن در چندین صفحه با حداکثر جزئیات ممکن از هم جدا می‌شوند.

آنالوگ های بیولوژیکی

شبکه های عصبی از مغز خود ما الهام گرفته شده اند. به معنای واقعی کلمه - مغز کسی در سر کسی یک بار گفت: "من به نحوه کار کردن علاقه دارم؟" و سپس اقدام به ایجاد یک مدل ساده از خود کرد. عجیبه، درسته؟ مدل استاندارد گره عصبی، بر اساس یک مدل ساده شده از نورون انسانی، بیش از پنجاه سال پیش اختراع شد. به شکل 1.0 نگاهی بیندازید. همانطور که می بینید، سه بخش اصلی یک نورون وجود دارد که عبارتند از:

  • دنتریت(ها) (دندریت) .................... مسئول جمع آوری سیگنال های دریافتی
  • سوما (سوما) ................................ مسئول پردازش اصلی و جمع سیگنال ها
  • آکسون (Axon) ............................... مسئول سیگنال دهی به دندریت های دیگر.

مغز انسان به طور متوسط ​​دارای حدود 100 میلیارد یا 10 تا 11 قدرت نورون است و هر یک از آنها تا 10000 اتصال از طریق دندریت دارند. سیگنال ها با استفاده از فرآیندهای الکتروشیمیایی مبتنی بر سدیم، پتاسیم و یون ها منتقل می شوند. سیگنال ها با ایجاد اختلاف پتانسیل ناشی از این یون ها منتقل می شوند، اما شیمی در اینجا بی ربط است و سیگنال ها را می توان به عنوان تکانه های الکتریکی ساده ای در نظر گرفت که از آکسون به دندریت می روند. اتصال یک دندریت به آکسون خارجی سیناپس نامیده می شود و اینها نقاط اصلی انتقال تکانه ها هستند.

بنابراین یک نورون چگونه کار می کند؟ پاسخ ساده ای برای این سوال وجود ندارد، اما توضیح زیر برای اهداف ما کافی است. دندریت‌ها سیگنال‌های دریافتی از نورون‌های دیگر را جمع‌آوری می‌کنند، سپس سوماها جمع‌بندی و محاسبه سیگنال‌ها و داده‌ها را انجام می‌دهند و در نهایت، بر اساس نتیجه پردازش، می‌توانند به آکسون‌ها بگویند که سیگنال را منتقل کنند. انتقال بیشتر به تعدادی از عوامل بستگی دارد، اما ما می‌توانیم این رفتار را به عنوان یک تابع انتقال مدل کنیم که ورودی را می‌گیرد، آن را پردازش می‌کند و در صورت برآورده شدن ویژگی‌های تابع انتقال، خروجی را آماده می‌کند. علاوه بر این، در نورون های واقعی، خروجی داده ها غیر خطی است، یعنی سیگنال ها دیجیتال نیستند، بلکه آنالوگ هستند. در واقع نورون ها به طور پیوسته سیگنال ها را دریافت و ارسال می کنند و مدل واقعی آنها به فرکانس بستگی دارد و باید در دامنه S (حوزه فرکانس) تحلیل شوند. تابع انتقال واقعی یک نورون بیولوژیکی ساده در واقع توسط ما مدل شده است.

اکنون ما ایده ای داریم که نورون ها چیست و در واقع سعی داریم مدل سازی کنیم. بیایید برای لحظه ای منحرف شویم و در مورد اینکه چگونه می توانیم از شبکه های عصبی در بازی های ویدیویی استفاده کنیم صحبت کنیم.

بازی ها

به نظر می رسد شبکه های عصبی پاسخی به تمام نیازهای ما هستند. اگر می‌توانستیم شخصیت‌ها و کلمات را به مغزهای کوچک بازی منتقل کنیم، تصور کنید چقدر جالب می‌شد. مدل شبکه عصبی ساختار ناهموار نورون ها را به ما می دهد، اما سطح بالایی از هوش و عملکرد قیاسی، حداقل به معنای کلاسیک کلمه، به ما نمی دهد. یافتن راه‌هایی برای استفاده از فناوری شبکه‌های عصبی در هوش مصنوعی بازی‌ها نیاز به کمی تفکر دارد، اما زمانی که این کار را انجام دادید، می‌توانید از آن همراه با الگوریتم‌های قطعی، منطق فازی و الگوریتم‌های ژنتیک استفاده کنید تا یک ذهنیت هوش مصنوعی بسیار قوی و پیشرفته ایجاد کنید. بازی های شما بدون شک، نتیجه بهتر از هر چیزی خواهد بود که می توانید با صدها بلوک if-else یا اسکریپت نویسی به دست آورید. شبکه های عصبی را می توان برای موارد زیر استفاده کرد:

اسکن و شناسایی محیطیک شبکه عصبی می تواند اطلاعات را به صورت بینایی یا شنوایی دریافت کند. سپس می توان از این اطلاعات برای تشکیل پاسخ یا پاسخ یا آموزش شبکه استفاده کرد. این پاسخ ها را می توان در زمان واقعی نمایش داد و برای بهبود پاسخ ها به روز کرد.

حافظه- یک شبکه عصبی می تواند به عنوان شکلی از حافظه برای شخصیت های بازی استفاده شود. شبکه های عصبی می توانند از تجربه یاد بگیرند و به مجموعه پاسخ ها و واکنش ها بیفزایند.

کنترل رفتار- از خروجی شبکه عصبی می توان برای کنترل اعمال شخصیت بازی استفاده کرد. ورودی ها می توانند متغیرهای مختلفی از موتور بازی باشند. سپس شبکه قادر خواهد بود رفتار شخصیت بازی را کنترل کند.

نقشه برداری پاسخ- شبکه های عصبی واقعاً با "تداعی ها" کار می کنند، که در اصل اتصال یک فضا به فضای دیگر است. یک تداعی در دو شکل ظاهر می شود: یک ارتباط خودکار، که یک ورودی را به خودش پیوند می دهد، و یک ارتباط غیر همسو، که یک ورودی را به چیز دیگری پیوند می دهد. پیوند پاسخ از شبکه‌های عصبی به عنوان یک بک‌اند یا خروجی برای ایجاد لایه دیگری از کنترل غیرمستقیم بر رفتار یک شی استفاده می‌کند. به طور معمول، ما می‌توانیم تعدادی متغیر کنترلی داشته باشیم، اما فقط به تعدادی از ترکیب‌های خاص پاسخ‌های واضحی داریم که می‌توانیم شبکه را روی آن‌ها آموزش دهیم. با این حال، با استفاده از یک شبکه عصبی به‌عنوان خروجی، می‌توانیم پاسخ‌های دیگری را دریافت کنیم که تقریباً در همان منطقه هستند که به خوبی تعریف شده ما هستند.

مثال های ارائه شده ممکن است کمی مبهم به نظر برسند، اما هستند. واقعیت این است که شبکه‌های عصبی ابزاری هستند که می‌توانیم هر طور که بخواهیم از آن استفاده کنیم. نکته کلیدی در اینجا این است که استفاده از آنها کار ایجاد هوش مصنوعی را آسان تر می کند و رفتار شخصیت های بازیکن را منطقی تر می کند.

شبکه های عصبی 101

در این بخش، اصطلاحات و مفاهیم اصلی مورد استفاده در بحث شبکه های عصبی را بررسی می کنیم. این به این سادگی نیست، زیرا شبکه های عصبی در واقع محصول چندین رشته مختلف هستند و هر یک از آنها واژگان خاص خود را دارند. افسوس، واژگان مربوط به شبکه های عصبی نقطه تلاقی فرهنگ لغت همه این رشته ها است، بنابراین ما به سادگی نمی توانیم همه چیز را در نظر بگیریم. همچنین، تئوری شبکه های عصبی مملو از سخت افزارهای زائد است، به این معنی که بسیاری از مردم در حال اختراع مجدد چرخ هستند. این امر بر ایجاد تعدادی معماری شبکه عصبی به طور همزمان تأثیر گذاشت که هر کدام نام خاص خود را دارند. سعی می کنم اصطلاحات و موقعیت های کلی را شرح دهم تا در نامگذاری گرفتار نشویم. خب، در این مقاله به بررسی برخی از شبکه‌ها می‌پردازیم که به اندازه کافی متفاوت هستند تا نام‌های متفاوتی داشته باشند. همانطور که می خوانید، اگر نمی توانید بلافاصله همه مفاهیم و اصطلاحات را درک کنید، زیاد نگران نباشید، فقط آنها را بخوانید، سپس سعی می کنیم دوباره آنها را در متن مقاله پوشش دهیم. بیا شروع کنیم...

اکنون که نسخه "بیولوژیکی" نورون را دیدیم، بیایید به اصول اولیه نورون مصنوعی نگاه کنیم تا پایه و اساس استدلال خود را تنظیم کنیم. برنج. 2.0 یک استاندارد گرافیکی برای "نوروند" یا نورون مصنوعی است. همانطور که می بینید، دارای چندین ورودی با برچسب X1 - Xn و B است. این ورودی ها دارای وزن W1-Wn هستند و یک b به آنها متصل است. علاوه بر این، یک اتصال خلاصه Y و یک خروجی y وجود دارد. خروجی y در نورد بر اساس تابع انتقال یا "فعال سازی" است که تابعی از ورودی نورد به شبکه است. داده های دریافتی از Xs و از Bهایی که به گره های همسایه متصل هستند می آیند. ایده این است که B "گذشته"، "حافظه" است. عملکرد اصلی یک نوروند این است: ورودی X در وزن مربوط به آن ضرب شده و جمع می شود. خروجی جمع ورودی برای فعال کردن Ya است. سپس فعال سازی به تابع فعال سازی fa(x) وارد می شود و خروجی نهایی y است. معادله همه اینها این است:

ur. 1.0

n
Ya \u003d B * b + e Xi * wi
i = 1 و

y = fa (Ya)

اشکال مختلف fa(x) در یک دقیقه مورد بحث قرار خواهند گرفت.

قبل از ادامه، باید در مورد Xi مقدماتی، وزن‌های Wi و حوزه‌های مربوط به آنها صحبت کنیم. در بیشتر موارد، ورودی ها شامل اعداد مثبت و منفی در مجموعه هستند (-¥، + ورودی = I). با این حال، بسیاری از شبکه های عصبی از مقادیر ساده دو مقداری (مانند true/false) استفاده می کنند. دلیل استفاده از چنین طرحواره ساده ای این است که در نهایت تمام داده های پیچیده به یک نمایش باینری خالص تبدیل می شوند. علاوه بر این، در بسیاری از موارد ما نیاز به حل مشکلات رایانه ای مانند تشخیص صدا داریم که برای نمایش های دو ارزشی مناسب است. با این حال، آن را در سنگ قرار نمی دهد. در هر صورت، مقادیر استفاده شده در سیستم دو ظرفیتی در درجه اول 0 و 1 در سیستم باینری یا -1 و 1 در سیستم دو قطبی است. هر دو سیستم مشابه هستند با این تفاوت که نمایش دوقطبی از نظر ریاضی راحت تر از دودویی است. وزن‌های Wi در هر ورودی معمولاً بین (-Ґ، +Ґ) هستند و به ترتیب برای مقادیر مثبت و منفی «هیجان‌انگیز» یا «بازدارنده» نامیده می‌شوند. ورودی اضافی B که همیشه با 1.0 فراخوانی می شود و در b ضرب می شود که b وزن آن است.

در ادامه تجزیه و تحلیل ما، پس از یافتن فعال سازی Ya برای نورود، آن را به تابع فعال سازی اعمال می کنیم و می توان نتیجه را محاسبه کرد. تعدادی عملکرد فعال سازی با کاربردهای مختلف وجود دارد. توابع فعال سازی اصلی Fa(x):

معادلات هر یک بسیار ساده است، اما هر کدام متناسب با مدل خود هستند یا مجموعه ای از پارامترهای خاص خود را دارند.

تابع گام به گام (گام به گام) در تعدادی از شبکه های عصبی و مدل ها برای دستیابی به بحرانی بودن سیگنال ورودی استفاده می شود. هدف ضریب q مدلسازی سطح بحرانی سیگنال ورودی است که نورون باید به آن پاسخ دهد.

تابع فعال‌سازی خطی (خطی) زمانی استفاده می‌شود که بخواهیم خروجی نورود تا حد امکان فعال‌سازی ورودی را دنبال کند. از یک ویژگی مشابه می توان برای ایجاد سیستم های خطی مانند حرکت با سرعت ثابت استفاده کرد. در نهایت، تابع نمایی کلید شبکه های عصبی پیشرفته است، تنها راه ایجاد شبکه های عصبی که می توانند پاسخ های غیرخطی و مدل سازی فرآیندهای غیرخطی را ارائه دهند. تابع فعال سازی نمایی یک انشعاب در توسعه شبکه های عصبی است، زیرا با استفاده از توابع مرحله ای و خطی، هرگز نمی توانیم یک شبکه عصبی ایجاد کنیم که پاسخ غیر خطی بدهد. با این حال، ما نیازی به استفاده از این تابع خاص نداریم. بسته به خصوصیات شبکه مورد نظر می توان از توابع هایپربولیک، لگاریتمی و ماورایی نیز استفاده کرد. در نهایت اگر بخواهیم می توانیم از همه این توابع استفاده کنیم.

همانطور که می توانید حدس بزنید، یک نورون کار زیادی انجام نمی دهد، بنابراین باید گروهی از نورون ها و لایه ای از نورودها را ایجاد کنید، همانطور که در شکل نشان داده شده است. 3.0. شکل یک شبکه عصبی تک لایه کوچک را نشان می دهد. شبکه عصبی در شکل 3.0 شامل تعدادی گره ورودی و خروجی است. طبق قرارداد، این یک شبکه عصبی تک لایه است، زیرا لایه ورودی نادیده گرفته می شود مگر اینکه تنها لایه در شبکه باشد. در این حالت لایه ورودی نیز لایه خروجی است، بنابراین شبکه تک لایه است. برنج. 4.0 یک شبکه عصبی دو لایه را نشان می دهد. توجه داشته باشید که لایه ورودی هنوز در نظر گرفته نشده است و لایه داخلی "مخفی" نامیده می شود. لایه خروجی را خروجی لایه پاسخ می نامند. از نظر تئوری، محدودیتی برای تعداد لایه‌ها در یک شبکه عصبی وجود ندارد، با این حال، توصیف روابط لایه‌های مختلف و روش‌های یادگیری قابل قبول می‌تواند بسیار دشوار باشد. بهترین راهایجاد یک شبکه عصبی چند لایه - هر شبکه را یک یا دو لایه بسازید و سپس آنها را به عنوان اجزا یا بلوک های عملکردی به هم متصل کنید.

خوب، حالا بیایید در مورد "موقت" یا موضوع زمان صحبت کنیم. همه ما می دانیم که مغز ما در مقایسه با یک کامپیوتر دیجیتال بسیار کند است. در واقع، مغز ما یک چرخه را در مقیاس میلی‌ثانیه تولید می‌کند، در حالی که زمان یک کامپیوتر دیجیتال در نانوثانیه و تقریباً در زیر نانوثانیه اندازه‌گیری می‌شود. این بدان معنی است که مسیر سیگنال از نورون به نورون مدتی طول می کشد. این نیز در نورون‌های مصنوعی مدل‌سازی می‌شود به این معنا که ما محاسبات را لایه به لایه انجام می‌دهیم و نتایج را به‌طور متوالی خروجی می‌دهیم. این به مدل‌سازی تاخیر زمانی موجود در سیستم‌های بیولوژیکی مانند مغز ما کمک می‌کند.

بحث مقدماتی ما تقریباً تمام شده است، بیایید در مورد برخی از مفاهیم سطح بالا صحبت کنیم و سپس با چند اصطلاح دیگر به پایان برسانیم. سوالی که باید بپرسید این است که "شبکه های عصبی چه فایده ای دارند؟" این سوال خوبی است و پاسخ قطعی به آن دشوار است. سوال مبسوط - "می خواهید سعی کنید شبکه های عصبی چه کاری انجام دهند؟" اساسا، آنها تکنیکی را به نمایش می گذارند که به بازتاب یک فضا در رابطه با فضای دیگر کمک می کند. اساساً نورون ها نوعی حافظه هستند. و مانند هر حافظه دیگری، می‌توانیم برخی از اصطلاحات مناسب را برای توصیف آنها به کار ببریم. نورون ها هم STM (حافظه کوتاه مدت) و هم LTM (حافظه بلند مدت) دارند. STM توانایی یک شبکه عصبی برای به خاطر سپردن چیزی است که به تازگی آموخته است، و LTM توانایی یک شبکه عصبی برای به خاطر سپردن چیزی است که مدتی پیش با توجه به اطلاعاتی که به تازگی دریافت کرده است. این ما را به مفهوم می رساند پلاستیسیتهیا به عبارت دیگر به مفهوم نحوه رفتار شبکه عصبی با اطلاعات یا هنگام یادگیری. آیا یک شبکه عصبی می تواند اطلاعات بیشتری را بیاموزد و به "به خاطر سپردن" صحیح اطلاعات قبلی ادامه دهد؟ اگر چنین است، آنگاه شبکه‌های عصبی ناپایدار می‌شوند زیرا در نهایت حاوی اطلاعات زیادی هستند که داده‌ها بی‌پایان یکدیگر را قطع می‌کنند و همپوشانی می‌کنند. این ما را به یک نیاز دیگر می رساند - ثبات. نکته اصلی این است که ما می خواهیم شبکه عصبی LTM خوب، STM خوب، انعطاف پذیر و پایدار باشد. البته برخی از شبکه های عصبی مشابه حافظه نیستند، آنها عمدتاً نقشه برداری عملکردی را هدف قرار می دهند و این مفاهیم در مورد آنها صدق نمی کند، اما شما ایده اولیه را دریافت می کنید. اکنون که در مورد مفاهیم فوق در رابطه با حافظه می دانیم، اجازه دهید بررسی چند عامل ریاضی را تکمیل کنیم که به ارزیابی و درک این ویژگی ها کمک می کند.

یکی از کاربردهای اصلی شبکه های عصبی ایجاد مکانیزم حافظه است که می تواند داده های ورودی ناقص یا فازی را پردازش کرده و نتیجه را برگرداند. نتیجه می تواند خود ورودی (تداعی) یا یک پاسخ کاملاً متفاوت از ورودی (هترو-همبستگی) باشد. همچنین می توان فضای N بعدی را روی بارگذاری داده های M بعدی و غیر خطی همپوشانی کرد. این بدان معناست که شبکه عصبی نوعی واحد حافظه فرافضایی است، زیرا می تواند یک عنصر N ورودی را به یک عنصر خروجی M متصل کند، جایی که M ممکن است برابر با N باشد یا نباشد.

کاری که شبکه های عصبی اساسا انجام می دهند این است که فضای N بعدی را به مناطقی تقسیم می کنند که به طور واضح ورودی ها را به خروجی ها ترسیم می کنند یا ورودی ها را در کلاس های مختلف طبقه بندی می کنند. سپس، با افزایش مقادیر (بردارها) مجموعه داده های ورودی (بیایید آن را S بنامیم)، منطقاً نتیجه می شود که جداسازی اطلاعات برای شبکه های عصبی دشوارتر خواهد بود. و از آنجایی که شبکه‌های عصبی با اطلاعات پر شده‌اند، مقادیر ورودی که باید «به خاطر بسپارند» با هم همپوشانی دارند، زیرا فضای ورودی نمی‌تواند تمام داده‌های جدا شده را در تعداد نامتناهی از ابعاد داشته باشد. این همپوشانی به این معنی است که برخی از ورودی‌ها آنقدر قوی نیستند که می‌توانستند. اگرچه در تعدادی از موارد مشکلی نیست، اما در مدلسازی شبکه های عصبی حافظه نگران کننده است. بیایید، برای نشان دادن مفهوم، فرض کنیم که می‌خواهیم یک مجموعه N از بردارهای ورودی را به مجموعه‌ای از خروجی‌ها متصل کنیم. مجموعه خروجی به اندازه مجموعه خروجی S برای عملکرد مناسب مشکل ساز نیست.

اگر مجموعه ورودی S به شدت باینری باشد، دنباله هایی از فرم 1101010 ... 10110 را در نظر می گیریم. فرض کنید که داده های ورودی ما هر کدام فقط 3 بیت دارند، بنابراین کل فضای ورودی از بردارها تشکیل شده است:

v0 = (0،0،0)، v1 = (0،0،1)، v2 = (0،1،0)، v3 = (0،1،1)، v4 = (1،0،0)، v5 = (1،0،1)، v6 = (1،1،0)،

برای دقت بیشتر، مبنای این مجموعه بردارها عبارت است از:

v = (1،0،0) * b2 + (0،1،0) * b1 + (0،0،1) * b0، که در آن bi می تواند مقادیر 0 یا 1 را بگیرد.

به عنوان مثال، اگر فرض کنیم که B2=1، B1=0 و B0=1، بردار زیر را بدست می آوریم:

v = (1.0.0) * 1 + (0.1.0) * 0 + (0.0.1) * 1 = (1.0.0) + (0.0.0) + (0 ,0,1) = (1,0 ,1) که Vs آرایه ورودی احتمالی ما است

پایه یک بردار خلاصه ویژه است که آرایه ای از بردارها را در فضا توصیف می کند. بنابراین V تمام بردارها را در فضای ما توصیف می کند. به طور کلی، بدون پرداختن به توضیحات طولانی، هرچه بردارهای آرایه ورودی متعامدتر باشند، بهتر در شبکه عصبی منتشر می شوند و بهتر می توان آنها را فراخوانی کرد. متعامد بودن به استقلال بردارها اشاره دارد، به عبارت دیگر، اگر دو بردار متعامد باشند، حاصلضرب نقطه آنها صفر، برجستگی آنها بر روی یکدیگر صفر است و نمی توان آنها را نسبت به یکدیگر توصیف کرد. بردارهای متعامد زیادی در آرایه v وجود دارد، اما آنها در گروه های کوچک قرار می گیرند، به عنوان مثال V0 متعامد به همه بردارها است، بنابراین ما همیشه می توانیم آن را وارد کنیم. اما اگر V1 را در آرایه S قرار دهیم، آنگاه فقط بردارهای V2 و V4 متعامد بودن را با آن حفظ خواهند کرد:

v0 = (0،0،0)، v1 = (0،0،1)، v2 = (0،1،0)، v4 = (1،0،0)

چرا؟ زیرا Vi - Vj برای همه i,j از 0...3 برابر با صفر است. به عبارت دیگر، حاصلضرب نقطه همه جفت بردارها 0 است، بنابراین همه آنها باید متعامد باشند. بنابراین این آرایه به عنوان یک آرایه ورودی شبکه عصبی بسیار خوب است. با این حال، آرایه:

v6 = (1،1،0)، v7 = (1،1،1)

به طور بالقوه بد، زیرا ورودی‌های v6-v7 غیر صفر هستند، در یک سیستم باینری 1 است. سؤال بعدی این است که آیا می‌توانیم این متعامد بودن را اندازه‌گیری کنیم؟ پاسخ بله است. در سیستم دودویی بردارها، معیاری به نام فاصله همینگ وجود دارد. برای اندازه گیری فاصله N بعدی بین بردارهای باینری استفاده می شود. این به سادگی تعداد بیت هایی است که بین دو بردار متفاوت است. به عنوان مثال، بردارها:

v0 = (0,0,0), v1 = (0,0,1)

فاصله همینگ 1 بین خود داشته باشند و

v2 = (0،1،0)، v4 = (1،0،0)

فاصله همینگ 2 داشته باشد.

ما می توانیم از فاصله همینگ به عنوان معیاری برای تعمد در سیستم های برداری باینری استفاده کنیم. و می تواند به ما کمک کند تعیین کنیم که آیا مجموعه داده های ورودی ما دارای تقاطع هستند یا خیر. تعیین متعامد با بردارهای ورودی رایج دشوارتر است، اما اصل یکسان است. این مفاهیم و اصطلاحات کافی است، بیایید جلوتر بپریم و به شبکه های عصبی واقعی نگاه کنیم که کاری انجام می دهند و شاید تا پایان این مقاله بتوانید از آنها برای بهبود هوش مصنوعی بازی خود استفاده کنید. ما به شبکه های عصبی مورد استفاده برای انجام توابع منطقی، طبقه بندی ورودی ها و مرتبط ساختن آنها با خروجی ها نگاه خواهیم کرد.

منطق محض

اولین شبکه های عصبی مصنوعی در سال 1943 ایجاد شد. مک کالوچ و پیتس آنها شامل تعدادی نوروند بودند و عمدتاً برای محاسبه توابع منطقی ساده مانند AND، OR، XOR و ترکیبات آنها استفاده می شدند. برنج. 5.0. نشان دهنده نوروندهای اصلی McCulloch و Pitts با دو ورودی است. اگر شما یک مهندس برق هستید، بلافاصله شباهت آنها را به ترانزیستورها خواهید دید. در هر صورت، نوروندهای مک کالوخ پیتس هیچ ارتباطی ندارند و تابع فعال سازی ساده Fmp(x) به صورت زیر است:

fmp (x) = 1، اگر xq
0، اگر x< q

نوروند MP (McCulloch-Pitts) با جمع کردن حاصل ضرب ورودی‌های Xi و وزن‌های Wi عمل می‌کند و Ya را به عنوان نتیجه برای تابع Fmp(x) می‌گیرد. تحقیقات اولیه مک‌کالوخ پیتس بر ساخت مدارهای منطقی پیچیده با مدل‌های عصبی متمرکز بود. علاوه بر این، یکی از قوانین مدل سازی نوروند این است که انتقال سیگنال از نورون به نورون یک مرحله زمانی انجام می شود. این به نزدیک شدن به مدل نورون های طبیعی کمک می کند. بیایید نگاهی به چند نمونه از شبکه های عصبی MP که عملکرد منطقی اولیه را پیاده سازی می کنند بیندازیم. تابع بولی AND جدول صدق زیر را دارد:

می‌توانیم این را با دو شبکه عصبی MP ورودی با وزن‌های w1=1، w2=2 و q=2 مدل کنیم. این شبکه عصبی در شکل نشان داده شده است. 6.0a. همانطور که می بینید، همه ترکیب های ورودی به درستی کار می کنند. به عنوان مثال، اگر سعی کنیم ورودی های X1=0، Y1=1 را تنظیم کنیم، فعال سازی به صورت زیر خواهد بود:

X1*w1 + X2*w2 = (1)*(1) + (0)*(1) = 1.0

اگر 1.0 را برای تابع فعال سازی Fmp(x) اعمال کنیم، نتیجه 0 می شود که پاسخ صحیح است. به عنوان مثال دیگر، اگر سعی کنیم ورودی های X1=1، X2=1 را تنظیم کنیم، فعال سازی به صورت زیر خواهد بود:

X1*w1 + X2*w2 = (1)*(1) + (1)*(1) = 2.0

اگر 2.0 را در تابع فعال سازی Fmp(x) وارد کنیم، نتیجه 1.0 می شود که درست است. در موارد دیگر نیز به همین صورت عمل خواهد کرد. تابع OR مشابه است، اما حساسیت q به جای 2.0 به 1.0 تغییر یافته است. برای مشاهده نتایج، می توانید داده ها را خودتان از طریق جداول صدق اجرا کنید.

شبکه XOR کمی متفاوت است زیرا در واقع از آن زمان 2 لایه دارد نتایج پیش فرآوریبیشتر در نورون خروجی پردازش می شود. این مثال خوبی از این است که چرا یک شبکه عصبی برای حل مشکلات خاص به بیش از یک لایه نیاز دارد. XOR یک مشکل عمومی شبکه عصبی است که معمولا برای آزمایش عملکرد یک شبکه استفاده می شود. در هر صورت، XOR به صورت خطی در یک لایه جداگانه قابل تفکیک نیست، باید به مراحل کوچکتر تقسیم شود که نتایج آن خلاصه می شود. جدول حقیقت برای XOR به شکل زیر است:

XOR فقط زمانی درست است که ورودی‌ها متفاوت باشند، که این یک مشکل است زیرا هر دو ورودی به یک خروجی اشاره دارند. همانطور که در شکل نشان داده شده است، XOR به صورت خطی غیرقابل تفکیک است. 7.0. همانطور که می بینید، هیچ راهی برای جدا کردن پاسخ صحیح به طور مستقیم وجود ندارد. مسئله این است که ما می توانیم پاسخ صحیح را با دو خط جدا کنیم و این دقیقاً همان کاری است که لایه دوم انجام می دهد. لایه اول داده ها را از قبل پردازش می کند یا بخشی از مشکل را حل می کند و لایه باقی مانده محاسبه را کامل می کند. با اشاره به انجیر. 6.0 می بینیم که وزن ها Wq=1، W2=-1، W3=1، W4=-1، W5=1، W6=1 هستند. شبکه به این صورت عمل می‌کند: اگر X1 و X2 متضاد باشند، لایه محاسبه می‌شود، نتایج در موارد (0،1) یا (1،0) خوراکی برای لایه دو است، که آنها را خلاصه می‌کند و در صورت صحت آن‌ها را منتقل می‌کند. در اصل، ما یک تابع بولی ایجاد کرده ایم:

z = ((X1 و نه X2) یا (نه X1 و X2))

اگر می‌خواهید با سلول‌های عصبی پایه مک‌کالوخ-پیتس آزمایش کنید، فهرست زیر یک محرک نوروند دو ورودی کامل است.

// شبیه ساز MCULLOCCH PITTS
// شامل می شود
/////////////////////////////////////////////////////

#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از
#عبارتند از

// اصلی
/////////////////////////////////////////////////////

باطل اصلی (باطل)
{
آستانه شناور، // این عبارت تتا است که برای تعیین آستانه جمع استفاده می شود
w1, w2, // اینها وزن ها را نگه می دارند
ورودی های x1، x2، // به نورود
y_in، // فعال سازی ورودی خلاصه
y_out; // خروجی نهایی نورود

printf ( "nMcCulloch-Pitts Single Neurode Simulator.n") ;
printf("nلطفا آستانه را وارد کنید؟");
scanf("%f" ,& threshold) ;

printf ( "nارزش وزن w1 را وارد کنید؟") ;
scanf("%f" ,&w1) ;

printf ( "nارزش وزن w2 را وارد کنید؟") ;
scanf("%f" ,&w2) ;

printf("nnشروع شبیه سازی:" );

// حلقه رویداد اصلی را وارد کنید

در حالی که (1)
{
printf ( "nnSimulation Parms: threshold=%f, W=(%f,%f) n", آستانه, w1, w2) ;

// درخواست ورودی از کاربر
printf("ورودی X1 را وارد کنید؟");
scanf("%f" ,& x1) ;

printf("ورودی X2 را وارد کنید؟");
scanf("%f" ,& x2) ;

// محاسبه فعال سازی
y_in = x1* w1 + x2* w2;

// نتیجه ورودی به تابع فعال سازی (مرحله باینری ساده)
اگر (y_in >= آستانه)
y_out = (float ) 1.0 ;
دیگر
y_out = (float ) 0.0 ;

// نتیجه را چاپ کنید
printf("nخروجی نورد %fn است" , y_out) ;

// دوباره امتحان کنید
printf ( "آیا می خواهید Y یا N را ادامه دهید؟") ;
char ans[ 8] ;
scanf("%s" , ans) ;

if (toupper(ans[ 0 ] ) != "Y" )
زنگ تفريح ؛
) // پایان while

printf("nnSimulation Complete.n");
) // پایان اصلی

این بحث ما را در مورد بلوک‌های اساسی یک شبکه عصبی MP به پایان می‌رساند، اجازه دهید به شبکه‌های عصبی پیچیده‌تر مانند شبکه‌هایی که برای طبقه‌بندی بردارهای ورودی استفاده می‌شوند، برویم.

طبقه بندی و تشخیص "تصاویر"

در نهایت، ما آماده‌ایم تا به شبکه‌های عصبی واقعی نگاه کنیم که کاربرد خاصی پیدا کرده‌اند! برای رفتن به بحث بعدی در مورد شبکه‌های عصبی هب و هاپفیلد، ساختار کلی شبکه‌های عصبی را تحلیل خواهیم کرد که تعدادی از مفاهیم مانند جدایی‌پذیری خطی، نمایش‌های دوقطبی و تشابهات بین شبکه‌های عصبی و حافظه‌ها را نشان می‌دهد. بیایید ابتدا نگاهی به شکل. 8.0 که نشان دهنده مدل اصلی شبکه عصبی است که ما می خواهیم استفاده کنیم. همانطور که می بینید، این یک شبکه یک گره با سه ورودی شامل افست B و یک خروجی است. می‌خواهیم ببینیم چگونه از این شبکه برای پیاده‌سازی عملیات منطقی و که به راحتی در نوروندهای مک‌کالوخ-پیتس پیاده‌سازی کردیم، استفاده کنیم.

بیایید با استفاده از نمایش های دوقطبی شروع کنیم، بنابراین همه 0 ها با -1 جایگزین می شوند. جدول حقیقت برای منطق و هنگام استفاده از ورودی ها و خروجی های دوقطبی در زیر نشان داده شده است:

و در اینجا تابع فعال سازی fc(x) است که از آن استفاده خواهیم کرد:


fc (x) = 1، اگر x i q
- 1، اگر x< q

توجه داشته باشید که تابع یک گام به سمت خروجی دوقطبی است. قبل از اینکه ادامه دهم، اجازه دهید دانه هایی را در مغز شما بکارم: مخلوط کردن و حس کردن در نهایت همین کار را انجام می دهند، آنها درجه دیگری از آزادی را در نورون های ما به ما می دهند که به آنها اجازه می دهد پاسخ هایی ایجاد کنند که بدون آن نمی توان به آنها دست یافت. به زودی خواهید دید.

یک نورود منفرد در شکل. 8.0 در تلاش است تا یک طبقه بندی برای ما انجام دهد. این به ما می گوید که آیا ورودی ما از این کلاس است یا نه. مثلاً تصویر درخت است یا خیر. یا در مورد ما (ساده منطقی AND)، کلاس +1 یا -1 است؟ این اساس اکثر شبکه های عصبی است، به همین دلیل است که من در مورد جداسازی خطی صحبت کردم. ما باید به یک جداسازی خطی از فضا برسیم که ورودی ها و خروجی های ما را به هم مرتبط کند تا فضایی که آنها را از هم جدا می کند، یک جدایی محکم وجود داشته باشد. بنابراین ما باید وزن و ارزش‌های سوگیری مناسبی را برای ما انجام دهیم. اما چگونه این کار را انجام دهیم؟ آیا این فقط آزمون و خطا است یا روش شناسی وجود دارد؟ پاسخ این است که تعدادی روش برای آموزش شبکه عصبی وجود دارد. این روش‌ها بر روی مثال‌های مختلف ریاضی کار می‌کنند و قابل اثبات هستند، اما فعلاً فقط مقادیری را که بدون در نظر گرفتن فرآیند به‌دست‌آمدن آنها کار می‌کنند، می‌گیریم. این تمرین‌ها ما را به یادگیری الگوریتم‌ها و شبکه‌های پیچیده‌تر از آنچه در اینجا نشان داده شده است، سوق می‌دهد.

بسیار خوب، ما در حال تلاش برای یافتن وزن‌های Wi و بایاس B هستیم که نتیجه صحیحی را برای ورودی‌های مختلف با تابع فعال‌سازی Fc(x) به دست می‌دهد. بیایید مجموع فعال‌سازی نوروند خود را بنویسیم و ببینیم آیا می‌توانیم رابطه‌ای بین وزن و ورودی ایجاد کنیم که بتواند به ما کمک کند. با توجه به ورودی‌های X1 و X2 با وزن‌های W1 و W2 به همراه B=1 و بایاس b، فرمول زیر را دریافت می‌کنیم:

X1*w1 + X2*w2 + B*b=q

از آنجایی که B همیشه 1.0 است، فرمول به صورت زیر ساده می شود:

X1*w1 + X2*w2 + b=q

X2 = -X1*w1/w2 + (q -b)/w2 (حل بر حسب X2)

آن چیست؟ این یک خط است! و اگر سمت چپ بزرگتر یا مساوی q باشد یعنی (X1*W1+X2*W2+b) نورود جواب 1 می دهد و در غیر این صورت نتیجه 1- را می دهد. آن ها خط مرز راه حل است. برنج. 9.0 این را نشان می دهد. در نمودار می بینید که شیب خط -w1/w2 و فاصله X2 (q-b)/w2 است. اکنون مشخص است که چرا می توانیم از q خلاص شویم؟ این بخشی از یک ثابت است و ما همیشه می‌توانیم b را برای رسیدن به هر ضرری مقیاس کنیم، بنابراین Q=0 را فرض می‌کنیم و در نتیجه معادله را به دست می‌آوریم:

X2 \u003d -X1 * w1 / w2 - b / w

ما می‌خواهیم وزن‌های W1 و W2 و بایاس b را به‌گونه‌ای بیابیم که خروجی‌های ما را از هم جدا کنند یا آنها را بدون همپوشانی در بخش‌های ویژه طبقه‌بندی کنند. این کلید تفکیک پذیری خطی است. برنج. 9.0 تعداد مرزهای تصمیم کافی را نشان می دهد، بنابراین می توانید هر یک از آنها را انتخاب کنید. بیایید ساده ترین آنها را در نظر بگیریم:

W1=W2=1

با این مقادیر، مرز تصمیم گیری می شود:

X2 = -X1*w1/w2 - b/w2 -> X2 = -1*X1 + 1

شیب 1- است و X2 = 1 را قطع می کند. اگر بردارهای ورودی را برای AND منطقی به این معادله وصل کنیم و از فعال سازی Fc(x) استفاده کنیم، خروجی صحیح را دریافت می کنیم. به عنوان مثال، اگر X2 + X1-1 > 0 باشد، پاسخ نورود -1 خواهد بود. بیایید با ورودی AND خود امتحان کنیم و ببینیم چه اتفاقی می افتد:

همانطور که می بینید، شبکه های عصبی با وزن مناسب و بایاس مشکل را کاملا حل می کنند. علاوه بر این، یک خانواده کامل از وزن ها وجود دارد که این کار را به خوبی انجام می دهند (فشار دادن مرزهای تصمیم در جهتی عمود بر خود). با این حال، یک نکته مهم وجود دارد. بدون آفست یا حساسیت، فقط پاس های مستقیم امکان پذیر خواهد بود intercept X2 باید 0 باشد. این بسیار مهم است و این دلیل اصلی استفاده از حساسیت یا سوگیری است، بنابراین این مثال مهم بود زیرا این واقعیت را به وضوح نشان می دهد. بنابراین، بیشتر به این نکته - چگونه می توان مقادیر وزن مناسب را پیدا کرد؟ بله، ما اکنون تشابهات هندسی داریم و این آغازی است برای یافتن یک الگوریتم.

آموزش هب

اکنون آماده دیدن اولین الگوریتم یادگیری و کاربرد آن در شبکه عصبی هستیم. یکی از ساده ترین الگوریتم های یادگیری توسط دونالد هب ابداع شد و مبتنی بر استفاده از بردارهای ورودی برای تغییر وزن است تا وزن بهترین جداسازی خطی ورودی و خروجی را ایجاد کند. افسوس، الگوریتم به خوبی کار می کند. در واقع، برای ورودی های متعامد، این کار خوب است، اما برای ورودی های غیر متعامد، الگوریتم از هم می پاشد. اگرچه این الگوریتم به وزن‌های صحیح برای همه ورودی‌ها منجر نمی‌شود، اما در قلب اکثر الگوریتم‌های یادگیری قرار دارد، بنابراین ما با آن شروع می‌کنیم.

قبل از دیدن الگوریتم، به یاد داشته باشید که این الگوریتم فقط برای یک نورد، یک شبکه عصبی تک لایه است. البته می توانید نورودهای زیادی را در یک لایه قرار دهید، اما همه آنها به صورت موازی کار می کنند و می توانند به صورت موازی آموزش داده شوند. به جای استفاده از یک بردار وزنی، چند نوروندها از ماتریس وزن استفاده می کنند. به هر حال، الگوریتم ساده است، چیزی شبیه به این است:

  • ورودی به شکل دوقطبی I=(-1,1,0,... -1,1) و حاوی k عنصر است.
  • N بردار ورودی وجود دارد و ما به مجموعه آنها به عنوان یک عنصر J اشاره خواهیم کرد، به عنوان مثال. ایج.
  • خروجی ها Yj نامیده می شوند و خروجی های K وجود دارد که هر کدام برای یک ورودی Ij هستند.
  • وزن‌های W1-Wk در یک بردار W=(w1، w2،...wk) قرار دارند.

مرحله 1. تمام وزن های خود را به 0 مقداردهی کنید و اجازه دهید آنها در بردار W از N ورودی قرار بگیرند. همچنین افست b را به 0 مقداردهی کنید.

مرحله 2. از j=1 تا n انجام دهید:

b = b + yj (که y نتیجه مطلوب است

w = w + Ij * yj (به یاد داشته باشید که این یک عملیات برداری است)

یک الگوریتم چیزی بیش از یک نوع «انباشته کننده» نیست. تغییر مرزهای تصمیم گیری بر اساس تغییرات در ورودی و خروجی است. تنها مشکل این است که در برخی موارد مرز به اندازه کافی سریع (یا اصلا) حرکت نمی کند و "یادگیری" صورت نمی گیرد.

پس چگونه از یادگیری هب استفاده کنیم؟ پاسخ این سوال مانند شبکه عصبی قبلی است با این تفاوت که اکنون یک روش الگوریتمی برای آموزش شبکه داریم و این شبکه هبیان نت نام دارد. به عنوان مثال، بیایید تابع بولی معتبر خود را بگیریم و ببینیم آیا الگوریتم می تواند وزن و مقادیر بایاس مناسب را برای آن پیدا کند یا خیر. جمع زیر معادل اجرای الگوریتم است:

w = + + + = [(-1، -1)*(-1)] + [(-1، 1)*(-1)] + [(1، -1)*(-1)] + [ (1، 1)*(1)] = (2،2)

b = y1 + y2 + y3 + y4 = (-1) + (-1) + (-1) + (1) = -2

بنابراین W1=2، W2=2، و b=2. اینها نسخه های مقیاس شده مقادیر W1=1، W2=2، B=-1 هستند که در بخش قبل دریافت کردیم. با این الگوریتم ساده، می‌توانیم یک شبکه عصبی (از یک نورود منفرد) را آموزش دهیم تا به مجموعه‌ای از ورودی‌ها پاسخ دهد یا آنها را به عنوان درست/نادرست یا ۱/-۱ طبقه‌بندی کنیم. و اکنون، اگر آرایه‌ای از چنین نوروندهایی داشته باشیم، می‌توانیم شبکه‌ای ایجاد کنیم که نه تنها ورودی‌ها را به صورت بله/خیر تعریف می‌کند، بلکه ورودی‌ها را با الگوهای خاصی مرتبط می‌کند. این یکی از پایه های ساختار بعدی شبکه های عصبی، شبکه های هاپفیلد است.

الگوریتم های هاپفیلد

جان هاپفیلد فیزیکدانی است که از بازی با شبکه های عصبی (که برای ما خوب است) لذت می برد. او یک مدل شبکه عصبی ساده (حداقل نسبتا) اما موثر به نام شبکه هاپفیلد ارائه کرد. برای تداعی استفاده می شود، اگر بردار x را وارد کنید، x را به عنوان خروجی دریافت خواهید کرد (امیدوارم). شبکه هاپفیلد در شکل 10.0 نشان داده شده است. این یک شبکه تک لایه با تعداد مشخصی از نوروندها برابر با تعداد ورودی های Xi است. شبکه به طور کامل متصل است، به این معنی که هر نورد به هر نورد دیگر متصل است و ورودی ها نیز خروجی هستند. این ممکن است برای شما عجیب به نظر برسد، زیرا ظاهر می شود بازخورد. بازخورد یکی از ویژگی های کلیدی شبکه هاپفیلد است و یکی از پایه های اساسی برای گرفتن نتیجه درست است.

شبکه هاپفیلد یک حافظه تداعی کننده خودکار است. ممکن است از یک تا چندین چرخه طول بکشد تا نتیجه درست به دست آید. بگذارید واضح بگویم: یک شبکه هاپفیلد ورودی را دریافت می کند و سپس آن را پس می دهد، و خروجی حاصل ممکن است ورودی مورد نظر باشد یا نباشد. این حلقه بازخورد ممکن است چندین بار قبل از بازگشت بردار ورودی عبور کند. بنابراین، دنباله عملکردی شبکه هاپفیلد: ابتدا وزن ورودی‌های خود را که می‌خواهیم مرتبط کنیم، تعیین کنیم، سپس بردار ورودی را بدهیم و ببینیم تابع فعال‌سازی چه می‌دهد. اگر نتیجه همان ورودی اصلی ما باشد، همه چیز درست شد، اگر نه، بردار حاصل را می گیریم و آن را به شبکه می دهیم. حال بیایید ماتریس وزن و الگوریتم یادگیری مورد استفاده در شبکه های هاپفیلد را ببینیم.

الگوریتم یادگیری برای شبکه هاپفیلد بر اساس قانون هب است و به سادگی نتیجه را جمع می کند. با این حال، از آنجایی که شبکه‌های هاپفیلد چندین نورون ورودی دارند، وزن دیگر آرایه‌ای از وزن نیست، بلکه آرایه‌ای از آرایه‌ها است که به طور فشرده در یک ماتریس قرار دارند. بنابراین، ماتریس وزن W برای شبکه هاپفیلد بر اساس این معادله ایجاد می شود:

  • بردارهای ورودی به شکل دوقطبی I = (-1،1،... -1،1) و حاوی k عنصر هستند.
  • N بردار ورودی وجود دارد و ما به مجموعه آنها به عنوان یک عنصر j از I اشاره خواهیم کرد. ایج.
  • خروجی ها Yj نامیده می شوند و k خروجی وجود دارد که هر کدام برای ورودی Ij خود هستند.
  • ماتریس وزن W مربع است و بعد kxk دارد ما k ورودی داریم.

ک
W (kxk) = e Iit x Ii
i = 1

توجه: هر حاصلضرب بیرونی دارای ابعاد K x K خواهد بود زیرا ما یک بردار ستون و یک بردار ردیف را ضرب می کنیم.

و Wii = 0 برای همه i

تابع فعال سازی fh(x) در زیر نشان داده شده است:

fh (x) = 1، اگر x i 0 باشد
0، اگر x< 0

fh (x) یک تابع پله ای با نتیجه باینری است. این بدان معنی است که هر ورودی باید باینری باشد، اما آیا قبلاً گفته بودیم که ورودی ها دو قطبی هستند؟ خب، بله، هست و نیست. هنگامی که ماتریس وزن تولید می شود، همه بردارهای ورودی را به فرمت دوقطبی تبدیل می کنیم، اما در عملیات عادی از نسخه باینری ورودی و خروجی استفاده می کنیم. شبکه هاپفیلد نیز باینری است. این تبدیل اختیاری است، اما بحث شبکه را کمی آسان‌تر می‌کند. به هر حال بیایید به یک مثال نگاه کنیم. فرض کنید می خواهیم 4 گره شبکه هاپفیلد ایجاد کنیم و می خواهیم این بردارها را فراخوانی کنند:

I1=(0,0,1,0), I2=(1,0,0,0), I3=(0,1,0,1) نکته: متعامد هستند

با تبدیل به مقادیر دوقطبی، دریافت می کنیم:

I1* = (-1، -1.1، -1)، I2* = (1، -1، -1، -1)، I3* = (-1.1، -1.1)

حال باید W1,W2,W3 را محاسبه کنیم که در آن Wi حاصلضرب جابجایی هر ورودی با خودش است.

W1= [I1* t x I1*] = (— 1 , - 1 , 1 , - 1 ) t x (— 1 , — 1 , 1 , — 1 ) =
1 1 — 1 1
1 1 — 1 1
— 1 — 1 1 — 1
1 1 — 1 1 W2 = [ I2* t x I2* ] = (1 , — 1 , — 1 , — 1 ) t x (1 , — 1 , — 1 , — 1 ) =
1 — 1 — 1 — 1
— 1 1 1 1
— 1 1 1 1
— 1 1 1 1

W3 = [ I3* t x I3* ] = (- 1 , 1 , - 1 , 1 ) t x (- 1 , 1 , - 1 , 1 ) =
1 — 1 1 — 1
— 1 1 — 1 1
1 — 1 1 — 1
— 1 1 — 1 1

صفر کردن قطر اصلی ماتریس وزن نهایی را به ما می دهد:

W=
0 — 1 — 1 — 1
— 1 0 — 1 3
— 1 — 1 0 — 1
— 1 3 — 1 0

وای حالا بیا برقصیم بیایید بردارهای اصلی خود را وارد کنیم و به نتایج نگاه کنیم. برای این کار کافی است ورودی ها را در ماتریس ضرب کنید و هر خروجی را با تابع Fh(x) پردازش کنید. در اینجا نتایج آمده است:

, — 1 ) و fh((0 , — 1 , — 1 , — 1 ) ) = (1 , 0 , 0 , 0 )

I3 x W = (— 2 , 3 , - 2 , 3 ) و fh((- 2 , 3 , — 2 , 3 ) ) = (0 , 1 , 0 , 1 )

ورودی ها کاملاً "به خاطر سپرده شدند" ، همانطور که باید باشد ، زیرا آنها متعامد هستند. به عنوان مثال آخر، فرض کنید ورودی ما (شنوایی، بینایی و غیره) کمی "نویز" است و حاوی یک خطا است. بیایید I3=(0,1,0,1) را بگیریم و مقداری نویز اضافه کنیم. نویز I3 = (0،1،1،1). حال بیایید ببینیم اگر این بردار نویزدار را به شبکه هاپفیلد وارد کنیم چه اتفاقی می‌افتد:

نویز I3 x W = (-3، 2، -2، 2) و Fh ((-3.2، -2، 2)) = (0.1،0.1)

با کمال تعجب، بردار اصلی "به خاطر سپرده می شود". عالیه. به این ترتیب، ما این امکان را داریم که یک "حافظه" ایجاد کنیم که پر از الگوهای بیتی است که شبیه درختان هستند (بلوط، بید گریان، صنوبر و غیره) و اگر وارد درخت دیگری شویم، مانند بید، که در شبکه نیست، شبکه ما (امیدواریم) اطلاعاتی را در مورد اینکه بید "فکر می کند" به نظر می رسد، خروجی می دهد. این یکی از نقاط قوت خاطرات انجمنی است: ما مجبور نیستیم شبکه را برای هر ورودی ممکن آموزش دهیم، ما فقط به مقدار زیادی نیاز داریم تا شبکه "اتصالات" داشته باشد. سپس ورودی‌های «بسته» معمولاً به‌عنوان ورودی اولیه یاد‌گرفته شده ذخیره می‌شوند. اساس تشخیص تصویر و صدا است. از من نپرس قیاس «درخت» را از کجا آوردم. در هر صورت، در پایان مقاله ما، یک شبیه‌ساز شبکه Hopfield به صورت خودکار مرتبط کردم که به شما امکان می‌دهد تا شبکه‌هایی با حداکثر 16 نوروند ایجاد کنید.

مرگ مغزی...

این تمام چیزی است که امروز قرار است به آن نگاه کنیم. من امیدوار بودم که به شبکه های پرسپترون برسم، اما خب. امیدوارم حداقل کمی متوجه شده باشید که شبکه های عصبی چیست و چگونه می توان برنامه های کاری برای مدل سازی آنها ایجاد کرد. ما اصطلاحات و مفاهیم اساسی، برخی از مبانی ریاضی و برخی از رایج ترین مدل های شبکه را پوشش داده ایم. با این حال، چیزهای زیادی برای یادگیری در مورد شبکه های عصبی وجود دارد. اینها پرسپترونها، حافظه انجمنی فازی یا FAMها، حافظه انجمنی دو طرفه یا BAMها، نقشه های کوهونن، الگوریتم پس انتشار شبکه، تئوری شبکه تشدید تطبیقی ​​و موارد دیگر هستند. همین، شبکه عصبی من را به بازی فرا می خواند!

نمونه ای از یک برنامه شبکه عصبی با کد منبع در C++.

در مورد شبکه های عصبی در اینجا به خوبی و با جزئیات نوشته شده است. بیایید سعی کنیم نحوه برنامه ریزی شبکه های عصبی و چگونه کار می کند. یکی از کارهایی که توسط شبکه های عصبی حل می شود، وظیفه طبقه بندی است. این برنامه عملکرد یک شبکه عصبی را نشان می دهد که رنگ ها را طبقه بندی می کند.

کامپیوتر یک مدل نمایش رنگ سه جزئی RGB را اتخاذ کرد، یک بایت برای هر یک از اجزاء اختصاص داده شده است. رنگ کامل با 24 بیت نشان داده می شود که 16 میلیون سایه می دهد. شخص می تواند هر یک از این سایه ها را به یکی از رنگ های نام برده نسبت دهد. پس وظیفه این است:

با توجه به InColor - رنگ RGB (24 بیت)

طبقه بندی رنگ، یعنی آن را به یکی از رنگ های داده شده توسط مجموعه M= (مشکی، قرمز، سبز، زرد، آبی، بنفش، فیروزه ای، سفید) نسبت دهید.

OutColor - رنگ از مجموعه M

راه حل شماره 1. (دیجیتال)

آرایه ای از 16777216 عنصر ایجاد کنید

محلول شماره 2. (آنالوگ)

یک تابع مانند بنویسید

int8 GetColor (رنگ DWORD)
{
دو برابر قرمز = (دوبل (((رنگ>> 16)&0xFF)))/255*100;
Double Green = (double(((Color>>8)&0xFF)))/255*100;
دو برابر آبی = (دو ((رنگ&0xFF)))/255*100;
دو سطح = قرمز;
if (سبز > سطح)
سطح = سبز;
if (آبی > سطح)
سطح = آبی
سطح = سطح * 0.7;
int8 OutColor = 0;
اگر (قرمز > سطح)
OutColor |= 1;
if (سبز > سطح)
OutColor |= 2;
if (آبی > سطح)
OutColor |= 4;
بازگشت OutColor;
}

اگر بتوان مسئله را با معادلات ساده توصیف کرد، اما اگر تابع آنقدر پیچیده باشد که بتوان آن را توصیف کرد، این کار جواب می دهد. خود را قرض نمی دهد، در اینجا شبکه های عصبی به نجات می آیند.

راه حل شماره 3. (شبکه عصبی)

ساده ترین شبکه عصبی پرسپترون تک لایه

هر چیزی عصبی در کلاس CNeuroNet قرار دارد

هر نورون دارای 3 ورودی است که در آن شدت اجزای رنگ تغذیه می شود. (R,G,B) در محدوده (0 - 1). با توجه به تعداد رنگ های مجموعه خروجی، در مجموع 8 نورون وجود دارد. در نتیجه عملیات شبکه، سیگنالی در خروجی هر نورون در محدوده (0 - 1) تولید می شود که به معنای احتمال وجود این رنگ در ورودی است. حداکثر را انتخاب می کنیم و جواب می گیریم.

نورون ها تابع فعال سازی سیگموئیدی ActiveSigm() دارند. تابع ActiveSigmPro() که مشتقی از تابع فعال‌سازی سیگموئید است، برای آموزش شبکه عصبی با استفاده از روش انتشار پس‌از استفاده می‌شود.

خط اول شدت رنگ را نشان می دهد. در زیر جدول ضرایب وزنی (4 عدد) آمده است. در ستون آخر، مقدار خروجی نورون ها. رنگ را تغییر دهید، پاسخ صحیح را از لیست انتخاب کنید، از دکمه استفاده کنید آموزش دهید تابع یادگیری را فراخوانی کنید. آموزش خودکار روش یادگیری خودکار را 1000 بار فراخوانی می کند، یک رنگ تصادفی با فرمول حل شماره 2 تعیین می شود و تابع یادگیری فراخوانی می شود.

دانلود کد منبع و برنامه شبکه عصبی

برنامه نویسی شبکه های عصبی مصنوعی - من به زبان C ++ در یک پارادایم شی گرا می نویسم

برای معماری های عصبی (ساختارها)، روش ها و وظایف ساده، از هر زبانی (حتی Basic) می توان استفاده کرد، اما برای پروژه های پیچیده، زبان های برنامه نویسی شی گرا (مانند C ++) مناسب ترین هستند. من از C ++ استفاده می کنم، در صورت لزوم (در زمان برترین مکان های برنامه) برای بازنویسی توابع فردی (نیاز به محاسبات سریعتر) در اسمبلر درون خطی.

ما مزایای یک رویکرد شی گرا برای برنامه نویسی شبکه های عصبی را نشان خواهیم داد. یک شبکه عصبی می‌تواند انواع مختلفی از نورون‌ها و/یا لایه‌ها داشته باشد (به یادداشتی در مورد امکانات مدرن برای جمع‌آوری یک شبکه عصبی کانولوشنال از تعداد زیادی لایه و نورون از انواع مختلف مراجعه کنید). برخی از عملکردهای رایج نورون ها یا لایه ها را می توان به یک کلاس اجدادی انتزاعی منتقل کرد و از آن کلاس هایی برای انواع خاصی از نورون ها/لایه ها ایجاد کرد (به ارث می برد) (این کلاس های نسلی ویژگی ها و رفتارهایی را که قبلاً برای یک نوع خاص منحصر به فرد هستند توصیف می کنند. نورون یا لایه). این امر حذف تکثیر چندگانه چیزهای مشترک (یکسان) در متن برنامه و توانایی نوشتن یک کد کنترل برنامه انعطاف‌پذیرتر و مستقل از انواع خاصی از نورون‌ها/لایه‌ها را با استفاده از اصول چندشکلی تضمین می‌کند.

به عنوان مثال، نام کلاس‌ها را برای توصیف لایه‌های یک شبکه عصبی در یکی از برنامه‌هایی که توسعه دادم در نظر بگیرید. 3 سلسله مراتب اصلی وجود دارد - یکی برای کلاس های توصیف کننده ساختار لایه (یک زنجیره ارثی از سه کلاس)، سلسله مراتب دوم برای توابع غیر خطی نورون ها (کلاس پایه و ده فرزند از آن)، و سومی برای خود لایه ها ( زنجیره ای از 5 کلاس پایه-متوسط ​​و 12 کلاس واقعی که از این زنجیره در سطوح مختلف آن منشعب شده اند).

شبکه های عصبی

در متن برنامه از 31 کلاس برای توصیف رفتار لایه های شبکه استفاده می شود (پیاده سازی می شود) اما فقط 12 تای آنها لایه های واقعی را پیاده سازی می کنند و بقیه کلاس ها:

  • یا انتزاعی، تعریف رفتار کلی، امکان ایجاد ساده تر فرزندان جدید (انواع لایه های جدید) و افزایش درجه تغییرناپذیری منطق کنترل (اجرای عملکرد شبکه عصبی) به لایه های مختلف تشکیل دهنده را در آینده فراهم می کند. شبکه؛
  • یا، برعکس، آنها تابع هستند و در لایه به عنوان "مولفه" آن گنجانده می شوند (نمونه ای از شی که ساختار و ویژگی های لایه را توصیف می کند، و نمونه ای از شی که عملکرد غیرخطی نورون ها را اجرا می کند) .

عملکرد شبکه عصبی ایجاد شده از طریق فراخوانی روش‌ها و ویژگی‌های کلاس‌های انتزاعی برنامه‌ریزی می‌شود، صرف نظر از اینکه کدام کلاس فرزند خاص یک یا آن لایه از شبکه عصبی را پیاده‌سازی می‌کند.

آن ها منطق کنترل در اینجا از محتوای خاص جدا است و فقط به مبانی کلی و ثابت گره خورده است. در مورد کلاس های خاص، فقط باید کد "سازنده" شبکه عصبی شناخته شود - فقط در زمان ایجاد کار می کند. شبکه جدیدبر اساس تنظیمات مشخص شده در رابط یا هنگام بارگیری یک شبکه ذخیره شده قبلی از یک فایل. افزودن انواع جدیدی از لایه‌های عصبی به برنامه منجر به تغییر در الگوریتم‌های (منطق) کار و آموزش شبکه نمی‌شود، بلکه تنها نیاز به افزودن کوچکی به کد مکانیسم‌های ایجاد (یا خواندن از یک فایل) دارد. یک شبکه عصبی

هیچ انتزاعی (کلاس) برای نورون های فردی وجود ندارد - فقط برای لایه ها. اگر نیاز دارید که یک نورون منفرد را روی برخی از لایه‌ها (یعنی روی خروجی) قرار دهید، فقط شمارنده‌ای از تعداد نورون‌ها برابر با یک به نمونه‌ای از کلاس لایه عصبی مورد نظر ارسال می‌شود.

بنابراین، طراحی و برنامه‌نویسی شی‌گرا در مقایسه با برنامه‌نویسی ساخت‌یافته، انعطاف‌پذیری بیشتری را برای اجرای اصل «تفرقه کن و حکومت کن» را فراهم می‌کند:

  • حذف قطعات کد رایج به کلاس های اجدادی (اصل وراثت)،
  • حصول اطمینان از پنهان سازی لازم اطلاعات (اصل کپسولاسیون)،
  • ساختن-به دست آوردن منطق کنترل خارجی، مستقل از پیاده سازی های خاص کلاس ها (اصل چند شکلی).
  • دستیابی به پلتفرم متقابل از طریق حذف قطعات وابسته به سخت افزار یا پلت فرم به طبقات نسل (تعداد آنها می تواند برای هر نرم افزار و اجرای سخت افزاری خاص تغییر کند، در حالی که تعداد کلاس های اجداد پایه و تمام منطق های سطح بالا یکسان خواهد بود. و بدون تغییر).

برای وظایف امروزی توسعه ابزارهای نورومدلینگ انعطاف پذیر و قدرتمند، همه اینها بسیار مفید است.

همچنین پست مربوط به پروژه های زبان های خاص را برای توصیف ANN ها مشاهده کنید.

شبکه های عصبی،
روش های تجزیه و تحلیل داده ها:
از تحقیق تا توسعه و اجرا

خانه
خدمات
شبکه های عصبی
ایده های اساسی
توانایی ها
فواید
مناطق استفاده
نحوه استفاده

دقت راه حل
NS و AI
برنامه ها
مقالات
وبلاگ
درباره نویسنده / مخاطبین

تنظیم دقیق کیهانترکیبی منحصر به فرد از خواص متعدد کیهان است به گونه ای که تنها آن می تواند وجود جهان قابل مشاهده را تضمین کند. حتی حداقل انحرافات در ترکیب یا مقادیر این ویژگی ها با وجود جهان ناسازگار است.

معمولاً مفهوم تنظیم دقیق جهان در یک فرمول ضعیف در نظر گرفته می شود: مقادیر تنها چند ثابت جهان در نظر گرفته می شود و نتیجه گیری فقط در مورد عدم امکان وجود بشر با انحرافات آنها انجام می شود. چنین رویکرد محدودی تلاش‌های مذهبی برای توضیح این پدیده را تحریک می‌کند، برای مثال، اصل انسان دوستیاعلام مصلحت خدادادی هستی در وجود انسان.

تنظیم دقیق کیهان چشمگیرترین برداشت کیهان شناسی مدرن است: هیچ دیگری را نمی توان از نظر قدرت و قانع کننده بودن شواهد در مورد بن بست بزرگ با آن مقایسه کرد، مبنی بر اینکه جهان به طور کلی متفاوت از روش علم مدرن چیده شده است. آن را تصور می کند و در چارچوب این دیدگاه کاوش می کند. نه چند ثابت، بلکه به طور کلی مجموعه عظیم غیرقابل تصوری از حقایق مختلف، اگر هر یک از آنها حتی اندک تفاوتی با موارد مشاهده شده داشت، وجود حیات و جهان را غیرممکن می کرد. مقادیر خواص ذرات بنیادی (جرم، بار، نیمه عمر ...)، خواص فعل و انفعالات اساسی، خواص مواد (بله، حداقل آب) - همه اینها و خیلی، خیلی بیشتر با دقت انتخاب شده است. به طوری که جهان وجود دارد. هر یک از میلیون ها این واقعیت، اگر متفاوت بود، او را به نیستی می کشاند. یا حداقل (در فرمول ضعیف) - به عدم امکان زندگی در آن.

شبکه های عصبی مصنوعی

آگاهی از این موضوع «تصویر علمی جهان» معمول دوران بن‌بست بزرگ را کاملاً از بین می‌برد. اما، همانطور که قبلاً گفته شد، در اینجا یک برداشت وجود دارد: مردم از آگاهی از آن خودداری می کنند.

توضیح تنظیم دقیق در ITV

ITV ثابت می کند که جهان فقط از اطلاعات تشکیل شده است. ناظر مشاهده شده را مشاهده می کند و اطلاعات دریافت می کند - و این تمام چیزی است که جهان را می سازد. اطلاعات، که صرفاً توصیفی از چیزی است، اگر به خودی خود به وجود بیاید، می تواند هر چیزی ممکن باشد. با این حال، اطلاعات به خودی خود چیزی نیست و نمی تواند چیزی را توصیف کند؛ برای این کار، همیشه به شرایط خاصی نیاز است و محتوای اطلاعات را محدود می کند.

بنابراین، جهان مجموعه ای از انتخاب های شرطی اطلاعات قابل مشاهده خاص از طیف گسترده ای از اطلاعات است که در اصل امکان پذیر است. وجود کیهان ملاک نهایی همه این انتخابهاست: آنها تا آنجایی هستند که جهان هستی وجود دارد، اگر متفاوت بودند، جهان وجود نداشت.

این تنظیم دقیق جهان است: مقادیر ثابت های جهان و به طور کلی تمام ویژگی های جهان با واقعیت وجود جهان تعیین شده است، هیچ کس به طور خاص آنها را انتخاب نکرده است، آنها از هیچ واحدی مشتق نشده اند. ثابت، هیچ امکانی برای ایجاد ترکیب و سایر مقادیر آنها وجود ندارد.

ما شبکه عصبی را تجزیه و تحلیل می کنیم. سی شارپ

در این مقاله، من پیشنهاد می‌کنم عملکرد شبکه‌های عصبی را از هم جدا کنیم و یکی از ساده‌ترین انواع یادگیری شبکه‌های عصبی را با کمک یک معلم پرتاب کنیم.

باید چند کلمه به دستگاه این شبکه عصبی بسیار "بزرگ" و "وحشتناک" داد. مردم برای مدت طولانی به این سو و آن سو می رفتند و به این سوال فکر می کردند: (معنای زندگی چیست؟)
چگونه می توان الگوها را شناخت؟

پاسخ های زیادی وجود داشت. اکتشافی های مختلف، مقایسه الگوها و بسیاری موارد دیگر وجود دارد. یک پاسخ یک شبکه عصبی بود. [به هر حال، یک شبکه عصبی نه تنها می تواند تصاویر را تشخیص دهد]

بنابراین. ساختار شبکه عصبی این تصویر را تصور کنید: یک عنکبوت تار را بافته و تار یک مگس را گرفت. مکانی که مگس به آن برخورد کرد نورونی است که "تا حد امکان" به هدف نزدیک بود. یک شبکه عصبی از نورون هایی تشکیل شده است که توصیف می کنند
شانس یک رویداد شرح "احتمال" یک رویداد (هر نورون) را می توان (به عنوان مثال) در یک فایل جداگانه ذخیره کرد.

حالا بریم سر موضوع اصلی گفتگوی امشب.

نحوه عملکرد یک شبکه عصبی

چگونه آموخته و شناخته می شود؟

نمونه ای از ساختار یک شبکه عصبی در این تصویر به وضوح قابل مشاهده است:

ورودی مجموعه ای از سیگنال های ورودی X را دریافت می کند که در مجموعه وزن های W (Xi * Wi) ضرب می شوند. در نورون مجموع محصولات محاسبه شده و عدد معینی به خروجی ارسال می شود.
پس از شمارش مقادیر تمام نورون ها، جستجو برای بزرگترین مقدار انجام می شود. این بالاترین مقدار است و پاسخ صحیح به سؤال در نظر گرفته می شود. این برنامه تصویری را تولید می کند که توسط نورون یافت شده توصیف می شود.
در حالت یادگیری، کاربر این فرصت را دارد که (بر اساس تجربه خود) نتیجه را تصحیح کند و سپس برنامه وزن نورون ها را مجدداً محاسبه می کند.
فرمول محاسبه مجدد تقریباً به شرح زیر است: W[i] = W[i] + سرعت*دلتا*X[i] - اینجا
W[i] - وزن عنصر i،
سرعت - سرعت یادگیری،
دلتا - علامت (-1 یا 1)،
X[i] - مقدار i-امین سیگنال ورودی (در بسیاری از موارد 0 یا 1)

چرا از دلتا استفاده می شود؟

بیایید چنین موردی را در نظر بگیریم.

ورودی برنامه یک عکس با عدد 6 است.

برای نوشتن شبکه های عصبی از چه زبان برنامه نویسی باید استفاده کرد؟

شبکه عصبی عدد 8 را تشخیص داده است. کاربر عدد را با 6 تصحیح می کند. بعد در برنامه چه اتفاقی می افتد؟

این برنامه داده ها را برای دو نورون که عدد 6 و عدد 8 را توصیف می کنند دوباره محاسبه می کند و برای نورون توصیف کننده عدد 6 دلتا برابر با 1 و برای 8 = -1 خواهد بود.

پارامتر سرعت چگونه تنظیم می شود؟

این پارامتر، هرچه موضوعات کوچکتر باشد، شبکه طولانی تر و دقیق تر (کیفیت بالاتر) آموزش داده می شود و هر چه بزرگتر باشد، شبکه سریعتر و "سطحی" تر آموزش داده می شود.

پارامتر Speed ​​را می توان هم به صورت دستی، هم توسط کاربر و هم در حین اجرای برنامه تنظیم کرد (به عنوان مثال، const)

همانطور که می بینید، وزن کاراکترها نیز باید تعریف شوند. در وهله اول چگونه تعریف می شوند؟ در واقع، همه چیز در اینجا نیز ساده است. آنها کاملاً تصادفی تعیین می شوند، این امر از "سوگیری" شبکه عصبی جلوگیری می کند. معمولاً فاصله مقادیر تصادفی کوچک -0.4…0.4 یا -0.3..0.2 و غیره است.

حالا بیایید به جالب ترین قسمت برویم. چگونه آن را کدگذاری کنیم!

بیایید دو کلاس ایجاد کنیم - کلاس Neuron و کلاس Network (به ترتیب Neuron و Net)

بیایید وظایف اصلی کلاس نورون را شرح دهیم:

- واکنش به سیگنال ورودی

- جمع بندی

- تنظیم

(چگونه می توانید خواندن از یک فایل را اضافه کنید و ایجاد کنید مقادیر اولیه، حفظ. بگذارید به "وجدان" خوانندگان بسپاریم)

متغیرهای داخل کلاس Neuron:symbol
- شناسه "شناسایی" - LastY

- تصویر توصیف شده - نماد

هوش مصنوعی، شبکه های عصبی، یادگیری ماشین - همه این مفاهیم رایج در حال حاضر واقعا به چه معنا هستند؟ برای اکثر افراد ناآگاه، که من خودم هستم، آنها همیشه چیزی خارق العاده به نظر می رسیدند، اما در واقع جوهر آنها در ظاهر نهفته است. من ایده نوشتن را داشتم زبان سادهدر مورد شبکه های عصبی مصنوعی خودتان یاد بگیرید و به دیگران بگویید این فناوری چیست، چگونه کار می کند، تاریخچه و چشم انداز آن را در نظر بگیرید. در این مقاله سعی کردم وارد جنگل نشوم، بلکه به سادگی و به طور عمومی در مورد این منطقه امیدوارکننده در دنیای فناوری پیشرفته صحبت کنم.

کمی تاریخ

برای اولین بار، مفهوم شبکه های عصبی مصنوعی (ANN) هنگام تلاش برای مدل سازی فرآیندهای مغز مطرح شد. اولین پیشرفت بزرگ در این زمینه را می توان ایجاد مدل شبکه عصبی مک کالوخ پیتس در سال 1943 دانست. دانشمندان ابتدا مدلی از یک نورون مصنوعی را توسعه دادند. آنها همچنین پیشنهاد ساخت شبکه ای از این عناصر را برای انجام عملیات منطقی دادند. اما مهمتر از همه، دانشمندان ثابت کرده اند که چنین شبکه ای قادر به یادگیری است.

گام مهم بعدی توسعه اولین الگوریتم محاسبه شبکه عصبی مصنوعی توسط دونالد هب در سال 1949 بود که برای چند دهه آینده اساسی شد. در سال 1958، فرانک روزنبلات پارسپترون را توسعه داد، سیستمی که فرآیندهای مغز را تقلید می کند. زمانی، این فناوری مشابهی نداشت و هنوز در شبکه های عصبی اساسی است. در سال 1986، تقریباً به طور همزمان، مستقل از یکدیگر، دانشمندان آمریکایی و شوروی به طور قابل توجهی روش بنیادی آموزش پرسپترون چند لایه را بهبود بخشیدند. در سال 2007، شبکه های عصبی دچار تولدی دوباره شدند. جفری هینتون، دانشمند کامپیوتر بریتانیایی، پیشگام الگوریتم یادگیری عمیق برای شبکه های عصبی چندلایه بود که اکنون برای مثال برای راه اندازی وسایل نقلیه بدون سرنشین استفاده می شود.

به طور خلاصه در مورد اصلی

در معنای عام کلمه، شبکه های عصبی مدل های ریاضی هستند که بر اساس اصل شبکه های سلول های عصبی در یک موجود جانوری کار می کنند. ANN ها را می توان در راه حل های قابل برنامه ریزی و سخت افزاری پیاده سازی کرد. برای سهولت درک، یک نورون را می توان به عنوان نوعی سلول نشان داد که ورودی های متعدد و یک خروجی دارد. اینکه چگونه سیگنال های ورودی متعدد به یک سیگنال خروجی تبدیل می شوند توسط الگوریتم محاسبه تعیین می شود. مقادیر مؤثر به هر ورودی نورون داده می شود، که سپس در امتداد اتصالات بین عصبی (خلاصه) توزیع می شود. سیناپس ها دارای یک پارامتر هستند - وزن که به همین دلیل اطلاعات ورودی هنگام حرکت از یک نورون به نورون دیگر تغییر می کند. ساده ترین راه برای درک نحوه عملکرد شبکه های عصبی استفاده از ترکیب رنگ به عنوان مثال است. نورون های آبی، سبز و قرمز وزن های متفاوتی دارند. اطلاعات آن نورون که وزن آن در نورون بعدی غالب خواهد بود.

شبکه عصبی خود سیستمی از بسیاری از نورون ها (پردازنده ها) است. به طور جداگانه، این پردازنده ها بسیار ساده هستند (بسیار ساده تر از کامپیوتر شخصی) اما هنگامی که به یک سیستم بزرگ متصل می شوند، نورون ها قادر به انجام وظایف بسیار پیچیده هستند.

بسته به حوزه کاربرد، شبکه عصبی را می توان به روش های مختلفی تفسیر کرد، به عنوان مثال، بر حسب فراگیری ماشین ANN یک روش تشخیص الگو است. از نقطه نظر ریاضی، این یک مسئله چند پارامتری است. از نقطه نظر سایبرنتیک - مدلی از کنترل تطبیقی ​​رباتیک. برای هوش مصنوعی ANN یک جزء اساسی برای مدل‌سازی هوش طبیعی با استفاده از الگوریتم‌های محاسباتی است.

مزیت اصلی شبکه های عصبی نسبت به الگوریتم های محاسباتی معمولی، توانایی آنها در آموزش است. در معنای کلی کلمه، یادگیری عبارت است از یافتن ضرایب صحیح ارتباط بین نورون ها و همچنین در تعمیم داده ها و شناسایی روابط پیچیده بین سیگنال های ورودی و خروجی. در واقع، آموزش موفق شبکه عصبی به این معنی است که سیستم قادر خواهد بود بر اساس داده هایی که در مجموعه آموزشی نیست، نتیجه صحیح را شناسایی کند.

وضعیت امروز

و مهم نیست که این فناوری چقدر امیدوارکننده باشد، تا کنون شبکه های عصبی مصنوعی هنوز با توانایی های مغز و تفکر انسان فاصله زیادی دارند. با این وجود، شبکه های عصبی در حال حاضر در بسیاری از زمینه های فعالیت های انسانی مورد استفاده قرار می گیرند. آنها تاکنون قادر به تصمیم گیری بسیار هوشمندانه نیستند، اما می توانند فردی را در جایی که قبلاً مورد نیاز بوده است، جایگزین کنند. از جمله زمینه های متعدد کاربرد شبکه های عصبی مصنوعی عبارتند از: ایجاد سیستم های خودآموز فرآیندهای تولید، وسایل نقلیه بدون سرنشین، سیستم های تشخیص تصویر، سیستم های امنیتی هوشمند، روباتیک، سیستم های نظارت بر کیفیت، رابط های تعامل صوتی، سیستم های تحلیلی و بسیاری موارد دیگر. چنین توزیع گسترده ای از شبکه های عصبی، در میان چیزهای دیگر، به دلیل ظهور است راه های مختلفتسریع یادگیری ANN

تا به امروز، بازار شبکه های عصبی بسیار بزرگ است - میلیاردها و میلیاردها دلار. همانطور که تمرین نشان می دهد، بیشتر فناوری های شبکه های عصبی در سراسر جهان تفاوت کمی با یکدیگر دارند. با این حال، استفاده از شبکه های عصبی یک تمرین بسیار پرهزینه است که در بیشتر موارد فقط شرکت های بزرگ می توانند از عهده آن برآیند. توسعه، آموزش و آزمایش شبکه های عصبی به قدرت محاسباتی زیادی نیاز دارد، بدیهی است که بازیگران بزرگ در بازار فناوری اطلاعات به اندازه کافی از این قدرت برخوردار هستند. از جمله شرکت های اصلی که در این زمینه پیشرفت کرده اند می توان به بخش گوگل دیپ مایند، بخش تحقیقات مایکروسافت، آی بی ام، فیس بوک و بایدو اشاره کرد.

البته، همه اینها خوب است: شبکه های عصبی در حال توسعه هستند، بازار در حال رشد است، اما تا کنون وظیفه اصلی حل نشده است. بشر نتوانسته است فناوری ای ایجاد کند که حتی از نظر توانایی به مغز انسان نزدیک باشد. بیایید به تفاوت های اصلی بین مغز انسان و شبکه های عصبی مصنوعی نگاه کنیم.

چرا شبکه های عصبی هنوز از مغز انسان دور هستند؟

مهمترین تفاوتی که اصل و کارایی سیستم را به طور اساسی تغییر می دهد، انتقال سیگنال متفاوت در شبکه های عصبی مصنوعی و در شبکه بیولوژیکی نورون ها است. واقعیت این است که در ANN، نورون ها مقادیری را منتقل می کنند که مقادیر واقعی هستند، یعنی اعداد. در مغز انسان تکانه ها با دامنه ثابتی منتقل می شوند و این تکانه ها تقریباً آنی هستند. از این به دنبال تعدادی از مزایای شبکه های عصبی انسان است.

اولاً، خطوط ارتباطی در مغز بسیار کارآمدتر و مقرون به صرفه تر از خطوط ارتباطی ANN هستند. ثانیاً، مدار پالس سادگی اجرای فناوری را تضمین می کند: کافی است از مدارهای آنالوگ به جای مکانیزم های محاسباتی پیچیده استفاده کنید. در نهایت، شبکه های ضربه ای از تداخل صدا محافظت می شوند. اعداد واقعی تحت تأثیر نویز قرار می گیرند که احتمال خطا را افزایش می دهد.

نتیجه

البته در دهه گذشته رونق واقعی در توسعه شبکه های عصبی وجود داشته است. این در درجه اول به این دلیل است که فرآیند یادگیری ANN بسیار سریعتر و آسان تر شده است. همچنین، شبکه های عصبی به اصطلاح "از پیش آموزش داده شده" به طور فعال شروع به توسعه کردند که می تواند به طور قابل توجهی روند اجرای این فناوری را سرعت بخشد. و اگر هنوز خیلی زود است که بگوییم آیا شبکه‌های عصبی قادر خواهند بود توانایی‌های مغز انسان را به طور کامل بازتولید کنند یا خیر، این احتمال که در دهه آینده شبکه‌های عصبی مصنوعی بتوانند جایگزین یک فرد در یک چهارم مشاغل موجود شوند، بیشتر می‌شود. بیشتر شبیه حقیقت است

برای کسانی که می خواهند بیشتر بدانند

  • جنگ عصبی بزرگ: گوگل واقعاً چه کاری انجام می دهد
  • چگونه کامپیوترهای شناختی می توانند آینده ما را تغییر دهند

چه کنیم؟ ما سعی خواهیم کرد یک شبکه عصبی ساده و بسیار کوچک ایجاد کنیم که ما توضیحو آموزش دهیدهر چیزی را تشخیص دهد در عین حال، ما وارد تاریخ و جنگل ریاضی نخواهیم شد (پیدا کردن چنین اطلاعاتی بسیار آسان است) - در عوض، سعی می کنیم کار را (نه این واقعیت که موفق خواهیم شد) را با نقشه ها و کد برای شما و خودمان توضیح دهیم. .
بسیاری از اصطلاحات در شبکه های عصبی با زیست شناسی مرتبط هستند، بنابراین اجازه دهید از ابتدا شروع کنیم:

مغز چیز پیچیده ای است، اما می توان آن را به چند بخش و عملیات اصلی نیز تقسیم کرد:

عامل ایجاد کننده ممکن است درونی؛ داخلی(به عنوان مثال، یک تصویر یا یک ایده):

حالا بیایید به موارد اساسی و ساده نگاه کنیم قطعاتمغز:

مغز مانند یک شبکه کابلی است.

نورون- واحد اصلی محاسبه در مغز، سیگنال‌های شیمیایی نورون‌های دیگر را دریافت و پردازش می‌کند و بسته به عوامل متعددی، یا کاری انجام نمی‌دهد یا یک تکانه الکتریکی یا پتانسیل عمل ایجاد می‌کند، که سپس سیگنال‌هایی را به نورون‌های همسایه ارسال می‌کند. از طریق سیناپس ها مربوطنورون ها:

رویاها، خاطرات، حرکات خودتنظیمی، رفلکس ها، و در واقع هر چیزی که فکر می کنید یا انجام می دهید - همه چیز به دلیل این فرآیند اتفاق می افتد: میلیون ها یا حتی میلیاردها نورون روی آنها کار می کنند. سطوح مختلفو اتصالاتی ایجاد می کند که زیرسیستم های مختلف موازی ایجاد می کند و یک شبکه عصبی بیولوژیکی را نشان می دهد. خالص.

البته، همه اینها ساده سازی و کلی گویی هستند، اما به لطف آنها می توانیم ساده را توصیف کنیم
شبکه عصبی:

و آن را با استفاده از نمودار رسمی توصیف کنید:

در اینجا کمی توضیح لازم است. دایره ها نورون هستند و خطوط اتصال بین آنها هستند و برای اینکه در این مرحله پیچیده نشوند، ارتباطات متقابلنشان دهنده یک جریان مستقیم اطلاعات است از چپ به راست. اولین نورون در حال حاضر فعال است و با رنگ خاکستری مشخص شده است. یک عدد هم به آن اختصاص دادیم (اگر کار کرد 1، اگر نشد 0). اعداد بین نورون ها را نشان می دهد وزناتصالات

نمودارهای بالا زمان شبکه را نشان می دهند، برای نمایش دقیق تر، باید آن را به فواصل زمانی تقسیم کنید:

برای ایجاد شبکه عصبی خود، باید بدانید که وزن‌ها چگونه بر نورون‌ها تأثیر می‌گذارند و نورون‌ها چگونه یاد می‌گیرند. به عنوان مثال، اجازه دهید یک خرگوش (خرگوش آزمایشی) را در نظر بگیریم و آن را در شرایط یک آزمایش کلاسیک قرار دهیم.

هنگامی که جریان هوای مطمئنی به سمت آنها هدایت می شود، خرگوش ها مانند مردم پلک می زنند:

این مدل رفتار را می توان با نمودارها ترسیم کرد:

همانطور که در نمودار قبلی، این نمودارها تنها لحظه ای را نشان می دهند که خرگوش نفسی را احساس می کند، و بنابراین ما رمزگذاری puff به عنوان یک مقدار بولی. علاوه بر این، ما محاسبه می کنیم که آیا نورون دوم بر اساس مقدار وزن شلیک می شود یا خیر. اگر برابر با 1 باشد، نورون حسی شلیک می شود، ما چشمک می زنیم. اگر وزن کمتر از 1 باشد، پلک نمی زنیم: نورون دوم حد— 1.

بیایید یک عنصر دیگر را معرفی کنیم - ایمن سیگنال صوتی:

ما می توانیم علاقه خرگوش را به این صورت مدل کنیم:

تفاوت اصلی این است که در حال حاضر وزن است صفربنابراین ما یک خرگوش چشمک زن نگرفتیم، خوب، حداقل هنوز نه. حالا به خرگوش یاد می‌دهیم که با دستور پلک بزند و مخلوط کند
مواد تحریک کننده (بوق و نفس):

مهم است که این رویدادها در زمان های مختلف رخ دهند عصر، در نمودارها به شکل زیر خواهد بود:

خود صدا هیچ کاری انجام نمی دهد، اما جریان هوا همچنان باعث پلک زدن خرگوش می شود و ما این را از طریق وزنه ها ضربدر محرک ها (به رنگ قرمز) نشان می دهیم. تحصیلاترفتار پیچیده را می توان به عنوان یک تغییر تدریجی در وزن بین نورون های متصل در طول زمان ساده کرد.

برای تربیت خرگوش مراحل زیر را تکرار کنید:

برای سه تلاش اول، نمودارها به این صورت خواهند بود:

توجه داشته باشید که وزن محرک صوتی پس از هر تکرار افزایش می یابد (با رنگ قرمز مشخص شده است)، این مقدار اکنون دلخواه است - ما 0.30 را انتخاب کردیم، اما عدد می تواند هر چیزی باشد، حتی منفی. پس از تکرار سوم، تغییری در رفتار خرگوش مشاهده نخواهید کرد، اما پس از تکرار چهارم، اتفاق شگفت انگیزی رخ خواهد داد - رفتار تغییر خواهد کرد.

ما قرار گرفتن در معرض هوا را حذف کردیم، اما خرگوش همچنان با شنیدن صدای بوق پلک می‌زند! آخرین شماتیک ما می تواند این رفتار را توضیح دهد:

ما به خرگوش آموزش دادیم که با پلک زدن به صدا پاسخ دهد.

در یک آزمایش واقعی از این نوع، ممکن است بیش از 60 تکرار برای رسیدن به نتیجه مورد نیاز باشد.

اکنون ما دنیای بیولوژیکی مغز و خرگوش ها را ترک خواهیم کرد و سعی می کنیم همه چیز را با آن سازگار کنیم
ایجاد یک شبکه عصبی مصنوعی را یاد گرفت. ابتدا بیایید سعی کنیم یک کار ساده را انجام دهیم.

فرض کنید ماشینی داریم با چهار دکمه که با فشار دادن دکمه سمت راست غذا را پخش می کند.
دکمه ها (خوب، یا انرژی اگر ربات هستید). وظیفه این است که بفهمید کدام دکمه پاداش می دهد:

ما می توانیم (به صورت شماتیک) به تصویر بکشیم که یک دکمه با فشار دادن به این صورت چه کاری انجام می دهد:

بهتر است چنین مشکلی را به طور کلی حل کنیم، بنابراین بیایید به تمام نتایج ممکن، از جمله صحیح نگاه کنیم:

بر روی دکمه سوم کلیک کنید تا شام خود را دریافت کنید.

برای بازتولید یک شبکه عصبی در کد، ابتدا باید یک مدل یا نموداری بسازیم که بتوان شبکه را به آن نگاشت. در اینجا یک نمودار مناسب برای کار وجود دارد، علاوه بر این، همتای بیولوژیکی خود را به خوبی نشان می دهد:

این شبکه عصبی به سادگی ورودی را دریافت می کند - در این مورد، درک این خواهد بود که کدام دکمه فشرده شده است. در مرحله بعد، شبکه اطلاعات ورودی را با وزن ها جایگزین می کند و بر اساس اضافه شدن لایه نتیجه می گیرد. کمی گیج کننده به نظر می رسد، اما بیایید ببینیم که دکمه در مدل ما چگونه نشان داده شده است:

توجه داشته باشید که همه وزن ها 0 هستند، بنابراین شبکه عصبی مانند یک نوزاد کاملا خالی است اما کاملاً به هم متصل است.

بنابراین، ما یک رویداد خارجی را با لایه ورودی شبکه عصبی تطبیق می دهیم و مقدار را در خروجی آن محاسبه می کنیم. ممکن است با واقعیت مطابقت داشته باشد یا نباشد، اما ما فعلاً این را نادیده می گیریم و شروع به توصیف کار به گونه ای می کنیم که برای رایانه قابل درک باشد. بیایید با وارد کردن وزن ها شروع کنیم (از جاوا اسکریپت استفاده خواهیم کرد):

ورودی های Var = ; وزن var = ; // برای راحتی می توان این بردارها را فراخوانی کرد

مرحله بعدی ایجاد تابعی است که مقادیر ورودی و وزن ها را جمع آوری کرده و مقدار خروجی را محاسبه می کند:

تابع ارزیابیNeuralNetwork(inputVector،weightVector)(var result = 0; inputVector.forEach(function(inputValue, weightIndex) ( layerValue = inputValue*weightVector; result += layerValue; ))؛ return (result.toFixed(2)); /) / ممکن است پیچیده به نظر برسد، اما تنها کاری که انجام می دهد این است که جفت وزن/ورودی را مطابقت داده و نتیجه را اضافه کند

همانطور که انتظار می رود، اگر این کد را اجرا کنیم، همان نتیجه ای را خواهیم گرفت که در مدل یا گراف خود ...

EvaluateNeuralNetwork (ورودی ها، وزن ها)؛ // 0.00

مثال زنده: Neural Net 001. گام بعدی در بهبود شبکه عصبی ما راهی برای بررسی خروجی خود یا مقادیر حاصل از مقایسه با وضعیت واقعی خواهد بود، اجازه دهید ابتدا این واقعیت خاص را در یک متغیر رمزگذاری کنیم:

برای شناسایی ناسازگاری ها (و تعداد)، یک تابع خطا اضافه می کنیم:

خطا = واقعیت - خروجی شبکه عصبی

با آن می توانیم عملکرد شبکه عصبی خود را ارزیابی کنیم:

اما مهمتر از آن، در مورد موقعیت هایی که واقعیت نتیجه مثبت می دهد چطور؟

اکنون می دانیم که مدل شبکه عصبی ما کار نمی کند (و می دانیم چگونه)، عالی است! و این عالی است زیرا اکنون می توانیم از تابع خطا برای کنترل آموزش خود استفاده کنیم. اما اگر تابع خطا را به صورت زیر دوباره تعریف کنیم همه چیز منطقی است:

خطا= خروجی مورد نظر- خروجی شبکه عصبی

یک واگرایی ظریف و در عین حال مهم، که بی سر و صدا نشان می دهد که ما این کار را خواهیم کرد
از نتایج گذشته برای مقایسه با اقدامات آینده استفاده کنید
(و برای یادگیری، همانطور که بعدا خواهیم دید). این در زندگی واقعی نیز وجود دارد، کامل
الگوهای تکراری، بنابراین می تواند به یک استراتژی تکاملی تبدیل شود (خوب، در
اکثر موارد).

ورودی var = ; وزن var = ; vardesiredResult = 1;

و یک تابع جدید:

تابع ارزیابیNeuralNetError(desired,actual) ( return (Desired - Actual); ) // پس از ارزیابی شبکه و خطا، دریافت خواهیم کرد: // "خروجی شبکه عصبی: 0.00 خطا: 1"

مثال زنده: Neural Net 002. بیایید خلاصه کنیم. ما با یک کار شروع کردیم، یک مدل ساده از آن را در قالب یک شبکه عصبی بیولوژیکی ساختیم و راهی برای سنجش عملکرد آن در مقایسه با واقعیت یا نتیجه دلخواه به دست آوردیم. اکنون باید راهی برای رفع این اختلاف پیدا کنیم - فرآیندی که هم برای رایانه ها و هم برای انسان ها می تواند به عنوان یادگیری در نظر گرفته شود.

چگونه یک شبکه عصبی را آموزش دهیم؟

اساس آموزش شبکه های عصبی بیولوژیکی و مصنوعی، تکرار است.
و الگوریتم های یادگیری، بنابراین ما جداگانه با آنها کار خواهیم کرد. بیا شروع کنیم با
الگوریتم های یادگیری

در طبیعت، الگوریتم های یادگیری به عنوان تغییرات فیزیکی یا شیمیایی درک می شوند
ویژگی های نورون ها پس از آزمایش:

تصویر چشمگیر چگونگی تغییر دو نورون در طول زمان در کد و مدل "الگوریتم یادگیری" ما به این معنی است که ما فقط چیزها را در طول زمان تغییر خواهیم داد تا زندگی خود را آسانتر کنیم. بنابراین بیایید یک متغیر اضافه کنیم تا نشان دهیم زندگی چقدر راحت تر است:

نرخ یادگیری متغیر = 0.20; // هر چه مقدار بزرگتر باشد، روند یادگیری سریعتر خواهد بود :)

و چه چیزی را تغییر خواهد داد؟

این وزن ها را تغییر می دهد (درست مانند یک خرگوش!)، به خصوص وزن خروجی که می خواهیم دریافت کنیم:

نحوه کدنویسی چنین الگوریتمی انتخاب شماست، برای سادگی فاکتور یادگیری را به وزن اضافه می کنم، در اینجا به شکل یک تابع است:

تابع Learn(inputVector, weightVector) (weightVector.forEach(function(weight, index, weights) (اگر (inputVector > 0) (وزن = وزن + نرخ یادگیری؛ ))؛)

در صورت استفاده، این تابع آموزشی به سادگی میزان یادگیری ما را به بردار وزن اضافه می کند نورون فعال، قبل و بعد از دایره تمرین (یا تکرار)، نتایج به شرح زیر خواهد بود:

// بردار وزن اصلی: // خروجی شبکه عصبی: 0.00 خطا: 1 یادگیری (ورودی، وزن ها); // بردار New Weight: // خروجی شبکه عصبی: 0.20 خطا: 0.8 // اگر واضح نباشد، خروجی شبکه عصبی نزدیک به 1 است (خروجی مرغ) - که همان چیزی است که ما می خواستیم، بنابراین می توانیم نتیجه بگیریم که ما در جهت درست حرکت می کنند

مثال زنده: Neural Net 003. بسیار خوب، اکنون که در مسیر درست حرکت می کنیم، آخرین قطعه از پازل پیاده سازی خواهد شد. تکرارها.

این خیلی سخت نیست، در طبیعت ما فقط یک کار را بارها و بارها انجام می دهیم، اما در کد فقط تعداد تکرارها را مشخص می کنیم:

آزمایشات Var = 6;

و معرفی تابع تعداد تکرارها در شبکه عصبی آموزشی ما به این صورت خواهد بود:

تابع قطار (آزمایشی) ( برای (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }

و این هم گزارش نهایی ما:

خروجی شبکه عصبی: 0.00 خطا: 1.00 وزن بردار: خروجی شبکه عصبی: 0.20 خطا: 0.80 وزن بردار: خروجی شبکه عصبی: 0.40 خطا: 0.60 وزن بردار: خروجی شبکه عصبی: 0.60 خطا: خروجی شبکه عصبی 0.40 : 0.20 Weight Vector: Neural Net output: 1.00 Error: 0.00 Weight Vector: // Chicken Dinner !

مثال زنده: Neural Net 004. اکنون ما یک بردار وزن داریم که اگر بردار ورودی با واقعیت مطابقت داشته باشد (فشردن دکمه سوم) فقط یک نتیجه (مرغ برای شام) می دهد. پس کار جالبی که ما انجام دادیم چیست؟

در این مورد خاص، شبکه عصبی ما (پس از آموزش) می‌تواند ورودی را تشخیص دهد و بگوید که چه چیزی به نتیجه مطلوب می‌رسد (هنوز باید موقعیت‌های خاصی را برنامه‌ریزی کنیم):

علاوه بر این، این یک مدل مقیاس پذیر، یک اسباب بازی و ابزاری برای یادگیری ما با شما است. ما توانستیم چیز جدیدی در مورد یادگیری ماشینی، شبکه های عصبی و هوش مصنوعی بیاموزیم. هشدار به کاربران:

  • مکانیسم ذخیره وزن های آموخته شده ارائه نشده است، بنابراین این شبکه عصبی هر چیزی را که می داند فراموش می کند. هنگام به روز رسانی یا اجرای مجدد کد، به حداقل شش تکرار موفقیت آمیز نیاز دارید تا شبکه به طور کامل تمرین کند، اگر فکر می کنید که یک شخص یا ماشینی دکمه ها را به صورت تصادفی فشار می دهد ... این کار کمی طول می کشد.
  • شبکه های بیولوژیکی برای یادگیری چیزهای مهم دارای نرخ یادگیری 1 هستند، بنابراین تنها یک تکرار موفق مورد نیاز است.
  • یک الگوریتم یادگیری وجود دارد که بسیار شبیه به نورون های بیولوژیکی است، نامی جذاب دارد: قانون widroff-hoff، یا آموزش widroff-hoff.
  • آستانه های عصبی (در مثال ما 1) و اثرات بیش از حد برازش (با تعداد زیاد تکرار، نتیجه بیشتر از 1 خواهد بود) در نظر گرفته نمی شوند، اما در طبیعت بسیار مهم هستند و مسئول بلوک های بزرگ و پیچیده پاسخ های رفتاری هستند. . وزن های منفی هم همینطور.

یادداشت ها و کتابشناسی برای مطالعه بیشتر

من سعی کردم از ریاضیات و اصطلاحات سخت پرهیز کنم، اما اگر شما تعجب می کنید، ما یک پرسپترون ساختیم که به عنوان یک الگوریتم یادگیری نظارت شده (یادگیری نظارت شده) از طبقه بندی کننده های دوگانه - چیزهای سنگین تعریف می شود. ساختار بیولوژیکی مغز تا حدی به دلیل عدم دقت و تا حدودی به دلیل پیچیدگی موضوع آسانی نیست. بهتر است با علوم اعصاب (Purves) و علوم اعصاب شناختی (Gazzaniga) شروع کنید. من مثال خرگوش را از Gateway to Memory (Gluck) تغییر دادم و اقتباس کردم، که همچنین راهنمای عالی برای دنیای نمودارها است. منبع عالی دیگر، مقدمه ای بر شبکه های عصبی (Gurney)، برای تمام نیازهای هوش مصنوعی شما عالی است.
و اکنون در پایتون! با تشکر از Ilya Andshmidt برای ارائه نسخه Python:

ورودی = وزن = نتیجه_ مطلوب = 1 نرخ_آموزش = 0.2 آزمایش = 6 تعریف شبکه عصبی_عصبی(آرایه_ورودی، آرایه_وزن): نتیجه = 0 برای i در محدوده(لن(آرایه_ورودی)): لایه_مقدار = آرایه_ورودی[i] * آرایه_وزن[i] نتیجه += ارزش_لایه print("evaluate_neural_network:" + str(نتیجه)) print("weights: " + str(weights)) نتیجه را برمی گرداند def value_error(desired, actual): خطا = مطلوب - چاپ واقعی ("evaluate_error: " + str(خطا) ) خطا را برگرداند def learn(input_array, weight_array): print("یادگیری...") برای i در محدوده(len(array_input_array)): if input_array[i] > 0: weight_array[i] += Learning_rate def train(trials ): برای i در محدوده (آزمایش): neural_net_result = ارزیابی_شبکه_عصبی (ورودی‌ها، وزن‌ها) یادگیری (ورودی‌ها، وزن‌ها) train (آزمایش‌ها)

و حالا برو! اعتبار به کایران ماهر برای این نسخه.

بسته اصلی import ("fmt" "math") func main() (fmt.Println("ایجاد ورودی ها و وزن ها...") ورودی ها:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0.00، 0.00، 0.00) مطلوب:= 1.00 LearnRate:= 0.20 آزمایش:= 6 قطار (آزمایش، ورودی، وزنه، دلخواه، نرخ یادگیری) ) Func train (trials int، ورودی های float64، وزن ها float64، float64 مورد نظر، یادگیری float64 R) برای i:= 1;i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print(" Error: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print(" ") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0.00 (weightVector = weightVector + LearningRate ) ) return weightVector ) func value(inputVector float64, weightVector float64) float64 (نتیجه:= 0.00 برای ایندکس، مقدار ورودی:= محدوده ورودی بردار (شعبه: = وزن، لایه مقدار بازگشتیV نتیجه، لایه بازرگانی Value) ) func valueError(float64 مطلوب، float64 واقعی) float64 (بازگشت دلخواه - واقعی)

اخیراً راه‌حل‌های زیادی با استفاده از شبکه‌های عصبی وجود داشته است: برنامه‌ها، خدمات، برنامه‌ها از این نوع شبکه‌ها برای سرعت بخشیدن به حل مشکلات مختلف استفاده می‌کنند. اما شبکه عصبی چیست؟ ویراستاران AIN.UA تصمیم گرفتند تا دریابند این فناوری محبوب چیست، از کجا آمده و چگونه کار می کند.

به سختی می توان شبکه های عصبی را یک روند تکنولوژیکی جدید نامید. اولین جستجو برای اندیشه علمی در این زمینه به اواسط قرن بیستم برمی گردد، زمانی که ذهن های برجسته آن دوران تصمیم گرفتند که ساخت کامپیوتری بر اساس دستاوردهای طبیعی مادر طبیعت خوب است. به ویژه با کپی کردن برخی از اصول مغز انسان.

ایجاد یک آنالوگ فنی از بیوکمپیوتر طبیعی ما آسان نبود و دوره‌های افزایش علاقه و افول را پشت سر گذاشت. این با این واقعیت توضیح داده می شود که سطح پیشرفت فناوری در دهه 1950، زمانی که همه چیز شروع شد، با پرواز افکار علمی همگام نشد: طراحی اولین شبکه های عصبی به آنها اجازه نداد به پتانسیل کامل خود برسند.

و این چگونه کار میکند

مغز انسان به طور متوسط ​​از 86 میلیارد نورون متصل به هم تشکیل شده است سیستم واحدبرای دریافت، پردازش و انتقال بیشتر داده ها. در این شبکه، هر نورون به عنوان چیزی شبیه یک ریزپردازنده عمل می کند که دندریت ها به سمت آن کشیده می شوند - فرآیندهای دریافت تکانه ها. همچنین یک خروجی به شکل آکسون وجود دارد که تکانه های دریافتی را به نورون های دیگر منتقل می کند.

یک شبکه عصبی مصنوعی ایجاد شده (ANN) فرآیند پردازش اطلاعات یک آنالوگ بیولوژیکی را تقلید می کند و آرایه ای از مینی پردازنده ها به سه گروه تقسیم می شود:

  • نقاط ورودی (حسگرها) نورون هایی هستند که از طریق آنها اطلاعات برای پردازش وارد شبکه عصبی مصنوعی می شود.
  • نقاط خروجی (واکنشی) نورون هایی هستند که ANN از طریق آنها نتیجه نهایی را تولید می کند.
  • نورون های پنهان (تداعی کننده) - یک آرایه کاری از نورون ها که بین نقاط ورودی و خروجی قرار دارند.

کار اصلی روی پردازش اطلاعات در سطح نورون های پنهان (تداعی) انجام می شود. آرایه آنها در چندین لایه مرتب شده است و هر چه تعداد آنها بیشتر باشد پردازش داده های دقیق تری قادر به تولید ANN است.

طرح یک پرسپترون - ساده ترین شبکه عصبی تک لایه

نمیشه برنامه ریزی کرد

یکی از ویژگی های شبکه های عصبی این است که برنامه ریزی نشده اند، بلکه آموزش دیده اند. بر این اساس، ANN ها به سه دسته تقسیم می شوند - ANN های آموزش پذیر، خودآموز و همچنین ANN های نوع مختلط.

یک شبکه عصبی آموزش دیده، مانند کودکی که در مورد جهان یاد می گیرد، دائماً نیازمند توجه دقیق و بازخورد خالق خود است. با کار با آن، محقق یک آرایه داده را در اختیار ANN قرار می دهد و پس از آن به او پیشنهاد می کند تا یک مشکل را با یک پاسخ از پیش تعیین شده حل کند. هر دو راه حل - در ابتدا درست و توسط شبکه عصبی ارائه شده است - با هم مقایسه می شوند. اگر اختلاف بین آنها از ضریب خطای مجاز بیشتر شود، محقق شبکه عصبی را تنظیم می کند و پس از آن فرآیند یادگیری از سر گرفته می شود.

شبکه های عصبی مصنوعی خودآموز دنیا را بدون معلمان با استفاده از یک الگوریتم مشخص برای یادگیری خود یاد می گیرند. پس از دریافت کار، شبکه عصبی خود به دنبال پاسخ می‌گردد، اشتباهات انجام شده را برطرف می‌کند و در صورت لزوم، در امتداد زنجیره نورون‌های انجمنی تا آخرین مرحله صحیح به عقب برمی‌گردد تا از نو شروع کند.

ویدیوی زیر نتیجه یک جلسه خودآموز 24 ساعته INS در سوپر ماریو را نشان می دهد، جایی که هدف آن دستیابی به حداکثر امتیازی است که در حین حرکت در سطح اعطا می شود. هرچه جلوتر رفت، امتیاز نهایی بالاتر بود. به عنوان ورودی، محقق از عناصر نقشه و حریفان و به عنوان خروجی از اقدامات در دسترس بازیکن استفاده می کند.

اما همین ANN کمی اقتباس شده در پشت فرمان بازی دیگری - Mario Kart - تسلط پیدا می کند.

شما خودتان می توانید با استفاده از یک آزمایش ساده که حرکت اتومبیل ها را با خلبان خودکار شبیه سازی می کند، خود را در نقش آزمایشگر یک شبکه عصبی امتحان کنید. اتومبیل ها تحت کنترل دو شبکه عصبی حرکت می کنند و از قوانین اساسی پیروی می کنند - به حرکت خود ادامه دهید و از برخورد جلوگیری کنید.

وظیفه شما این است که موانعی برای آنها ایجاد کنید و ببینید که چگونه خلبان خودکار با موفقیت با آنها کنار می آید و همچنین از نظر ذهنی برای ظاهر شدن پهپادهای مشابه اوبر و شرکت های رقیب در خیابان های شهر خود آماده شوید.

در قلب همه چیز الگوریتم هایی قرار دارند که توسط طبیعت ایجاد شده اند

در مورد شبکه های عصبی و آموزش آنها، نمی توان به پدیده ای طبیعی مانند الگوریتم مورچه اشاره کرد که به معنای واقعی کلمه می توانید آن را در حیاط خانه خود مشاهده کنید.

مورچه ها هنگام حرکت در جستجوی غذا از لانه و عقب، دائماً به دنبال ارگونومیک ترین مسیر هستند و در صورت تداخل مسیر خود را با شرایط تغییر یافته تطبیق می دهند. در حین حرکت، مورچه ردی از یک فرمون خاص به جا می گذارد. شکارچیان بعدی غذا مسیری را که پیشگام باقی مانده دنبال می کنند و همچنین آن را با یک "فانوس دریایی" بیولوژیکی اشباع می کنند.

فرض کنید مورچه ها در مسیر رسیدن به غذا مانعی دارند که می توان آن را در سمت راست یا چپ دور زد. در سمت چپ، فاصله تا منبع غذایی کمتر است. علیرغم این واقعیت که در اولین تکرارها مورچه ها از هر دو طرف مانع عبور می کنند، به دلیل فاصله کم، اشباع فرمون سمت چپ سریعتر اتفاق می افتد.

چه مفهومی داره؟ در تکرارهای بعدی، مسیر سمت چپ، به عنوان ارگونومیک ترین مسیر، تنها مسیری خواهد بود که هنگام حرکت مورچه های جوینده استفاده می شود. به طور مشابه، فرآیند یادگیری در یک شبکه عصبی مصنوعی رخ می دهد.

چرا ANN هنوز هوش مصنوعی نیست؟

مهم نیست که یک شبکه عصبی چقدر "هوشمند" باشد، همچنان هوش مصنوعی نیست، بلکه ابزاری برای وظایف طبقه بندی داده ها است. البته، ما می توانیم شگفت زده شویم که چگونه موتور جستجو ترکیب خاصی از کلمات را تشخیص می دهد، و سپس، بر اساس آن، تصاویری را با گربه های مورد نیاز ما انتخاب می کند، اما این نتیجه فعالیت ذهنی یک کامپیوتر عصبی نیست، بلکه فقط یک هم افزایی چندین طبقه بندی کننده

شبکه نورون‌های مغز انسان، علی‌رغم اعتقاد سرسختانه هر نسل قدیمی به تخریب نسل جوان، بسیار پیچیده‌تر از ساختار رسمی ANN است و به دلیل تعداد زیاد و تنوع اتصالات، می‌تواند برای حل مسائل به روش غیر استاندارد، خارج از الگوهای مشخص شده توسط قوانین و فرمول ها.

به زبان ساده، اسکندر مقدونی می تواند گره گوردی را حتی در حال حاضر قطع کند. یک شبکه عصبی نیست.

AIN.UA قبلاً در مورد یک هنرمند آلمانی گزارش داده بود که یک چاپ لباس طراحی کرده بود که برای محافظت از افراد در برابر تشخیص چهره از طریق شبکه های عصبی طراحی شده بود.

اگر می خواهید اخبار را در فیس بوک دریافت کنید، روی "لایک" کلیک کنید.

شبکه عصبی مصنوعی مجموعه ای از نورون ها است که با یکدیگر تعامل دارند. آنها قادر به دریافت، پردازش و ایجاد داده هستند. تصور آن به اندازه کار مغز انسان دشوار است. شبکه عصبی در مغز ما کار می کند به طوری که اکنون می توانید این را بخوانید: نورون های ما حروف را تشخیص می دهند و آنها را در قالب کلمات قرار می دهند.

یک شبکه عصبی مصنوعی مانند یک مغز است. در ابتدا برای ساده سازی برخی از فرآیندهای محاسباتی پیچیده برنامه ریزی شده بود. امروزه شبکه های عصبی امکانات بسیار بیشتری دارند. برخی از آنها در گوشی هوشمند شما هستند. قسمت دیگری قبلاً در پایگاه داده خود ثبت کرده است که شما این مقاله را باز کردید. چگونه همه این اتفاق می افتد و چرا، در ادامه بخوانید.

چگونه همه چیز شروع شد

مردم واقعاً می خواستند بفهمند ذهن یک فرد از کجا می آید و مغز چگونه کار می کند. در اواسط قرن گذشته، دونالد هب، عصب-روانشناس کانادایی این را فهمید. هب تعامل نورون ها را با یکدیگر مطالعه کرد، اصل ترکیب شدن آنها را در گروه ها (از نظر علمی - مجموعه ها) بررسی کرد و اولین الگوریتم در علم را برای آموزش شبکه های عصبی پیشنهاد کرد.

چند سال بعد، گروهی از دانشمندان آمریکایی یک شبکه عصبی مصنوعی را مدلسازی کردند که می توانست اشکال مربعی را از اشکال دیگر تشخیص دهد.

یک شبکه عصبی چگونه کار می کند؟

محققان دریافتند که شبکه عصبی مجموعه‌ای از لایه‌های نورون است که هر یک از آن‌ها وظیفه تشخیص معیار خاصی را بر عهده دارند: شکل، رنگ، اندازه، بافت، صدا، حجم و غیره سال به سال در نتیجه میلیون‌ها آزمایش ها و هزاران محاسبات به ساده ترین شبکهلایه های بیشتری از نورون ها اضافه شد. به نوبت کار می کنند. مثلاً اولی مشخص می کند که مربع مربع است یا نه، دومی می فهمد که مربع قرمز است یا نه، سومی اندازه مربع را محاسبه می کند و غیره. نه مربع‌ها، نه اشکال قرمز و با اندازه‌های نامناسب در گروه‌های جدیدی از نورون‌ها قرار می‌گیرند و توسط آنها بررسی می‌شوند.

شبکه های عصبی چیست و چه کاری می توانند انجام دهند؟

دانشمندان شبکه های عصبی را توسعه داده اند تا آنها یاد بگیرند که بین تصاویر، فیلم ها، متون و گفتار پیچیده تمایز قائل شوند. امروزه انواع زیادی از شبکه های عصبی وجود دارد. آنها بسته به معماری طبقه بندی می شوند - مجموعه ای از پارامترهای داده و وزن این پارامترها، اولویت خاصی دارند. در زیر برخی از آنها آورده شده است.

شبکه های عصبی کانولوشنال

نورون ها به گروه هایی تقسیم می شوند، هر گروه مشخصه ای را که به آن داده می شود محاسبه می کند. در سال 1993، دانشمند فرانسوی، یان لکون، LeNet 1 را به دنیا نشان داد، اولین شبکه عصبی کانولوشنی که می‌توانست اعداد نوشته شده روی کاغذ را با دست به سرعت و با دقت تشخیص دهد. خودت ببین:

امروزه، شبکه های عصبی کانولوشن عمدتاً برای اهداف چندرسانه ای استفاده می شوند: آنها با گرافیک، صدا و تصویر کار می کنند.

شبکه های عصبی مکرر

نورون ها به طور مداوم اطلاعات را به خاطر می آورند و اقدامات بعدی را بر اساس این داده ها انجام می دهند. در سال 1997، دانشمندان آلمانی ساده‌ترین شبکه‌های تکراری را به شبکه‌هایی با حافظه کوتاه‌مدت تغییر دادند. بر اساس آنها، شبکه‌هایی با نورون‌های عودکننده کنترل‌شده ایجاد شدند.

امروزه با کمک چنین شبکه هایی، متون نوشته و ترجمه می شود، ربات هایی برنامه ریزی می شوند که گفتگوهای معنی داری را با شخص انجام می دهند، کدهایی برای صفحات و برنامه ها ایجاد می شود.

استفاده از این نوع شبکه های عصبی توانایی تجزیه و تحلیل و تولید داده ها، جمع آوری پایگاه های داده و حتی پیش بینی است.

در سال 2015، SwiftKey اولین صفحه کلید جهان را منتشر کرد که توسط یک شبکه عصبی مکرر با نورون های کنترل شده تغذیه می شد. سپس سیستم در فرآیند تایپ بر اساس آخرین کلمات وارد شده نکاتی را ارائه کرد. سال گذشته، توسعه دهندگان شبکه عصبی را برای یادگیری متن متن تایپ شده آموزش دادند و نکات معنادار و مفید شدند:

شبکه های عصبی ترکیبی (کانولوشن + تکراری)

چنین شبکه های عصبی قادر به درک آنچه در تصویر است و توصیف آن هستند. و برعکس: تصاویر را مطابق توضیحات بکشید. واضح‌ترین مثال را کایل مک‌دونالد نشان داد که یک شبکه عصبی را برای قدم زدن در اطراف آمستردام گرفت. شبکه فوراً مشخص کرد که چه چیزی در مقابلش است. و تقریباً همیشه دقیقاً:

شبکه های عصبی دائماً خودآموز هستند.

از طریق این فرآیند:

1. اسکایپ امکان ترجمه همزمان برای 10 زبان را ارائه کرده است. در میان آنها، برای یک لحظه، روسی و ژاپنی وجود دارد - یکی از سخت ترین در جهان. البته کیفیت ترجمه نیاز به بهبود جدی دارد، اما همین واقعیت که حتی در حال حاضر می توانید با همکاران ژاپنی به زبان روسی ارتباط برقرار کنید و مطمئن باشید که درک خواهید شد، الهام بخش است.

2. Yandex دو الگوریتم جستجو را بر اساس شبکه های عصبی ایجاد کرد: Palekh و Korolev. اولین مورد به یافتن مرتبط ترین سایت ها برای پرس و جوهای فرکانس پایین کمک کرد. «پالخ» به بررسی عناوین صفحات پرداخته و معنای آنها را با معنای استعلام مقایسه کرده است. بر اساس پالخ، کورولف ظاهر شد. این الگوریتم نه تنها عنوان، بلکه کل محتوای متن صفحه را نیز ارزیابی می کند. جستجو دقیق‌تر می‌شود و صاحبان سایت شروع به برخورد هوشمندانه‌تر به محتوای صفحات می‌کنند.

3. همکاران متخصص SEO از Yandex یک شبکه عصبی موسیقی ایجاد کرده اند: شعر می سراید و موسیقی می نویسد. گروه عصبی به طور نمادین نورونا نامیده می شود و آنها قبلا اولین آلبوم خود را دارند:

4. Google Inbox از شبکه های عصبی برای پاسخ دادن به یک پیام استفاده می کند. توسعه فناوری در نوسان کامل است و امروز شبکه در حال مطالعه مکاتبات و تولید است گزینه های ممکنواکنش. شما نمی توانید زمان را برای تایپ کردن تلف نکنید و از فراموش کردن یک توافق مهم نترسید.

5. یوتیوب از شبکه‌های عصبی برای رتبه‌بندی ویدیوها استفاده می‌کند و طبق دو اصل همزمان: یکی از شبکه‌های عصبی ویدیوها و واکنش‌های مخاطبان به آن‌ها را مطالعه می‌کند، دیگری درباره کاربران و ترجیحات آنها تحقیق می‌کند. به همین دلیل است که توصیه‌های YouTube همیشه مطرح هستند.

6. فیس بوک به طور فعال روی DeepText AI کار می کند - یک برنامه ارتباطی که اصطلاحات تخصصی را درک می کند و چت ها را از واژگان زشت پاک می کند.

7. برنامه هایی مانند Prisma و Fabby که بر روی شبکه های عصبی ساخته شده اند، تصاویر و فیلم ها را ایجاد می کنند:

Colorize رنگ را به عکس های سیاه و سفید باز می گرداند (مادر بزرگ شگفت انگیز!).

MakeUp Plus رژ لب مناسب برای دختران را از طیف واقعی مارک های واقعی انتخاب می کند: Bobbi Brown، Clinique، Lancome و YSL در حال حاضر در تجارت هستند.

اپل و مایکروسافت دائماً سیری و کانتانا عصبی خود را ارتقا می دهند.

شبکه های عصبی مصنوعی

تا کنون آنها فقط دستورات ما را دنبال می کنند، اما در آینده نزدیک شروع به ابتکار عمل خواهند کرد: توصیه ها و پیش بینی خواسته های ما.

و چه چیز دیگری در آینده در انتظار ما است؟

شبکه‌های عصبی خودآموز می‌توانند جایگزین افراد شوند: آنها با کپی‌نویسان و تصحیح‌کنندگان شروع خواهند کرد. در حال حاضر، روبات ها متون را با معنی و بدون خطا ایجاد می کنند. و آنها این کار را بسیار سریعتر از مردم انجام می دهند. آنها با کارمندان مراکز تماس، پشتیبانی فنی، مدیران و مدیران عمومی در شبکه های اجتماعی ادامه خواهند داد. شبکه های عصبی از قبل می دانند که چگونه اسکریپت را یاد بگیرند و آن را با صدای شما پخش کنند. در زمینه های دیگر چطور؟

بخش کشاورزی

شبکه عصبی در تجهیزات ویژه پیاده سازی خواهد شد. کمباین ها به صورت خودکار، گیاهان را اسکن می کنند و خاک را مطالعه می کنند و داده ها را به شبکه عصبی منتقل می کنند. او تصمیم خواهد گرفت - آبیاری، کود دهی یا اسپری کردن از آفات. به جای دوجین کارگر، حداکثر به دو متخصص نیاز است: یک سرپرست و یک فنی.

دارو

مایکروسافت اکنون به طور فعال در حال کار بر روی ایجاد درمانی برای سرطان است. دانشمندان درگیر برنامه ریزی زیستی هستند - آنها در تلاشند تا روند ظهور و توسعه تومورها را دیجیتالی کنند. وقتی همه چیز درست شد، برنامه نویسان می توانند راهی برای جلوگیری از چنین فرآیندی پیدا کنند، به طور مشابه، دارویی ایجاد می شود.

بازار یابی

بازاریابی بسیار شخصی سازی شده است. در حال حاضر، شبکه های عصبی می توانند در عرض چند ثانیه تعیین کنند که کدام کاربر، چه محتوایی و با چه قیمتی نمایش داده شود. در آینده، مشارکت بازاریاب در این فرآیند به حداقل خواهد رسید: شبکه‌های عصبی درخواست‌ها را بر اساس داده‌های مربوط به رفتار کاربر پیش‌بینی می‌کنند، بازار را اسکن می‌کنند و تا زمانی که فرد به خرید فکر می‌کند، مناسب‌ترین پیشنهادها را صادر می‌کند.

تجارت الکترونیک

تجارت الکترونیک در همه جا اجرا خواهد شد. دیگر نیازی به رفتن به فروشگاه آنلاین با استفاده از پیوند ندارید: می توانید هر چیزی را که می بینید با یک کلیک خریداری کنید.

مثلاً چند سال بعد در حال خواندن این مقاله هستید. رژ لب روی صفحه را از برنامه MakeUp Plus بسیار دوست دارید (به بالا مراجعه کنید). روی آن کلیک می کنید و مستقیم به سبد خرید می روید. یا ویدیویی در مورد آن تماشا کنید آخرین مدلهولولنز (عینک واقعیت ترکیبی) و مستقیماً از YouTube سفارش دهید.

تقریباً در هر زمینه ای، متخصصانی که دانش یا حداقل درک درستی از ساختار شبکه های عصبی، یادگیری ماشینی و سیستم های هوش مصنوعی دارند، ارزشمند خواهند بود. ما در کنار روبات ها وجود خواهیم داشت. و هر چه بیشتر در مورد آنها بدانیم، آرام تر زندگی خواهیم کرد.

P.S. Zinaida Falls یک شبکه عصبی Yandex است که شعر می نویسد. با آموختن مایاکوفسکی به کاری که ماشین نوشته است امتیاز دهید (املا و علائم نگارشی حفظ شده است):

« آی تی»

این هست
فقط
چیزی
در آینده
و قدرت
آن شخص
آیا همه چیز وجود دارد یا نه
همه جا خون است
معامله
چاق شدن
شکوه در
زمین
با شکاف در منقار

چشمگیر است، درست است؟

شبکه های عصبی برای آدمک ها

امروز در هر گوشه، اینجا و آنجا، از مزایای شبکه های عصبی فریاد می زنند. اما آنچه هست، فقط تعداد کمی واقعاً می فهمند. اگر برای توضیحات به ویکی پدیا مراجعه کنید، سرتان از بلندای ارگ اصطلاحات و تعاریف علمی ساخته شده در آنجا می چرخد. اگر از مهندسی ژنتیک فاصله دارید و زبان خشک گیج کننده کتاب های درسی دانشگاهی تنها باعث سردرگمی و بدون ایده می شود، پس بیایید با هم مشکل شبکه های عصبی را درک کنیم.

اگر مغز انسان از نورون‌ها تشکیل شده باشد، آنگاه به طور مشروط موافقت خواهیم کرد که نورون الکترونیکی نوعی جعبه خیالی است که ورودی‌ها و یک خروجی زیادی دارد.

الگوریتم داخلی نورون روش پردازش و تجزیه و تحلیل اطلاعات دریافتی و تبدیل آن به یک مخزن دانش مفید را تعیین می کند. بسته به اینکه ورودی ها و خروجی ها چقدر خوب کار می کنند، کل سیستم یا به سرعت فکر می کند، یا برعکس، می تواند کند شود.

مهم

هنگام نوشتن کد اولیه، باید اقدامات خود را به معنای واقعی کلمه روی انگشتان توضیح دهید. اگر مثلاً با تصاویر کار کنیم، در مرحله اول، ارزش برای ما اندازه و کلاس آن خواهد بود. اگر مشخصه اول تعداد ورودی ها را به ما بگوید، دومی به خود شبکه عصبی کمک می کند تا با اطلاعات مقابله کند.

شبکه های عصبی: چیست و چگونه کار می کند

در حالت ایده آل، پس از بارگذاری داده های اولیه و مقایسه توپولوژی کلاس ها، شبکه عصبی می تواند خود اطلاعات جدید را طبقه بندی کند. فرض کنید تصمیم داریم یک تصویر 3x5 پیکسل را آپلود کنیم. محاسبات ساده به ما می گوید که 3*5=15 ورودی وجود خواهد داشت. و خود طبقه بندی تعداد کل خروجی ها را تعیین می کند، یعنی. نورون ها مثال دیگر: یک شبکه عصبی باید حرف C را تشخیص دهد. آستانه مشخص شده مطابقت کامل با حرف است، این به یک نورون با تعداد ورودی برابر با اندازه تصویر نیاز دارد.

مانند هر آموزشی، دانش آموز برای پاسخ نادرست باید تنبیه شود، اما برای پاسخ درست چیزی نخواهیم داد. اگر برنامه پاسخ صحیح را نادرست دریافت کند، وزن ورودی هر سیناپس را افزایش می دهیم. اگر برعکس، با نتیجه نادرست، برنامه نتیجه را مثبت یا True در نظر گرفت، وزن هر ورودی را به نورون کم می کنیم. منطقی تر است که یادگیری را با شناخت نماد مورد نیاز خود شروع کنیم. نتیجه اول نادرست خواهد بود، اما با کمی تصحیح کد، برنامه در حین کار بعدی به درستی کار می کند. مثال داده شده از یک الگوریتم برای ساخت کد برای یک شبکه عصبی، پارسترون نامیده می شود.

شبکه های عصبی

شبکه های عصبی برای آدمک ها

امروز در هر گوشه، اینجا و آنجا، از مزایای شبکه های عصبی فریاد می زنند. اما آنچه هست، فقط تعداد کمی واقعاً می فهمند.

نوشتن شبکه عصبی خود: راهنمای گام به گام

اگر برای توضیحات به ویکی پدیا مراجعه کنید، سرتان از بلندای ارگ اصطلاحات و تعاریف علمی ساخته شده در آنجا می چرخد. اگر از مهندسی ژنتیک فاصله دارید و زبان خشک گیج کننده کتاب های درسی دانشگاهی تنها باعث سردرگمی و بدون ایده می شود، پس بیایید با هم مشکل شبکه های عصبی را درک کنیم.

برای درک مشکل، باید علت اصلی را که کاملاً در سطح است، پیدا کنید. با یادآوری سارا کانر، با لرز متوجه می‌شویم که پیشگامان توسعه رایانه، وارن مک‌کالوچ و والتر پیتس، هدف خودخواهانه ایجاد اولین هوش مصنوعی را دنبال کردند.

شبکه های عصبی نمونه اولیه الکترونیکی یک سیستم خودآموز هستند. مانند یک کودک، یک شبکه عصبی اطلاعات را جذب می کند، آن را می جود، تجربه کسب می کند و یاد می گیرد. در فرآیند یادگیری، چنین شبکه‌ای توسعه می‌یابد، رشد می‌کند و می‌تواند به تنهایی نتیجه‌گیری کند و تصمیم بگیرد.

اگر مغز انسان از نورون‌ها تشکیل شده باشد، آنگاه به طور مشروط موافقت خواهیم کرد که نورون الکترونیکی نوعی جعبه خیالی است که ورودی‌ها و یک خروجی زیادی دارد. الگوریتم داخلی نورون روش پردازش و تجزیه و تحلیل اطلاعات دریافتی و تبدیل آن به یک مخزن دانش مفید را تعیین می کند. بسته به اینکه ورودی ها و خروجی ها چقدر خوب کار می کنند، کل سیستم یا به سرعت فکر می کند، یا برعکس، می تواند کند شود.

مهم: به طور معمول از اطلاعات آنالوگ در شبکه های عصبی استفاده می شود.

تکرار می‌کنیم که می‌تواند جریان‌های ورودی اطلاعات زیادی وجود داشته باشد (در اصطلاح علمی، این ارتباط اطلاعات اولیه و "نرون" ما سیناپس نامیده می‌شود) و همه آنها ماهیت متفاوتی دارند و اهمیت نابرابر دارند. به عنوان مثال، شخص جهان اطراف خود را از طریق اندام های بینایی، لامسه و بویایی درک می کند. منطقی است که بینایی مهمتر از بویایی است. بر اساس موقعیت های مختلف زندگی، ما از اندام های حسی خاصی استفاده می کنیم: در تاریکی کامل، لامسه و شنوایی به منصه ظهور می رسند. سیناپس ها در شبکه های عصبی با قیاس یکسان در موقعیت های مختلف اهمیت متفاوتی خواهند داشت که معمولاً با وزن اتصال نشان داده می شود. هنگام نوشتن کد، حداقل آستانه برای عبور اطلاعات تعیین می شود. اگر وزن اتصال بالاتر از مقدار مشخص شده باشد، نتیجه بررسی توسط نورون مثبت است (و در سیستم باینری برابر است)، اگر کمتر باشد، منفی است. منطقی است که هر چه نوار بالاتر تنظیم شود، کار شبکه عصبی دقیق تر خواهد بود، اما زمان بیشتری می برد.

برای اینکه یک شبکه عصبی به درستی کار کند، باید زمانی را برای آموزش آن صرف کنید - این تفاوت اصلی با الگوریتم های قابل برنامه ریزی ساده است. مانند یک کودک کوچک، یک شبکه عصبی به یک پایگاه اطلاعات اولیه نیاز دارد، اما اگر کد اولیه به درستی نوشته شود، خود شبکه عصبی نه تنها قادر به انتخاب صحیح از اطلاعات موجود است، بلکه مفروضات مستقلی نیز ایجاد می کند.

هنگام نوشتن کد اولیه، باید اقدامات خود را به معنای واقعی کلمه روی انگشتان توضیح دهید. اگر مثلاً با تصاویر کار کنیم، در مرحله اول، ارزش برای ما اندازه و کلاس آن خواهد بود. اگر مشخصه اول تعداد ورودی ها را به ما بگوید، دومی به خود شبکه عصبی کمک می کند تا با اطلاعات مقابله کند. در حالت ایده آل، پس از بارگذاری داده های اولیه و مقایسه توپولوژی کلاس ها، شبکه عصبی می تواند خود اطلاعات جدید را طبقه بندی کند. فرض کنید تصمیم داریم یک تصویر 3x5 پیکسل را آپلود کنیم. محاسبات ساده به ما می گوید که 3*5=15 ورودی وجود خواهد داشت. و خود طبقه بندی تعداد کل خروجی ها را تعیین می کند، یعنی. نورون ها مثال دیگر: یک شبکه عصبی باید حرف "C" را تشخیص دهد. آستانه مشخص شده مطابقت کامل با حرف است، این به یک نورون با تعداد ورودی برابر با اندازه تصویر نیاز دارد.

بیایید بگوییم که اندازه همان پیکسل 3x5 خواهد بود. با تغذیه برنامه با تصاویر مختلف از حروف یا اعداد، به آن آموزش می دهیم تا تصویر شخصیت مورد نیاز خود را مشخص کند.

مانند هر آموزشی، دانش آموز برای پاسخ نادرست باید تنبیه شود، اما برای پاسخ درست چیزی نخواهیم داد. اگر برنامه پاسخ صحیح را نادرست دریافت کند، وزن ورودی هر سیناپس را افزایش می دهیم. اگر برعکس، با نتیجه نادرست، برنامه نتیجه را مثبت یا True در نظر گرفت، وزن هر ورودی را به نورون کم می کنیم. منطقی تر است که یادگیری را با شناخت نماد مورد نیاز خود شروع کنیم. نتیجه اول نادرست خواهد بود، اما با کمی تصحیح کد، برنامه در حین کار بعدی به درستی کار می کند.

مثال داده شده از یک الگوریتم برای ساخت کد برای یک شبکه عصبی، پارسترون نامیده می شود.

همچنین گزینه های پیچیده تری برای عملکرد شبکه های عصبی با بازگشت داده های نادرست، تجزیه و تحلیل آنها و نتیجه گیری های منطقی خود شبکه وجود دارد. به عنوان مثال، یک پیش بینی آنلاین آینده یک شبکه عصبی کاملا برنامه ریزی شده است. چنین برنامه هایی هم با معلم و هم بدون معلم قادر به یادگیری هستند و به آنها رزونانس تطبیقی ​​می گویند. ماهیت آنها در این واقعیت نهفته است که نورون ها از قبل ایده های خود را در مورد انتظار نوع اطلاعاتی که می خواهند دریافت کنند و به چه شکلی دارند، دارند. بین انتظار و واقعیت، آستانه نازکی از به اصطلاح هوشیاری نورون ها وجود دارد که به شبکه کمک می کند تا اطلاعات دریافتی را به درستی طبقه بندی کند و حتی یک پیکسل را از دست ندهد. ویژگی شبکه عصبی AR این است که از همان ابتدا به تنهایی یاد می گیرد و به طور مستقل آستانه هوشیاری عصبی را تعیین می کند. که به نوبه خود در طبقه بندی اطلاعات نقش دارد: هر چه شبکه هوشیارتر باشد، دقیق تر است.

ما اصول اولیه دانش در مورد شبکه های عصبی را دریافت کرده ایم. حال بیایید سعی کنیم اطلاعات دریافتی را خلاصه کنیم. بنابراین، شبکه های عصبینمونه اولیه الکترونیکی تفکر انسان است. آنها از نورون های الکترونیکی و سیناپس ها تشکیل شده اند - اطلاعات در ورودی و خروجی از نورون جریان می یابد. شبکه های عصبی بر اساس اصل یادگیری با معلم (برنامه نویسی که اطلاعات اولیه را آپلود می کند) یا به طور مستقل (بر اساس فرضیات و انتظارات از اطلاعات دریافتی که توسط همان برنامه نویس تعیین می شود) برنامه ریزی می شوند. با کمک یک شبکه عصبی، می توانید هر سیستمی را ایجاد کنید: از یک تشخیص الگوی ساده بر روی تصاویر پیکسل گرفته تا تشخیص روانی و تجزیه و تحلیل اقتصادی.

شبکه های عصبی،
روش های تجزیه و تحلیل داده ها:
از تحقیق تا توسعه و اجرا

خانه
خدمات
شبکه های عصبی
ایده های اساسی
توانایی ها
فواید

نحوه استفاده
برنامه نويسي
دقت راه حل
NS و AI
برنامه ها
مقالات
وبلاگ
درباره نویسنده / مخاطبین