Я пытаюсь узнать, как работает нейронная сеть по распознаванию изображений. Я видел несколько примеров и стал еще более запутанным. В примере распознавания букв для изображения 20x20 значения каждого пикселя становятся входным слоем. Итак, 400 нейронов. Затем скрытый слой нейронов и 26 выходных нейронов. Потом тренируй сеть, а потом все работает, не идеально.
Что смутило меня в нейронной сети, так это то, как она узнает о том, что на изображении. Вам не нужно выполнять определение порогов, сегментацию или измерение, так как сеть учится сравнивать изображения и распознавать. Это как волшебство для меня сейчас. С чего начать изучать нейронную сеть?
machine-learning
neural-networks
image-processing
user1731927
источник
источник
Ответы:
Основное понимание того, как нейронная сеть может научиться классифицировать что-то настолько сложное, как данные изображений, приведенные только примеры и правильные ответы, пришло ко мне при изучении работы профессора Кунихико Фукусимы над неокогнитрионом в 1980-х годах. Вместо того, чтобы просто показывать в своей сети кучу изображений и использовать обратное распространение, чтобы он сам мог все понимать, он использовал другой подход и обучал свою сеть слой за слоем и даже узел за узлом. Он проанализировал производительность и работу каждого отдельного узла сети и преднамеренно изменил эти части, чтобы заставить их реагировать намеченными способами.
Например, он знал, что хочет, чтобы сеть могла распознавать линии, поэтому он обучил определенные слои и узлы распознавать трехпиксельные горизонтальные линии, трехпиксельные вертикальные линии и конкретные варианты диагональных линий под всеми углами. Делая это, он точно знал, на какие части сети можно рассчитывать, когда будут срабатывать нужные схемы. Затем, поскольку каждый слой тесно связан, весь неокогнитрон в целом может идентифицировать каждую из составных частей, присутствующих на изображении, независимо от того, где они физически существовали. Поэтому, когда где-то на изображении существует определенный отрезок, всегда будет определенный узел, который будет срабатывать.
Сохраняя эту картину, рассмотрим линейную регрессию, которая заключается в простом нахождении формулы (или линии) через сумму квадратов ошибок, которая наиболее точно проходит через ваши данные, и это достаточно легко понять. Чтобы найти изогнутые «линии», мы можем сделать ту же самую сумму вычислений произведений, за исключением того, что теперь мы добавляем несколько параметров x ^ 2 или x ^ 3 или даже полиномов более высокого порядка. Теперь у вас есть классификатор логистической регрессии. Этот классификатор может найти отношения, которые не являются линейными по своей природе. На самом деле логистическая регрессия может выражать произвольно сложные отношения, но вам все равно нужно вручную выбрать правильное количество мощных функций, чтобы хорошо прогнозировать данные.
Один из способов представить себе нейронную сеть - рассматривать последний уровень как классификатор логистической регрессии , а затем скрытые слои можно рассматривать как автоматические «селекторы функций» . Это исключает работу по ручному выбору правильного количества и мощности входных функций. Таким образом, NN становится автоматическим селектором признаков мощности и может находить любые линейные или нелинейные отношения или служить классификатором произвольно сложных наборов ** (это предполагает только то, что имеется достаточно скрытых слоев и соединений, чтобы представить сложность модель, которую он должен изучить). В конце концов, хорошо функционирующий NN должен изучать не только «взаимосвязь» между входом и выходом, но вместо этого мы стремимся к абстракции или модели, котораяобобщает хорошо.
Как показывает практический опыт, нейронная сеть не может выучить ничего, что разумно разумный человек теоретически не может выучить, имея достаточно времени на тех же данных, однако
источник
Возможно, вы слышали, что нейронные сети являются « универсальными аппроксиматорами функций ». В сущности, теорема Кибенко говорит, что для любого отображения функции от реального к реальному вы можете аппроксимировать ее нейронной сетью с сигмоидальными функциями активации. Фактически, оказывается, что нейронные сети позволяют вам вычислять любую функцию, которая вычисляется на машине Тьюринга (т.е. все, что вы можете написать алгоритм для вычисления). К сожалению, эти доказательства говорят только о том, что для некоторой конечной конфигурации нейронов и весов вы можете аппроксимировать любую функцию.
Теория хороша и хороша, но ваш вопрос, кажется, больше похож на то, как на самом деле кодировать вычисление некоторой функции в набор нейронов и весов. Для иллюстрации рассмотрим простой пример - эксклюзив или. XOR принимает два входа, передает эти входы. Когда один и только один из входов активирован, то активируется выходной узел. Если оба входа не активированы, выходной узел не активируется.
Обратите внимание, что три скрытых узла делают разные вещи. Самый левый и самый правый узлы просто проходят через соответствующие входные узлы. Средний нейрон принимает два входа и как-то отрицает их, если они оба включены. Это умное объединение и рекомбинация входных данных - это, по сути, работа в нейронной сети.
Очевидно, что для более сложных функций объединение и рекомбинация должны выполняться более умными и сложными способами, но это по сути то, что происходит на низком уровне. Сумасшедшая вещь в том, что это действительно все, что вам нужно для вычисления любой вычислимой функции! С другой стороны, машины Тьюринга также оказываются обманчиво простыми ...
Проблема в том, что у нас нет способа магически генерировать нейронную сеть, которая вычисляет некоторую произвольную функцию. Доказательства только говорят нам, что есть какая-то сеть, которая могла бы это сделать. Когда мы обучаем наши нейронные сети, мы просто пытаемся найти сеть, которая довольно близка.
В контексте распознавания изображений вы можете представить шаблоны кодирования в сети. Например, чтобы распознать число «1», вы можете представить себе скрытые узлы, которые ожидают, что столбец пикселей будет в основном или полностью активирован, а соседние пиксели отключены. Этот скрытый узел может быть достаточно хорош для распознавания прямой линии в этом конкретном столбце. Сложите их вместе, и довольно скоро у вас будет множество узлов, которые делают это в достаточном количестве мест на вашем изображении, поэтому, если я покажу сети один, будет активировано достаточно скрытых узлов по прямой линии, что указывает на «1». Конечно, проблемой становится обобщение сети, чтобы она могла распознавать различный набор входных данных.
Надеюсь, это поможет вам более или менее понять, как нейронная сеть может выполнять вычисления. Однако вы столкнулись с вопросом, который довольно важен для нейронных сетей: в общем, в лучшем случае трудно понять, почему сеть выделяет определенный вывод, особенно если учесть, что для чего-то вроде распознавания изображений сети обычно достаточно большой, чтобы людям было трудно понять каждую из движущихся частей машины. Еще более усложняет дело то, что в большинстве случаев нейронные сети на самом деле не имеют одного скрытого узла для каждой маленькой функции, которую сеть может узнать о данных. Вместо этого обнаружение чего-то вроде прямой линии для классификации числа «1» будет происходить нецентрализованно по многим скрытым узлам. Другие алгоритмы,
Если вы хотите больше читать, я настоятельно рекомендую прочитать этот урок на ai junkie. В нем рассказывается об основных принципах работы нейронной сети и даже приводится простой пример кода, позволяющий нейронным сетям вести танк к цели. Учебное пособие, однако, не охватывает обратное распространение, которое на сегодняшний день является наиболее распространенным способом обучения нейронных сетей, и вместо этого использует простой генетический алгоритм. Как только он начнет говорить о генетике, я думаю, вы можете перестать читать ...
источник
Вот что тебя смутило
То, что находится на изображении, в цифровой форме представлено значениями в пикселях изображения. Если взять пример цвета на картинке. Пиксель может иметь три значения, каждое для трех основных цветов - красного, зеленого и синего (
RGB
). Пиксель с (10,50,100
) означает, что он имеет «меньше» элементов синего цвета, чем пиксель с (40,50,100
). Таким образом, на изображении первый пиксель представляет область с меньшим цветом синего цвета. Это информация, которую нейронная сеть изучает из одного местоположения / области изображения в другое и в конечном итоге «зная», что находится на изображении. Тот же принцип применяется для других функций изображения (помимо цвета), которые могут использоваться в качестве входных данных для нейронной сети. Посмотрите это , и это для основных концепций изображения, а затем перейти к этому узнать, как работает нейронная сеть.источник
Все проблемы машинного обучения одинаковы. У вас есть некоторые данные о поездах, вы изучаете модель, которая представляет эти данные, и у вас есть возможность обобщать эти знания таким образом, как вы группируете, классифицируете, учитесь с помощью различных алгоритмов.
При распознавании изображений у вас снова есть набор изображений, о которых вы хотите узнать.
Если вы хотите распознать более чем одну вещь, используйте несколько классификаторов для каждой.
источник
Также хотелось бы отметить очень популярные для распознавания изображений сверточные нейронные сети. Вот ссылка на упрощенное объяснение CNN .
Вкратце, в CNN изображение сначала разбивается на элементы, такие как края, фигуры, коллекции фигур. Затем эти функции «подаются» в «обычную» полностью подключенную многослойную нейронную сеть (многослойный персептрон).
Более подробно, набор фильтров применяется для извлечения объектов в форме карты объектов. Фильтр - это просто матрица (случайная в начале), которая применяется к исходному изображению, так что вычисляется точечное произведение матрицы исходного изображения и матрицы фильтра, а результат суммируется. Фильтр перемещается вдоль исходного изображения по одному пикселю (шагу) за раз, и матрица карты объектов заполняется. Карта объектов создается для каждого фильтра. Затем введена нелинейность с RELU (выпрямленная линейная единица) для каждого пикселя в каждой карте объектов. Объединение с помощью применения max (), sum () или среднего () выполняется после свертки. Наконец, функции, извлеченные таким образом, выглядят как «увеличенные» части исходного изображения. Эти функции вводятся в полностью подключенную (все устройства подключены) нейронную сеть, и вероятности для каждого изображения (скажем, мы изучали нашу сеть на изображениях автомобилей, деревьев и лодок) рассчитываются после каждого прохода через сеть. Сеть обучена, что означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.) Это означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.) Это означает, что параметры (веса) и матрицы фильтров оптимизируются за счет обратного распространения (минимизация ошибки ошибочной классификации). Когда новое изображение вводится в обученную сеть, для идентификации изображения требуется только прямая связь (при условии, что сеть достаточно точна, т.е. мы обучили ее достаточным количеством примеров и т. Д.)
источник
Хорошо, что ANN может создать любую функцию f (x) или f (x, y, z, ..) или любую функцию в этом отношении. Но также важно знать, что у функций есть ограничения в том, как они могут классифицировать данные ... есть более сложные подмножества отношений наборов мощности объектов, которые важны при классификации и которые не описываются такими функциями элегантным или естественным образом, но важны в языке и классификации объектов. ANN также может выполнить это.
источник