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

Майже рік минув з того моменту, як на ФІВТ стартував незвичайний предмет – інноваційний практикум. Його суть – створення студентськими командами ІТ-стартапів під керівництвом досвідчених наставників. Вийшло непогано: завдяки курсу хтось провів частину літа в Кремієвій долині, хтось отримав грант у розмірі 800 000 рублів на розвиток проекту, у когось ABBYY готова повністю викупити проект. І це далеко не всі результати практикуму!

На початку 2011 року третьокурсників ФІВТу зібрали в Актовому залі та повідомили: протягом наступного року вам необхідно буде створити свій власний стартап. Студенти сприйняли цю ідею неоднозначно: не було зрозуміло, як взагалі це робити, та й відповідальність незвична – таки треба було зробити технологічний бізнес, а не черговий навчальний проект. Ось що про це думає призер студентської олімпіадиМФТІ з фізики, студент кафедри «Яндеска» Віктор Кантор:

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

Для полегшення роботи студентів було запрошено різних кураторів, які запропонували свої ідеї для побудови інноваційних бізнесів. Серед них були зовсім різні люди: від студентів-старшекурів та аспірантів МФТІ до радника Ernst&Young з інновацій Юрія Павловича Аммосова (він був керівником усього курсу) та Михайла Батіна, який займається регенеративною медициною та питаннями продовження життя. У результаті фізтехи обрали найцікавіші їм ідеї, куратори прикріпилися до команд, і почалася важка, але захоплююча робота.

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

Askeroid (раніше Ask Droid) – пошук для смартфонів ( Анастасія Уряшева)

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

1minute.ru - одна хвилина на добро (Лев Ґрунін)

Даний проект дає можливість будь-якій людині просто, швидко і безкоштовно займатися благодійністю. Модель проста: рекламодавці пропонують на сайті певний набір активностей, користувачі добровільно беруть участь у них, усі гроші від реклами перераховуються до благодійного фонду. За тиждень після запуску проект зібрав понад 6500 користувачів і не має наміру зупинятися на досягнутому. У результаті, завдяки Леву та його команді 600 дітей із дитячих будинків отримають на Новий рікзаповітні подарунки від Діда Мороза. А Ви вже витратили одну хвилину на добру справу?

Embedded Desktop – комп'ютер у Вашому телефоні (Олексій Вуколов)

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

Smart Tagger – смисловий пошук документів (Віктор Кантор)

Що робити, якщо Ви пам'ятаєте, що десь у поштовій скриньці лежав дуже важливий лист, в якому йшлося про останню серію Big Bang Theory, але при цьому Ви не пам'ятаєте жодних ключових слівз тексту? Пошук Яндекса та Google безсилий. На допомогу прийде розробка Smart Tagger – «розумна» програма, яка використовує семантичний пошук, видасть Вам усі тексти, зміст яких переплітається з популярним серіалом. Проект виграв грант на конкурсі У.М.М.І.К. загальною сумою 400 000 рублів!

MathOcr – розпізнавання формул (Віктор Прун)

Компанія ABBYY запропонувала для реалізації цікаве завдання – створити програму, яка б розпізнавала математичні формули будь-якої складності. Студенти ФІВТу, скооперувавшись із фопфами, що зацікавилися, виконали поставлене завдання – модуль дійсно розпізнає формули, відскановані з підручників з матану або фізики. Результат: ABBYY готова придбати цей продукт за великі гроші.

- Можеш на примітивному прикладі розповісти, як працює машинне навчання?

Можу. Є приклад методу машинного навчанняпід назвою «Вирішуюче дерево», одна з найстаріших речей. Давай зараз зробимо. Допустимо, абстрактна людина запрошує тебе на побачення. Що тобі важливо?

- По-перше, знаю я його чи ні…

(Віктор пише це на дошці.)

…Якщо ​​не знаю, то треба відповісти на запитання, привабливе воно чи ні.

А якщо знаєш, то байдуже? Здається, я зрозумів, це гілка френдзони! Загалом, пишу, якщо не знаєш і непривабливу, то відповідь «та ні, мабуть». Якщо знаєш – відповідь «так».

- Якщо знаю, теж важливо!

