Arhn - архитектура программирования

Функция потери слоя Caffe SigmoidCrossEntropyLoss

Я просматривал код слоя Caffe SigmoidCrossEntropyLoss и документы, и я немного запутался. В документах функция потерь указана как логит-потери (я бы воспроизвел ее здесь, но без латекса формулу было бы трудно читать. Проверьте ссылку на документы, она находится в самом верху).

Однако сам код (Forward_cpu(...)) показывает другую формулу

Dtype loss = 0;
for (int i = 0; i < count; ++i) {
    loss -= input_data[i] * (target[i] - (input_data[i] >= 0)) -
        log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0)));
}
top[0]->mutable_cpu_data()[0] = loss / num;

Это потому, что это учитывает сигмовидную функцию, уже примененную к входу?

Тем не менее, даже в этом случае фрагменты (input_data[i] >= 0) также сбивают меня с толку. Похоже, что они вместо p_hat из формулы потерь в документах, которая должна быть предсказанием, сжатым сигмовидной функцией. Так почему же они просто берут двоичный порог? Это становится еще более запутанным, поскольку эта потеря предсказывает выходы [0,1], поэтому (input_data[i] >= 0) будет 1, если только он не уверен на 100%, что это не так.

Может кто-нибудь объяснить мне это?


Ответы:


1

Слой SigmoidCrossEntropy в caffe объединяет 2 шага (Sigmoid + CrossEntropy), которые будут выполняться на input_data, в один фрагмент кода:

Dtype loss = 0;
for (int i = 0; i < count; ++i) {
    loss -= input_data[i] * (target[i] - (input_data[i] >= 0)) -
        log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0)));
}
top[0]->mutable_cpu_data()[0] = loss / num;

На самом деле, независимо от того, input_data >= 0 или нет, приведенный выше код всегда эквивалентен следующему коду в математике:

Dtype loss = 0;
for (int i = 0; i < count; ++i) {
    loss -= input_data[i] * (target[i] - 1) -
        log(1 + exp(-input_data[i]);
}
top[0]->mutable_cpu_data()[0] = loss / num;

, этот код основан на простой математической формуле после применения Sigmoid и CrossEntropy к input_data и создания некоторых математических комбинаций.

Но первая часть кода (используемая caffe) обладает большей числовой стабильностью и менее подвержена риску переполнения, поскольку позволяет избежать вычисления больших exp(input_data) (или exp(-input_data)), когда абсолютное значение input_data слишком велико. Вот почему вы видели этот код в кафе.

01.11.2016
  • Итак, если бы кто-то использовал метки истинности с мягким основанием (т. Е. [0,1] вместо {0,1}), нужно ли было бы что-то менять? 01.11.2016
  • Если сумма меток истинности основания равна 1, то в этом слое не должно быть никаких изменений. В противном случае вам следует внести некоторые изменения, применяющие перекрестную энтропию к каждому выходу сети. @маркман 02.11.2016
  • Я думаю, что понимаю, почему это не так, но на практике, когда я нормализовал каждую метку, я начал получать потери NaN, хотя это могло быть проблемой скорости обучения. 02.11.2016
  • Или входные данные для потери слишком велики, вы можете изменить масштаб данных изображения с [0,255] на [0,1].@marcman 03.11.2016
  • Привет, я новичок в Caffe. Не могли бы вы объяснить мне, что такое top[0] и почему они использовали top[0]->mutable_cpu_data()[0]. Спасибо 26.01.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..