Как нейронная сеть распознает изображения?


25

Я пытаюсь узнать, как работает нейронная сеть по распознаванию изображений. Я видел несколько примеров и стал еще более запутанным. В примере распознавания букв для изображения 20x20 значения каждого пикселя становятся входным слоем. Итак, 400 нейронов. Затем скрытый слой нейронов и 26 выходных нейронов. Потом тренируй сеть, а потом все работает, не идеально.

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


1
Если я правильно понимаю, нейронная сеть - это просто многомерная поверхность в неком абстрактном пространстве, локальные крайности которого приводят к возможным выборам. Обучение нейронной сети - это просто приспособление этой абстрактной поверхности к ее задаче. Это мое нубистское понимание.

Итак, вы хотите, чтобы объяснения ИЛИ ресурсы начали работать с NN? Было бы неплохо уточнить.

2
Есть (в настоящее время) хороший бесплатный курс на Coursera, который посвящен вашему вопросу. coursera.org/course/neuralnets
погладить

Класс Coursera NN выглядит так, как будто он будет продвинутым, а не хорошим введением. У Эндрю Нг есть несколько более нежных введений, которые вы можете найти, например, на Youtube.
Дуглас Заре

На самом деле курс Coursera действительно продвигается, но он определенно накапливается и вполне удовлетворительно отвечает на вопрос ОП. У этого также есть много примеров в распознавании цифр.
Крис А.

Ответы:


24

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

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

Сохраняя эту картину, рассмотрим линейную регрессию, которая заключается в простом нахождении формулы (или линии) через сумму квадратов ошибок, которая наиболее точно проходит через ваши данные, и это достаточно легко понять. Чтобы найти изогнутые «линии», мы можем сделать ту же самую сумму вычислений произведений, за исключением того, что теперь мы добавляем несколько параметров x ^ 2 или x ^ 3 или даже полиномов более высокого порядка. Теперь у вас есть классификатор логистической регрессии. Этот классификатор может найти отношения, которые не являются линейными по своей природе. На самом деле логистическая регрессия может выражать произвольно сложные отношения, но вам все равно нужно вручную выбрать правильное количество мощных функций, чтобы хорошо прогнозировать данные.

Один из способов представить себе нейронную сеть - рассматривать последний уровень как классификатор логистической регрессии , а затем скрытые слои можно рассматривать как автоматические «селекторы функций» . Это исключает работу по ручному выбору правильного количества и мощности входных функций. Таким образом, NN становится автоматическим селектором признаков мощности и может находить любые линейные или нелинейные отношения или служить классификатором произвольно сложных наборов ** (это предполагает только то, что имеется достаточно скрытых слоев и соединений, чтобы представить сложность модель, которую он должен изучить). В конце концов, хорошо функционирующий NN должен изучать не только «взаимосвязь» между входом и выходом, но вместо этого мы стремимся к абстракции или модели, котораяобобщает хорошо.

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

  • возможно, он сможет научиться чему-то, чего еще никто не понял
  • для больших проблем банк компьютеров, обрабатывающих нейронные сети, может найти действительно хорошие решения намного быстрее, чем команда людей (при гораздо меньших затратах)
  • Однажды обученные NN будут давать согласованные результаты с входами, на которых они были обучены, и должны хорошо обобщаться при правильной настройке
  • NN никогда не скучают или отвлекаются

1
+1 за абзац о том, как последний слой выполняет логистическую регрессию поверх выбора объектов скрытого слоя. Это хороший способ думать о NN.
jlund3

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

1
Этот ответ продолжает получать мнения, поэтому я подумал, что ему уже более 5 лет, и он рассматривает только полностью подключенные сети с прямой связью. Хотя концептуальные идеи здесь все еще актуальны, они не дают практикующему достаточно знаний, чтобы понять глубокие концепции NN, которые стали стандартом в последнее десятилетие. CNN (сверточная нейронная сеть) является очень важной современной адаптацией, которая дает глубоким сетям сверхмощные возможности, позволяя им находить края, контрастность, резкость, цветовые пространства, тени и многое другое и использовать это для определения контекста низкоуровневых объектов.
mcstar

10

Возможно, вы слышали, что нейронные сети являются « универсальными аппроксиматорами функций ». В сущности, теорема Кибенко говорит, что для любого отображения функции от реального к реальному вы можете аппроксимировать ее нейронной сетью с сигмоидальными функциями активации. Фактически, оказывается, что нейронные сети позволяют вам вычислять любую функцию, которая вычисляется на машине Тьюринга (т.е. все, что вы можете написать алгоритм для вычисления). К сожалению, эти доказательства говорят только о том, что для некоторой конечной конфигурации нейронов и весов вы можете аппроксимировать любую функцию.

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

Трехслойная сеть Перцептрона, способная вычислять XOR, позаимствована из Википедии.

Обратите внимание, что три скрытых узла делают разные вещи. Самый левый и самый правый узлы просто проходят через соответствующие входные узлы. Средний нейрон принимает два входа и как-то отрицает их, если они оба включены. Это умное объединение и рекомбинация входных данных - это, по сути, работа в нейронной сети.

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

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

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