Ні, це буде гілка френдзони.

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

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

(Віктор домальовує вирішальне дерево.)

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

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

А тепер уяви, чи було складно вигадати таку схемку людям двісті років тому? Взагалі ні! Ця схема ніякого рокет сайнса в собі не несе. Як явище машинне навчання існує приблизно півстоліття. Прогнозувати на основі даних почав Роналд Фішер ще на початку ХХ століття. Він взяв іриси і розподілив їх по довжині та ширині чашолистки та пелюстки, за цими параметрами він визначав вид рослини.

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

- Ну, точно не краще за всяких восьминогів-провісників футбольних матчів…

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

- А коли ви аналізуєте користувачів, кожна людина для вас – набір чисел?

Грубо кажучи, так. Коли ми працюємо з даними, всі об'єкти, включаючи поведінку користувачів, описуємо певний набір чисел. І ці числа відображають особливості поведінки людей: як часто їздять на таксі, яким класом таксі користуються, в які місця зазвичай їздять.

Зараз ми активно будуємо look-alike-моделі, щоб за ними визначати групи людей зі схожою поведінкою. Коли ми запроваджуємо нову послугу чи хочемо пропіарити стару, пропонуємо її тим, кому це буде цікаво.

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

- Навіть такі тонкощі?

Це нехитра справа. Все обчислюється за допомогою пошукових запитів.

А у додатку це може якось працювати? Наприклад, ви знаєте, що я злиденна і підписана на групи на кшталт «Як вижити на 500 рублів на місяць» - мені пропонують лише побиті дешеві машини, підписана на новини SpaceX - і мені час від часу підганяють Tesla?

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


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

Завжди є приватний режим.

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

Ще ти можеш вирішувати, сервісом якої компанії користуватися, наприклад, «Яндексом» або «Гуглом».

– А є різниця?

Важке питання. Не знаю, як у інших, але в "Яндексі" жорстко з охороною персональних даних. Особливо контролюють працівників.

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

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

До речі, на тему розлучення з хлопцями ми мали цікавий кейс. Коли ми робили прогнозування точки Б - точки призначення в таксі, ввели підказочки. Ось дивись.

(Віктор заходить у додаток «Яндекс.Таксі».)

Наприклад, таксі думає, що я вдома. Пропонує мені поїхати на роботу або в РУДН (я читаю там лекції в рамках курсу з машинного навчання Data Mining in Action). І в якийсь момент, розробляючи ці підказки, ми зрозуміли, що не потрібно скомпрометувати користувача. Крапки «Б» хтось може побачити. З цих міркувань ми відмовилися пропонувати місця за схожістю. А то сидиш у пристойному місці з пристойними людьми, замовляєш таксі, а тобі там пишуть: "Дивись, у цьому барі ти ще не був!"

- Що за сині крапки блимають у тебе на карті?

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

- Так, будь-якої. Я якось із цим пролетіла на два квартали.

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

- А якщо перезапустити програму і тицьнути знову, то ціна змінюється на кілька рублів. Чому?

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

- Чи не думаєш, що «Яндекс.Таксі» скоро уб'є весь ринок таксі?

Думаю що ні. Ми за здорову конкуренцію і не боїмося.

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


- Ви ж поєдналися з Uber. Навіщо?

Це не в моїй компетенції коментувати. Я думаю, об'єднатися – це глибоко розумне рішення.

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

Про повітряні простори не знаю. За новинами у дусі «Uber запустив таксі на човниках» ми стежимо, а про повітря нічого не можу сказати.

- А таксі-безпілотники?

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

- Чи є побоювання, що ПО безпілотників зможуть зламати, щоб керувати машиною віддалено?

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

- Які дані про користувачів ви збираєте та як ви їх захищаєте?

Ми збираємо знеособлені дані користування, наприклад, звідки, коли і куди було здійснено подорож. Все важливе – хешуємо.

- Ти думаєш, через безпілотників скоротиться кількість робочих місць?

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

- Греф на кожній своїй лекції каже, що людина змінюватиме професію щонайменше тричі кардинально.

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

- Досвід уже не відіграє роль?

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

- А твоя професія - data scientist, Чи вона затребувана?

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

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

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

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


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

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

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

