найголовніше про нейронних мережах. Лекція в Яндексі

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

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



Костянтин klakhman Лахман закінчив МІФІ, працював дослідником в відділі нейронаук НДЦ «Курчатовський інститут». В Яндексі займається нейромережевими технологіями, що використовуються в комп'ютерному зорі.

Під катом — детальна розшифровка зі слайдами.

Нейронні мережі
Всім привіт. Мене звати Костя Лахман, і тема сьогоднішньої лекції – це «Нейронні мережі». Я працюю в «Яндексі» в групі нейромережевих технологій, і ми розробляємо всякі прикольні штуки, засновані на машинному навчанні, з застосуванням нейронних мереж. Нейронні мережі – це один з методів машинного навчання, до якої зараз прикута досить велику увагу не тільки фахівців в області аналізу даних або математиків, але і взагалі людей, які ніяк не пов'язані з цією професією. І це пов'язано з тим, що рішення на основі нейронних мереж показують найкращі результати в самих різних областях людського знання, як розпізнавання мови, аналіз тексту, аналіз зображень, про що я спробую в цій лекції розповісти. Я розумію, що, напевно, у всіх в цій аудиторії і у тих, хто нас слухає, трошки різний рівень підготовки – хто знає трохи більше, хтось трохи менше, – але можете підняти руки ті, хто читав що-небудь про нейронні мережі? Це дуже солідна частина аудиторії. Я постараюся, щоб було цікаво і тим, хто взагалі нічого не чув, і тим, хто щось все-таки читав, тому що більшість досліджень, про які я буду розповідати – це дослідження цього року або попереднього року, тому що дуже багато всього відбувається, і буквально проходить півроку, і ті статті, які були опубліковані півроку тому, вони вже трошки застарівають.


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

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

Об'єкти – це всі зображення в світі, які можуть цікавити нас.

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

І клас, який ми можемо віднести до кожного зображення, – це, наприклад, людина (це фотографія Алана Тюрінга, наприклад), птиця, будинок і так далі.

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

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

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

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

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

Зараз сплеск інтересу до нейросетям, але це один з найстаріших алгоритмів машинного навчання, який тільки можна придумати. Перший формальний нейрон, осередок нейронный мережі була запропонована, його перша версія, в 1943 році Уорреном Маккалоком і Уолтером Питтсом. Вже в 1958 році Френк Розенблатт запропонував першу найпростішу нейронну мережу, яка вже могла розділяти, наприклад, об'єкти в двомірному просторі. І нейронні мережі проходили за всю цю більш ніж піввікову історію злети і падіння. Інтерес до нейронних мереж був дуже великий в 1950-1960-ті роки, коли були отримані перші вражаючі результати. Потім нейронні мережі поступилися місцем іншим алгоритмів машинного навчання, які виявилися сильнішими в той момент. Знову відновився інтерес у 1990-ті роки, потім знову пішов на спад.

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

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

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

Що таке формальний нейрон? Це дуже простий елемент, у якого є якась обмежена кількість входів, до кожного з цих входів прив'язаний деякий вагу, і нейрон просто бере і здійснює зважену суммацию своїх входів. На вході можуть бути, наприклад, ті ж самі пікселі зображення, про які я розповідав раніше. Уявімо собі, що X1 і до Xn – це просто всі пікселі зображення. І до кожного пікселя прив'язаний якусь вагу. Він їх підсумовує і здійснює деякий нелінійне перетворення над ними. Але навіть якщо не торкатися лінійного перетворення, то вже один такий нейрон є досить потужним класифікатором. Ви можете замінити цей нейрон і сказати, що це просто лінійний класифікатор, і формальний нейрон ним і є, це просто лінійний класифікатор. Якщо, припустимо, у двомірному просторі у нас є деякий безліч точок двох класів, а це їх ознаки X1 X2, тобто, підібравши ці ваги V1 V2, ми можемо побудувати розділяє поверхню в цьому просторі. І, таким чином, якщо у нас ця сума, наприклад, більше нуля, то об'єкт відноситься до першого класу. Якщо ця сума менше нуля, то об'єкт відноситься до другого класу.

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

