Я искал причину много, но я не понял, может ли кто-нибудь объяснить это более подробно?Почему мы используем полностью подключенный слой в конце CNN?
ответ
CNN дает вам представление входного изображения. Чтобы изучить примеры классов, вы должны использовать классификатор (например, логистическая регрессия, SVM и т. Д.), Который изучает взаимосвязь между изученными функциями и образцами классов. Полностью подключенный слой также является линейным классификатором, таким как логистическая регрессия, которая используется по этой причине.
Свертывание и объединение слоев извлекают из изображения изображения. Таким образом, этот слой выполняет некоторую «предварительную обработку» данных. На основе этих извлеченных функций выполняются классифицированные в полном объеме функции.
В теории у вас нет , чтобы прикрепить полностью подключенный слой, у вас может быть полный стек сверток до самого конца, до тех пор, пока (из-за нестандартных размеров/прокладок) вы получите правильное число выходных нейронов (обычно число классов).
Итак, почему люди обычно этого не делают? Если перейти к математике, станет видно, что каждый выходной нейрон (таким образом - предсказание по отношению к некоторому классу) зависит от только от подмножества входных измерений (пикселей). Это было бы чем-то вроде строк модели, которая решает, является ли образ элементом класса 1 в зависимости от первых нескольких «столбцов» (или, в зависимости от архитектуры, строк или некоторого патча изображения), тогда ли это класс 2 в нескольких следующих столбцах (возможно, перекрытие), ... и, наконец, некоторый класс К в зависимости от нескольких последних столбцов. Обычно данные не имеют этой характеристики, вы не можете классифицировать изображение кота на основе нескольких первых столбцов и игнорировать остальные.
Однако, если вы приведете полностью подключено слоя, вы предоставите модель с возможностью смеси сигналов, поскольку каждый нейрон имеет связь с каждыми один в следующем слое, теперь есть поток информации между каждым размером ввода (местоположением пикселя) и каждым выходным классом, таким образом, решение основано действительно на всем изображении.
Таким образом, интуитивно вы можете думать об этих операциях с точки зрения информационного потока. Конволирование - это локальные операции, объединение - локальные операции. Полностью связанные слои являются глобальными (они могут вводить любую зависимость). Это также связано с тем, что из-за их локального характера из-за их локального характера свертки так хорошо работают в таких областях, как анализ изображений, хотя математически они являются лишь частью того, что могут представлять собой полностью связанные слои.
примечание Я рассматриваю здесь типичное использование CNN, где ядра небольшие. В общем, можно даже думать о MLP как о CNN, где ядро имеет размер всего ввода с определенным интервалом/дополнением. Однако это просто угловые случаи, которые на самом деле не встречаются на практике и не влияют на рассуждения, так как в конечном итоге они становятся MLP. Здесь все просто: ввести глобальные отношения, если можно сделать это, используя CNN определенным образом - тогда MLP не нужны. MLP - это всего лишь в одном направлении введения этой зависимости.
Каждый полностью соединенный (FC) слой имеет эквивалентный сверточный слой (но не наоборот). Следовательно, нет необходимости добавлять FC-слои. Их всегда можно заменить сверточными слоями (+ перестройка). См. details.
Почему мы используем слои FC?
Поскольку (1) мы привыкли к нему (2), это проще. (1), вероятно, является причиной (2). Например, вам нужно будет отрегулировать убытки fuctions/форму меток/добавить измененную форму, чтобы добавить конец, если вы использовали сверточный слой вместо уровня FC.
- 1. Почему мы используем easytracker?
- 2. Почему мы используем SpreadsheetApp.flush() ;?
- 3. Почему мы используем жидкость?
- 4. Почему мы используем SimpleLoadTimeWeaver?
- 5. Почему мы используем tq_struct?
- 6. Почему мы используем struts.custom.i18n.resources?
- 7. Почему мы используем HttpContext.Current?
- 8. Почему мы используем xml?
- 9. Почему мы используем прототипы
- 10. Почему мы используем константы?
- 11. Почему мы используем system.out.flush()?
- 12. Почему мы используем web.xml?
- 13. Почему мы используем TaskStackBuilder?
- 14. Почему мы используем HTTP?
- 15. Почему мы используем jquery.klass?
- 16. Почему мы используем «({})» в jQuery?
- 17. Как уменьшить полностью подключенный слой `` InnerProduct '' с использованием усеченного SVD
- 18. Каков вывод полностью подключенного слоя в CNN?
- 19. Caffe полностью сверточный CNN
- 20. Почему мы используем тип @Master?
- 21. Почему мы используем менеджеров памяти?
- 22. Почему мы используем бесконтактный интерфейс?
- 23. Почему мы используем Git Keys
- 24. Почему мы используем дескрипторы SURF?
- 25. Почему мы используем аннотацию hibernate?
- 26. Почему мы используем docker-registry?
- 27. Почему мы используем изображение Adjustement
- 28. Почему мы используем прототипы функций?
- 29. Почему мы используем Dynamic Proxy
- 30. Почему мы используем шаблон стратегии?
«Если один идет через математику, станет видно, что каждый выходной нейрон (таким образом. - предсказание WRT для некоторого класса) зависит только от подмножества размеров входных (пикселей)» - могли бы вы расширить что? К настоящему времени это утверждение неверно для бесконечно многих архитектур CNN. –
«Конвоирование - это локальные операции» - необязательно. Вы можете создать сверточный слой, который имеет размер карты объектов (без заполнения). Тогда сверточный слой является глобальной операцией. –
Да, это упрощение, они ** обычно ** локальные, конечно, вы можете перейти к такому пределу, где он вырождается обратно в MLP, но затем называть его сверткой сомнительно. – lejlot