Каждый пример нейронной сети для распознавания изображений, о котором я читал, дает простой ответ «да» или «нет». Один выходной узел соответствует «Да, это человеческое лицо», а другой соответствует «Нет, это не человеческое лицо».
Я понимаю, что это, вероятно, для простоты объяснения, но мне интересно, как такая нейронная сеть может быть запрограммирована, чтобы дать более конкретный результат. Например, допустим, я классифицировал животных. Вместо того, чтобы сказать «Животное» или «Не животное», я хотел бы получить ответы типа «Собака», «Рыба», «Птица», «Змея» и т. Д. С одним последним выходным узлом «Не животное / я». не признать это ".
Я уверен, что это возможно, но мне трудно понять, как. Похоже, что из-за алгоритма обучения обратного распространения ошибки, когда вы тренируете один выходной узел (т. Е. «Это собака»), и веса нейронов изменяются, тогда идеальное состояние для другого выходного узла, которое вы ранее дрессированные (т. е. «это птица») начнут отклоняться, и наоборот. Таким образом, обучение сети распознаванию одной категории саботирует любое обучение, проведенное для другой категории, ограничивая нас тем самым простым «Да» или «Нет».
Это делает такой распознаватель невозможным? Или я неправильно понимаю алгоритм? Единственное, о чем я могу думать, это то, что:
Либо мы могли бы обучить одну нейронную сеть для каждой вещи, которую мы хотим классифицировать, и каким-то образом использовать ее для построения большей суперсети (например, сеть для «собаки», сеть для «птицы» и т. Д., Которую мы каким-то образом сложите вместе для создания супер-сети для "животных"); или же,
Создать какую-то смехотворно сложную методологию обучения, которая потребовала бы невероятно продвинутой математики и каким-то образом создала бы идеальное состояние веса нейрона для всех возможных результатов (иными словами,
insert math magic here
).
(Примечание 1: я специально рассматриваю многослойные персептроны как разновидность нейронной сети.)
(Примечание 2: Для первого маркированного «возможного решения», имеющего каждую конкретную нейронную сеть и перебирающего их, пока мы не получим ответ «Да», недостаточно хорошо. Я знаю, что это можно сделать довольно легко, но это простой функционал программирование, а не машинное обучение. Я хочу знать, возможно ли иметь одну нейронную сеть для передачи информации и получения соответствующего ответа.)
Ответ @ anaximander довольно хороший, я решил прокомментировать эту часть вашего вопроса:
Ну, я думаю, что ваше предположение здесь неверно; если я правильно понимаю, у вас есть NN с одним выходом на категорию, которую вы пытаетесь классифицировать. В идеале вы бы хотели, чтобы они работали практически независимо, чтобы классификации «собака» и «птица» не срабатывали одновременно. Так что на самом деле, во время обучения, то, что произойдет, это то, что когда вы тренируете NN с «собачьим» результатом, обратное распространение будет пытаться обеспечить, чтобы «птица» и другие выходные нейроны не давали ложных срабатываний. Таким образом, теоретически, это будет работать просто отлично, вопреки вашему комментарию; Подкрепление негативного исхода для «птицы» является правильным.
Однако вашей проблемой станет масштабируемость этого подхода. По мере добавления новых категорий в сеть обучение будет становиться более сложным, по крайней мере, линейным (но, вероятно, гораздо худшим) способом. По этой причине многие люди используют подход, при котором отдельные NN обучаются для каждой категории; это делает вещи достаточно простыми и относительно масштабируемыми. Метауровень того, как они комбинируются, зависит от вас. Вы можете просто перебрать все NN и посмотреть, какие из них дают положительные результаты, вы можете создать эвристические NN среднего уровня, которые пытаются сузить тип животного для вас, или у вас может быть даже гигантский NN, который объединяет отдельные NN в качестве нейронов. , По сути, я пытаюсь сказать, что у вас есть предварительные знания о структуре проблемы - отдельные классификации, скорее всего, отличаются друг от друга;
РЕДАКТИРОВАТЬ: Чтобы ответить на заглавный вопрос, конечно, NN могут предоставить больше, чем да / нет ответов. В «стандартных» моделях каждый выходной нейрон обычно запускает да / нет (хотя это поведение можно изменить, если вы так склонны), представляя один бит информации; но, как и в вашем компьютере, биты можно комбинировать, чтобы получить диапазон дискретных значений, которые можно интерпретировать любым способом, который вы пожелаете. Довольно наглядным примером недвоичных выходных данных может быть самоорганизующаяся карта , которая обычно имеет двухмерный выход.
источник
Короткий и не очень жесткий ответ: да, каждый NN может предоставить больше информации, чем просто
yes
, илиno
. Это связано с порогом. Если веса выше некоторого порога, ответом является один из классов классификации, если он ниже, ответом является второй класс классификации. В принципе:Выход нейрона находится в интервале [0..1] (или [-1,1] это зависит), и вы не хотите получать ответ, является ли выход ниже или выше порога, но выход (выход вы может легко преобразовать в интервал 0..1, а это означает%)
источник