Це нелінійне перетворення, яке здійснює кожен нейрон над цією сумою, воно критично важливо, тому що, як ми знаємо, якщо ми, наприклад, проведемо таку просту суммацию і скажемо, що це, наприклад, якийсь новий ознака Y1 (W1x1+W2x2=y1), а потім у нас є, наприклад, ще другий нейрон, який теж підсумовує ті ж самі ознаки, тільки це буде, наприклад, W1'x1+W2'x2=y2. Якщо ми захочемо потім застосувати знову лінійну класифікацію у просторі цих ознак, то це не буде мати ніякого сенсу, тому що дві поспіль застосовані лінійні класифікації легко замінюються на одну, це просто властивість лінійності операцій. А якщо ми здійснимо над цими ознаками деякий нелінійне перетворення, наприклад, найпростіше… Раніше застосовували більш складні нелінійні перетворення, такі, як ця логістична функція, вона обмежена нулем і одиницею, і ми бачимо, що тут є ділянки лінійності. Тобто вона близько 0 за x веде себе досить лінійно, як звичайна пряма, а далі вона веде себе нелінійно. Але, як виявилося, щоб ефективно навчати подібного роду класифікатори, достатньо найпростішої нелінійності на світі – просто урізаною прямий, коли на позитивному ділянці це пряма, а на негативному ділянці це завжди 0. Це найпростіша нелінійність, і виявляється, що навіть її вже достатньо, щоб ефективно навчати класифікацію.

Що представляє з себе нейронна мережа? Нейронна мережа являє собою послідовність таких перетворень. F1 – це так званий шар нейронної мережі. Шар нейронної мережі – це просто сукупність нейронів, які працюють на одних і тих же ознак. Уявімо, що у нас є початкові ознаки x1, x2, x3, і у нас є три нейрона, кожен з яких пов'язаний з усіма цими ознаками. Але у кожного з нейронів свої ваги, на яких він зважує такі ознаки, і завдання навчання мережі в підборі таких ваг у кожного з нейронів, які оптимізують цю нашу функцію помилки. І функція F1 – це один шар таких нейронів, і після застосування функція у нас виходить якийсь новий простір ознак. Потім до цього простору ознак ми застосовуємо ще один такий шар. Там може бути інша кількість нейронів, якась інша нелінійність як перетворюючої функції, але це такі ж нейрони, але з такими вагами. Таким чином, послідовно застосовуючи ці перетворення, у нас виходить загальна функція F – функція перетворення нейронної мережі, яка складається з послідовного застосування декількох функцій.

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

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

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

Одним з методів, який першим показав практичну користь, є так звані згорткові нейронні мережі. Що таке згорткові нейронні мережі? Припустимо, у нас є зображення Альберта Ейнштейна. Цю картину, напевно, багато хто з вас бачили. І ці кружечки – це нейрони. Ми можемо під'єднати нейрон до всіх пікселям вхідного зображення. Але тут є велика проблема, що якщо приєднати кожен нейрон до всіх пікселях, то, по-перше, у нас вийде дуже багато ваг, і це буде дуже обчислювально ємна операція, дуже довго буде обчислювати таку суму для кожного з нейронів, а по-друге, ваг вийде так багато, що цей метод буде дуже нестійкий до перенавчання, тобто до ефекту, коли на навчальній множині ми всі добре передбачаємо, а на безлічі прикладів, які не входять у навчальні, ми працюємо дуже погано, просто тому, що ми перебудувалися на навчальну множину. У нас занадто багато ваг, занадто багато свободи, ми можемо дуже добре пояснити будь-які варіації в навчальній множині. Тому придумали іншу архітектуру, в якій кожен з нейронів приєднаний тільки до невеликої околиці на зображенні. Крім всього іншого всі ці нейрони володіють одними і тими ж вагами, і така конструкція називається згорткою зображення.

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

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

Тут має бути відео.
І однією з перших речей, до чого застосували подібну архітектуру – це розпізнавання цифр, як найпростіших об'єктів.

Застосував це десь в 1993 році Ян Лекун в Парижі, і тут зараз буде практично архівний запис. Якість так собі. Тут зараз вони надають рукописні цифри, натискають деяку кнопочку, і мережа розпізнає ці рукописні цифри. В принципі, вона безпомилково розпізнає. Ну, ці цифри, звичайно, простіше, тому що вони друковані. Але, наприклад, на цьому зображенні цифри вже значно складніше. А ці цифри, чесно сказати, навіть я не зовсім можу розрізнити. Там, здається, четвірка зліва, але мережа вгадує. Навіть такого роду цифри вона розпізнає. Це був перший успіх згорткових нейронних мереж, який показав, що вони дійсно застосовні на практиці.

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

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

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

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

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

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

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

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

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

