30-дневный писательский челлендж

Идет 11-й день моего 30-дневного писательского конкурса. Каждый день я узнаю что-то новое и за последние 10 дней написал об этом пост. Я собираюсь начать новую работу, создать команду по машинному обучению. Я хочу быть готовым.

Вчера мы исследовали фундаментальные идеи нейронной сети, рассмотрев, как мы можем смоделировать один нейрон. Мы можем дать нейрону некоторый ввод, и, если ввод достаточно силен, мы получим вывод. Мы также выяснили, как регулировать веса и порог активации каждый раз, когда мы его тренировали.

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

Мы хотим, чтобы входными данными нашей нейронной сети был каждый из пикселей (всего 784) — 1, если пиксель черный, 0, если он белый. Мы также хотим упростить нашу математическую модель. Вместо порога активации, который возвращает ноль или единицу, мы будем использовать функцию Sigmoid, которая дает любое значение от нуля до единицы. На графике это выглядит так:

Затем мы обучаем нейрон, постепенно регулируя веса, чтобы все ближе и ближе приближаться к ожидаемому результату. Представьте, что вы стоите на ландшафте, где вы хотите перейти с вершины холма (где частота ошибок высока) на ровную поверхность (где частота ошибок низка). С каждым шагом хочется спускаться с холма.

Это действительно так просто.

Примечание. Если вам неудобно углубляться в уравнения, вы можете пропустить этот раздел. Вы все еще должны быть в состоянии следовать, используя анекдотические объяснения.

Здесь мы могли бы использовать различные сигмовидные функции. Мы будем использовать логистическую функцию, так как математика относительно проста.

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

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

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

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

Оказывается, эта простая сеть не особенно точна, правильно распознавая изображения примерно в 92% случаев. Недостаточно нейронов, чтобы обобщить формы, которые появляются на каждом изображении. Если мы добавим скрытый слой нейронов между входным и выходным слоями, мы позволим сети обобщать признаки. Например, цифры 7 и 4 имеют острые углы, а цифры 8 и 9 — петли. Каждый скрытый слой дает пространство для кодирования этих функций, обеспечивая большую точность.

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

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

Это сообщение из моего 30-дневного писательского конкурса. Я инженер-программист, пытаюсь понять машинное обучение. У меня нет докторской степени, поэтому я объясню простым языком и приведу много примеров.

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