Привет. Хочу предложить алгоритм машинного обучения, который как мне кажется, превосходит по свойствам большинство существующих алгоритмов. Если присмотреться, то можно увидеть в нем вариант однослойной радиально-базисной нейронной сети, и рассматривать его как метод обучения искусственных нейронных сетей.
Приведу лишь описание самого алгоритма, не касаясь его теоретического вывода. Боюсь, что если описывать теорию, то ее изучение может занять недели, тогда как сам конечный алгоритм чрезвычайно прост и любой программист, например, написав программу за пару часов, сможет убедиться, что все на самом деле работает.
Будем рассматривать вариант – много входов, один выход.
Самый важный
момент, на котором все основано – это специальная передаточная функция, вида:
где a b c d могут быть, например, a=1000000 b=1000 d=1000
c – в промежутке от 0 до 1 (про него ниже отдельно)
при условии, что входные значения x – в промежутке от –1 до 1
a b c d – можно варьировать, главное это пропорции, которые могут быть приблизительно такого порядка.
Наверное, сразу возникают вопросы, почему это именно так, откуда взято 0.95.. и т.д.
Суть в том, что в таком варианте передаточная функция имеет особую форму спектра (в принципе функция может быть и другой, главное чтобы ее спектр имел нужную форму, а именно – был близок к ), что обеспечивает работоспособность алгоритма, который будет описан ниже.(отмечу, что это все можно доказать).
Ну, в общем-то, все самое важное уже сказано, главное, это взять “правильную” функцию K, а дальше все просто.
Пусть у нас есть набор входных многомерных обучающих векторов X1,X2,…Xk (Xi) и значения выхода – y1, y2, … ,yk. Тогда, если мы хотим спрогнозировать, какой будет выход при некотором произвольном входном векторе X, то ответом будет функция:
(1)
Где di –
коэффициенты, вычисляемые решением системы уравнений:
Осталось только упомянуть про коэффициент с. Это коэффициент учета погрешностей. Если он равен 0 – то это значит что в данных для обучения не содержится погрешностей, ошибка в таком случае будет в итоге получена равной нулю. Если же в данных есть шум, то обучение на обучающих примерах один к одному может дать большую ошибку обобщения. С вводом же коэффициента с – производится учет погрешностей, его можно подобрать экспериментально. Задача интерполяции превращается в задачу аппроксимации. Кстати в самой конечной формуле (1) – коэффициент c можно всегда брать равным нулю.
Если у нас несколько выходов, вычисления можно упростить, вычислив одну обратную матрицу.
Итак, выше был описан метод машинного обучения. Метод точный (не итеративный), гарантированно дающий на выходе ошибку обучения равную нулю (при с=0). Причем все сводится к обычной системе линейных уравнений!!!! Описан он был в наиболее простом виде для удобства восприятия. Возможны алгоритмы оптимизации, повышающие скорость вычислений в десятки и более раз, по сравнению с данной схемой, но это отдельный разговор.
Ссылки
http://www.neyromantik.narod.ru/1.mcd - файл Mathcad с демонстрацией метода в одномерном и двумерном случае (13 кб)
http://www.neyromantik.narod.ru/primer.exe - файл с демонстрацией одномерной интерполяции / аппроксимации (306 кб)