Основний метрикою помилку на цій базі є так звана Топ-5 помилка. Це коли ми беремо Топ-5 передбачень, перші п'ять пророкувань нашої мережі, в яких вона найбільш впевнена, і якщо правильний клас з розмітки потрапив у ці п'ять передбачень, то ми говоримо, що мережа права. І помилка – це коли у нас в перші п'ять прогнозів не потрапив правильний клас. І до ери нейронної мережі (це 2010-2011 рік, це до ери згорткових нейронних мереж ми бачимо, що помилка, звичайно, зменшувалася, була трохи нижче 30%, а в 2011 році ще трохи нижче, але, наприклад, в 2012 році, коли вперше застосували сверточную нейронну мережу до цього завдання, виявилося, що ми можемо знизити помилку радикально, тобто всі інші методи були на це нездатні, а нейронна мережа була на це здатна, і далі по мірі зростання інтересу до нейронних мереж виявилося, що ми можемо знизити цю помилку – це зараз буде певна спекуляція на рівень, якого може досягти людина на цій базі. Було проведено деякий дослідження, воно було не дуже глобальне, що там було п'ять чоловік, які кілька днів готувалися розпізнавати подібного роду зображення, і у них вийшла помилка десь в районі 4,5% на цій вибірці, і нейронна мережа на момент весни або літа 2015 року цей рубіж побила, що всіх дуже вразило, було дуже багато новинних заміток по цьому приводу, і так далі.

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

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

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

Насправді, у того, про що я зараз розповідаю – у алгоритмів комп'ютерного зору – є дуже багато застосувань, але є також дуже багато застосувань у реальному світі, такі, як пошук таких зображень, розпізнавання. Але є дуже багато й анекдотичні застосувань. Наприклад, група дослідників спробувала взяти досить просту картинку, вона тут зліва у верхньому ряду зображення, і навчити мережу стилизовывать це зображення під картини різних великих художників, таких, як Пабло Пікассо, Кандинський, Вінсент Ван Гог. Фактично вони подавали на вхід звичайні зображення і картину і говорили, що «Ми хочемо, щоб, з одного боку, вихідне зображення було схоже на вихідний, але також щоб у ньому був присутній певний стиль митця». І, як ми бачимо, воно досить цікавим чином перетворює картинки. І, з одного боку, ми можемо дізнатися початкове зображення, а також риси автора. Як бачите, більшість статей, про які розповідаю, – це десь 2014-2015 рік, і ви теж можете зайти і подивитися більш докладно.

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

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

Праворуч – це просто розгортка по часу. x0, x1, x2 і так далі. І мережу ще пам'ятає свій попередній стан. І те, як вона аналізує кожен вхідний об'єкт, залежить не тільки від цього об'єкта, але і від попередньої історії.

Для чого це робиться? Одне з цікавих застосувань – наприклад, ми хочемо генерувати тексти просто по букві. Припустимо, ми спочатку ініціалізуємо цю мережу деякою послідовністю, наприклад, словом, і далі хочемо, щоб на кожному наступному часовому кроці вона нам выплевывала просто букву, тобто яку наступну букву вона хоче написати. Це стаття в LaTeX, яка дозволяє одночасно писати, тобто це така мова програмування для написання статей за великим рахунком. Якщо натренувати мережу таким чином і дозволити їй генерувати текст, то виходять осмислені, принаймні, слова. Тобто слова вона не плутає. Здається, що навіть синтаксис речень теж виходить осмисленим. Тобто у нас є дієслово, є підмет, присудок в англійській мові, але семантика цих пропозицій, тобто їх зміст, не завжди присутня. Начебто з точки зору побудови все виглядає добре, а сенсу там буває іноді трохи. Але це дуже проста модель, вона генерує по одному символу за прохід. І, наприклад, вона ще навіть намагається малювати якісь діаграми тут справа вгорі. Так як мова розмітки LaTeX дозволяє не тільки писати, а й малювати, то вона намагається ще щось малювати.

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

