Як нейронна мережа розпізнає зображення?


25

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

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


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

Отже, ви хочете пояснити АБО ресурси, щоб почати працювати з NN? Було б добре уточнити.

2
На даний момент є хороший безкоштовний курс на курсі, який присвячений вашому питанню. coursera.org/course/neuralnets
пат

Клас Coursera NN виглядає, що він буде вдосконаленим, не таким хорошим, як вступ. Ендрю Нг має ще кілька ніжних знайомств, які ви можете знайти, наприклад, на Youtube.
Дуглас Заре

Насправді курс Coursera справді просувається, але він, безумовно, розвивається і відповів би на питання ОП досить добре. Він також має багато прикладів розпізнавання цифр.
Кріс А.

Відповіді:


24

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

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

Зберігаючи цю картину завжди, розглянемо лінійну регресію, яка просто знаходить формулу (або рядок) за допомогою суми квадратичної помилки, яка проходить найбільш близько через ваші дані, це досить легко зрозуміти. Щоб знайти вигнуті "рядки", ми можемо виконати однакову суму обчислення продуктів, за винятком того, що тепер додамо кілька параметрів поліномів x ^ 2 або x ^ 3 або навіть вищого порядку. Тепер у вас є класифікатор логістичної регресії. Цей класифікатор може знаходити відносини, які не мають лінійного характеру. Насправді логістична регресія може виражати довільно складні відносини, але вам все одно потрібно вручну вибрати правильну кількість функцій живлення, щоб зробити гарну роботу при прогнозуванні даних.

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

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

  • можливо, вдасться дізнатися щось, про що ще ніхто не з'ясував
  • для великих проблем банк комп’ютерів, що обробляють нейронні мережі, може знайти справді хороші рішення набагато швидше, ніж команда людей (за значно менших витрат)
  • як тільки навчені НН будуть давати постійні результати з вхідними даними, на яких вони пройшли навчання, і повинні добре узагальнити, якщо налаштовано належним чином
  • NN ніколи не нудьгує і не відволікається

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

Дякую, але я повинен уточнити, що я не точно кажу, що останній шар кожного ANN - це насправді логістичний регресійний шар, а лише те, що це одна можлива конфігурація, яка може вирішити багато проблем. В основному випадковим способом ми зазвичай тренуємо ANN, найімовірніше, що будь-яка результуюча регресія поширюється по багатьох вузлах і шарах дуже випадковим чином. Можна було б навчити підмережі відповідати конкретними способами, а потім перекачувати вихід у регресійний шар для передачі спеціалізованих мереж для конкретних проблем. Зробити ANN високоефективним у пам’яті та швидкості.
mcstar

1
Ця відповідь продовжує отримувати перегляди, тому я подумав, що зараз зазначу, що їй вже більше 5 років, і розглядає лише повністю підключені до прямого зв'язку мережі. Хоча концептуальні уявлення тут все ще справедливі, вони не дають практику достатньо зрозуміти глибокі поняття NN, які стали стандартними за останнє десятиліття. CNN (нейронна мережа згортки) - це дуже важлива сучасна адаптація, яка надає глибоким мережам суперсили, дозволяючи їм знаходити краї, контраст, різкість, кольорові простори, тіні тощо та використовувати їх для визначення контексту особливостей низького рівня.
mcstar

10

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

Ця теорія - це все добре і безглуздо, але ваше питання, здається, більше відповідає принципам того, як насправді закодувати обчислення якоїсь функції в набір нейронів і ваг. Для ілюстрації розглянемо простий приклад - ексклюзивний або. XOR приймає два входи, передає ці входи. Коли активований один і лише один з входів, тоді активується вихідний вузол. Якщо активований або обидва входи, ні вузол виводу не активований.

Тришарова мережа Perceptron, здатна обчислювати XOR, запозичені з wikipedia.

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

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

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

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

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

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


Дякуємо за весь час та зусилля, щоб зібрати всі ці слова та думки. Мене особливо цікавить Конволюційний NN для розпізнавання зображень. Я спробував приклад розпізнавання облич у бібліотеці OpenCV, але виявив, що він хороший лише для жорстких об'єктів. Чи нейрональна мережа має подібний ліміт на розпізнавання малюнків, тобто лише добре на жорстких об'єктах?
користувач1731927

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

