За последнее время было много написано об искусственном интеллекте и машинном обучении (Machine Learning). А как же обстоят дела в реальности? Как выглядят программы для искусственного интеллекта, если перейти от разговоров к написанию кода?

Давайте начнем с простого примера. Представьте, что вы решили создать компьютерную игру «Камень, ножницы, бумага». Когда вы играете в нее с другими людьми, она очень простая, не так ли? Каждый ребенок может научиться за несколько минут. Давайте посмотрим на самые базовые элементы этой игры. Проблему, с которой наш мозг справляется исключительно хорошо. Распознавание того, что он видит. Большинство людей легко распознают, когда показан камень, когда ножницы или бумага. Но как же нам написать программу, которая будет их распознавать?

Вариантов очень много. Если вы когда-либо писали компьютерные программы, вы согласитесь, что это очень сложная задача. Придется написать тысячи или даже десятки тысяч строк кода, чтобы выразить эту сложность в компьютерном языке. И это все для такой простой игры, как «Камень, ножницы, бумага». А что, если есть и другой способ научить компьютер распознавать то, что он видит? Что, если бы компьютер мог учиться так же как человек? Это и есть основная идея, которая стоит за машинным обучением.

Таким образом, традиционное программирование выглядит как набор правил. Например, о том, как трактовать изображения, полученные с веб-камеры. Эти правила выражаются в языке программирования и составляют основную массу написанного кода. В конечном итоге эти правила будут обрабатывать данные и давать ответ: что программа видит — камень, ножницы или бумагу. Но что, если мы взглянем на проблему с диаметрально противоположной стороны? Что, если программист вместо придумывания правил даст исходные данные вместе с ответами компьютеру и тот сам поймет правила? Вот это называется машинным обучением.

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