Translate

воскресенье, 7 декабря 2014 г.

Инвариантность - основа обобщающей способности


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

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

Далее уже будем разбирать основы теории обобщающей способности и подробные разъяснения принципов создания алгоритмов, соответствующих её положениям.

Инвариантность является основой теории обобщающей способности. Если прежние алгоритмы искали некую гиперплоскость, с помощью которой пытались решить задачу классификации, отделив с её помощью классы друг от друга с целью найти их различия, то инвариантность предполагает совершенно иной подход к решению тех же самых задач: не отделять классы друг от друга, а с помощью инварианта объединить их в один класс с целью найти общие признаки. В этом и заключается основная суть теории обобщающей способности алгоритмов машинного обучения: не искать различия (что разъединяет), а обобщать, т. е. искать то что обобщает.

Математический смысл инвариантности основан на том, что если правую и левую часть неравенства умножить на некую отрицательную константу, то знак неравенства изменится на противоположный. При этом само неравенство останется истинным:

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. Птица
  2. Планер и Самолёт

  Выполним инвариант для второго класса, т. е. для планера и самолёта:

НЕ Планер:

Крылья = -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;
    }

2 комментария:

  1. Анонимный21 декабря, 2014

    Юрий, с интересом прочитал ваши статьи. спасибо.

    вопрос: в примере про птицу, планер, самолет рассматриваются бинарные категорильные прризнаки.

    с ними понятно как проводить инвариант.



    а расскажите, пожалуйста, как осуществлять инвариант с непрерывными (или дискретными) числовыми признаками??

    очень интересно. спасибо за ответ.

    ОтветитьУдалить
  2. Точно также, как и для бинарных признаков, т.е. все значения признаков разделить на зависимую переменную:

    (a11 * w1 + a12 * w2 + … + a1n * wn) / y1 > Const
    (a21 * w1 + a22 * w2 + … + a2n * wn) / y2 > Const

    (am1 * w1 + am2 * w2 + … + amn * wn) / ym > Const

    ОтветитьУдалить