Нейронні мережі для початківців частина 1 хабрахабр. Як створити власну нейронну мережу з нуля мовою Python. Нейросети постійно самонавчаються. Завдяки цьому процесу

Головна / Усунення несправностей

Правильна постановка питання має бути такою: як натренувати сою власну нейромережу? Писати мережу самому не потрібно, потрібно взяти якусь із готових реалізацій, яких є безліч, попередні автори давали посилання. Але сама по собі ця реалізація подібна до комп'ютера, в який не закачали жодних програм. Для того щоб мережа вирішувала ваше завдання, її потрібно навчити.

І тут виникає власне найважливіше, що вам для цього потрібно: ДАНІ. Багато прикладів завдань, які подаватимуться на вхід нейромережі, та правильні відповіді на ці завдання. Нейросеть буде на цьому вчитися самостійно давати ці правильні відповіді.

І ось тут виникає купа деталей та нюансів, які потрібно знати та розуміти, щоб це все мало шанс дати прийнятний результат. Висвітлити їх тут нереально, тому просто перерахую деякі пункти. По-перше, обсяг даних. Це дуже важливий момент. Великі компанії, діяльність яких пов'язана з машинним навчанням, зазвичай містять спеціальні відділи та штат співробітників, які займаються лише збором та обробкою даних для навчання нейромереж. Нерідко дані доводиться купувати, і вся ця діяльність виливається до помітної статті витрат. По-друге, представлення даних. Якщо кожен об'єкт у вашій задачі представлений відносно невеликою кількістю числових параметрів, то є шанс, що їх можна прямо в такому сирому вигляді дати нейромережі, і отримати прийнятний результат на виході. Але якщо об'єкти складні (картинки, звук, об'єкти змінної розмірності), то, швидше за все, доведеться витратити час і сили на виділення з них змістовних для розв'язуваного завдання ознак. Тільки це може зайняти дуже багато часу і мати набагато більший вплив на підсумковий результат, ніж навіть вид і архітектура обраної для використання нейромережі.

Непоодинокі випадки, коли реальні дані виявляються занадто сирими і непридатними для використання без попередньої обробки: містять перепустки, шуми, протиріччя та помилки.

Дані повинні бути зібрані теж не аби як, а грамотно і продумано. Інакше навчена мережа може поводитись дивно і навіть вирішувати зовсім не те завдання, яке передбачав автор.

Також потрібно уявляти, як грамотно організувати процес навчання, щоб мережа не виявилася перевченою. Складність мережі потрібно вибирати, виходячи з розмірності даних та їх кількості. Частину даних потрібно відкласти для тесту і під час навчання не використовувати, щоб оцінити реальну якість роботи. Іноді різним об'єктам з навчальної множини потрібно приписати різну вагу. Іноді ці ваги корисно варіювати у процесі навчання. Іноді корисно починати навчання на частини даних, а в міру навчання додавати дані, що залишилися. Загалом це можна порівняти з кулінарією: у кожної господині свої прийоми готування навіть однакових страв.

Штучний інтелект, нейронні мережі, машинне навчання – що насправді означають усі ці нині популярні поняття? Для більшості непосвячених людей, яким є і я сам, вони завжди здавались чимось фантастичним, але насправді суть лежить на поверхні. У мене давно дозрівала ідея написати простою мовою про штучні нейронні мережі. Дізнатися самому і розповісти іншим, що є ця технологія, як вона працює, розглянути її історію та перспективи. У цій статті я постарався не залазити в нетрі, а просто й популярно розповісти про цей перспективний напрямок у світі високих технологій.

Трохи історії

Вперше поняття штучних нейронних мереж виникло при спробі змоделювати процеси головного мозку. Першим серйозним проривом у цій сфері можна вважати створення моделі нейронних мереж МакКаллока-Піттса у 1943 році. Вченими вперше було розроблено модель штучного нейрона. Ними також була запропонована конструкція мережі цих елементів для виконання логічних операцій. Але найголовніше, вченими було доведено, що така мережа здатна вчитися.

Наступним важливим кроком стала розробка Дональдом Хеббом першого алгоритму обчислення ІНС у 1949 році, який став основним на кілька наступних десятиліть. У 1958 році Френком Розенблаттом був розроблений парцептрон – система, що імітує процеси головного мозку. Свого часу технологія не мала аналогів і досі є основною в нейронних мережах. У 1986 році практично одночасно, незалежно один від одного американськими та радянськими вченими був суттєво доопрацьований основний метод навчання багатошарового перцептрону. У 2007 році нейронні мережі перенесли друге народження. Британський інформатик Джеффрі Хінтон вперше розробив алгоритм глибокого навчання багатошарових нейронних мереж, який зараз, наприклад, використовується для роботи безпілотних автомобілів.

Коротко про головне

