Детальний посібник із 7 функцій втрат для алгоритмів машинного навчання з кодом Python

Огляд

  • Що таке функції втрат? І як вони працюють в алгоритмах машинного навчання? Дізнайтеся в цій статті
  • Функції збитків насправді лежать в основі цих методів, які ми регулярно використовуємо
  • Ця стаття висвітлює безліч функцій втрат, де вони працюють, і те, як їх можна кодувати на Python

Вступ

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

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

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

втрат

Їх не важко зрозуміти, і вони нескінченно покращать ваше розуміння алгоритмів машинного навчання. Отже, що таке функції збитків і як можна зрозуміти їх значення?

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

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

Зміст

  • Що таке функції збитків?
  • Функції втрати регресії
    • Втрата помилок у квадраті
    • Абсолютна втрата помилок
    • Втрата Губера
  • Функції втрати двійкової класифікації
    • Двійкова перехресна ентропія
    • Втрата шарніра
  • Багатокласні класифікаційні функції втрат
    • Багатокласна втрата перехресної ентропії
    • Втрата дивергенції Куллбека Лейблера

Що таке функції збитків?

Скажімо, ви знаходитесь на вершині пагорба і вам потрібно зійти вниз. Як ви вирішуєте, куди йти назустріч?

Ось що б я зробив:

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

Ця інтуїція, проти якої я щойно судив свої рішення? Це саме те, що забезпечує функція втрат.

Функція збитків відображає рішення з пов'язаними з ними витратами.

Рішення піднятися на схил буде коштувати нам сил та часу. Рішення спуститися піде нам на користь. Тому це має негативні витрати.

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

Яка різниця між функцією збитків та функцією витрат?

Я хочу наголосити на цьому тут - хоча функція витрат і функція втрат є синонімами та використовуються як взаємозамінні, вони різні.

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

Функції втрати регресії

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

Ми використаємо наведені точки даних, щоб знайти коефіцієнти a0, a1,…, an.

Для розуміння цієї концепції ми використаємо відомий набір даних про житло в Бостоні. І щоб все було простіше, ми будемо використовувати лише одну особливість - Середню кількість кімнат на житло (X) - для прогнозування залежної змінної - Середнє значення (Y) будинків у $ 1000.

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

Тут theta_j - вага, який слід оновити, альфа - швидкість навчання, а J - функція витрат. Функція витрат параметризована тета. Наша мета - знайти значення тета, яке приносить мінімальні загальні витрати.

Ви можете отримати поглиблене пояснення Gradient Descent та як це працює тут.

Я визначив кроки, які ми будемо виконувати для кожної функції втрат нижче:

  1. Напишіть вираз для нашої функції предиктора f (X) та визначте параметри, які нам потрібно знайти
  2. Визначте втрати, які слід використовувати для кожного прикладу навчання
  3. Знайдіть вираз для функції витрат - середньої втрати на всіх прикладах
  4. Знайдіть градієнт функції витрат щодо кожного невідомого параметра
  5. Визначтесь із швидкістю навчання та запустіть правило оновлення ваги для фіксованої кількості ітерацій

1. Втрата помилок у квадраті

Втрата помилок у квадраті для кожного прикладу навчання, також відомого як L2 Втрата, - квадрат різниці між фактичним та прогнозованим значеннями:

Відповідною функцією витрат є Середній з них Помилки в квадраті (MSE).

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

Я використав цей код на даних Бостона для різних значень швидкості навчання для 500 ітерацій кожна:

Ось вам завдання. Спробуйте запустити код для швидкості навчання 0,1 ще раз на 500 ітерацій. Повідомте мене про свої спостереження та можливі пояснення у розділі коментарів.

Давайте поговоримо трохи більше про функцію втрати MSE. Це позитивна квадратична функція (виду ax ^ 2 + bx + c, де a> 0). Пригадайте, як це виглядає графічно?

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

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

2. Абсолютна втрата помилок

Абсолютна помилка для кожного прикладу навчання - це відстань між передбачуваними та фактичними значеннями, незалежно від знака. Абсолютна помилка також відома як Втрата L1:

Як я вже згадував раніше, вартість Середній з них Абсолютні помилки (MAE).

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

Ось код функції update_weight з вартістю MAE:

Ми отримуємо нижченаведений графік після запуску коду для 500 ітерацій з різною швидкістю навчання:

3. Втрата Губера

Втрата Губера поєднує в собі найкращі властивості MSE та MAE. Він квадратичний для менших помилок, а в іншому випадку лінійний (і так само для свого градієнта). Він ідентифікується за параметром дельта:

Ми отримуємо нижченаведений графік для 500 ітерацій оновлення ваги зі швидкістю навчання 0,0001 для різних значень параметра дельта:

Втрата Губера є вищою за межі випередження, ніж MSE. Він використовується в надійній регресії, M-оцінці та адитивному моделюванні. У класифікації також використовується варіант втрати Губера.