- Порадь вузи та факультети, де зараз викладають machine learning.

Є МФТІ, факультети ФІВТ та ФУПМ. Ще у «Вишці» є чудовий факультет комп'ютерних наук, у МДУ на ВМК є машинне навчання. Ну і зараз у РУДН можна послухати наш курс.

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

- Наскільки добре?

Назви суму.

– 500 тисяч на місяць.

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

У рамках спільного з МФТІ проекту «Абетка ІІ» ми вже писали про так званих , які дозволяють «вирощувати» програми за принципами та законами дарвінівської еволюції. Однак поки що такий підхід до штучного інтелекту це, безумовно, «гість із майбутнього». Але як системи штучного інтелектустворюють сьогодні? Як їх навчають? У цьому нам допоміг розібратися Віктор Кантор, старший викладач кафедри алгоритмів та технологій програмування МФТІ, керівник групи аналізу поведінки користувача Yandex Data Factory.

Згідно з нещодавнім звітом дослідницької компанії Gartner, яка регулярно оновлює свій «цикл зрілості технологій», на сьогоднішній день з усього IT на піку очікувань знаходиться саме машинне навчання. Це не дивно: за останні кілька років машинне навчання вийшло зі сфери інтересів вузького кола математиків та фахівців з теорії алгоритмів і проникло спочатку у словник IT-бізнесменів, а потім у світ обивателів. Зараз про те, що існує така річ, як нейромережі з їхньою особливою магією, знає будь-хто, хто користувався додатком Prisma, шукав пісні за допомогою Shazam або бачив зображення, що пройшли через DeepDream.

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

Як навчаються машини

Для початку, щоб розібратися з тим, як відбувається машинне навчання, визначимося з поняттями. За визначенням одного з піонерів цієї галузі Артура Самуеля, до машинного навчання належать методи, які «дозволяють комп'ютерам вчитися без їхнього безпосереднього програмування». Існують два великі класи методів машинного навчання: навчання з учителем та навчання без вчителя. Перше застосовується тоді, коли нам, наприклад, потрібно навчити комп'ютер шукати фотографії із зображенням котиків, друге – коли нам треба, щоб машина, наприклад, змогла самостійно групувати новини у сюжети, як це відбувається у сервісах на кшталт Яндекс.Новин чи Google News. Тобто в першому випадку ми маємо справу із завданням, яке має на увазі існування правильної відповіді (кіт на фото чи є, чи ні), у другому - єдиної правильної відповіді немає, а є різні способирозв'язання задачі. Ми зосередимося саме на першому класі завдань як на найцікавішому.

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

Перше, що нам необхідно, щоб зробити систему передбачення, це зібрати так звану навчальну вибірку, тобто дані про вагу людей у ​​популяції. Друге – визначитися з набором ознак, на підставі яких ми можемо робити висновки про вагу. Зрозуміло, що однією з найсильніших таких ознак буде зростання людини, тому в першому наближенні достатньо взяти лише її. Якщо вага залежить від зростання лінійно, то наше передбачення буде дуже простим: вага людини дорівнюватиме її зростанню, помноженому на якийсь коефіцієнт, плюс якась постійна величина, що записується найпростішою формулою y=kx+b. Все, що нам потрібно зробити, щоб навчити машину передбачати вагу людини, якось знайти правильні величини k і b.

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

