Чем отличаются нейронные сети?

Здравствуйте.
Решил я начать изучение нейронных сетей.
Создал свой первый персептрон.
В моем понимании - персептрон нужен для легких задач по типу распознать букву.

Решил посмотреть дальше про свёрточные сети и глубокое обучение, но не совсем понимаю о них.

Можете мне объяснить (желательно примером), чем отличается свёрточная сеть от глубокого обучения?

Как я понял, свёрточная сеть позволяет оптимизировать нейронную сеть, т.е. сначала, к примеру, классифицирует объект (квадрат), затем детализирует объект (дорожный знак), и в конце конкретизирует объект (знак "Въезд запрещен").
А глубокое обучение само определяет, сколько слоев делать, какие будут идентификаторы. Т.е. само определяет, как находить дорожный знак и конкретизировать его.
Укажите мои ошибки. И подскажите статьи/литературу об этом. Если со сверточной сетью (в моем понимании, которое описано выше) более менее понятно как реализовывать, то с глубинным обучением (в моем понимании, которое описано выше) совершенно не понятно, как возможно реализовать.
C++: Какие библиотеки посоветуете использовать для анализа изображений и какие методы (использование контуров или градиентов) подходят для обучения нейронных сетей?
  • Вопрос задан
  • 4479 просмотров
Пригласить эксперта
Ответы на вопрос 3
Luonic
@Luonic
Студент, Unity3d, DotNet, Xamarin
Перцептрон позволяет подобрать примерно такую функцию, которая позволит классифицировать данные или предсказывать то, какими будут неизвестные признаки у данных, обучившись на данных, для которых искомые признаки уже известны.

Сверточный слой в нейронной сети - просто слой, который позволяет уменьшить размерность карты признаков (признаки называтся features в англоязычной литературе и лекциях). Свертки не являются противоположностью глубоких нейронных сетей, глубокие нейронные сети - это просто нейронные сети с большим, по сравнению с перцептроном, количеством слоев, только и всего. Для классификации изображений используют в основном несколько основных типов слоев: сверточный (convolutional), max pooling, ReLU (Linear Rectifier Unit), и в качестве нескольких последних слоев, для проведения самой классификации, используют полносвязные слои, как в перцептроне, а количество выходов = количеству классов для классификации.

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

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

Для работы с сетями существует несколько основных фреймворков, а это Caffe (пожалуй, самый распространенный), Torch, Theano, TensorFlow. И еще есть CNTK, он подкупает тем, что может работать на 4 gpu одновременно на одной машине. Но большинство из них работают с питоном, среди data scientist'ов для управления нейросетями больше распространены скриптовые языки, или матлаб.

В качестве совета, как изучать эту непростую тему скажу следующее: не нужно тянуться к коду и практике, пока не будет достаточно четкого понимания в теории, как все работает. Каждое видео, каждую статью нужно разбирать до слова, чтобы разжевать все, что не понятно. Что-то не ясно, гуглим, читаем, осознаем, возвращаемся к статье. Рекомендую начать с видео лекций на ютубе, там проще понять принципы работы слоев, не загружая себя математикой, так как от математики толку не будет, пока не понятны основы.

Вот несколько ссылок:
scs.ryerson.ca/~aharley/vis/conv - отличная интерактивная демонстрация работы сверточной сети для распознавания цифр, обученная на наборе MNIST
https://www.youtube.com/watch?v=2aF_yhVtlH0 - вот это отличный ролик для начала
https://www.youtube.com/watch?v=VhmE_UXDOGs
https://youtu.be/CLSy5WlaWKc - немного скучно, но позновательно
https://www.youtube.com/watch?v=ByjaPdWXKJ4&index=... - суперинтересно и познавательно, но после осознания основ
Ответ написан
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Нейронные сети это довольно старое направление, сугубо математическое, которое получило в последнее время очень мощный пинок под зад благодаря сильно возросшей производительности. Однако, материал по ней очень разношёрстный, очень много дезинформации. И разобраться в этом довольно сложно, особенно учитывая, что она слабо систематизирована и отрасль очень быстро развивается.

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

И так, что мы имеем? Математический аппарат. Цель. И средства. Ну вот, это уже похоже на прогресс. Но чего нет? Адекватной классификации, большого количества хорошего материала, долгой и стабильной учебной практики. Зато вроде есть красивые материалы.

Ну а вообще, есть отличный сборник вопросов на которые можно попробовать по отвечать. А правильно заданный вопрос - половина ответа.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Вот хорошая подборка по нейросетям (текст, формулы, принципы): тут
Видео-лекции: тут

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы