Чернетка книги Ендрю Ина «Жага машинного навчання», глави 1-7

У грудні минулого року в листуванні американських колег за data science прокотилася хвиля обговорення довгоочікуваного чернетку нової книги гуру машинного навчання Ендрю Ина (Andrew Ng) «Жага машинного навчання: стратегії для інженерів в епоху глибинного навчання». Довгоочікуваного, тому що книга була анонсована ще влітку 2016 року, і ось, нарешті, з'явилося кілька розділів.

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

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

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

image

Але, на жаль, точність вашого алгоритму не досить висока. Ви перебуваєте під колосальним тиском, ви повинні поліпшити «детектор кішок». Що ж робити?

У вашої команди є маса ідей, наприклад:

• Зібрати більше даних: взяти більше зображень котиків.
• Зібрати більш різноманітну навчальну вибірку: наприклад, кішок в незвичайних позах, кішок рідкісного забарвлення, фотографії, отримані з різними налаштуваннями камери,…
• Довше навчати модель, використовувати більше ітерацій градієнтного спуску.
• Спробувати нейронну мережу більшого розміру: більше шарів/зв'язків/параметрів.
• Експериментувати з мережею меншого розміру.
• Додати регуляризацию, наприклад, L2.
• Змінити архітектуру мережі: функцію активації, кількість прихованих шарів і т. д.
•…

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

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

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

3. Що ви повинні знати?
Якщо ви вивчали курс «Машинне навчання» на Coursera або маєте досвід застосування алгоритмів навчання з вчителем (supervised learning), то цього достатньо, щоб зрозуміти текст книги. Я припускаю, що ви знайомі з методами навчання з учителем: знаходження функції, яка за значенням х дозволяє отримати y для всіх х, маючи розмічену навчальну вибірку для деяких (x, y). До алгоритмів такого роду належать, наприклад, лінійна регресія, логістична регресія та нейронні мережі. Існує безліч областей машинного навчання, але більшість практичних результатів досягнуто з допомогою алгоритмів навчання з вчителем.

Я буду часто говорити про нейронних мережах (NN) і глибинному навчанні (deep learning). Вам буде потрібно тільки загальне розуміння їх концепцій. Якщо ви не знайомі з поняттями, згаданими вище, то спочатку подивіться відео лекцій курсу «Машинне навчання» на Coursera.

4. Які масштабні зміни сприяють прогресу у машинному навчанні?
Багато ідей глибинного навчання / нейронних мереж багато років витали в повітрі. Чому саме зараз ми почали застосовувати їх? Найбільший внесок у прогрес останніх років дали два фактори:

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

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

image

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

Таким чином, найкращі результати досягаються:

1. коли навчається дуже велика нейронна мережа (так щоб бути на зеленої кривої на малюнку);
2. коли використовується величезна кількість даних для навчання.

Також важливо і багато інших деталей, таких як архітектура мережі, де постійно з'являється безліч інновацій. Тим не менше, одним з найбільш надійних способів поліпшити якість роботи алгоритму залишається (1) навчити велику NN і (2) використовувати більше даних для навчання. На практиці дотримуватись пунктів (1) і (2) надзвичайно складно. Ця книга обговорює деталі цього процесу. Ми почнемо з загальних підходів, які корисні як для традиційних алгоритмів ML так і для NN, потім оберемо найбільш ефективні стратегії для побудови систем глибинного навчання.

5. Які повинні бути вибірки?
Примітка перекладача: Ендрю Ин використовує термін «development set» для позначення вибірки, на якій відбувається настройка параметрів моделі. В даний час цю вибірку частіше називають «validation set» — валидационная вибірка. Дійсно, термін «валідація» не відповідає тому різноманіттю завдань, для яких застосовується дана вибірка, і назва «development set» більш відповідає status quo. Однак, мені не вдалося знайти хорошого перекладу для «development set», тому я пишу «вибірка для розробки» або «робоча (development) вибірка» .

Давайте повернемося до прикладу з фотографіями котиків. Отже, ви розробляєте мобільний додаток, користувачі завантажують різні фотографії в ваш додаток, яке автоматично знаходить серед них фотографії кішок. Ваша команда створила великий набір даних шляхом завантаження з web-сайтів фотографій кішок (позитивні зразки) і «не-кішок» (негативні зразки). Потім цей набір даних був розділений на навчальну (70%) і тестову (30%) вибірки. Використовуючи дані вибірки, був створений «детектор кішок», який добре працював для об'єктів з тестової та навчальної вибірок. Але коли цей класифікатор був реалізований в мобільному додатку, ви виявили, що якість його роботи реально низьке! Що ж сталося?

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

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

