Как интерпретировать «потери» и «точность» для модели машинного обучения
201
Когда я тренировал свою нейронную сеть с помощью Theano или Tensorflow, они сообщали о переменной, называемой «потерями» за эпоху.
Как я должен интерпретировать эту переменную? Чем выше потери, тем лучше или хуже, или что это значит для конечной производительности (точности) моей нейронной сети?
Чем меньше потери, тем лучше модель (если модель не была перенастроена на тренировочные данные). Убыток рассчитывается на обучение и проверки и их взаимодействие определяет, насколько хорошо модель справляется с этими двумя наборами. В отличие от точности, потери не в процентах. Это сумма ошибок, сделанных для каждого примера в обучающих или проверочных наборах.
В случае нейронных сетей потери обычно имеют отрицательную логарифмическую вероятность и остаточную сумму квадратов для классификации и регрессии соответственно. Естественно, что основной целью в модели обучения является уменьшение (минимизация) значения функции потерь по отношению к параметрам модели путем изменения значений вектора весовых коэффициентов с помощью различных методов оптимизации, таких как обратное распространение в нейронных сетях.
Значение потерь подразумевает, насколько хорошо или плохо ведет себя определенная модель после каждой итерации оптимизации. В идеале можно ожидать уменьшения потерь после каждой или нескольких итераций.
Точность модели обычно определяется после того, как параметры модели изучены и зафиксированы, а обучение не проводится. Затем тестовые образцы подаются в модель, и после сравнения с истинными целями регистрируется количество ошибок (потеря ноль один), которые делает модель. Затем рассчитывается процент ошибочной классификации.
Например, если количество тестовых образцов равно 1000, и модель правильно классифицирует 952 из них, то точность модели составляет 95,2%.
Есть также некоторые тонкости при уменьшении величины потерь. Например, вы можете столкнуться с проблемой перенастройки, при которой модель «запоминает» обучающие примеры и становится неэффективной для тестового набора. Пересечение также происходит в тех случаях, когда вы не используете регуляризацию , у вас очень сложная модель (количество свободных параметров Wвелико) или число точек данных Nочень мало.
Привет @Amir, спасибо за ваши подробные объяснения. Однако у меня есть проблема: в моей нейронной сети потери всегда уменьшаются, когда я тренируюсь (когда возрастают эпохи ), однако точность не лучше.
mamatv
9
@mamatv Пока стоимость снижается, вы должны быть в порядке. Хотя затраты и точность обычно имеют обратную пропорциональную зависимость, но вы можете заметить, что точность представляет собой сумму ошибок с нулевым значением, тогда как стоимость представляет собой сумму чисел с плавающей запятой. Следовательно, снижение стоимости на 0,001% не обязательно означает увеличение точности на 0,001%. Повысить точность гораздо сложнее, когда снижение стоимости нематериально (стоимость очень близка к локальным минимумам)
Амир
2
@mamatv Я должен был сказать, пока затраты на обучение и валидацию снижаются, вам следует идти вперед. Вы также можете проверить точность проверки в каждую эпоху. Если он начинает расти, значит, ваша модель могла начать перетягиваться, и вам следует прекратить ее обучение.
Амир
1
Почему бы не обучить модель для повышения точности, а не для минимизации потерь?
bikashg
2
Точность @bikashg не дифференцируема, и поэтому вы не можете использовать ее обратно.
DharmaTurtle
23
Это две разные метрики для оценки производительности вашей модели, которые обычно используются на разных этапах.
Потери часто используются в процессе обучения, чтобы найти «лучшие» значения параметров для вашей модели (например, веса в нейронной сети). Это то, что вы пытаетесь оптимизировать на тренировке, обновляя веса.
Точность больше с прикладной точки зрения. Как только вы найдете оптимизированные параметры выше, вы используете эти метрики, чтобы оценить, насколько точен прогноз вашей модели по сравнению с истинными данными.
Давайте использовать пример классификации игрушек. Вы хотите предсказать пол от своего веса и роста. У вас есть 3 данных, они следующие: (0 обозначает мужчину, 1 обозначает женщину)
y1 = 0, x1_w = 50 кг, x2_h = 160 см;
y2 = 0, x2_w = 60 кг, x2_h = 170 см;
y3 = 1, x3_w = 55 кг, x3_h = 175 см;
Вы используете простую модель логистической регрессии, которая имеет вид y = 1 / (1 + exp- (b1 * x_w + b2 * x_h))
Как вы находите b1 и b2? сначала вы определяете потери и используете метод оптимизации, чтобы минимизировать потери итеративным способом, обновляя b1 и b2.
В нашем примере типичная потеря для этой двоичной задачи классификации может быть: (знак минус должен быть добавлен перед знаком суммирования)
Мы не знаем, какими должны быть b1 и b2. Давайте сделаем случайное предположение, скажем, b1 = 0,1 и b2 = -0,03. Тогда какова наша потеря сейчас?
так что потеря
Затем вы изучите алгоритм (например, градиентный спуск), чтобы найти способ обновить b1 и b2, чтобы уменьшить потери.
Что, если b1 = 0,1 и b2 = -0,03 - это последние b1 и b2 (выходные данные градиентного спуска), какова точность сейчас?
Давайте предположим, что если y_hat> = 0.5, мы решаем, что наш прогноз женский (1). в противном случае это будет 0. Поэтому наш алгоритм предсказывает y1 = 1, y2 = 1 и y3 = 1. Какова наша точность? Мы делаем неправильный прогноз для y1 и y2 и делаем правильный прогноз для y3. Так что теперь наша точность составляет 1/3 = 33,33%
PS: В ответе Амира обратное распространение называется методом оптимизации в NN. Я думаю, что это будет рассматриваться как способ найти градиент для весов в NN. Распространенным методом оптимизации в NN являются GradientDescent и Adam.
спасибо за математику. это помогло прояснить концепцию.
Финн
6
@Aadnan Просто для уточнения наборов данных Обучения / Валидации / Тестирования: Обучающий набор используется для выполнения начального обучения модели, инициализации весов нейронной сети.
Набор проверки используется после обучения нейронной сети. Он используется для настройки гиперпараметров сети и сравнения их изменений с прогнозирующей точностью модели. Принимая во внимание, что обучающий набор можно рассматривать как используемый для построения весов затвора нейронной сети, набор проверки позволяет точно настраивать параметры или архитектуру модели нейронной сети. Это полезно, так как позволяет повторять сравнение этих различных параметров / архитектур с одинаковыми весами данных и сетей, чтобы наблюдать, как изменения параметров / архитектуры влияют на предсказательную мощность сети.
Затем набор тестов используется только для проверки точности прогнозирования обученной нейронной сети на ранее невидимых данных после обучения и выбора параметров / архитектуры с помощью наборов данных обучения и проверки.
Это две разные метрики для оценки производительности вашей модели, которые обычно используются на разных этапах.
Потери часто используются в процессе обучения, чтобы найти «лучшие» значения параметров для вашей модели (например, веса в нейронной сети). Это то, что вы пытаетесь оптимизировать на тренировке, обновляя веса.
Точность больше с прикладной точки зрения. Как только вы найдете оптимизированные параметры выше, вы используете эти метрики, чтобы оценить, насколько точен прогноз вашей модели по сравнению с истинными данными.
Давайте использовать пример классификации игрушек. Вы хотите предсказать пол от своего веса и роста. У вас есть 3 данных, они следующие: (0 обозначает мужчину, 1 обозначает женщину)
y1 = 0, x1_w = 50 кг, x2_h = 160 см;
y2 = 0, x2_w = 60 кг, x2_h = 170 см;
y3 = 1, x3_w = 55 кг, x3_h = 175 см;
Вы используете простую модель логистической регрессии, которая имеет вид y = 1 / (1 + exp- (b1 * x_w + b2 * x_h))
Как вы находите b1 и b2? сначала вы определяете потери и используете метод оптимизации, чтобы минимизировать потери итеративным способом, обновляя b1 и b2.
В нашем примере типичная потеря для этой двоичной задачи классификации может быть: (знак минус должен быть добавлен перед знаком суммирования)
Мы не знаем, какими должны быть b1 и b2. Давайте сделаем случайное предположение, скажем, b1 = 0,1 и b2 = -0,03. Тогда какова наша потеря сейчас?
так что потеря
Затем вы изучите алгоритм (например, градиентный спуск), чтобы найти способ обновить b1 и b2, чтобы уменьшить потери.
Что, если b1 = 0,1 и b2 = -0,03 - это последние b1 и b2 (выходные данные градиентного спуска), какова точность сейчас?
Давайте предположим, что если y_hat> = 0.5, мы решаем, что наш прогноз женский (1). в противном случае это будет 0. Поэтому наш алгоритм предсказывает y1 = 1, y2 = 1 и y3 = 1. Какова наша точность? Мы делаем неправильный прогноз для y1 и y2 и делаем правильный прогноз для y3. Так что теперь наша точность составляет 1/3 = 33,33%
PS: В ответе Амира обратное распространение называется методом оптимизации в NN. Я думаю, что это будет рассматриваться как способ найти градиент для весов в NN. Распространенным методом оптимизации в NN являются GradientDescent и Adam.
источник
@Aadnan Просто для уточнения наборов данных Обучения / Валидации / Тестирования: Обучающий набор используется для выполнения начального обучения модели, инициализации весов нейронной сети.
Набор проверки используется после обучения нейронной сети. Он используется для настройки гиперпараметров сети и сравнения их изменений с прогнозирующей точностью модели. Принимая во внимание, что обучающий набор можно рассматривать как используемый для построения весов затвора нейронной сети, набор проверки позволяет точно настраивать параметры или архитектуру модели нейронной сети. Это полезно, так как позволяет повторять сравнение этих различных параметров / архитектур с одинаковыми весами данных и сетей, чтобы наблюдать, как изменения параметров / архитектуры влияют на предсказательную мощность сети.
Затем набор тестов используется только для проверки точности прогнозирования обученной нейронной сети на ранее невидимых данных после обучения и выбора параметров / архитектуры с помощью наборов данных обучения и проверки.
источник