Здесь очень поможет небольшое понимание фактического значения (и механики) как потери, так и точности (см. Также это мой ответ, хотя я буду использовать некоторые части повторно) ...
Для простоты я ограничу обсуждение случаем бинарной классификации, но эта идея в целом применима; вот уравнение (логистических) потерь:
y[i]
- настоящие метки (0 или 1)
p[i]
- это прогнозы (действительные числа в [0,1]), обычно интерпретируемые как вероятности.
output[i]
(не показан в уравнении) - это округление p[i]
, чтобы преобразовать их также в 0 или 1; именно эта величина входит в расчет точности, неявно включающий порог (обычно 0.5
для двоичной классификации), так что если p[i] > 0.5
, то output[i] = 1
, иначе если p[i] <= 0.5
, output[i] = 0
.
Теперь предположим, что у нас есть истинная метка y[k] = 1
, для которой на ранней стадии обучения мы делаем довольно плохой прогноз p[k] = 0.1
; затем, подставляя числа в приведенное выше уравнение потерь:
- вклад этого образца в убыток составляет
loss[k] = -log(0.1) = 2.3
- начиная с
p[k] < 0.5
, у нас будет output[k] = 0
, следовательно, его вклад в точность будет равен 0 (неправильная классификация)
Предположим теперь, что на следующем этапе обучения мы действительно становимся лучше и получаем p[k] = 0.22
; теперь у нас есть:
loss[k] = -log(0.22) = 1.51
- поскольку он по-прежнему
p[k] < 0.5
, мы снова имеем неправильную классификацию (output[k] = 0
) с нулевым вкладом в точность
Надеюсь, вы начнете понимать эту идею, но давайте посмотрим еще один снимок позже, где мы, скажем, получаем p[k] = 0.49
; тогда:
loss[k] = -log(0.49) = 0.71
- все еще
output[k] = 0
, т.е. неправильная классификация с нулевым вкладом в точность
Как вы можете видеть, наш классификатор действительно стал лучше в этом конкретном примере, то есть он уменьшился с 2,3 до 1,5 до 0,71, но это улучшение все еще не проявилось в точности, которая заботится только о правильных классификациях < / em>: с точки зрения точности не имеет значения, что мы получаем более точные оценки для нашего p[k]
, пока эти оценки остаются ниже порогового значения 0,5.
В тот момент, когда наш p[k]
превышает порог 0,5, потери продолжают плавно уменьшаться, как это было до сих пор, но теперь у нас есть скачок во вкладе точности этого образца от 0 до 1/n
, где n
- общее количество выборок.
Точно так же вы можете сами убедиться, что, как только наш p[k]
превысит 0,5, что дает правильную классификацию (и теперь положительно влияет на точность), дальнейшие его улучшения (то есть приближение к 1.0
) по-прежнему уменьшают потери, но больше не влияют на точность.
Аналогичные аргументы справедливы для случаев, когда истинная метка y[m] = 0
и соответствующие оценки для p[m]
начинаются где-то выше порога 0,5; и даже если p[m]
начальные оценки ниже 0,5 (следовательно, они обеспечивают правильную классификацию и уже вносят положительный вклад в точность), их сходимость к 0.0
уменьшит потери без дальнейшего повышения точности.
Собирая части вместе, надеюсь, теперь вы сможете убедить себя, что плавно уменьшающиеся потери и более ступенчатое повышение точности не только не несовместимы, но и действительно имеют смысл.
На более общем уровне: со строгой точки зрения математической оптимизации не существует такого понятия, как точность - есть только убытки; Точность обсуждается только с точки зрения бизнеса (а другая бизнес-логика может даже требовать порогового значения, отличного от значения по умолчанию 0,5). Цитата из моего собственного связанного ответа:
Потеря и точность - разные вещи; грубо говоря, точность - это то, что нас действительно интересует с точки зрения бизнеса, в то время как потери - это целевая функция, которую алгоритмы обучения (оптимизаторы) пытаются минимизировать с помощью математического em> перспектива. Еще более грубо говоря, вы можете думать о потерях как о переводе бизнес-цели (точности) в математическую область, о переводе, который необходим в задачах классификации (в регрессионных задачах обычно потери и бизнес-цель совпадают, или хотя бы может быть таким же в принципе, например RMSE) ...
person
desertnaut
schedule
14.12.2017