5.4 KiB
status, type, tags, created, updated, aliases
| status | type | tags | created | updated | aliases | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| seed | concept |
|
2026-05-14 | 2026-05-14 |
|
Предобработка данных для нейронных сетей
Перед обучением Нейронные сети данные необходимо привести к виду, пригодному для входных нейронов. "Сырые" данные приводят к неустойчивому обучению и большой ошибке выхода. После правильной предобработки сеть зачастую обучается быстрее и достигает меньшей ошибки.
Принцип максимизации энтропии
Общий принцип предобработки: максимизировать энтропию входных и выходных значений.
Если значения переменной сосредоточены в узком диапазоне, информационное содержание каждого примера мало. Если значения равномерно распределены по единичному интервалу — информация максимальна. Значит, кодирование и нормировка должны стремиться к равномерному распределению закодированных примеров.
Нормировка числовых переменных
Все входные и выходные значения необходимо привести к единому масштабу — нейросеть не должна зависеть от единиц измерения.
Линейная нормировка
\tilde{x}_i = \frac{x_i - x_{i,\min}}{x_{i,\max} - x_{i,\min}}
Результат лежит в [0, 1]. Оптимальна, когда значения плотно заполняют некоторый интервал без резких выбросов. При наличии выбросов весь основной массив данных сожмётся в окрестность нуля.
Нормировка по статистике
\tilde{x}_i = \frac{x_i - \bar{x}_i}{\sigma_i}, \quad \bar{x}_i = \frac{1}{P}\sum_{\alpha=1}^{P}x_i^\alpha, \quad \sigma_i^2 = \frac{1}{P-1}\sum_{\alpha=1}^{P}(x_i^\alpha - \bar{x}_i)^2
Нормированные значения не гарантированно лежат в [0, 1]. Если выходные нейроны используют сигмоиду, диапазон выходов ограничен — нужно дополнительно ограничить диапазон нормированных меток. Естественный выход: применить к нормированным данным ту же функцию активации, что и у выходных нейронов:
\tilde{x}_i = f\!\left(\frac{x_i - \bar{x}_i}{\sigma_i}\right), \quad f(a) = \frac{1}{1+e^{-a}}
Кодирование нечисловых переменных
Нейронная сеть работает с числами, поэтому нечисловые переменные необходимо закодировать. Два основных типа:
- Ординальные — упорядоченные категории, которые можно ранжировать: плохо — хорошо — отлично.
- Категориальные — неупорядоченные классы: красный, синий, зелёный.
Ординальные переменные
Единичный отрезок [0, 1] разбивается на n частей (по числу классов) пропорционально числу примеров каждого класса в обучающей выборке:
\Delta x_k = \frac{P_k}{P}
где P_k — число примеров класса k, P — общее число примеров. Числовым значением класса становится центр соответствующего отрезка.
Такой способ обеспечивает равномерное распределение закодированных значений, то есть максимальную энтропию.
Категориальные переменные
Навязывать несуществующий порядок нельзя — это искажает структуру данных. Используется двоичное кодирование: n категорий кодируются n бинарными нейронами.
- первая категория:
(1, 0, \dots, 0) - вторая категория:
(0, 1, \dots, 0) - …
- $n$-я категория:
(0, \dots, 0, 1)
Можно использовать биполярную кодировку, заменяя нули на -1. При этом расстояния между всеми парами векторов-категорий одинаковы.
Связанные заметки
- Нейронные сети
- Обратное распространение ошибки
- Нейронная сеть Кохонена