Как нормализовать обучающие данные для разных функций активации?

Я тренирую полносвязную нейронную сеть для классификации набора данных MNIST. Входные данные представляют собой квадратные черно-белые изображения со значениями пикселей в [0, 255].

Я читал, что для использования активатора sigmoid() нужно нормализовать ввод, чтобы он находился в [0, 1] (диапазон сигмовидной).

Как нормализовать входные данные для активатора tanh()? Нужно ли масштабировать его, чтобы он был в [-1, 1] (диапазон tanh), или он все еще может быть в [0, 1].

Какой подход лучше и почему? Каково общее руководство?


person Ribtoks    schedule 02.08.2018    source источник


Ответы (2)


Вам не нужно использовать другую нормализацию для другой функции активации. На самом деле вам не нужно нормализовать ввод, чтобы он был в [0, 1] для сигмоида. Диапазон сигмоида [0, 1] — это диапазон его выходных данных. Его диапазон для ввода (домен) на самом деле от минус бесконечности до плюс бесконечности.

Более того, ваш ввод не входит непосредственно в сигмовидную функцию, поэтому диапазон ввода вашего изображения не совпадает с диапазоном ввода, который получит сигмоид. Между ними будет несколько линейных слоев, которые изменяют диапазон данных.

Общее руководство состоит в том, чтобы нормализовать ввод в формате [-1, 1]. Это не имеет ничего общего с функцией активации, а является общей эффективной мерой обратного распространения. См. Эффективное BackProp.

person hkchengrex    schedule 02.08.2018
comment
Спасибо за объяснение. Моя логика для нормализации [0, 1] заключалась в том, что каждый следующий слой получает входные данные от предыдущего сигмовидного слоя. То есть вход для каждого, кроме первого слоя в сети, находится в диапазоне вывода функции активации. Что подразумевает, что вы должны сделать то же самое для 1-го слоя. - person Ribtoks; 02.08.2018
comment
@Ribtoks О отклонениях в диапазоне входных данных должны заботиться линейные операторы. На самом деле не имеет значения, получает ли каждый слой один и тот же диапазон входных данных или нет. Еще одно предложение: просто попробуйте. Обучение классификатора MNIST происходит довольно быстро. - person hkchengrex; 02.08.2018

Нормализация приводит к правильному поведению нейронной сети, поскольку упрощает настройку весов сети, для этого вы можете выбрать либо стандартизацию, либо нормализацию.

Стандартизация = (x - среднее (x)) / стандартное (x);

Нормализация = (x - x_min) / (x_max - x_min);

Кроме того, есть хорошее исследование тангенсов, проведенное Hampel et al. которые кажутся надежными с точки зрения выбросов. Они рассмотрели следующее x_norm = (1/2) * (tanh (0,01 * ((x - среднее (x)) / std (x))) + 1)

Справочник по нормализации Tanh-оценок можно найти по адресу: https://www.cs.ccu.edu.tw/~wylin/BA/Fusion_of_Biometrics_II.ppt

person Pablo Reynoso    schedule 02.08.2018