«Распознавание рукописных цифр» еще несколько дней назад было для меня очень мощной штукой, может для этого нужен очень глубокий алгоритм машинного обучения? Но, прочитав несколько статей о нейронных сетях за последние несколько дней, я обнаружил, что распознавание чисел на самом деле очень простая вещь (конечно, это относится к самому базовому распознаванию одного числа), и его даже можно рассматривать каккомпьютерное зрение(Компьютерное зрение) «Привет, мир».
В области компьютерного зрения,Сверточная нейронная сетьПоявление (сверточных нейронных сетей) привело к технологической революции, которая, можно сказать, очень эффективна в распознавании изображений. Эта статья основана на сверточной нейронной сети для идентификации одного числа.
Обзор
По сути, то, что вам нужно сделать, чтобы распознать написанные от руки цифры, — это распознавание изображений, независимо от того, есть ли на картинке цифры или кошки и собаки, это по сути одно и то же. Наш вход — изображение, а выход — результат распознавания.
В отличие от врожденной способности людей к распознаванию, компьютеры могут читать только строки двоичных чисел. Почему программа умеет распознавать картинки? Здесь нет никакой романтики, дело не в том, что компьютер создает интеллект, это просто ряд математических формул в действии.
Представьте, как мы можем сказать, есть ли на фотографии лицо или нет, хотя его можно увидеть с первого взгляда, но представьте, что вы только что родились, как вы можете знать, что на фотографии есть человеческое лицо, а не что-то другое ?
На самом деле, нас тоже шаг за шагом обучают этой способности. Сначала определим, есть ли здесь голова? Есть ли глаз в верхнем левом углу и верхнем правом углу головы? Есть ли нос посередине? В конце, когда большинство этих ответов «да», мы заключаем: о, это лицо.
Точно так же компьютер может судить, является ли это лицом, исходя из того, существует ли композиция лица.
Итак, сначала он определяет, есть ли глаз, но как он узнает, что это глаз? Это потому, что глаза состоят из глазных яблок и белков, поэтому он может сначала определить, есть ли глазные яблоки. Но как он узнает, что это глазное яблоко? ...
Возможно, вы уже понимаете, что эту проблему можно все время подразделять, и компьютер, наконец, может идентифицировать каждый пиксель. По составу пикселей компьютер может определить, является ли это глазом, и точно так же распознать лицо. Собственно в этом и заключается суть деления свёрточного слоя, о котором мы поговорим далее.
Поэтому ничего магического в идентификации нет, можно сказать, что это результат математической статистики. Однако спроектировать алгоритм не так просто, картинка состоит из десятков тысяч пикселей, и как ее обучить — тоже ключевой вопрос. Это приводит к сверточной нейронной сети, где мы сначала сканируем изображение, затем сжимаем его и, наконец, выполняем расчет:
Не пугайтесь изображения выше, мы признаем, что рукописные цифры — это та же идея, но после прочтения этой статьи вы обнаружите, что это на самом деле не сложно.
Основы нейронной сети
Когда дело доходит до сверточных нейронных сетей, мы должны сначала поговорить об этом.Нейронные сети(Нейронные сети). Я думаю, что большинство людей знакомы с концепцией нейронной сети, даже если они не изучали машинное обучение, Оно опирается на нейронную структуру биологического мозга и абстрагирует модель нейронной сети в компьютерной области.
Простую нейронную сеть можно представить следующим образом:
Нейронная сеть разделена на три части:входной слой(Входной слой),скрытый слой(скрытый слой) ивыходной слой(выходной слой). Количество слоев и количество узлов в каждом слое не фиксированы, например, на рисунке выше в нейронной сети только один скрытый слой, но на практике количество скрытых слоев варьируется в зависимости от сцены.
Каждый слой состоит из несколькихдатчик(персептроны), то есть узлы в графе. Персептрон принимает некоторый ввод и производит вывод. Кроме того, персептроны входного слоя не имеют входа, они соответственно используются как вход скрытого слоя, в скрытом слое каждый персептрон вычисляется, а выход-выход используется как вход выходного слоя, а наконец вычисляется по выходному слою, выводя окончательный результат.
Очевидно, мы можем думать о персептроне как о функции:
повезло здесьfОчень просто, это линейная функция. Здесь три входа, поэтому мы определяем еще триВеса(вес) w1, w2, w3 и aотклонение(bias)b, приведенная выше формула может быть выражена как:
Поэтому нетрудно понять, что упомянутая выше нейросеть на самом деле выполняет следующие вычисления (сигмовидная функция здесь опущена и будет упомянута позже):
Для этой нейронной сети обучающий набор содержит значения o1, соответствующие x1 и x2, и нам нужно определить значения 9 переменных от w1 до w6 и от b1 до b3. Потому что после определения этих 9 значений мы можем предсказать соответствующий o1 на основе любых x1, x2.
В начале эти 9 значений могут быть назначены случайным образом, а затем обучение может быть запущено напрямую. От входа к выходу этовперед(вперед), но при этом генерируются только предсказанные значения. И по предсказанному значению мы можем судить о разнице между предсказанным значением нейросети и реальным значением, а затем использоватьградиентный спуск(градиентный спуск),обратное распространение(Обратное распространение) Измените веса и смещения узлов сзади на перед, тем самым реализуя процесс «обучения».
Чтобы привести простой пример, когда мы настраиваем гитару, мы сначала играем ноту, тюнер говорит «Высота!», поэтому мы поворачиваем ручку по часовой стрелке и играем снова, тюнер по-прежнему говорит «Тон! Высокий!», поэтому мы снова поворачиваем ручку по часовой стрелке, затем тюнер говорит «Ниже!», снова поворачиваем против часовой стрелки... и так далее, и, наконец, получаем наилучшее положение ручки.
Процесс регулировки здесьградиентный спускпроцесс, вы можете обратиться кРанее переведенная статья
Рекомендуемая литература для введения в нейронные сетиMachine Learning for Beginners: An Introduction to Neural Networks.
Основы сверточной нейронной сети
Проще говоря, к нейронной сети добавляется сверточная нейронная сеть.сверточный слой(Сверточные слои), сверточный слой состоит из несколькихфильтр(фильтр), он сканирует исходное изображение и в окне сканирования производит внутреннее произведение с исходным изображением (перемножая элементы один за другим, а затем суммируя). Эта операция является так называемой операцией «свертки», отсюда и название сверточной нейронной сети.
сверточный слой
Первым слоем нашей сверточной нейронной сети является сверточный слой, который использует фильтры для сканирования изображения, как описано выше.
Например, если размер изображения 4 * 4, а фильтр 3 * 3, то фильтр будет сканировать 4 раза, создавая матрицу 2 * 2.
Исходное изображение и фильтр:
Процесс сканирования выглядит следующим образом:
Подумайте, что это делает? Мы сказали, что на самом деле распознавание изображений определяет, есть ли компоненты целевого объекта в исходном изображении. Этот фильтр на самом деле делает именно это.
Предположим снова, что пиксельная композиция фильтра такова:
Тогда при наличии изображения фильтра в окне исходного изображения результат свертки будет большим, и наоборот. На самом деле, используя это изображение, вы можете определить, есть ли в исходном изображении компонент мыши:
Вы также можете представить, что, поскольку у мыши много функций, одного фильтра, конечно, недостаточно, поэтому на сверточном слое будет несколько фильтров. После сканирования каждого фильтра для создания слоя остается общее количество слоев фильтра.
Изображение рукописной цифры, которое мы хотим распознать, имеет размер 28 * 28 пикселей, и в этой статье будет использовано 8 фильтров. Таким образом, на входе сверточного слоя 28 * 28 = 784, а после обработки сверточным слоем выход равен 26 * 26 * 8 узлов. (фильтр 3*3 уменьшит размер на один оборот)
объединяющий слой
Второй слой сверточной нейронной сети называетсяобъединяющий слой(Объединяющий слой), который используется для уменьшения вектора признаков, выводимого сверточным слоем, при улучшении результата (менее склонен к переоснащению).
Общие операции объединения включаютсредний пул(среднее объединение) имаксимальное объединение(Максимальное объединение). В этой статье будет использоваться максимальный пул. На самом деле это вход верхнего слоя через сканирование фильтра 2 * 2, чтобы получить максимальное значение:
Поскольку значения между пикселями на самом деле очень близки, нам не нужно оставлять все соседние пиксели.После использования слоя пула пиксели можно значительно уменьшить, и его выходные узлы станут 13*13*8.
Слой софтмакс
Слой Softmax — последний слой в этой статье, который превращает выходные данные нейронной сети в распределение вероятностей.
Здесь мы также используем формулу, упомянутую в разделе «Основы нейронной сети».Количество входных узлов в слое Softmax равно 13 * 13 * 8 = 1352, а количество выходных узлов равно 10, поэтому у нас будет 1352. * Рассчитано 10 весов, 10 смещений, десять возможностей. Они представляют вероятность того, что исходное изображение равно 0–9, а положение максимального значения — это числовое значение, предсказанное нейронной сетью:
Выше описан весь процесс прямой обратной связи.После этих реализаций нейросеть может предсказывать картинку, но сейчас это просто догадка (потому что нет процесса обучения). Затем нам нужно использовать обратное распространение для настройки весов и смещений, и мы продолжим в следующей части.
Ссылаться на
- Machine Learning for Beginners: An Introduction to Neural Networks
- An Introduction to Convolutional Neural Networks
- A Beginner's Guide To Understanding Convolutional Neural Networks
- Neural Networks and Deep Learning
- CS231n Convolutional Neural Networks for Visual Recognition
- Principles of training multi-layer neural network using backpropagation