Коллеги, всем привет!
Занимаюсь разработкой порядка 15-и лет. Опыт есть разный, в основном веб, но не только.
Решил расширить кругозор и познать новое, поэксперементировать. В качестве новой сферы изучения и самообразования выбрал - машинное обучение.
По своему опыту знаю, что для меня самый правильный путь позания - от практики. Поэтому решил попытаться реализовать нексколько пробных задач, чтобы как-то изучить инструментарий.
Есть ряд вопросов, в которых требуется помощь:
1.
Как отличить задачи для которых подходит машинное обучение?
В теории понятно: всё, что не имеет простого алгоритма решения. Первое, что приходит на ум - поиск объектов на изображении, распознавание рукописного текста - но это всё очень сложные задачи, и для обучения не годятся.
А что можно придумать простого, более бытового, что подошло бы для обучающей задачи, при этом действительно бы показывало силу инструмента машинного обучения?
Приведу примеры:
- видел пример задачи распознавания языка по статистике символов. Интересно, но выглядит достаточно примитивно. Ведь я и без машиного обучения посчитаю статистику, и просто сравнивая буду поулчать результат ничем не хуже.
- различные примеры с логическими операторами. Да, выглядит интересно, но зачем? Ведь там в исходных данных есть вссе ответы, на все варианты входных данных. В чём суть?
- видел пару статей про классификацию твитов и спам, но пока их подробно не разобрал. Хотел сначала поиграть просто с числами, освоится, а потом уже на второй ступеньке идти туда, потому что пока не представляю, как эту задачу развить хотя бы как-то на бытовом уровне за рамки самих представленных примеров.
2. Для первых проб взял за основу примеры из php fann:
https://github.com/bukka/php-fann
Пример с логикой. Интересно, но как и писал выше не ясно,
как его развить?
Более интересным показался пример с OCR. Выглядит очень интересно. Но на практике всё оказалось хуже, чем предполагал. Стоит изменить во входных данных хотя бы одну ячейку и всё перестаёт работать. Нормальная работа идёт ТОЛЬКО если тестовые данные идентичны тем, на которых обучали.
Пример:
Массив для буквы F:
$test_F = array(
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Если просто подправлюнемного форму буквы, например так:
$test_F1 = array(
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$test_F2 = array(
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
То всё перестаёт работать. Но разве не в этом суть машинного обучения, чтобы система была способна решать подобные задачи?
Ведь то что есть сейчас - просто сравнение с одним из вариантов во входных данных. Но зачем мне инструмент машинное обучение если я и сам могу сравнить все исходные массивы, и найти тот, что совпадает?
Третья задача - построение маршрута. Там ситуация идентична второй. Все варианты в тестовом наборе идентичны вариантам в данных обучения.
В моём понимании цель в том, чтобы научить его строить самому маршруты, а не просто заранее сгенерировать все варианты ответов. Может быть я не так понимаю суть?
Как правильно развить эти примеры, чтобы почувствовать эффект?