Хороша точність, незважаючи на високу вартість втрат


15

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

У мене на тренуванні та валідації ці значення: 0.4011 - соотв .: 0.8224 - val_loss: 0.4577 - val_acc: 0.7826 . Це моя перша спроба впровадження НН, і я щойно підійшов до машинного навчання, тому я не в змозі належним чином оцінити ці результати.


3
Чи спостерігаєте ви високе значення збитків лише на тренувальному наборі чи валідації? Чи спостерігається велике падіння точності або втрати при порівнянні навчального набору і набору валідацій? Деякі цифри були б корисні
Х'ю

Відповіді:


20

У мене виникло подібне питання.

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

Перехресна ентропія як функція епохи.

Показавши точність, я здивувався, коли отримав кращу точність для епохи 1000 порівняно з епохою 50, навіть для тестового набору!

Точність як функція епохи

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

Взагалі параметр, де перехресна ентропія мінімальна, не є параметром, де точність є максимальною. Однак ми можемо очікувати деякої залежності між перехресною ентропією та точністю.

[Далі я припускаю, що ви знаєте, що таке кросова ентропія, чому ми використовуємо її замість точності для тренування моделі тощо. Якщо ні, будь ласка, прочитайте це спочатку: Як інтерпретувати оцінку крос-ентропії? ]

Ілюстрація 1 Це - показати, що параметр, де перехресна ентропія є мінімальним, не є параметром, де точність є максимальною, і зрозуміти, чому.

Ось мої вибіркові дані. У мене є 5 балів, і наприклад введення -1 призвело до виходу 0. Зразок 5 балів

Поперечна ентропія. Після мінімізації поперечної ентропії я отримую точність 0,6. Розріз між 0 і 1 робиться при х = 0,52. Для 5 значень я отримую відповідно поперечну ентропію: 0,14, 0,30, 1,07, 0,97, 0,43.

Точність. Після досягнення максимальної точності в сітці я отримую багато різних параметрів, що ведуть до 0,8. Це можна показати безпосередньо, вибравши зріз x = -0.1. Ну, ви також можете вибрати x = 0,95, щоб вирізати набори.

У першому випадку хрестова ентропія велика. Дійсно, четверта точка знаходиться далеко від розрізу, тому є велика хрестова ентропія. А саме, я отримую відповідно поперечну ентропію: 0,01, 0,31, 0,47, 5,01, 0,004.

У другому випадку хрестова ентропія теж велика. У цьому випадку третя точка знаходиться далеко від розрізу, тому є велика хрестова ентропія. Я отримую відповідно поперечну ентропію: 5e-5, 2e-3, 4,81, 0,6, 0,6.

аабНевеликий приклад даних

н=100а=0,3б=0,5

ббаСередній набір

а

а=0,3

н=10000а=1б=0

Досить великі дані

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

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

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


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

1

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

У наступному прикладі я використовую дуже простий набір даних, в якому є тест в даних тесту. Є 2 класи "нуль" і "один".

Ось як виглядає набір даних:

введіть тут опис зображення

Як ви бачите, розділити 2 класи надзвичайно просто: вище 0,5 - це клас "нуль". Також є один випускник класу "один" посеред класу "нуль" лише в тестовому наборі. Цей зовнішній вигляд важливий, оскільки він зіпсується з функцією втрат.

Я треную 1 приховану нейронну мережу на цьому наборі даних, ви можете побачити результати:

введіть тут опис зображення

Втрати починають зростати, але точність все ж збільшується.

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

введіть тут опис зображення

Бонус: код для даних та моделі

import tensorflow.keras as keras
import numpy as np

np.random.seed(0)
x_train_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_train_2 = np.array([0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])
x_test_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_test_2 = np.array([0,0,0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])

keras.backend.clear_session()
m = keras.models.Sequential([
    keras.layers.Input((1,)),
    keras.layers.Dense(3, activation="relu"),
    keras.layers.Dense(1, activation="sigmoid")
])
m.compile(
    optimizer=keras.optimizers.Adam(lr=0.05), loss="binary_crossentropy", metrics=["accuracy"])
history = m.fit(x_train_2, y_train_2, validation_data=(x_test_2, y_test_2), batch_size=20, epochs=300, verbose=0)

TL; DR

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


-1

ахстат дає дуже хороші ілюстрації.

Натхненний цими ілюстраціями, я приходжу до двох можливих причин. 1. Модель занадто проста, щоб отримати необхідні функції для прогнозування. На Вашій Ілюстрації 1 - це багатозначна проблема і потрібно отримати ще один шар, щоб отримати 100% точність. 2. Дані мають занадто багато галасливих міток (порівняйте ілюстрації 1 та 3)

Що стосується ілюстрації 2, вона пояснює, чому ми не можемо додати занадто багато регуляризації L1 / L2 до моделі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.