Виявляється, що тренувати такі рекурентні мережі, якщо ми просто будемо представляти їх так шарами нейронів, досить складно. Складно тому, що вони дуже швидко забувають інформацію про попередніх об'єктах, які ми їм подавали до поточного. А іноді нам потрібно, щоб вони пам'ятали взаємозв'язку між об'єктами, які дуже віддалені на відстані. Припустимо, якщо ми собі уявимо «Війну і мир», чудове твір Льва Толстого, то там деякі пропозиції займають по кілька рядків. І я пам'ятаю, що коли я їх читав, то до кінця пропозиції я вже забував про те, що там було спочатку. І така ж проблема спостерігається у рекурентних мереж, вони теж забувають, що було на початку послідовності, а не хотілося б. І для цього придумали більш складну архітектуру. Тут важливо те, що у нас в центрі є один нейрон, який подає свій вихід собі ж на вхід. Ми бачимо таку рекуррентную зв'язок. Крім всього іншого, у нас є ще окремі нейрони, які контролюють, вони є вентилями, тобто визначають, чи потрібно нам сприймати поточну вхідну інформацію. Є вентиль на вході, тобто у нас є деякий вхід, і ми визначаємо, потрібно його пропустити далі або не потрібно. Чи нам потрібно його ігнорувати і просто зберегти свої спогади. Точно також тут є вентиль на спогади: чи варто нам зберігати наші спогади в поточний момент часу про попередніх, чи нам варто їх обнулити і сказати, що ми стираємо нашу пам'ять.

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

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

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

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


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


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

Згорткові + рекурентні мережі
Ми можемо спробувати пов'язати згорткові мережі з рекуррентными. Я розповідав окремо про одні, окремо про інші, але ми можемо спробувати їх зв'язати.

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


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

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

— насправді сенс цієї технології розпізнавання по картинці? Тобто я сам бачу.
— Тут мені підказують — для людей з обмеженими можливостями це має великий сенс. По-друге, уявіть собі, як відбувається пошук по зображеннях в Інтернеті. Як?
— Ви розповідали, за цим самим.
— Це пошук схожих зображень. А, наприклад, якщо ви зайдете на який-небудь сервер типу «Яндекс.Картинки»…
— По ключовим словами.
— Так. І в цей момент, якщо ми можемо генерувати ці ключові слова з картинки, то пошук буде просто більш якісним. Тобто ми можемо знаходити картинки… Зараз пошук по картинках здебільшого йде за прикартиночным текстів. Тобто навколо картинки є якийсь текст. Коли ми кладемо картинку в наш індекс, то говоримо, що у нас в картинки такий текст. Коли користувач вводить запит, то ми намагаємося зіставляти слова і запити зі словами в тексті. Але прикартиночный текст – це дуже складна штука, вона буває не завжди релевантна картинці, поруч з якою вона розташована. Дуже багато людей намагаються оптимізувати свій заробіток в Інтернеті, наприклад, або ще щось таке, і тому це не завжди надійна інформація.

А якщо ми зможемо надійно говорити, що на картинці, то це буде дуже корисно.


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


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


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


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

Нейронні мережі + навчання з підкріпленням
Про що я б хотів розповісти в завершення – це дуже цікава тема «Зв'язка нейронних мереж з навчанням з підкріпленням». Хто-небудь з вас читав, що таке навчання з підкріпленням?

— У психології є таке.
— Насправді це пов'язано з психологією. Область «зв'язка нейронних мереж з навчанням з підкріпленням» — це сама відноситься до біології і психології область дослідження нейронних мереж.


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

Уявіть собі, що у нас в цьому простому лабіринті є всього три стани, в яких може перебувати мишка – це S1. У стані S1 вона може зробити вибір – піти ліворуч або піти направо. І в стані S2 S3 вона теж може зробити вибір піти ліворуч або піти направо.

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


І завдання навчання з підкріпленням в цьому найпростішому випадку складається в побудові такої функції Q, яка для кожного стану S в нашому лабіринті або в якийсь нашому середовищі буде говорити: «Якщо ти зробиш це дія, – наприклад, підеш наліво, ти зможеш отримати таку нагороду». Нам важливо, щоб в змозі S1, коли ми ще не знаємо, що буде попереду, щоб ця функція говорила, що «Якщо ти підеш наліво в цьому стані, ти зможеш отримати нагороду 4». Хоча, якщо ми з S1 перейдемо в S2, то ми можемо отримати нагороду 0. Але максимальна нагорода, яку ми можемо отримати при правильній стратегії поведінки, – це 4.

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

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

І цей алгоритм досить простий, він ітеративний. Уявімо собі, що у нас є ця функція Q ( s, a).

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


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

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

