Ранее были опубликованы основные методы, необходимые для предварительной обработки информации в нейрокомпьютинге, такие, как разделение выборки на обучающую и тестовую части, нормирование входов и ядерные преобразования.
Но всё, это уже давно известно, задолго до появления алгоритмов машинного обучения обладающих обобщающей способностью и применялось в нейрокомпьютинге для алгоритмов склонных к переобучению.
Далее уже будем разбирать основы теории обобщающей способности и подробные разъяснения принципов создания алгоритмов, соответствующих её положениям.
Инвариантность является основой теории обобщающей способности. Если прежние алгоритмы искали некую гиперплоскость, с помощью которой пытались решить задачу классификации, отделив с её помощью классы друг от друга с целью найти их различия, то инвариантность предполагает совершенно иной подход к решению тех же самых задач: не отделять классы друг от друга, а с помощью инварианта объединить их в один класс с целью найти общие признаки. В этом и заключается основная суть теории обобщающей способности алгоритмов машинного обучения: не искать различия (что разъединяет), а обобщать, т. е. искать то что обобщает.
Математический смысл инвариантности основан на том, что если правую и левую часть неравенства умножить на некую отрицательную константу, то знак неравенства изменится на противоположный. При этом само неравенство останется истинным:
A > B
-A < -B
Все задачи, решаемые с помощью нейрокомпьютинга, можно представить в виде решения системы линейных неравенств — обучающей выборки:
a11 * w1 + a12 * w2 + … + a1n * wn Z y1
a21 * w1 + a22 * w2 + … + a2n * wn Z y2
…
am1 * w1 + am2 * w2 + … + amn * wn Z ym
где:
aij – значение j-го фактора (предиктора - объясняющей переменной) для i-го примера в диапазоне от -1 до 1 включительно
wj – значение j-го весового коэффициента
yi – значение зависимой переменной для i-го примера в диапазоне от -1 до 1 включительно
Z – знак неравенства, принимающий значения: больше, если yi > 0 и меньше, если yi < 0
Поскольку, в данной задаче известны все значения кроме весовых коэффициентов wj, то решением (результатом обучения в нейрокомпьютинге) будет поиск значений весовых коэффициентов.
Но мы можем изменить систему линейных неравенств таким образом, чтобы сама система стала инвариантной, но при этом оставалась по прежнему истинной:
(a11 * w1 + a12 * w2 + … + a1n * wn) / y1 > Const
(a21 * w1 + a22 * w2 + … + a2n * wn) / y2 > Const
…
(am1 * w1 + am2 * w2 + … + amn * wn) / ym > Const
где:
Const – некое константное значение, одинаковое для всех уравнений системы
Соответственно, если в прежней системе неравенств знак неравенства указывал на принадлежность к одному из двух классов (задача бинарной классификации), то в результате применения инвариантности, мы получили ту же самую систему линейных неравенств, в которой имеется всего один единственный класс.
Чтобы проще понять, зачем это делается, лучше привести какой нибудь простенький пример. Возьмём задачу К. Нелора о классификации трёх объектов: птицы, планера и самолёта и представим их признаки в диапазоне от -1 до 1.
Птица:
Крылья = 1
Хвост = 1
Клюв = 1
Оперение = 1
Двигатель = -1
Шасси = -1
Планер:
Крылья = 1
Хвост = 1
Клюв = -1
Оперение = -1
Двигатель = -1
Шасси = 1
Самолёт:
Крылья = 1
Хвост = 1
Клюв = -1
Оперение = -1
Двигатель = 1
Шасси = 1
Предположим, что нам нужно создать бинарный классификатор, отличающий объект птица от объектов птицей не являющихся. В этом случае мы имеем два класса объектов:
- Птица
- Планер и Самолёт
Выполним инвариант для второго класса, т. е. для планера и самолёта:
НЕ Планер:
Крылья = -1
Хвост = -1
Клюв = 1
Оперение = 1
Двигатель = 1
Шасси = -1
НЕ Самолёт:
Крылья = -1
Хвост = -1
Клюв = 1
Оперение = 1
Двигатель = -1
Шасси = -1
Найдём общие признаки для объектов Птица, НЕ Планер и НЕ самолёт. Ими являются признаки: клюв и оперение. Остальные признаки можно удалить, как незначимые, т. е. понизить размерность.
Таким образом, приведя с помощью инвариантности объекты разных классов к единому, мы можем обнаружить общие признаки и игнорировать различия, т. е. обобщать и понижать размерность для различий.
Код на Java:
/** * Инвариантное преобразование выборки в результате чего два бинарных класса после преобразования становятся одним общим классом * @param sample выборка для инварианта * @return инвариантная выборка */ private double[][] getInvariant(double[][] sample) { double[][] result = new double[sample.length][sample[0].length]; for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[0].length; j++) { result[i][j] = sample[i][j] / this.ideals[i]; } } return result; }
Юрий, с интересом прочитал ваши статьи. спасибо.
ОтветитьУдалитьвопрос: в примере про птицу, планер, самолет рассматриваются бинарные категорильные прризнаки.
с ними понятно как проводить инвариант.
а расскажите, пожалуйста, как осуществлять инвариант с непрерывными (или дискретными) числовыми признаками??
очень интересно. спасибо за ответ.
Точно также, как и для бинарных признаков, т.е. все значения признаков разделить на зависимую переменную:
ОтветитьУдалить(a11 * w1 + a12 * w2 + … + a1n * wn) / y1 > Const
(a21 * w1 + a22 * w2 + … + a2n * wn) / y2 > Const
…
(am1 * w1 + am2 * w2 + … + amn * wn) / ym > Const