- Адрес видео:woohoo.YouTube.com/embed/FM PDI…
- Ссылка на документацию: pdf [2MB] & ppt [6MB] &Web View & GitBook
- Дополнительные знания:Глубокое обучение — теоретический вывод обратного распространения ошибки
Когда вы слышите, что глубокое обучение ломает новый технологический барьер, в девяти случаях из десяти задействуются сверточные нейронные сети. Они также известны как CNN или ConvNets и являются рабочей лошадкой в области глубоких нейронных сетей. Они научились классифицировать изображения, в некоторых случаях даже превосходя людей. Если и есть способ доказать эту гипотезу, то это CNN. Что особенно здорово, так это то, что их легко понять, если разбить их на основные модули. вот одинвидео, очень подробно обсуждает эти проблемы с изображением.
LeNet-5 Classficationпредыдущая работа
Игрушечная ConvNet: X и O
Определите, содержит ли изображение букву «Х» или букву «О»?
Чтобы помочь вам понять сверточные нейронные сети, давайте возьмем очень упрощенный пример: определите, содержит ли изображение «X» или «O»?
Этого примера достаточно, чтобы проиллюстрировать принципы, лежащие в основе CNN, но он достаточно прост, чтобы не увязнуть в ненужных деталях. В CNN есть такая проблема, что каждый раз, когда вам дают картинку, вам нужно определить, содержит ли она «X» или «O». И предположим, вам нужно выбрать одно из двух: «X» или «O». Идеальная ситуация выглядит так:
Стандартные «X» и «O» с буквами по центру изображения и правильными пропорциями без искажений.Для компьютера, пока изображение немного меняется, что не является стандартом, решить эту проблему все же не так просто:
Наивный способ решения этой задачи для компьютера состоит в том, чтобы сначала сохранить стандартное изображение «X» и «O» (как в приведенном ранее примере), а затем сравнить с этими двумя другие вновь заданные изображения. чтобы увидеть, какой из них лучше соответствует изображению, а затем решить, какая это буква. Но делать это на самом деле очень ненадежно, потому что компьютер все еще относительно жесткий. В компьютерном «видении» изображение выглядит как двумерный массив пикселей (представьте себе шахматную доску), где каждая позиция соответствует числу. В нашем примере значение пикселя «1» соответствует белому цвету, а значение пикселя «-1» — черному.
Если при сравнении двух изображений значения какого-либо пикселя не совпадают, то два изображения не совпадают, по крайней мере, для компьютеров. В этом примере компьютер считает, что белые пиксели на двух изображениях выше одинаковы, за исключением маленького квадрата 3*3 посередине, а остальные четыре угла различны:
Таким образом, на первый взгляд компьютер решает, что изображение справа не является «Х», эти два изображения различны, и делает вывод:
Но делать это кажется неразумным. В идеале мы хотим, чтобы компьютер по-прежнему распознавал «X» и «O» на изображении для тех изображений, которые просто выполняют некоторые простые преобразования, такие как перемещение, масштабирование, вращение, микродеформация и т. д. Как и в следующих ситуациях, мы надеемся, что компьютер все еще сможет распознать его быстро и точно:
Это проблема, которую CNN должен решить.
Features
Для CNN это сравнение по частям. Мы называем этот «маленький блок», который сравнивает функции. Найдите несколько грубых признаков, которые должны совпадать примерно в одном и том же месте на двух изображениях, CNN сможет лучше увидеть сходство двух изображений по сравнению с традиционным методом сравнения всех изображений по одному.
Каждый признак подобен небольшому изображению (то есть относительно небольшому двумерному массиву со значениями). Различные функции соответствуют различным функциям на изображении. В случае с буквой «Х» эти черты, состоящие из диагональных и пересекающихся линий, в основном способны идентифицировать наиболее важные черты «Х».
Эти особенности, вероятно, соответствуют четырем углам буквы X и ее центру на любом изображении, содержащем букву «X». Так как именно это соответствует? следующее:
Посмотрите, есть ли здесь немного босса. Но на самом деле это только первый шаг, вы же знаете, как эти Характеристики сопоставляются на исходном изображении. Но вы еще не знаете, какой математический расчет в нем осуществляется, например, что делает маленький блок 3*3 внизу?
Далее мы проследим и представим математическую операцию внутри, которую мы часто называем операцией «свертки».
свертка
ConvolutionКогда вам дают новое изображение, CNN не знает точно, каким частям исходного изображения будут соответствовать эти функции, поэтому она пробует все возможные места на исходном изображении. Таким образом, вычисление сопоставления выполняется в каждой позиции исходного всего изображения, и мы эквивалентны превращению этой функции в фильтр. Процесс, который мы используем для сопоставления, называется операцией свертки, откуда и происходит название сверточной нейронной сети.
Математика этой операции свертки на самом деле довольно проста. Чтобы вычислить результат признака и соответствующего ему небольшого блока на исходном изображении, необходимо всего лишь просто перемножить значения пикселей соответствующих позиций в двух маленьких блоках, а затем суммировать результаты операций умножения в весь небольшой блок. Наконец, разделите на общее количество пикселей в маленьком блоке. Если оба пикселя белые (то есть оба имеют значение 1), то 1*1 = 1, а если оба черные, то (-1)*(-1) = 1. В любом случае каждая пара совпадающих пикселей умножается на 1. Точно так же умножение любых несовпадающих пикселей дает -1. Если все пиксели внутри функции (например, n*n) соответствуют соответствующему маленькому блоку (n*n) в исходном изображении, то их соответствующие значения пикселей умножаются и накапливаются, чтобы получить равные n2, затем разделите на общее количество пикселей n2, результат 1. Аналогично, если все пиксели не совпадают, результат равен -1. Конкретный процесс выглядит следующим образом:
Для средней части сделайте то же самое:
Наконец, просчитывается вся картина, выглядит она, вероятно, так:
Затем переключитесь на другие функции, чтобы выполнить ту же операцию, и окончательный результат будет таким:
Чтобы завершить нашу свертку, мы продолжаем повторять описанный выше процесс, сворачивая функцию с каждым блоком на графике. Наконец, с помощью операции свертки каждой функции мы получим новый двумерный массив. Это также можно понимать как результат фильтрации исходного изображения, которую мы называем картой признаков, которая представляет собой «признак», извлеченный каждым признаком из исходного изображения. Чем ближе значение к 1, тем полнее соответствие между соответствующей позицией и признаком, чем ближе к -1, тем полнее соответствие между соответствующей позицией и признаком, а значение, близкое к 0, означает, что соответствующая позиция не имеет соответствия или ничего не имеет ассоциации.
Таким образом, наша исходная карта становится серией карт объектов после операции свертки различных объектов. Мы можем удобно и интуитивно рассматривать всю эту операцию как единый процесс. В CNN мы называем это слоем свертки, поэтому вы можете быстро подумать, что за ним должны быть другие слои. Да, об этом будет сказано позже. Мы можем представить себе сверточный слой следующим образом:
Поэтому можно предположить, что операция, выполняемая CNN, несложна. Но даже несмотря на то, что мы можем описать работу CNN в этом объеме, количество операций сложения, умножения и деления внутри него на самом деле быстро увеличивается. Математически говоря, они растут линейно с размером изображения, размером каждого фильтра и количеством фильтров. С таким количеством факторов легко сделать эту задачу довольно затратной в вычислительном отношении, и неудивительно, что многие производители микропроцессоров сейчас производят специализированные чипы, чтобы не отставать от требований вычислений CNN.
Объединение
PoolingДругой эффективный инструмент, используемый в CNN, называется «Пулинг». Объединение может уменьшить большое изображение, сохранив в нем важную информацию. Математика, стоящая за объединением, находится на уровне второго класса. Это должно уменьшить входное изображение, уменьшить информацию о пикселях и сохранить только важную информацию. При нормальных обстоятельствах размер пула равен 2 * 2. Например, для максимального пула необходимо взять максимальное значение в блоке размера 2 * 2 во входном изображении, а результирующее значение пикселя эквивалентно уменьшению исходного изображение 4 раза. (Примечание. Точно так же для объединения средних значений в качестве результирующего значения пикселя берется среднее значение 2*2 блоков.)
Для этого примера в этой статье операция объединения выглядит следующим образом:
Добавьте «0» к внешней стороне недостачи:
После операции максимального объединения (например, размера 2*2) изображение уменьшается до четверти исходного размера:
Затем сделайте то же самое для всех карт объектов и получите следующие результаты:
Поскольку max-pool сохраняет максимальное значение в каждом маленьком блоке, это эквивалентно сохранению наилучшего результата сопоставления для этого блока (поскольку значение, близкое к 1, означает лучшее совпадение). Это означает, что он не будет специально обращать внимание на то, какое место в окне совпадает, а только обращает внимание на то, есть ли где-то совпадение. Также видно, что CNN может узнать, есть ли на изображении определенный признак, и не заботится о том, где у него такой признак. Это также может помочь решить упомянутую ранее проблему жесткого попиксельного сопоставления компьютеров.
После выполнения операции объединения на всех картах объектов большое изображение, эквивалентное серии входных данных, становится серией небольших изображений. Точно так же мы можем думать обо всей этой операции как об одной операции, которая является слоем объединения в CNN, следующим образом:
Добавляя слой пула, можно значительно сократить объем вычислений и снизить нагрузку на компьютер.
Normalization
Функция активации Relu (выпрямленные линейные единицы)
Это небольшая, но важная операция, называемая Relu (Rectified Linear Units) или Ректифицированные линейные единицы. Его математическая формула также очень проста:
![][01]
[01]:LaTeX.code cogs.com/PNG.LaTeX?Опубликовать…
При отрицательных значениях ввода на выходе все 0, а при положительных значениях выводится как есть. Дополнительную информацию о его функциях см.здесь.
Давайте посмотрим на конкретную работу функции активации relu на отдельном примере из этой статьи:
Наконец, после обработки всего изображения результат выглядит следующим образом:
Точно так же в CNN мы рассматриваем эту серию операций как одну операцию, затем мы получаем слой Relu следующим образом:
Deep Learning
Наконец, мы объединяем свертку, объединение и активацию, упомянутые выше, и это выглядит так:
Затем мы увеличиваем глубину сети, добавляем больше слоев и получаем глубокую нейронную сеть:
Затем на разных уровнях мы визуализируем и можем увидеть результаты предварительных знаний, упомянутых в начале этой статьи:
Полностью связанные слои
По результату оценивается как «Х»:
В этом процессе мы определяем эту серию операций как «полностью связанные слои»:
Также может быть много полносвязных слоев, например:
[Объединение всех вышеперечисленных структур]
Весь этот процесс, от начала до конца, называется «прямым распространением», когда получается набор выходных данных, а затем обратное распространение используется для непрерывного исправления ошибок и обучения.
Обратное распространение
Математические принципы можно найти здесь:Глубокое обучение — теоретический вывод обратного распространения ошибки.
Gradient Descent Optimizer
Hyperparameters
Application
Images Soung TextLearn more
If you'd like to dig deeper into deep learning, check out my Demystifying Deep Learning post. I also recommend the notes from the Stanford CS 231 course by Justin Johnson and Andrej Karpathy that provided inspiration for this post, as well as the writings of Christopher Olah, an exceptionally clear writer on the subject of neural networks.
If you are one who loves to learn by doing, there are a number of popular deep learning tools available. Try them all! And then tell us what you think.
Caffe
CNTK
Deeplearning4j
TensorFlow
Theano
Torch
Many others
I hope you've enjoyed our walk through the neighborhood of Convolutional Neural Networks. Feel free to start up a conversation.
Brandon RohrerВ этой статье основное внимание уделяется конкретной рабочей части спереди, поэтому последняя часть не детализирована, просто взята, при необходимости она будет постепенно улучшена позже, спасибо!
Ссылка:
- бро, однако. GitHub.IO/how_con Vol U…
- Глубокое обучение — теоретический вывод обратного распространения ошибки
(Примечание: спасибо за чтение, я надеюсь, что эта статья будет вам полезна. Если вы чувствуете себя хорошо, поделитесь и перепечатайте, но, пожалуйста, нажмите сначалаздесьПолучить авторизацию. Эта статья написанаАвторская печатьОбеспечьте защиту, запретите любую форму несанкционированной перепечатки, спасибо! )