Функції втрати двійкової класифікації

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

Я проілюструю ці функції двійкової класифікації втрат на наборі даних раку молочної залози.

Ми хочемо класифікувати пухлину як "Злоякісний" або "Доброзичливий" на основі таких функцій, як середній радіус, площа, периметр тощо. Для спрощення ми будемо використовувати лише дві вхідні функції (X_1 та X_2), а саме "Найгірший район" і "Середня симетрія" для класифікації. Цільове значення Y може бути 0 (злоякісне) або 1 (доброякісне).

Ось графік розкиду для наших даних:

1. Двійкові перехресні втрати ентропії

Почнемо з розуміння терміна "ентропія". Як правило, ми використовуємо ентропію для позначення розладу чи невизначеності. Він вимірюється для випадкової величини X з розподілом ймовірності p (X):

Негативний знак використовується, щоб зробити загальну кількість позитивною.

Більше значення ентропії для розподілу ймовірностей свідчить про більшу невизначеність у розподілі. Так само, менша величина вказує на більш певний розподіл.

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

Потім перехресні ентропійні втрати для вихідної мітки y (можуть приймати значення 0 і 1) та передбачуваної ймовірності p визначаються як:

Це також називається Журнал втрат. Для обчислення ймовірності p ми можемо використовувати сигмоїдну функцію. Тут z є функцією наших вхідних функцій:

Діапазон сигмоїдної функції становить [0, 1], що робить її придатною для обчислення ймовірності.

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

Я отримав нижченаведений графік використання правила оновлення ваги для 1000 ітерацій з різними значеннями альфа:

2. Втрата шарніра

Втрата шарнірів в основному використовується з класифікаторами Vector Vector Machine (SVM) із позначками класів -1 та 1. Тож переконайтеся, що ви змінили мітку класу ‘Malignant’ у наборі даних з 0 на -1.

Втрата шарніра не тільки карає неправильні прогнози, але й правильні прогнози, які не впевнені в собі.

Втрата шарніра для пари вхід-вихід (x, y) визначається як:

Після запуску функції оновлення для 2000 ітерацій з трьома різними значеннями альфа, ми отримуємо такий графік:

Втрата шарнірів спрощує математику для SVM, одночасно максимізуючи втрати (порівняно з Log-Loss). Він використовується, коли ми хочемо приймати рішення в режимі реального часу без різкого фокусування на точності лазера.

Функції багатокласової класифікації втрат

Електронні листи не просто класифікуються як спам чи не спам (це вже не 90-ті роки!). Їх класифікують за різними іншими категоріями - робота, дім, соціальна діяльність, просування по службі тощо.

Ми використаємо набір даних Iris для розуміння решти двох функцій втрат. Ми будемо використовувати 2 функції X_1, Довжина чашолистка і функція X_2, Ширина пелюстки, передбачити клас (Y) квітки ірису - Setosa, Versicolor або Virginia

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

Якщо ви новачок у нейронних мережах, настійно рекомендую спочатку прочитати цю статтю.

Ось графік розсіювання для наших даних:

1. Багатокласова втрата перехресної ентропії

Багатокласова втрата перехресної ентропії є узагальненням втрати двійкової перехресної ентропії. Втрати для вхідного вектора X_i та відповідного кодованого одного разу гарячого цільового вектора Y_i становлять:

Ми використовуємо функцію softmax для пошуку ймовірностей p_ij:

«Softmax реалізований через рівень нейронної мережі безпосередньо перед вихідним рівнем. Шар Softmax повинен мати таку ж кількість вузлів, як і вихідний рівень. " Блог розробника Google

Нарешті, наш результат - це клас з максимальною ймовірністю для даного вводу.

Ми будуємо модель з використанням вхідного та вихідного шарів та складаємо її з різними показниками навчання. Вкажіть параметр втрати як ‘Categorical_crossentropy’ в операторі model.compile ():

Ось графіки вартості та точності відповідно після тренування протягом 200 епох:

2. KL-розбіжність

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

Зверніть увагу, що функція розбіжності не є симетричною.

Ось чому KL-розбіжність не можна використовувати як метрику відстані.

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

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

Ми вказуємо ‘Kullback_leibler_divergence’ як значення параметра втрати у функції compile (), як це було зроблено раніше з багатокласною перехресною ентропією.

KL-дивергенція використовується частіше для наближення складних функцій, ніж у багатокласовій класифікації. Ми часто стикаємося з KL-Divergence, граючись із глибоко генеративними моделями, такими як варіаційні автокодери (VAE).

Кінцеві примітки

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

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

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

Тим часом обов’язково ознайомтесь із нашим комплексним курсом машинного навчання початкового рівня:

  • Прикладне машинне навчання - від початківця до професіонала
Ви також можете прочитати цю статтю в нашому мобільному додатку