1
Ось цікавий документ про те, як краще структурувати мережеві мережі разом для вирішення 2d-задач сітки, як-от класифікація зображень. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

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

2

Це те, що вас бентежить

як він дізнається про те, що на зображенні

Що є на зображенні, цифровим чином представлений значеннями в пікселях зображення. Якщо ви берете приклад кольору в зображенні. Піксель може мати три значення, кожне для трьох основних кольорів - Червоного, Зеленого та Синього ( RGB). Піксель з ( 10,50,100) означає, що він має "менше" елементів синього кольору, ніж піксель з ( 40,50,100). Таким чином, на зображенні перший піксель представляє область з менш синім кольором. Це інформація, яку вивчає нейронна мережа, від одного місця / області зображення до іншого і закінчується «знаючим», що є на зображенні. Цей же принцип застосовується і для інших функцій зображення (крім кольорів), які можуть використовуватися як вхід до нейронної мережі. Дивіться це , і це для основних концепцій зображення, а потім перейдіть до цього щоб дізнатися, як працює нейромережа.


1

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

У режимі розпізнавання зображень ви знову маєте набір зображень, про які хочете дізнатися.

  1. Ці зображення спочатку обробляються, а деякі функції витягуються із зображень (безліч можливих схем зображень, таких як SIFT, Bag of WORDS), як ви використовуєте пікселі та їх значення.
  2. Надайте ці зображення із відповідними векторами функцій своєму алгоритму ML (Neural Net, SVM або інші).
  3. Вивчіть модель
  4. Використовуйте цю модель для розпізнавання об'єктів, які достатньо помічені у навчальних даних.

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


1

Я також хотів би згадати дуже популярні для розпізнавання зображень згорткові нейронні мережі. Ось посилання на спрощене пояснення CNN .

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

Більш детально набір фільтрів застосовується для вилучення функцій у вигляді карти функцій. Фільтр - це лише матриця (випадкова на початку), яка застосовується до вихідного зображення, щоб розраховувати крапковий добуток вихідної матриці зображення та матрицю фільтра та підсумовувати результат. Фільтр рухається по початковому зображенню по одному пікселю (крок) за один раз, і матриця карти функцій заповнюється. Для кожного фільтра створюється карта особливостей. Потім вводиться нелінійність з RELU (Випрямлена лінійна одиниця) для кожного пікселя в кожній картці функції. Об'єднання за допомогою застосування або max (), суми () або середнього () проводиться після згортання. Нарешті, витягнуті таким чином функції виглядають як "збільшені" фрагменти оригінального зображення. Ці функції вводяться у повністю підключену (всі підключені підрозділи) нейронну мережу, і ймовірність кожного зображення (скажімо, ми тренували нашу мережу на зображеннях автомобілів, дерев і човнів) обчислюється після кожного проходу вперед через мережу. Мережа підготовлена, що означає, що параметри (ваги) та матриці фільтру оптимізовані за допомогою зворотного розповсюдження (мінімізація помилок помилкового класифікації). Коли нове зображення вводиться в навчену мережу, для ідентифікації зображення потрібна тільки подача даних (за умови, що мережа є достатньо точною, тобто ми навчили її з достатньою кількістю прикладів тощо) що означає, що параметри (ваги) та матриці фільтру оптимізовані за допомогою зворотного розповсюдження (мінімізація помилок помилкового класифікації). Коли нове зображення вводиться в навчену мережу, для ідентифікації зображення потрібна тільки подача даних (за умови, що мережа є достатньо точною, тобто ми навчили її з достатньою кількістю прикладів тощо) що означає, що параметри (ваги) та матриці фільтру оптимізовані за допомогою зворотного розповсюдження (мінімізація помилок помилкового класифікації). Коли нове зображення вводиться в навчену мережу, для ідентифікації зображення потрібна тільки подача даних (за умови, що мережа є достатньо точною, тобто ми навчили її з достатньою кількістю прикладів тощо)


0

Добре знати, що ANN може створити будь-яку функцію f (x) або f (x, y, z, ..) або будь-яку багатофункціональну для цього питання. Але також важливо знати, що функції мають обмеження в тому, як вони можуть класифікувати дані ... Є більш складні відносини підмножини наборів енергетичних об'єктів, які важливі при класифікації, і вони не описані такими функціями елегантно чи природним чином, але важливі в мові та класифікації об’єктів. Однак, ANN може це зробити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.