І, припустимо, в поточний момент часу ця функція у нас дорівнює трьом. А в цьому стані S, в яке ми переходимо після того, як вийшли з S, уявімо собі, що якщо ми візьмемо maxa' Q(S',a'), тобто візьмемо максимум, скільки ми можемо отримати з цього стану S, воно дорівнює 5, наприклад. У нас явно деяка нестиковка. Тобто ми знаємо, що з цього стану ми можемо отримати нагороду 5, а в цьому стані ми чомусь цього ще не знаємо, хоча якщо ми підемо вгору, то ми зможемо отримати цю нагороду 5. І в такому разі ми намагаємося усунути цю розбіжність, тобто беремо різницю між Q (S, up)=3 max(a')⁡ Q(S',a')=5 і, таким чином, на наступній ітерації збільшуємо цінність цієї дії в тому стані. І так ітеративне ми вчимося.

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

У нас є ігри Atari. Я не впевнений, що хто-небудь з вас до них грав, бо навіть я в них не грав. Я в них грав, але вже у дорослому віці. Вони різні. Найвідоміша з них, яка зліва внизу розташована – це називається Space Invaders, це коли у нас є деякий шаттл, на нас насувається група жовтих інопланетних загарбників, а ми така самотня зелена гармата, і ми намагаємося всіх цих жовтих загарбників відстрелити і таким чином виграти.
Є зовсім прості ігри, як «Пінг-понг», коли нам треба намагатися не втратити м'яч у своєї половини і зробити так, щоб суперник втратив м'яча на своїй половині.

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

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

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

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

Вони брали кожну гру, наприклад, Space Invaders або «Пінг-понг», довго думали, як потрібно рухатися, придумували якісь ознаки, говорили, що якщо м'яч летить під таким кутом і з такою швидкістю, то ми повинні розвинути таку швидкість, щоб прийняти його на протилежній стороні і щоб він ще відскочив незручно для противника. І так далі. І для кожної гри це доводилося придумувати окремо. А тепер вони взяли взагалі одну і ту ж архітектуру нейронної мережі, запустили її в різні ігри, і на всіх цих іграх ця одна архітектура, щоправда з різними вагами – в кожній грі були різні ваги, але одна і та ж архітектура – їй вдалося обіграти практично більшість всіх цих методів, які придумувалися на протязі 10-20 років.


Тут синє – це, грубо кажучи, яку кількість очко набирає нейронна мережа, сіреньке – це state of the art може до нейронних мереж, а процентики в стовпчиках – це те, на скільки відсотків нейронна мережа грає краще, ніж людина. Тобто ми можемо бачити, наприклад, що в пінбол нейронна мережа грає на 2500% краще, ніж людина. В бокс, в різні ігри, гонки, теніс, пінг-понг, навіть в Space Invaders нейронна мережа грає краще, ніж людина. При тому треба розуміти, що Space Invaders – це дуже складна гра. Якщо ми подивимося, то вона тут знаходиться, і це сіре – це state of the art, який був до цього, грубо кажучи. Скажімо так, що він був дуже поганий. Це означає, що ця гра дуже складна, і з допомогою нейронних мереж можна не тільки обійти його, але і обійти людини.

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

Дякую за увагу. Сподіваюся, у вас залишилися питання.

Єдине, що я хотів сказати, що в Інтернеті величезна кількість різних матеріалів про нейронні мережі, дуже багато матеріалів у вигляді наукових статей, які, напевно, важкувато буде сприйняти з нуля. Але, тим не менш, є дуже хороші туторіали. Вони в більшості випадків англійською. Є дуже хороший курс Віктора Лемпицкого у дорослому ШАД. Є, наприклад, друга посилання – так званий Hackers guide to Neural Networks. Це такий туторіал без математики, тільки з програмуванням. Тобто там, наприклад, на мові Python показано, як робити найпростіші мережі, як їх навчати, як збирати вибірки і так далі. Є дуже багато програмних засобів, в яких реалізовані нейронні мережі, і ними дуже легко користуватися. Тобто, грубо кажучи, просто створюєте нейрони, створюєте шари, з цеглинок збираєте нейронну мережу і далі нею користуєтеся. І я вас запевняю, це під силу кожному з вас – спробуйте поекспериментувати. Це дуже цікаво, весело і корисно. Дякую за увагу.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.