Простими словами: як працює машинне навчання

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


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

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

  • Можу творити, а можу і накоїти!
  • У мене два недоліки: погана пам'ять і щось ще.
  • Ніхто не знає стільки, скільки не знаю я.
Белиберда виглядає так:

  • ОРПорыав аоырОрпаыор ОрОРАыдцуцзущгкгеуб ыватьыивдцулвдлоадузцщ
  • Йцхяь длваополц ыадолцлопиолым бамдлотдламда
Наше завдання — розробити алгоритм машинного навчання, який би відрізняв одне від іншого. А оскільки ми говоримо про це стосовно до антивірусної тематики, то будемо називати осмислений текст «чистим», а нісенітницю — «шкідливої». Це не просто якийсь уявний експеримент, схожа завдання насправді вирішується при аналізі реальних файлів в реальному антивірусі.

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

Алгоритм
Наш алгоритм буде вважати, як часто в нормальному тексті одна конкретна буква слід за іншої конкретної буквою. І так для кожної пари літер. Наприклад, для першої чистої фрази — «Можу творити, а можу і накоїти!» — розподіл вийде таке:






ат 1 мо 2 рі 2 2 1 тв 2 гу 2 ог 2 ть 2 ит 2 ор 2  
Що вийшло: за буквою слід буква — два рази, — а за буквою а слід літера т — один раз. Для простоти ми не враховуємо розділові знаки і пробіли.

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






то 8411 на 6236 на 6236 ст 6591 не 5199 оу 31 на 6236 5174 мб 2 оу 31 ен 4211 тж 1
Зрозуміло, це не вся таблиця поєднань, а лише її мала частина. Виявляється, ймовірність зустріти «то» в два рази вище, ніж «єп». А щоб за буквою т виходило ж — таке зустрічається лише один раз, в слові «застарілим».

Відмінно, «модель» російської мови у нас тепер є, як її використовувати? Щоб визначити, наскільки ймовірно досліджувана нами рядок чиста або шкідлива, порахуємо її «правдоподібність». Ми будемо брати кожну пару букв з рядка, визначати по «моделі» її частоту (по суті реалістичність поєднання букв) і множити ці числа:

Fмо) * F(ог) * F(му) * F(тв) *… = 2131 * 2943 * 474 * 1344 *… = правдоподібність
Також у фінальному значенні правдоподібності слід врахувати кількість символів в досліджуваній рядку — адже чим вона була довша, тим більше чисел ми перемножили. Тому з твору винесемо корінь потрібної ступеня (довжина рядка мінус один).

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

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

Для рядків вище правдоподібність вийшла наступна:

  • Можу творити, а можу і накоїти! — 1805 балів
  • У мене два недоліки: погана пам'ять і щось ще. — 1535 балів
  • Ніхто не знає стільки, скільки не знаю я. — 2274 бали
  • ОРПорыав аоырОрпаыор ОрОРАыдцуцзущгкгеуб ыватьыивдцулвдлоадузцщ — 44 бали
  • Йцхяь длваополц ыадолцлопиолым бамдлотдламда — 149 балів
Як бачите, чисті рядка правдоподібні на 1000-2000 балів, а шкідливі не дотягують і до 150. Тобто все працює, як задумано.

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

У реальному житті
Давайте обдумаємо, що ж у нас вийшло.

1. Ми виділили ознаки чистих рядків, а саме пари символів.

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

2. На підставі виділених ознак ми побудували математичну модель і навчили її на прикладах.

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

3. На основі математичної моделі ми порахували рейтинг «правдоподібності».

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

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

ОРПорыав аоырОрпаыор ОрОРАыдцуцзущгкгеуб ыватьыивдцулвдлоадузцщ
Йцхяь длваополц ыадолцлопиолым бамдлотдламд

Антивірус сканує файл, якщо зустрів «зущгкгеу», каже: «Ну зрозуміло, це белиберда номер 17». А якщо знайде "длотдламд" «белиберда номер 139».

15 років тому, коли шкідливий стало багато, переважати стало «дженерік»-детектування. Вірусний аналітик пише правила, що для осмислених рядків характерно:

  1. Довжина слів (від одного до двадцяти символів.
  2. Заголовні букви дуже рідко зустрічаються посередині слова, цифри теж.
  3. Голосні зазвичай більш-менш рівномірно чергуються з приголосними.
  4. І так далі. Якщо багато критеріїв порушено — детектуємо цей рядок як шкідливу.
По суті це приблизно те ж саме, тільки замість математичної моделі в цьому випадку набір правил — які аналітик повинен вручну написати. Це добре працює, але вимагає часу.

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

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

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

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

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

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

1. Помилкові спрацьовування.

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

2. Обхід моделі.

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


Один з прикладів обходу описаного нами вище методу: всі слова виглядають правдоподібно, але насправді це нісенітниця. Джерело.
3. Оновлення моделі.

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

Висновок
Отже.

  1. Ми розглянули реальну задачу.
  2. Розробили реальний алгоритм машинного навчання для її вирішення.
  3. Провели паралелі з антивірусної індустрією.
  4. Розглянули з прикладами переваги і недоліки такого підходу.
Незважаючи на величезну важливість машинного навчання у сфері кібербезпеки, ми в «Лабораторії Касперського» розуміємо, що кращу киберзащиту забезпечує саме багаторівневий підхід.

Все в антивірусі повинно бути прекрасно — і поведінковий аналіз, і хмарна захист, та алгоритми машинного навчання, і багато-багато іншого. Але про це "інше" — наступного разу.
Джерело: Хабрахабр

0 коментарів

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