Найти в Дзене

Машинное обучение. 1. Введение.

Люди часто решают задачи где надо найти обобщенные шаблоны, закономерности. Например разделить вещи по группам или понять что объединяет две разные вещи. И когда появились компьютеры, люди задумались - а нельзя ли решать такие задачи автоматически, с помощью компьютера. В результате появилось то что мы называем "машинное обучение". Возьмем такой пример: у нас есть картинки на которых нарисованы разные цифры, написанные от руки, разными почерками. Размер картинки 20 на 20 пикселей, и для каждого пикселя мы каким то числом обозначаем его цвет, а это значит что картинка представляет из себя набор из 400 чисел. И теперь нам надо создать программу, которая примет на входе этот набор из 400 чисел, и в результате выдаст число, которое нарисовано на картинке. Для начала возьмем огромную кучу картинок с цифрами, каждая цифра написана разным почерком, немного отличается от других. Для каждой картинки указано, что именно за цифра на ней нарисована. Наша программа будет смотреть на разные картин

Люди часто решают задачи где надо найти обобщенные шаблоны, закономерности. Например разделить вещи по группам или понять что объединяет две разные вещи. И когда появились компьютеры, люди задумались - а нельзя ли решать такие задачи автоматически, с помощью компьютера. В результате появилось то что мы называем "машинное обучение".

Возьмем такой пример: у нас есть картинки на которых нарисованы разные цифры, написанные от руки, разными почерками. Размер картинки 20 на 20 пикселей, и для каждого пикселя мы каким то числом обозначаем его цвет, а это значит что картинка представляет из себя набор из 400 чисел.

И теперь нам надо создать программу, которая примет на входе этот набор из 400 чисел, и в результате выдаст число, которое нарисовано на картинке.

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

Дальше нам нужна математическая функция y = f(x), которая принимает в качестве x набор чисел, которые образуют собой картинку, и в результате выдает y - число которое нарисовано на картинке. Чтоб понять, как вообще должна выглядеть функция f(x) мы должны произвести "обучение" нашей программы, и уже потом, когда у нас в результате обучения получится нужная функция, мы будем давать ей картинки, а она будет их распознавать. Картинки которые мы дадим ей распознавать уже после обучения, называются "тестовое множество".

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

С помощью машинного обучения мы можем решать разные задачи. Вот некоторые примеры таких задач.

Регрессия это когда программа впервые видит какие то входные данные, и пытается предсказать, что должно быть в результате.

Классификация это когда программа пытается понять к какой группе следует отнести входные данные.

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

Обучение может происходить разными способами.

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

Обучение с подкреплением, это когда мы не показываем программе, какой конкретно должен быть результат для каждых входных данных, а вместо этого мы поощряем программу за одни результаты и наказываем за другие. Чем больше нам нравится результат, тем больше поощрение, и наоборот. Со временем, путем проб и ошибок, программа начинает выдавать все больше "правильных" результатов и все меньше "неправильных". Например мы создаем игру в которой машина будет ехать по трассе. Программа будет случайным образом поворачивать машину и двигать ее вперед/назад, но мы устанавливаем такую цель - машина должна проехать трассу максимально быстро. И теперь программа будет стараться управлять машиной так чтоб она идеально прошла трассу и поскорее оказалась на финише.

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

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

Наука
7 млн интересуются