Надеюсь, это поможет вам более или менее понять, как нейронная сеть может выполнять вычисления. Однако вы столкнулись с вопросом, который довольно важен для нейронных сетей: в общем, в лучшем случае трудно понять, почему сеть выделяет определенный вывод, особенно если учесть, что для чего-то вроде распознавания изображений сети обычно достаточно большой, чтобы людям было трудно понять каждую из движущихся частей машины. Еще более усложняет дело то, что в большинстве случаев нейронные сети на самом деле не имеют одного скрытого узла для каждой маленькой функции, которую сеть может узнать о данных. Вместо этого обнаружение чего-то вроде прямой линии для классификации числа «1» будет происходить нецентрализованно по многим скрытым узлам. Другие алгоритмы,

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


Спасибо за все время и усилия, чтобы собрать все эти слова и мысли вместе. Меня особенно интересует Convolutional NN для распознавания изображений. Я попробовал пример обнаружения лиц в библиотеке OpenCV, но обнаружил, что он хорош только для жестких объектов. Есть ли у нейронной сети аналогичное ограничение на распознавание скороговорки, т. Е. Только на жесткие объекты?
user1731927

Нет теоретической причины, по которой у NN (или CNN в этом отношении) был бы предел распознавания образов, но, как вы уже обнаружили, некоторые проблемы легче изучить, чем другие. Как и многие проблемы в машинном обучении, вам, вероятно, придется немного подправить свою модель, чтобы она могла успешно справляться с конкретным типом проблемы, которую вы пытаетесь решить, и NN не являются исключением из этого.
jlund3

1
Вот интересная статья о том, как лучше структурировать NN вместе для решения 2-мерных задач сетки, таких как классификация изображений. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

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

2

Вот что тебя смутило

как он узнает о том, что на изображении.

То, что находится на изображении, в цифровой форме представлено значениями в пикселях изображения. Если взять пример цвета на картинке. Пиксель может иметь три значения, каждое для трех основных цветов - красного, зеленого и синего ( RGB). Пиксель с ( 10,50,100) означает, что он имеет «меньше» элементов синего цвета, чем пиксель с ( 40,50,100). Таким образом, на изображении первый пиксель представляет область с меньшим цветом синего цвета. Это информация, которую нейронная сеть изучает из одного местоположения / области изображения в другое и в конечном итоге «зная», что находится на изображении. Тот же принцип применяется для других функций изображения (помимо цвета), которые могут использоваться в качестве входных данных для нейронной сети. Посмотрите это , и это для основных концепций изображения, а затем перейти к этому узнать, как работает нейронная сеть.


1

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

При распознавании изображений у вас снова есть набор изображений, о которых вы хотите узнать.

  1. Эти изображения сначала обрабатываются, и некоторые изображения извлекаются из изображений (множество возможных схем функций изображений, таких как SIFT, Bag of WORDS), как вы используете пиксели и их значения.
  2. Передайте эти изображения с соответствующими векторами функций вашему алгоритму ML (Neural Net, SVM или другие).
  3. Выучить модель
  4. Используйте эту модель для распознавания объектов, которые видны в достаточной степени на тренировочных данных.

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


1

Также хотелось бы отметить очень популярные для распознавания изображений сверточные нейронные сети. Вот ссылка на упрощенное объяснение CNN .

Вкратце, в CNN изображение сначала разбивается на элементы, такие как края, фигуры, коллекции фигур. Затем эти функции «подаются» в «обычную» полностью подключенную многослойную нейронную сеть (многослойный персептрон).

Более подробно, набор фильтров применяется для извлечения объектов в форме карты объектов. Фильтр - это просто матрица (случайная в начале), которая применяется к исходному изображению, так что вычисляется точечное произведение матрицы исходного изображения и матрицы фильтра, а результат суммируется. Фильтр перемещается вдоль исходного изображения по одному пикселю (шагу) за раз, и матрица карты объектов заполняется. Карта объектов создается для каждого фильтра. Затем введена нелинейность с RELU (выпрямленная линейная единица) для каждого пикселя в каждой карте объектов. Объединение с помощью применения max (), sum () или среднего () выполняется после свертки. Наконец, функции, извлеченные таким образом, выглядят как «увеличенные» части исходного изображения. Эти функции вводятся в полностью подключенную (все устройства подключены) нейронную сеть, и вероятности для каждого изображения (скажем, мы изучали нашу сеть на изображениях автомобилей, деревьев и лодок) рассчитываются после каждого прохода через сеть. Сеть обучена, что означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.) Это означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.) Это означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.)


0

Хорошо, что ANN может создать любую функцию f (x) или f (x, y, z, ..) или любую функцию в этом отношении. Но также важно знать, что у функций есть ограничения в том, как они могут классифицировать данные ... есть более сложные подмножества отношений наборов мощности объектов, которые важны при классификации и которые не описываются такими функциями элегантным или естественным образом, но важны в языке и классификации объектов. ANN также может выполнить это.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.