Припустимо, на вагу людини його зростання впливає не лінійно, а в третьому ступені (що взагалі-то кажучи очікувано, адже вага залежить від об'єму тіла). Щоб врахувати цю залежність, ми просто вносимо до нашого рівняння ще один член, а саме третій ступінь зростання з власним коефіцієнтом, отримуючи при цьому y=k 1 x+k 2 x 3 +b. Тепер, щоб навчити машину, нам потрібно буде знайти не дві, а три величини (k 1, k 2 та b). Припустимо, ми хочемо в нашому пророкуванні враховувати ще й розмір взуття людини, її вік, час, проведений ним біля телевізора, та відстань від його квартири до найближчої точки фаст-фуду. Жодних проблем: ми просто вносимо ці ознаки як окремі члени до того ж рівняння.

Найголовніше – створити універсальний спосібзнаходити необхідні коефіцієнти (k 1 , k 2 , … k n). Якщо він є, нам буде майже байдуже, які використовувати ознаки для передбачення, адже машина сама навчиться надавати великої ваги важливим, і маленький - неважливим ознакам. На щастя, такий метод вже придуманий і на ньому успішно працює майже все машинне навчання: від найпростіших лінійних моделей до систем розпізнавання облич та аналізаторів мови. Називається цей метод градієнтним спуском. Але перш ніж пояснити, як він працює, треба зробити невеликий відступ і розповісти про нейромережі.

Нейросети

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

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

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

Пояснимо на прикладі. Ми зупинилися на пророкуванні, в якому вага людини залежить від її зростання та зростання в кубі, що виражається формулою y=k 1 x+k 2 x 3 +b. З деякою натяжкою, але фактично навіть таку формулу можна назвати нейромережею. У ній, як і в звичайній нейромережі, є перший шар «нейронів», він же шар ознак: це x і x 3 (та й «поодинокий нейрон», який ми тримаємо в умі і за який відповідає коефіцієнт b). Верхній, або результуючий шар представлений одним «нейроном» y, тобто передбаченою вагою людини. А між першим та останнім шаром «нейронів» є зв'язки, сила або вага яких визначається коефіцієнтами k 1 , k 2 і b. Навчити цю «нейросеть» означає просто знайти ці коефіцієнти.

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

Градієнтний спуск

Отже, ми маємо навчальну вибірку прикладів з відомими даними, тобто таблицю з точно виміряною вагою людини, і деяку гіпотезу залежності, даному випадку лінійну регресію y=kx+b. Наше завдання полягає в тому, щоб знайти правильні величини k та b, причому не вручну, а автоматично. І бажано, універсальним методом, який не залежить від кількості параметрів, що включаються до формули.

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

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

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

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

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

Функцію помилки можна визначити як суму квадратів усіх відхилень, які поточна формула допускає стосовно людей, чия вага нам вже точно відома. Візьмемо якісь випадкові величини k і b, наприклад 0 і 50. Тоді система передбачатиме, що вага кожної людини у вибірці завжди дорівнює 50 кілограмам y=0×x+50 На графіку така залежність буде виглядати як пряма, паралельна горизонталі. Зрозуміло, що це не дуже гарне передбачення. Тепер візьмемо відхилення у вазі від цього передбаченого значення, зведемо її в квадрат (щоб негативні значення теж враховувалися) і підсумуємо - це буде помилка в даній точці. Якщо вам знайомі початку аналізу, то можна навіть уточнити, що напрямок найбільшого падіння задається приватною похідною функцією помилки по k і b, а крок - це величина, яка вибирається з практичних міркувань: дрібні кроки займають багато часу на обчислення, а великі можуть призвести до тому, що ми проскочимо повз мінімум.

Добре, а якщо у нас не просто складна регресія з безліччю ознак, а справжня нейромережа? Як нам застосувати градієнтний спуск у такому разі? Виявляється, що і з нейромережею градієнтний спуск працює так само, тільки навчання відбувається 1) поетапно, від шару до шару та 2) поступово, від одного прикладу у вибірці до іншого. Метод, який тут застосовується, називається алгоритмом зворотного поширення помилки, він був незалежно описаний у 1974 році радянським математиком Олександром Галушкіним та математиком з Гарвардського університету Полом Джоном Вебросом (Paul John Webros).

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

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

Проблеми градієнтного спуску

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

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

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

Параліч мережі.Іноді трапляється так, що методом градієнтного узвозу взагалі не вдається знайти мінімум. Це може статися у випадку, якщо з двох сторін від мінімуму будуть рівні ділянки – алгоритм, потрапивши на плоску ділянку, зменшує крок і з часом зупиняється. Якщо, стоячи на вершині гори, ви вирішите рухатися до вашого будинку в низині, шлях може виявитися занадто довгим, якщо ви випадково забредете на дуже рівну ділянку. Або, якщо по краях від плоских ділянок знаходяться практично вертикальні «схили», алгоритм, обравши дуже великий крок, стрибатиме від одного схилу до іншого, практично не просуваючись до мінімуму.

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

Підготував Олександр Єршов