← Вернуться к списку

Как нормализовать для perceptual loss при обучении нейронной сети с нуля?

Краткое содержание

Предположим, мы обучаем новую нейронную сеть с нуля. Я вычисляю среднее значение и стандартное отклонение своего набора данных (предположим, я обучаю полностью сверточную нейронную сеть, а мой набор данных состоит из изображений) и стандартизирую каждый канал всех изображений на основе этого среднего и стандартного отклонения. Моим выходом будет другое изображение. Я хочу использовать, например, VGG для перцептивной потери (веса VGG будут заморожены). Перцептивная потеря — это когда вы подаете свой прогноз в предварительно обученную сеть, чтобы извлечь из неё признаки. Затем вы делаете то же самое для эталонного образца, а L2-расстояние между признаками эталонного образца и признаками прогноза называется перцептивной потерей. Насколько я знаю, я должен стандартизировать свои данные на основе среднего значения и стандартного отклонения, с которыми обучалась VGG (поскольку я использую VGG, по сути, для вывода), а они отличаются от среднего значения и стандартного отклонения моего набора данных. Как правильно это сделать? Должен ли я отменить стандартизацию своего набора данных, умножая sta

Полный текст

Как нормализовать данные для перцептивной потери при обучении нейронной сети с нуля? Задать вопрос

Задан 5 лет назад Изменен сегодня Просмотрен 572 раза

1 $\begingroup$ Допустим, я обучаю новую нейронную сеть с нуля. Я вычисляю среднее значение и стандартное отклонение своего набора данных (предположим, я обучаю полностью сверточную нейронную сеть, а мой набор данных состоит из изображений) и стандартизирую каждый канал всех изображений на основе этого среднего и стандартного отклонения. Мой выходом будет другое изображение. Я хочу использовать, например, VGG для перцептивной потери (веса VGG будут заморожены). Перцептивная потеря — это когда вы подаете свой прогноз в предварительно обученную сеть, чтобы извлечь из нее признаки. Затем вы делаете то же самое для правильного ответа (ground truth), и L2-расстояние между признаками из правильного ответа и признаками из прогноза называется перцептивной потерей. Насколько я знаю, я должен стандартизировать свои данные на основе среднего и стандартного отклонения, с которыми обучалась VGG (поскольку я использую VGG, по сути, для вывода), а они отличаются от среднего и стандартного отклонения моего набора данных. Какой правильный способ сделать это? Нужно ли мне отменить стандартизацию своего набора данных, умножив на стандартное отклонение и добавив исходное среднее к выходу моей сети, а затем повторно стандартизировать, используя статистику VGG, для вычисления потери? Или мне следует продолжать без повторной стандартизации? deep-learning computer-vision Поделиться Улучшить этот вопрос Следить Изменено 22 дек. 2020 г., 14:02 Задано 17 дек. 2020 г., 10:49 Andreas G. 111 4 4 бронзовых значка $\endgroup$ 0 Прокомментировать | 1 ответ 1 Отсортировано: По умолчанию Наибольший балл (по умолчанию) Дата изменения (сначала новые) Дата создания (сначала старые) 0 $\begingroup$ Я немного запутался в части «обучение новой нейронной сети с нуля» и затем в части «веса VGG будут заморожены», поскольку ответ меняется, так как это разные случаи. Также может случиться так, что, судя по тому, что я читал, вы используете VGG в качестве основы другой сети для переноса обучения (transfer learning), но это тоже не уточнено. В любом случае, я постараюсь сделать все возможное. Вот случаи, которые я вижу:

Обучение сети с нуля: нет, вам не нужно отменять вашу нормализацию. Фактически, при обучении с нуля вы можете нормализовать как угодно.
Обучение сети с нуля, начиная с предварительно обученных весов: нет, вам не нужно менять вашу нормализацию. Хотя это помогло бы к более быстрой сходимости, поскольку веса подогнаны под другой вид нормализации. Но по мере обучения сети она подстроится под вашу новую нормализацию без каких-либо проблем.
Обучение сети, которая использует VGG в качестве основы с замороженными весами: нет, вам не нужно менять вашу нормализацию, хотя это и помогло бы. Несмотря на то, что ваша основа подогнана под определенный вид нормализации, голова вашей сети все еще является универсальным аппроксиматором, который подстроится под любой другой вид нормализации. Однако если вы используете ту же нормализацию, вы облегчаете работу сети (именно для этого мы нормализуем в первую очередь).

Когда вам действительно нужно принудительно использовать ту же нормализацию, так это при выводе (inference). Когда вы хотите сделать вывод, вам действительно нужно проводить ту же нормализацию при предобработке, иначе вы не получите никаких осмысленных результатов. Поделиться Улучшить этот ответ Следить Ответ дан 22 дек. 2020 г., 11:44 JVGD 1,218 1 1 золотой значок 9 9 серебряных значков 15 15 бронзовых значков $\endgroup$ 3 1 $\begingroup$ Извините, что не объяснил это более четко. Я говорю об использовании VGG в качестве функции потерь (так называемая перцептивная потеря). Это когда вы пропускаете выход обучаемой сети через предварительно обученную VGG и получаете из нее некоторые признаки из промежуточного слоя. Затем вы делаете то же самое для своего правильного ответа. Затем вашей потерей может быть L2-расстояние между извлеченными признаками вашего прогноза и извлеченными признаками правильного ответа $\endgroup$ Andreas G. – Andreas G. 2020-12-22 13:56:36 +00:00 Прокомментировано 22 дек. 2020 г., 13:56 $\begingroup$ Я изменил вопрос, чтобы сделать его более понятным $\endgroup$ Andreas G. – Andreas G. 2020-12-22 14:03:11 +00:00 Прокомментировано 22 дек. 2020 г., 14:03 $\be