[Перевод] Возможно, вам не нужно машинное обучение
Машинное обучение — модная технология, поэтому её часто используют в ситуации, когда существует более простое, эффективное и надёжное решение. На днях мне попался наглядный и забавный пример: «Нейросетевые машины и генетические алгоритмы». Всю эту навороченную систему легко заменить простым многочленом без потери функциональности. Машинное обучение тут явный перебор.
Выше показана моя реализация с многочленом. Жена нарисовала фон. Никакого поиска пути, машинки просто катаются «по рельсам», так сказать.
Не хочу придираться к этому конкретному проекту. Вероятно, автор стремился применить нейросеть к чему-нибудь. Многие из моих собственных проектов — не более чем средство попробовать что-то новое. Поэтому могу его понять. Но в профессиональной среде следует относиться к этому более скептически. Например, не использовать для выборочного распределения машинное обучение, если подходит квазислучайная последовательность.
На видео у машинки есть радиус поворота, минимальная и максимальная скорости (я сохранил эти параметры в собственной симуляции). Есть пять датчиков — вперёд, по диагоналям, влево и вправо — каждый измеряет расстояние до ближайшей стены. Они подаются в трёхслойную нейросеть, а на выдаче мы получаем необходимое ускорение/торможение и поворот руля. Звучит круто!
Ключевая особенность нейросетей в том, что выходы являются нелинейной функцией входов. Однако управление двумерным автомобилем достаточно простое. Здесь более чем достаточно линейной функции, а нейронные сети не нужны. Вот мои уравнения:
рулевое управление = C0*input1 - C0*input3
ускорение/торможение = C1*input2
Достаточно всего трёх значений на входе. Расстояние до стены впереди определяет показатель газ/торможение, а две диагонали определяют поворот руля. И два коэффициента C0 и C1. Оптимальные значения зависят от компоновки трассы и конфигурации автомобиля, но в моей модели достаточно хорошо подходят практически любые значения от 0 до 1. Здесь вопрос не столько об аварийности, сколько о скорости прохождения трассы.
Длина красных линий — это три входных значения:
Очевидно, многочлены вычисляются гораздо быстрее нейросети, при этом они понятнее и проще в отладке. Я могу уверенно рассуждать обо всём диапазоне возможных входных значений, а не беспокоиться, что нейронка странно реагирует на непроверенные входные сигналы.
Программа случайным образом генерирует коэффициенты для исследования пространства. Для гонки на скорости я бы запустил несколько тысяч тестов и выбрал оптимальные коэффициенты. Например, вот оптимальные коэффициенты для быстрого прохождения трассы, описанной в начале статьи:
C0 = 0.896336973, C1 = 0.0354805067
Многие коэффициенты подходят, но некоторые дают более высокую скорость. Если бы я разрабатывал ИИ для гоночного симулятора, то заезд ботов мог бы выглядеть так:
Если хотите поиграть сами, вот исходный код на C для движка ИИ и визуализации:
aidrivers.с
Трассы можно нарисовать в любом редакторе, цвета указаны в заголовке файла с исходным кодом.
См. также:
Нет, вам не нужно машинное обучение. Вам нужен SQL