Зазвичай ми визначаємо три вибірки:

• Навчальну, на якій запускається алгоритм навчання;
• Для розробки (development set), яка використовується для налаштування параметрів, вибору ознак і ухвалення інших рішень щодо алгоритму навчання, іноді таку вибірку називають утримуваної для перехресної перевірки (hold-out cross validation set);
• Тестову, на якій оцінюють якість роботи алгоритму, але на її основі не приймають ніяких рішень про те, який алгоритм навчання або використовувати параметри.

Як тільки ви зробите тестову вибірку і вибірку для розробки, ваша команда почне пробувати безліч ідей, наприклад різні параметри алгоритму навчання, щоб побачити, що працює краще. Ці вибірки дозволяють швидко оцінити, на скільки добре працює модель. Іншими словами, мета тестовій і робочої (development) вибірок направити вашу команду в бік найбільш важливих змін на шляху розробки системи машинного навчання. Таким чином, ви повинні зробити наступне: створити робочу та тестову вибірки так, щоб вони відповідали даним, які ви очікуєте отримати в майбутньому, і на яких ваша система повинна добре працювати. Іншими словами, ваша тестова вибірка повинна не просто включати 30% доступних даних, особливо, якщо в майбутньому ви очікуєте дані (фотографій зі смартфонів), які відрізняються від даних в навчальній вибірці (зображення з web-сайтів).

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

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

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

6. Робоча (development) та тестову вибірки повинні бути отримані з одного джерела і мати однакову розподіл
Фотографії «котячого» мобільного додатку сегментовані на чотири регіони, які відповідають найбільшим ринків додатків: США, Китай, Індія і інший світ. Ви можете створити робочу вибірку даних двох випадково обраних сегментів, а в тестову вибірку помістити дані двох, що залишилися. Правильно? Ні, помилка! Як тільки ви визначите ці дві вибірки, команда буде зосереджена на поліпшенні якості робочої вибірки. Отже ця вибірка повинна відображати всю задачу, яку ви вирішуєте, а не її частина: потрібно добре працювати на всіх ринках, а не тільки на двох.

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

Припустимо, ваша команда розробила систему, яка добре працює на вибірці для розробки, але не на тестовій. Якщо обидві вибірки отримані з одного джерела/розподілу, тобто досить чіткий діагноз того, що пішло не так: ви переобучились (overfit) на робочій вибірці. Очевидне ліки: збільште обсяг даних у робочій вибірці. Але якщо ці дві вибірки не відповідають один одному, то є багато речей, які могли «піти не так». Взагалі, досить складно працювати над додатками до алгоритмів машинного навчання. Невідповідність між робочою і тестовій вибірками вносить додаткову невизначеність у питання: чи приведе поліпшення в роботі на робочій вибіркою до поліпшень на тестовій. Маючи таку невідповідність, складно зрозуміти, що ж не працює, важко розставити пріоритети: що слід було б спробувати в першу чергу.

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

7. Якого розміру повинні бути тестова і робоча (development) вибірки?
Робоча вибірка повинна бути досить великою, щоб виявляти різницю між алгоритмами, які ви пробуєте. Наприклад, якщо класифікатор A дає точність 90.0%, а класифікатор B точність 90.1%, то робоча вибірка з 100 зразків не дасть побачити зміна в 0.1%. В цілому, робоча выбока з 100 зразків занадто мала. Загальною практикою є вибірки розміром від 1000 до 10000 зразків. З 10000 зразків у вас є шанс побачити поліпшення в 0.1%.

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

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

Що можна сказати про розмір тестової вибірки? Вона повинна бути досить великою, щоб оцінити з високою впевненістю якість роботи системи. Однією популярною евристикою було використовувати 30% наявних даних для тестової вибірки. Це працює досить добре, коли ви маєте не дуже велика кількість даних, скажімо, від 100 до 10000 зразків. Але в епоху «великих даних», коли існують задачі з більш ніж мільйоном зразків для навчання, частка даних у робочій і тестової вибірки скорочується, навіть коли абсолютний розмір цих вибірок зростає. Немає необхідності мати робочу і тестові вибірки набагато більше того обсягу, який дозволяє оцінити якість роботи ваших алгоритмів.

Джерело: Хабрахабр

0 коментарів

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