У загальному значенні слова, нейронні мережі - це математичні моделі, що працюють за принципом мереж нервових клітин тваринного організму. ІНС можуть бути реалізовані як програмовані, так і в апаратні рішення. Для простоти сприйняття нейрон можна уявити, як якийсь осередок, яка має безліч вхідних отворів і одне вихідне. Яким чином численні вхідні сигнали формуються у вихідний, саме визначає алгоритм обчислення. На кожен вхід нейрона подаються дієві значення, які потім поширюються міжнейронним зв'язкам (синопсисам). У синапсів є один параметр - вага, завдяки якому вхідна інформація змінюється під час переходу від одного нейрона до іншого. Найлегше принцип роботи нейромереж можна представити на прикладі змішування кольорів. Синій, зелений та червоний нейрон мають різні ваги. Інформація нейрона, вага якого більше буде домінуючою в наступному нейроні.

Сама нейромережа є системою з безлічі таких нейронів (процесорів). Окремо ці процесори досить прості (набагато простіше, ніж процесор персонального комп'ютера), але з'єднаними у велику систему нейрони здатні виконувати дуже складні завдання.

Залежно від сфери застосування нейромережу можна трактувати по-різному. Наприклад, з точки зору машинного навчання ІНС є метод розпізнавання образів. З математичної точки зору – це багатопараметричне завдання. З погляду кібернетики – модель адаптивного управління робототехнікою. Для штучного інтелекту ІНС - це основна складова для моделювання природного інтелекту за допомогою обчислювальних алгоритмів.

Основною перевагою нейромереж над звичайними алгоритмами обчислення є можливість навчання. У загальному розумінні слова навчання полягає у знаходженні вірних коефіцієнтів зв'язку між нейронами, а також у узагальненні даних та виявленні складних залежностей між вхідними та вихідними сигналами. Фактично, вдале навчання нейромережі означає, що система буде здатна виявити правильний результат на підставі даних, які відсутні в навчальній вибірці.

Сьогоднішнє становище

І якою б багатообіцяючою не була б ця технологія, поки що ІНС ще дуже далекі від можливостей людського мозку та мислення. Проте, вже зараз нейромережі застосовують у багатьох сферах діяльності. Поки що вони не здатні приймати високоінтелектуальні рішення, але можуть замінити людину там, де раніше вона була необхідна. Серед численних областей застосування ІНС можна відзначити: створення систем виробничих процесів, що самонавчаються, безпілотні транспортні засоби, системи розпізнавання зображень, інтелектуальні охоронні системи, робототехніка, системи моніторингу якості, голосові інтерфейси взаємодії, системи аналітики та багато іншого. Таке широке поширення нейромереж також зумовлено появою різних способів прискорення навчання ІНС.

На сьогоднішній день ринок нейронних мереж величезний - це мільярди та мільярди доларів. Як показує практика, більшість технологій нейромереж по всьому світу мало відрізняються одна від одної. Однак застосування нейромереж – це дуже затратне заняття, яке в більшості випадків можуть дозволити собі лише великі компанії. Для розробки, навчання та тестування нейронних мереж потрібні великі обчислювальні потужності, очевидно, що цього в достатку є великі гравці на ринку ІТ. Серед основних компаній, що ведуть розробки в цій галузі, можна відзначити підрозділ Google DeepMind, підрозділ Microsoft Research, компанії IBM, Facebook і Baidu.

Звичайно, все це добре: нейромережі розвиваються, ринок зростає, але поки що головне завдання так і не вирішено. Людству не вдалося створити технологію, хоча б наближену на можливості до людського мозку. Давайте розглянемо основні відмінності між людським мозком та штучними нейромережами.

Чому нейромережі ще далекі до людського мозку?

Найголовнішою відмінністю, яка докорінно змінює принцип та ефективність роботи системи - це різна передача сигналів у штучних нейронних мережах та в біологічній мережі нейронів. Справа в тому, що в ІНС нейрони передають значення, які є дійсними значеннями, тобто числами. У людському мозку здійснюється передача імпульсів із фіксованою амплітудою, причому ці імпульси практично миттєві. Звідси випливає низку переваг людської мережі нейронів.

По-перше, лінії зв'язку в мозку набагато ефективніші та економічніші, ніж в ІНС. По-друге, імпульсна схема забезпечує простоту реалізації технології: достатньо використання аналогових схем замість складних обчислювальних механізмів. Зрештою, імпульсні мережі захищені від звукових перешкод. Дійсні числа схильні до впливу шумів, внаслідок чого підвищується ймовірність виникнення помилки.

Підсумок

Безумовно, останнім десятиліттям стався справжній бум розвитку нейронних мереж. Насамперед це пов'язано з тим, що процес навчання ІНС став набагато швидшим і простішим. Також стали активно розроблятися так звані «добуткі» нейромережі, які дозволяють суттєво прискорити процес впровадження технології. І якщо поки що рано говорити про те, чи зможуть колись нейромережі повністю відтворити можливості людського мозку, ймовірність того, що найближчим десятиліттям ІНС зможуть замінити людину на чверті існуючих професій дедалі більше стає схожою на правду.

Для тих, хто хоче знати більше

  • Велика нейронна війна: що насправді починає Google
  • Як когнітивні комп'ютери можуть змінити наше майбутнє

Штучна нейронна мережа - сукупність нейронів, що взаємодіють один з одним. Вони здатні приймати, обробляти та створювати дані. Це так само складно уявити, як і роботу людського мозку. Нейронна мережа у нашому мозку працює для того, щоб ви зараз могли це прочитати: наші нейрони розпізнають літери та складають їх у слова.

Штучна нейронна мережа – це подоба мозку. Спочатку програмувалася з метою спростити деякі складні обчислювальні процеси. Сьогодні у нейромереж набагато більше можливостей. Частина з них у вас у смартфоні. Ще частина вже записала собі в основу, що ви відкрили цю статтю. Як все це відбувається і навіщо, читайте далі.

З чого все почалося

Людям дуже хотілося зрозуміти, звідки у людини розум і як мозок працює. У середині минулого століття канадський нейропсихолог Дональд Хебб це зрозумів. Хебб вивчив взаємодію нейронів один з одним, досліджував, за яким принципом вони об'єднуються в групи (по-науковому - ансамблі) і запропонував перший у науці алгоритм навчання нейронних мереж.

Через кілька років група американських вчених змоделювала штучну нейромережу, яка могла відрізняти фігури квадратів від інших фігур.

Як працює нейромережа?

Дослідники з'ясували, нейронна мережа - це сукупність шарів нейронів, кожен з яких відповідає за розпізнавання конкретного критерію: форми, кольору, розміру, текстури, звуку, гучності і т. д. Рік від року в результаті мільйонів експериментів і тонн обчислень до найпростішої мережі нові та нові шари нейронів. Вони працюють по черзі. Наприклад, перший визначає, квадрат чи квадрат, другий розуміє, квадрат червоний чи ні, третій обчислює розмір квадрата тощо. Чи не квадрати, не червоні і невідповідного розміру фігури потрапляють у нові групи нейронів і досліджуються ними.

Якими бувають нейронні мережі та що вони вміють

Вчені розвинули нейронні мережі так, що ті навчилися розрізняти складні зображення, відео, тексти та мовлення. Типів нейронних мереж сьогодні дуже багато. Вони класифікуються залежно від архітектури - наборів параметрів даних і ваги цих параметрів певної пріоритетності. Нижче деякі з них.

Згорткові нейромережі

Нейрони діляться групи, кожна група обчислює задану їй характеристику. У 1993 році французький учений Ян Лекун показав світові LeNet 1 - першу згорткову нейронну мережу, яка швидко і точно могла розпізнавати цифри, написані на папері від руки. Дивіться самі:

Сьогодні згорткові нейронні мережі використовуються переважно з мультимединими цілями: вони працюють з графікою, аудіо та відео.

Рекурентні нейромережі

Нейрони послідовно запам'ятовують інформацію та будують подальші дії на основі цих даних. 1997 року німецькі вчені модифікували найпростіші рекурентні мережі до мереж із довгою короткостроковою пам'яттю. На їх основі були розроблені мережі з керованими рекурентними нейронами.

Сьогодні за допомогою таких мереж пишуться та перекладаються тексти, програмуються боти, які ведуть осмислені діалоги з людиною, створюються коди сторінок та програм.

Використання такого роду нейромереж – це можливість аналізувати та генерувати дані, складати бази і навіть робити прогнози.

У 2015 році компанія SwiftKey випустила першу у світі клавіатуру, що працює на рекурентній нейромережі з керованими нейронами. Тоді система видавала підказки у процесі набраного тексту з урахуванням останніх введених слів. Минулого року розробники навчили нейромережу вивчати контекст тексту, що набирається, і підказки стали осмисленими і корисними:

Комбіновані нейромережі (згорткові + рекурентні)

Такі нейронні мережі здатні розуміти, що знаходиться на зображенні, та описувати це. І навпаки: малювати зображення за описом. Найяскравіший приклад продемонстрував Кайл Макдональд, взявши нейронну мережу на прогулянку Амстердамом. Мережа миттєво визначала, що є перед нею. І практично завжди точно:

Нейросети постійно самонавчаються. Завдяки цьому процесу:

1. Skype впровадив можливість синхронного перекладу для 10 мов. Серед яких, на хвилиночку, є російська та японська - одні з найскладніших у світі. Звичайно, якість перекладу вимагає серйозного доопрацювання, але сам факт того, що вже зараз ви можете спілкуватися з колегами з Японії російською мовою і бути впевненими, що вас зрозуміють, надихає.

2. Яндекс на базі нейронних мереж створив два пошукові алгоритми: «Палех» та «Корольов». Перший допомагав знайти найрелевантніші сайти для низькочастотних запитів. «Палех» вивчав заголовки сторінок і зіставляв їх зміст із змістом запитів. На основі "Палеха" з'явився "Корольов". Цей алгоритм оцінює як заголовок, а й весь текстовий контент сторінки. Пошук стає все точнішим, а власники сайтів розумніше починають підходити до наповнення сторінок.

3. Колеги сеошників з Яндекса створили музичну нейромережу: вона складає вірші та пише музику. Нейрогрупа символічно називається Neurona, і вона вже має перший альбом:

4. У Google Inbox за допомогою нейромереж здійснюється відповідь на повідомлення. Розвиток технологій йде повним ходом, і сьогодні мережа вже вивчає листування та генерує можливі варіанти відповіді. Можна не витрачати час на друк і не боятися забути якусь важливу домовленість.

5. YouTube використовує нейронні мережі для ранжування роликів, причому відразу за двома принципами: одна нейронна мережа вивчає ролики та реакції аудиторії на них, інша проводить дослідження користувачів та їх переваг. Саме тому рекомендації YouTube завжди на тему.

6. Facebook активно працює над DeepText AI – програмою для комунікацій, яка розуміє жаргон та чистить чатики від обсценної лексики.

7. Додатки типу Prisma і Fabby, створені на нейромережах, створюють зображення та відео:

Colorize відновлює кольори на чорно-білих фото (здивуйте бабусю!).

MakeUp Plus підбирає для дівчат ідеальну помаду із реального асортименту реальних брендів: Bobbi Brown, Clinique, Lancome та YSL вже у справі.


8.
Apple і Microsoft постійно апгрейдять свої нейронні Siri та Contana. Поки що вони тільки виконують наші накази, але вже найближчим часом почнуть виявляти ініціативу: давати рекомендації та передбачати наші бажання.

А що ще на нас чекає в майбутньому?

Самонавчальні нейромережі можуть замінити людей: почнуть з копірайтерів та коректорів. Вже зараз роботи створюють тексти із змістом та без помилок. І роблять це значно швидше за людей. Продовжать із співробітниками кол-центрів, техпідтримки, модераторами та адміністраторами пабліків у соцмережах. Нейронні мережі вже можуть вчити скрипт і відтворювати його голосом. А що в інших галузях?

Аграрний сектор

Нейросітка впровадять у спецтехніку. Комбайни автопілотуватимуться, скануватимуть рослини та вивчатимуть ґрунт, передаючи дані нейромережі. Вона вирішуватиме - полити, удобрити чи обприскати від шкідників. Замість пари десятків робітників знадобляться від сили два спеціалісти: контролюючий та технічний.

Медицина

У Microsoft зараз активно працюють над створенням ліків від раку. Вчені займаються біопрограмуванням - намагаються оцифрувати процес виникнення та розвитку пухлин. Коли все вийде, програмісти зможуть знайти спосіб заблокувати такий процес, за аналогією буде створено ліки.

Маркетинг

Маркетинг максимально персоналізується. Вже зараз нейромережі за секунди можуть визначити, який користувач, який контент і за якою ціною показати. Надалі участь маркетолога в процесі зведеться до мінімуму: нейромережі передбачатимуть запити на основі даних про поведінку користувача, скануватимуть ринок і видаватимуть найбільш підходящі пропозиції до того моменту, як людина замислиться про покупку.

Ecommerce

Ecommerce буде запроваджено повсюдно. Вже не потрібно переходити в інтернет-магазин за посиланням: ви зможете купити все там, де бачите, в один клік. Наприклад, читаєте ви цю статтю за кілька років. Дуже вам подобається помада на скрині з MakeUp Plus (див. вище). Ви кликаєте на неї і потрапляєте одразу в кошик. Або дивіться відео про останню модель Hololens (окуляри змішаної реальності) і відразу оформляєте замовлення прямо з YouTube.

Чи не в кожній області цінуватимуться фахівці зі знанням або хоча б розумінням пристрою нейромереж, машинного навчання та систем штучного інтелекту. Ми будемо існувати з роботами пліч-о-пліч. І чим більше ми про них знаємо, тим спокійніше буде жити.

PS.Зінаїда Фолс - нейронна мережа Яндекса, яка пише вірші. Оцініть твір, який машина написала, навчившись на Маяковському (орфографія та пунктуація збережено):

« Це»

це
всього-навсього
щось
в майбутньому
і міць
у тієї людини
є на світі все чи ні
це кров навколо
домовилися
жиріє
слава у
землі
з тріском у дзьобі

Вражає, правда?

Останнім часом все частіше і частіше говорять про так звані нейронні мережі, невдовзі вони будуть активно застосовуватися і в роботехніці, і в машинобудуванні, і в багатьох інших сферах людської діяльності, ну а алгоритми пошукових систем, того ж Гугла вже потихеньку починають на них працювати. Що ж є ці нейронні мережі, як вони працюють, яке в них застосування і чим вони можуть стати корисними для нас, про все це читайте далі.

Що таке нейронні мережі

Нейронні мережі – це один із напрямів наукових досліджень у галузі створення штучного інтелекту (ІІ), в основі якого лежить прагнення імітувати нервову систему людини. У тому числі її (нервової системи) здатність виправляти помилки та самонавчати. Все це, хоч і дещо грубо має дозволити змоделювати роботу людського мозку.

Біологічні нейронні мережі

Але це визначення абзацом вище чисто технічне, якщо говорити мовою біології, то нейронна мережа є нервову систему людини, ту сукупність нейронів у нашому мозку, завдяки яким ми думаємо, приймаємо ті чи інші рішення, сприймаємо світ навколо нас.

Біологічний нейрон – це спеціальна клітина, що складається з ядра, тіла та відростків, до того ж має тісний зв'язок із тисячами інших нейронів. Через цей зв'язок раз у раз передаються електрохімічні імпульси, що приводять всю нейронну мережу в стан збудження або навпаки спокою. Наприклад, якась приємна і водночас хвилююча подія (зустріч коханої людини, перемога у змаганні тощо) породить електрохімічний імпульс у нейронній мережі, яка розташовується в нашій голові, що призведе до її збудження. Як наслідок, нейронна мережа в нашому мозку своє збудження передасть іншим органам нашого тіла і призведе до підвищеного серцебиття, більш частого моргання очей і т.д.

Тут на малюнку наведено дуже спрощену модель біологічної нейронної мережі мозку. Ми, що нейрон складається з тіла клітини і ядра, тіло клітини, своєю чергою, має безліч відгалужених волокон, названих дендритами. Довгі дендрити називаються аксонами і мають протяжність набагато більшу, ніж показано на цьому малюнку, за допомогою аксонів здійснюється зв'язок між нейронами, завдяки ним і працює біологічна нейронна мережа в наших головах.

Історія нейронних мереж

Яка ж історія розвитку нейронних мереж у науці та техніці? Вона бере свій початок з появою перших комп'ютерів або ЕОМ (електронно-обчислювальна машина), як їх називали в ті часи. Так ще наприкінці 1940-х років Дональд Хебб розробив механізм нейронної мережі, чим заклав правила навчання ЕОМ, цих «протокомп'ютерів».

Подальша хронологія подій була такою:

  • У 1954 року відбувається перше практичне використання нейронних мереж у роботі ЕОМ.
  • У 1958 році Франком Розенблатом розроблено алгоритм розпізнавання образів та математична анотація до нього.
  • У 1960-х роках інтерес до розробки нейронних мереж дещо згас через слабкі потужності комп'ютерів того часу.
  • І знову відродився вже у 1980-х роках, саме в цей період з'являється система із механізмом зворотного зв'язку, розробляються алгоритми самонавчання.
  • До 2000 року потужності комп'ютерів зросли настільки, що змогли втілити найсміливіші мрії вчених минулого. У цей час з'являються програми розпізнавання голосу, комп'ютерного зору та багато іншого.

Штучні нейронні мережі

Під штучними нейронними мережами прийнято розуміти обчислювальні системи, які мають здібності до самонавчання, поступового підвищення своєї продуктивності. Основними елементами структури нейронної мережі є:

  • Штучні нейрони, що є елементарними, пов'язані між собою одиниці.
  • – це з'єднання, що використовується для надсилання-отримання інформації між нейронами.
  • Сигнал – власне інформація, що підлягає передачі.

Застосування нейронних мереж

Область застосування штучних нейронних мереж з кожним роком дедалі більше розширюється, на сьогоднішній день вони використовуються у таких сферах як:

  • Машинне навчання (machine learning), що є різновидом штучного інтелекту. У основі лежить навчання ІІ з прикладу мільйонів однотипних завдань. В наш час машинне навчання активно впроваджують пошукові системи Google, Яндекс, Бінг, Байду. Так на основі мільйонів пошукових запитів, які ми всі щодня вводимо в Гуглі, їх алгоритми вчаться показувати нам найбільш релевантну видачу, щоб ми могли знайти саме те, що шукаємо.
  • У роботехніці нейронні мережі використовують у виробленні численних алгоритмів для металевих «мозків» роботів.
  • Архітектори комп'ютерних систем користуються нейронними мережами на вирішення проблеми паралельних обчислень.
  • За допомогою нейронних мереж математики можуть розв'язувати різні складні математичні завдання.

Типи нейронних мереж

Загалом для різних завдань застосовуються різні види та типи нейронних мереж, серед яких можна виділити:

  • згорткові нейронні мережі,
  • реккурентні нейронні мережі,
  • нейронну мережу Хопфілда.

Згорткові нейронні мережі

Згорткові мережі є одними з найпопулярніших типів штучних нейронних мереж. Так вони довели свою ефективність у розпізнаванні візуальних образів (відео та зображення), рекомендаційних системах та обробці мови.

  • Згорткові нейронні мережі відмінно масштабуються і можуть використовуватися для розпізнавання образів, будь-якого великого дозволу.
  • У цих мережах використовуються об'ємні тривимірні нейрони. Усередині одного шару нейрони пов'язані лише невеликим полем, названим рецептивним шаром.
  • Нейрони сусідніх верств пов'язані у вигляді механізму просторової локалізації. Роботу безлічі таких шарів забезпечують спеціальні нелінійні фільтри, реагують на дедалі більше пікселів.

Рекурентні нейронні мережі

Рекурентними називають такі нейронні мережі, з'єднання між нейронами яких утворюють орієнтовний цикл. Має такі характеристики:

  • У кожного з'єднання є своя вага, він пріоритет.
  • Вузли діляться на два типи, вступні вузли та вузли приховані.
  • Інформація в рекурентної нейронної мережі передається не тільки прямою, шар за шаром, але і між самими нейронами.
  • Важливою відмінністю рекуррентної нейронної мережі є наявність так званої «області уваги», коли машині можна задати певні фрагменти даних, що вимагають посиленої обробки.

Рекурентні нейронні мережі застосовуються у розпізнаванні та обробці текстових даних (у частотності на їх основі працює Google перекладач, алгоритм Яндекс «Палех», голосовий помічник Apple Siri).

Нейронні мережі, відео

І на завершення цікаве відео про нейронні мережі.


При написанні статті намагався зробити її максимально цікавою, корисною та якісною. Буду вдячний за будь-який зворотний зв'язок та конструктивну критику у вигляді коментарів до статті. Також Ваше побажання/запитання/пропозицію можете написати на мою пошту [email protected]або у Фейсбук, з повагою автор.

Приклад програми нейронної мережі з вихідним кодом С++.

Про нейронні мережі добре та докладно написано тут. Спробуємо розібратися як програмувати нейронні мережі, та як це працює. Одне із завдань розв'язуваних нейронними мережами, завдання класифікації. Програма демонструє роботу нейронної мережі, що класифікує колір.

У комп'ютері прийнято трикомпонентну модель представлення кольору RGB, на кожен із компонентів відводиться один байт. повний колір представлений 24 бітами, що дає 16 мільйонів відтінків. Людина ж може віднести будь-який з цих відтінків до одного з кольорів, що мають назву. Отже завдання:

Дано InColor - колір RGB (24 біт)

класифікувати колір, тобто. віднести його до одного з кольорів заданих безліччю М = (Чорний, Червоний, Зелений, Жовтий, Синій, Фіолетовий, Блакитний, Білий).

OutColor - колір з безлічі М

Рішення номер 1. (цифрове)

Створюємо масив розміром 16777216 елементів

Рішення номер 2. (аналогове)

напишемо функцію, типу

int8 GetColor(DWORD Color)
{
double Red = (double(((Color>>16)&0xFF)))/255*100;
double Green = (double(((Color>>8)&0xFF)))/255*100;
double Blue = (double((Color&0xFF)))/255*100;
double Level = Red;
if(Green > Level)
Level = Green;
if(Blue > Level)
Level = Blue;
Level = Level * 0.7;
int8 OutColor = 0;
if(Red > Level)
OutColor | = 1;
if(Green > Level)
OutColor | = 2;
if(Blue > Level)
OutColor | = 4;
return OutColor;
}

Це буде працювати, якщо завдання можна описати простими рівняннями, а от якщо функція настільки складна що опису. не піддається, тут на допомогу приходять нейронні мережі.

Рішення номер 3. (нейронна мережа)

Найпростіша нейронна мережа. Одношаровий перцептрон.

Все нейронне укладено у клас CNeuroNet

Кожен нейрон має 3 входи, куди подаються інтенсивності компонентів кольору. (R, G, B) у діапазоні (0 - 1). Усього нейронів 8, за кількістю квітів у вихідній множині. В результаті роботи мережі на виході кожного нейрона формується сигнал у діапазоні (0 - 1), який означає ймовірність того, що на вході цей колір. Вибираємо максимальну та отримуємо відповідь.

Нейрони мають сигмоїдну функцію активації ActiveSigm(). Функція ActiveSigmPro(), похідна від сигмоїдної функції активації, використовується для навчання нейронної мережі методом зворотного поширення.

У першому рядку виведені інтенсивності кольорів. нижче таблиця вагових коефіцієнтів (4 прим.). В останньому стовпці значення на виході нейронів. Змінюємо колір, вибираємо зі списку правильну відповідь, кнопкою Teach Викликаємо функцію навчання. AutoTeach викликає процедуру автоматичного навчання, 1000 разів, випадковий колір визначається за формулою рішення № 2, і викликається функція навчання.

скачати вихідний код та програму нейронної мережі

Програмування штучних нейронних мереж - я пишу на С++ в об'єктно-орієнтованій парадигмі

Для простих нейроархітектур (структур), методів та завдань можна використовувати будь-яку мову (навіть Бейсік), але для складних проектів найбільш придатними виявляються мови об'єктно-орієнтованого програмування (такі як С++). Я застосовую саме С++, за необхідності (у найбільш частратних місцях програми) переписуючи окремі функції (що вимагають прискорення обчислень) на інлайн-ассемблері.

Покажемо користь об'єктно-орієнтованого підходу до програмування нейросіток. У нейромережі може бути безліч варіантів нейронів та/або шарів (див. нотатку про сучасні можливості зібрати згорткову нейромережу з великої кількості різнотипних шарів і нейронів). Деяку загальну функціональність нейронів або шарів можна винести в абстрактний клас-предок, породжуючи (успадковуючи) від нього класи для тих чи інших видів нейронів/шарів (ці класи-нащадки будуть описувати-реалізовувати вже унікальні для конкретного виду нейрона або шару особливості та поведінка) . Таким чином забезпечуються ліквідація багаторазового дублювання загальних (однакових) речей у тексті програми та можливість написати більш гнучкий та незалежний від конкретних типів нейронів/шарів керуючий код програми при використанні принципів поліморфізму.

Як приклад розглянемо номенклатуру класів для опису шарів нейромережі в одній із розроблених програм. Є 3 основні ієрархії - одна для класів-описувачів структури шару (ланцюжок успадкування з трьох класів), друга - для нелінійних функцій нейронів (базовий клас і десять спадкоємців від нього), третя - для самих шарів (ланцюжок з 5 базових-проміжних класів і 12 реальних класів, що відбрунькувалися від цього ланцюжка на різних її рівнях).

Нейронні мережі

у тексті програми для опису поведінки шарів мережі використано (реалізовано) 31 клас, але при цьому всього 12 з них реалізують реальні шари, а інші класи:

  • або абстрактні, що задають загальну поведінку, що дозволяють надалі більш просто створювати нових нащадків (нові типи шарів) і підвищують ступінь інваріантності керуючої логіки (що реалізує функціонування нейронної мережі) до складових мереж різноманітним верствам;
  • або, навпаки, є підлеглими і входять до складу шару як його «компонент» (примірник об'єкта-описувача структури та характеристик шару, та екземпляр об'єкта, що реалізує нелінійну функцію нейронів).

p align="justify"> Функціонування створеної нейронної мережі запрограмовано через звернення до методів і властивостям абстрактних класів, незалежно від того, який конкретно клас-нащадок реалізує той чи інший шар нейромережі.

Тобто. керуюча логіка тут відокремлена від конкретного змісту та прив'язана лише до загальних, інваріантних основ. Про конкретні ж класи необхідно знати тільки коду «конструктора» нейромережі, що працює тільки в момент створення нової мережі, виходячи із заданих в інтерфейсі налаштувань або при завантаженні раніше збереженої мережі з файлу. Додавання нових типів шарів нейронів у програму не призведе до переробки алгоритмів (логіки) роботи та навчання мережі – а вимагатиме лише невеликого доповнення коду механізмів створення (чи читання з файлу) нейромережі.

Абстракцій (класів) для окремих нейронів немає – тільки для шарів. Якщо потрібно поставити на деякому (а саме - на вихідному) шарі єдиний нейрон - то просто екземпляру класу потрібного нейронного шару при створенні передається лічильник числа нейронів, що дорівнює одиниці.

Таким чином, об'єктно-орієнтовані проектування та програмування забезпечують більшу гнучкість для реалізації принципу «розділяй та володарюй» у порівнянні зі структурним програмуванням, через:

  • винесення загальних фрагментів коду до класів-предків (принцип успадкування),
  • забезпечення необхідного приховування інформації (принцип інкапсуляції),
  • побудова-отримання універсальної, незалежної від конкретних реалізацій класів, зовнішньої логіки, що управляє (принцип поліморфізму).
  • досягнення крос-платформенності через винесення апаратно-або платформозалежних частин у класи-нащадки (число яких може змінюватися під кожну конкретну програмно-апаратну реалізацію, у той час як кількість базових класів-предків і вся логіка високого рівня будуть однакові і незмінні).

Для сучасних завдань розробки гнучких та потужних інструментів нейромоделювання все це виявляється дуже корисним.

Також див. пост про проекти спеціальних мов опису ІНС.

нейронні мережі,
методи аналізу даних:
від досліджень до розробок та впроваджень

Головна
Послуги
Нейронні мережі
базові ідеї
можливості
переваги
області застосування
як використовувати

Точність рішення
НР та ІІ
Програми
Статті
Блог
Про автора / контакти

Тонка настройка Всесвіту- Це унікальне поєднання численних властивостей Всесвіту таке, що тільки воно і здатне забезпечити існування Всесвіту, що спостерігається. Навіть мінімальні відхилення складу чи значень цих властивостей несумісні з фактом існування Всесвіту.

Зазвичай поняття тонкої налаштування Всесвіту у слабкому формулюванні: беруться до уваги значення лише кількох світових констант, і робиться висновок лише про неможливість існування людства за її відхиленнях. Такий обмежений підхід стимулює релігійно забарвлені спроби пояснення цього явища, наприклад, антропний принцип, Що декларує богоданну доцільність Всесвіту, укладену в існуванні людини

Тонка настройка Всесвіту - це найвражаюча з аперцепцій сучасної космології: ніяка інша не зрівняється з нею за силою і переконливістю свідоцтва про Великий глухий кут, про те, що Всесвіт влаштований категорично не так, як його представляє сучасна наука, і в рамках цього уявлення досліджує. Не кілька констант, а взагалі непредставимо величезний корпус різноманітних фактів, май будь-який з них навіть невелика відмінність від спостережуваного, унеможливив би існування життя і Всесвіту. Значення властивостей елементарних частинок (маси, заряди, періоди напіврозпаду ...), властивості фундаментальних взаємодій, властивості речовин (та хоча б води), - все це і багато іншого ретельно обрано саме таким, щоб Всесвіт існував. Будь-який з мільйонів цих фактів, якби він був іншим, привів би її до неіснування. Або, як мінімум (у слабкому формулюванні) — до неможливості життя в ньому.

Штучна нейронна мережа

Усвідомлення цього повністю руйнує звичну "наукову картину світу" епохи Великого глухого кута. Але, як сказано, тут має місце аперцепція: люди відмовляються усвідомлювати це.

Пояснення тонкого налаштування в ІТБ

ІТТ встановлює, що Всесвіт складається лише з інформації. Спостерігач спостерігає спостережуване, отримуючи інформацію - і це все, що складає Всесвіт. Інформація, будучи лише описом чогось, могла б бути будь-якою можливою, якби вона виходила сама по собі. Однак інформація сама по собі нічим не є і нічого описувати не може, для цього завжди потрібні деякі умови і вони обмежують зміст інформації.

Таким чином, Всесвіт — це сукупність обумовлених виборів конкретної інформації, що спостерігається, з широкої гами в принципі можливої. Існування Всесвіту є фінальним критерієм усіх цих виборів: вони такі остільки, оскільки Всесвіт існує, якби вони були іншими — Всесвіт не існував би.

Це і є тонка настройка Всесвіту: значення світових констант і взагалі всі властивості Всесвіту визначилися фактом існування Всесвіту, ніхто їх спеціально не підбирав, ні з якої єдиної константи вони не виводяться, жодної можливості встановити їхній інший склад та інші значення не існує.

Розбираємо нейронну мережу. C#

У цій статті пропоную розібрати дії нейронних мереж і накидати один з найпростіших варіантів нейронної мережі, що навчається за допомогою вчителя.

Кілька слів, необхідно приділити пристрою цієї самої «великої» і «жахливої» нейронної мережі. Довгий час люди ходили взад і вперед і розмірковували над питанням: (у чому сенс життя?)
Як можна розпізнавати образи?

Відповідей було безліч. Тут і різні евристики, і порівняння за шаблонами і багато-багато. Однією з відповідей була нейронна мережа. [До речі сказати нейронна мережа може не тільки розпізнавати образи]

Отже. Структура нейронної мережі. Уявіть собі таку картину: павук сплів мережу і мережа зловила муху. Те місце на яке потрапила муха і є нейрон, який був максимально максимально близький до мети. Нейронна мережа складається з нейронів, які описують
шанси тієї чи іншої події. Опис "ймовірності" події (кожного нейрона) може зберігатися (наприклад) в окремому файлі.

Тепер переходимо до головної теми розмови цього вечора.

Як улаштована нейронна мережа.

Як відбувається її навчання та розпізнання.

Приклад структури нейронної мережі виразно видно на цій картинці:

На вхід надходить безліч вхідних сигналів X. Які множаться на безліч ваг W (Xi*Wi). У нейроні проводиться підрахунок суми творів і вихід відправляється деяке число.
Після підрахунку значень у всіх нейронів проводиться пошук найбільшого значення. Це найбільше значення і вважається коректною відповіддю питанням. Програмою видається образ, що описується знайденим нейроном.
У режимі навчання користувач має можливість підправити результат (на основі свого досвіду) і тоді програма зробить перерахунок ваг нейронів.
Формула перерахунку приблизно така: W[i] = W[i] + Speed*Delta*X[i] - тут
W[i] - вага i-го елемента,
Speed ​​- швидкість навчання,
Delta - знак (-1 або 1),
X[i] - значення i-го вхідного сигналу (у багатьох випадках 0 або 1)

Для чого використовується delta?

Розберемо такий випадок.

На вхід до програми подається картинка з цифрою 6.

Якою мовою програмування писати нейронні мережі?

Нейронна мережа розпізнала цифру 8. Користувач керує цифрою на 6. Що відбувається далі у програмі?

Програма перераховує дані для двох нейронів, що описують число 6 і число 8, причому для нейрона, що описує число 6 delta дорівнюватиме 1, а для 8 = -1

Як задається параметр швидкості?

Даний параметр, чим менше тим, довше і точніше (якісніше) відбуватиметься навчання мережі, і чим більше, тим швидше і «поверхневіше» відбуватиметься навчання мережі.

Параметр Speed ​​може задаватися як вручну, користувачем, так і в ході виконання програми (наприклад, const)

Як видно, ваги символів також мають бути визначені. А чим вони визначаються спочатку? насправді тут також все просто. Визначаються вони випадково, це дозволяє уникнути «упередженості» нейронної мережі. Зазвичай інтервал випадкових значень невеликий -0.4…0.4 або -0.3..0.2 і т.п.

Тепер переходимо до найцікавішої частини. Як це закодувати!

Створимо два класи – клас Нейрон та клас Мережа (Neuron та Net відповідно)

Опишемо основні завдання класу Neuron:

- Реакція на вхідний сигнал

- Підсумовування

- Коригування

(як додатково можна додати читання з файлу, створення початкових значень, збереження. Залишимо це на совісті читаючих)

Змінні всередині класу Neuron:symbol
- Ідентифікатор "пізнання" - LastY

- Описуваний образ - symbolsymbol

© 2023 androidas.ru - Все про Android