Этот пост является вторым в серии из восьми постов байесовских сверточных сетей. Посты будут структурированы следующим образом:

  1. Потребность в байесовских нейронных сетях
  2. Базовые знания, необходимые для лучшего понимания байесовских сетей.
  3. Некоторые недавние работы в области байесовских нейронных сетей
  4. Байесовские сверточные сети с использованием вариационного вывода
  5. Создайте свою собственную байесовскую сверточную сеть в PyTorch
  6. Оценка неопределенности в байесовской нейронной сети
  7. Отсечение модели в байесовской нейронной сети
  8. Приложения в других областях (Super Resolution, GAN и т. д.)

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

Давайте начнем этот пост с разделения байесовских нейронных сетей на байесовские и нейронные сети.

Байесовский вывод составляет важную часть статистики и вероятностного машинного обучения. Он основан на теореме Байеса известного статистика Томаса Байеса. В байесовском выводе вероятность гипотезы обновляется по мере появления новых свидетельств или информации.

Нейронную сеть, с другой стороны, можно рассматривать как комплексную систему или набор алгоритмов, которые имитируют человеческий мозг (не все верят в это, но это была основа) и пытается изучить сложные представление в наборе данных для обеспечения вывода.

Нейронные сети

По нейронным сетям уже есть очень хорошие учебники. Я попытаюсь кратко описать аналогию нейронных сетей с мозгом и уделю больше времени объяснению сегментов вероятностного машинного обучения, над которыми мы будем работать в будущем.

Мозговые аналогии

перцептрон задуман как математическая модель того, как нейроны функционируют в нашем мозгу, известным психологом Розенблаттом. Согласно Розенблатту, нейрон принимает набор двоичных входов (соседние нейроны), умножает каждый вход на непрерывный вес (сила синапса для каждого соседнего нейрона) и пороговое значение суммы этих взвешенных входов для вывода 1, если сумма достаточно велика, а в противном случае - 0 (точно так же нейроны либо срабатывают, либо не срабатывают).

Искусственная нейронная сеть

Вдохновленная биологической нервной системой, структура искусственной нейронной сети (ИНС) была разработана для обработки информации аналогично тому, как мозг обрабатывает информацию. Большое количество тесно взаимосвязанных обрабатывающих элементов (нейронов), работающих вместе, заставляет нейронную сеть решать сложные задачи. Так же, как люди учатся на собственном примере, так делает и нейронная сеть. Обучение в биологических системах включает в себя корректировку синаптических связей, что аналогично обновлению веса в нейронной сети.

Нейронная сеть состоит из трех уровней: входной слой для передачи данных в модель для изучения представления, скрытый слой, который изучает представление, и выходной слой , который выводит результаты или прогнозы. Нейронные сети можно рассматривать как сквозную систему, которая находит в данных шаблоны, которые слишком сложны, чтобы их мог распознать человек, чтобы научить машину.

Сверточная нейронная сеть

Hubel и Wiesel в своей модели иерархии упомянули нейронную сеть, которая имеет иерархическую структуру в зрительной коре головного мозга. LGB (латеральное коленчатое тело) образует простые клетки, которые образуют сложные клетки, которые образуют гиперкомплексные клетки низшего порядка, которые в конечном итоге образуют гиперкомплексные клетки высшего порядка.
Кроме того, сеть между гиперкомплексными клетками низшего порядка и высшими клетками. Ячейки гиперкомплекса порядка структурно подобны сети между простыми ячейками и сложными ячейками. В этой иерархии ячейка на более высокой ступени обычно имеет тенденцию избирательно реагировать на более сложную характеристику шаблона стимула, а ячейка на более низкой ступени реагирует на более простые функции. Кроме того, клетки более высоких стадий обладают большим рецептивным полем и более нечувствительны к изменению положения модели стимулов.

Подобно модели иерархии, начальные слои нейронной сети изучают более простые функции, такие как края и углы, а последующие слои изучают сложные функции, такие как цвета, текстуры и т. Д. Кроме того, высшие нейронные единицы обладают большим рецептивным полем, которое накапливается над начальными слоями. Однако, в отличие от многослойного персептрона, где все нейроны одного слоя связаны со всеми нейронами следующего слоя, разделение веса является основной идеей сверточной нейронной сети.
Пример: вместо того, чтобы каждый нейрон имел разный вес для каждого пикселя входного изображения входного изображения (28 * 28 весов), нейроны имеют только небольшой набор веса (5 * 5), который применяется к целому набору небольших подмножеств изображения одинакового размера. Слои за первым слоем работают аналогичным образом, принимая «локальные» особенности, обнаруженные в ранее скрытом слое, а не в пиксельных изображениях, и последовательно видят большие части изображения, поскольку они объединяют информацию о все более крупных подмножествах изображения. Наконец, последний слой делает правильный прогноз для выходного класса.

Причина, по которой это полезно, интуитивно понятна, если не математически ясна: без таких ограничений сети пришлось бы изучать одни и те же простые вещи (такие как обнаружение краев, углов и т. Д.) Целую кучу раз для каждой части изображения. Но с этим ограничением только один нейрон должен был бы изучить каждую простую функцию, а с гораздо меньшими весами в целом он мог бы работать намного быстрее! Более того, поскольку точное расположение таких функций не имеет значения, нейрон может пропустить соседние подмножества изображения - подвыборку, теперь известную как тип объединения - при применении весов, что еще больше сокращает время обучения. Добавление этих двух типов слоев - сверточных и объединяющих слоев - является основным отличием сверточных нейронных сетей (CNN / ConvNets) от простых старых нейронных сетей.

Вероятностное машинное обучение

Чтобы простыми словами объяснить вероятностное машинное обучение, давайте разделим этот термин на вероятностное и машинное обучение.

Машинное обучение просто заключается в разработке алгоритмов, которые выполняют определенные задачи с учетом определенных данных. Он может варьироваться от поиска закономерностей в неструктурированных данных до классификации электронных писем, от понимания языка до автономных автомобилей. На основании наблюдаемых данных можно сделать некоторые выводы с помощью метода машинного обучения. Обучается модель, которая изучает некоторые закономерности и предположения на основе наблюдаемых данных (обучающие данные) и делает выводы на основе ненаблюдаемых данных (тестовые данные). Поскольку каждый вывод приходит с достоверностью предсказания, вывод делается. Однако модель может быть неуверенной в прогнозе по многим причинам: шум входных данных, сенсорный шум, ошибки измерения, неоптимальные настройки гиперпараметров и т. Д.
Вероятностная модель в машинном обучении утверждает, что все формы неопределенности не могут быть истинным значением, а больше похожи на значение вероятности, и использует теорию вероятностей, чтобы ответить на все вопросы. Вероятностные распределения используются для моделирования состояний обучения, неопределенности и ненаблюдаемых состояний. Априорное распределение вероятностей определяется перед наблюдением данных, происходит обучение, и распределение преобразуется в апостериорные распределения после того, как данные наблюдаются. Использование теории вероятностей для обучения на основе данных формирует основу для байесовского обучения.

Неопределенности играют важную роль в байесовском обучении, и давайте подробно рассмотрим тип неопределенностей:

Неопределенности в байесовском обучении

Неопределенности в сети - это показатель уверенности модели в своем прогнозе. В байесовском моделировании существует два основных типа неопределенностей: Алеаторическая неопределенность и Эпистемическая неопределенность.

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

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

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

Теперь у нас есть хорошее представление об основах вероятностного машинного обучения, байесовском обучении и нейронных сетях. Объединение байесовских подходов к нейронным сетям выглядит прибыльной идеей, но на практике байесовскую нейронную сеть сложно обучить. Самый популярный подход к обучению нейронной сети - обратное распространение, и мы используем байесовский метод обратного распространения ошибки для обучения байесовских нейронных сетей. Давайте подробнее рассмотрим методы.

Обратное распространение

Обратное распространение в нейронных сетях было предложено Rumelhart в 1986 году и является наиболее часто используемым методом обучения нейронных сетей. Обратное распространение - это метод вычисления градиента потерь с точки зрения веса сети. Он работает в два этапа: во-первых, входные характеристики по сети распространяются в прямом направлении для вычисления выходных данных функции и, следовательно, потерь, связанных с параметрами. Во-вторых, производные потерь при обучении по весам
распространяются обратно от выходного слоя к входным слоям.
Эти вычисленные производные в дальнейшем используются для обновления весов сети. Это непрерывный процесс, и обновление веса происходит непрерывно на каждой итерации.

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

Байесовский подход к нейронным сетям обеспечивает недостатки подхода обратного распространения ошибки, поскольку байесовские методы естественным образом учитывают неопределенность в оценках параметров и могут распространять эту неопределенность на прогнозы.
Кроме того, усреднение по значениям параметров вместо простого выбора одноточечных оценок делает модель устойчива к переобучению.

В прошлом для обучения в байесовских сетях предлагалось несколько подходов: аппроксимация Лапласа, MC Dropout и вариационный вывод. Мы использовали байесовский метод Backprop для нашей работы, и это объясняется далее.

Байесовский метод Backprop

Байесовский от Backprop был представлен Бланделлом и др. (Cite) для изучения распределения вероятностей весов нейронной сети. Весь этот подход можно резюмировать следующим образом:

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

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

OK! Это имеет смысл. Итак, давайте углубимся в подробности, так как этот метод составляет основу нашего метода, который будет объяснен в следующих блогах. Давайте начнем с понимания того, почему распределение становится трудноразрешимым, и необходимости его аппроксимации. Начнем с теоремы Байеса:

Из теоремы Байеса, как указано выше, мы пытаемся найти вероятность параметров нашей модели θ с учетом некоторых данных x. Это известно как апостериорная, и мы хотим ее вычислить. Теперь в числителе есть P (θ), который является нашим предварительным (оценка до просмотра данных), и P (x | θ), который является вероятность и показывает распределение данных. Оба эти значения легко вычислить. Знаменатель P (x) является свидетельством, и он показывает, получены ли данные x из модели. Теперь это усложняет задачу. Мы можем вычислить это только путем интегрирования по всем возможным значениям модели:

Как мы видим, это делает все решение неразрешимым, и единственный способ решить это - приблизить его. Поэтому мы будем использовать вариационный вывод, чтобы аппроксимировать функциональную форму.

Существуют и другие методы, которые можно использовать для аппроксимации интегралов, и наиболее популярными из них являются Монте-Карло с цепью Маркова и Отброс Монте-Карло.

Вариационный вывод

Предположим, у нас есть какая-то функция плотности, и мы хотим ее оценить. Мы начинаем с выбора распределения (может быть гауссовым, поскольку оно является наиболее популярным) и продолжаем изменять его, пока не достигнем очень близкой к желаемой функции, в данном случае нашей апостериорной. Мы хотим достичь как можно более близкого к истинному распределению, которое трудно преодолеть, и мы можем сделать это, минимизируя расхождение Кульбака-Либлера (KL) между ними.

Итак, у нас есть функция P (w | D) (апостериор сверху), и мы хотим аппроксимировать ее другим распределением q (w | D) с некоторым вариационные параметры θ.

Обратите внимание, что символы здесь изменены, чтобы они соответствовали блогу Феликса Лаумана Вероятностное глубокое обучение: байесовский метод обратного распространения, в котором очень хорошо объясняется тема.

Дивергенция KL превращает проблему в проблему оптимизации и может быть минимизирована следующим образом:

Но это еще не конец. Если мы решим дивергенцию KL, это снова даст неразрешимое уравнение из-за наличия интегральной функции:

Теперь мы не можем аппроксимировать приближенную функцию уже (технически мы можем, но она снова должна быть как можно ближе к исходной функции и, следовательно, расходимости KL, чтобы найти расстояние и снова проблема интегрирования). Таким образом, мы можем выборку из аппроксимированной функции q (w | D), поскольку намного проще выбирать веса из приближенной функции q (w | D) , чем трудноизлечимая истинная апостериорная функция p (w | D). Сделав это, мы перейдем к управляемой функции, как указано ниже:

Эти выбранные веса w используются при обратном распространении нейронной сети для определения апостериорного распределения.

Теперь, как мы видим, можно обучать байесовскую нейронную сеть с помощью метода Байеса с помощью Backprop, а байесовская нейронная сеть автоматически включает регуляризацию. В следующих блогах мы узнаем о байесовских сверточных нейронных сетях с использованием подхода вариационного вывода. Мы используем две операции в свертках (подробнее в следующих блогах или читайте здесь), и, следовательно, количество параметров для байесовской CNN увеличивается вдвое по сравнению с CNN, основанной на точечной оценке. Следовательно, чтобы уменьшить параметры сети, мы сократили архитектуру сети и посмотрим, как это можно сделать.

Обрезка модельных весов

Отсечение модели уменьшает разреженность в
различных матрицах соединений глубокой нейронной сети, тем самым уменьшая количество значимых параметров в модели. Вся идея обрезки модели состоит в том, чтобы уменьшить количество параметров без большой потери точности модели. Это сокращает использование большой параметризованной модели с регуляризацией и способствует использованию плотно связанных более мелких моделей. Некоторые недавние исследования показывают, что сеть может значительно уменьшить размер модели, но при этом добиться сопоставимой точности.
Обрезка модели обладает рядом преимуществ с точки зрения сокращения вычислительных затрат, времени вывода и энергоэффективности. Результирующая сокращенная модель обычно имеет разреженные матрицы соединений. Для эффективного вывода с использованием этих разреженных моделей требуется специализированное оборудование, способное загружать разреженные матрицы и / или выполнять операции разреженных матриц и векторов. Однако с новой сокращенной моделью общее использование памяти сокращается.

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

Присвоение нулевых весов большинству характеристик и ненулевых весов только важным функциям можно формализовать, применив L_0 (L-ноль) норму, поскольку она применяет постоянный штраф ко всем ненулевым весам.
L_0 norm можно рассматривать как норму селектора признаков, которая присваивает ненулевые значения только важным характеристикам. Однако норма L_0 является невыпуклой и, следовательно, недифференцируемой, что делает ее NP-трудной задачей и может быть эффективно решена только при P = NP.
Альтернативой норме L_0 является норма L_1, которая равна сумме абсолютного веса ценности. Норма L_1 является выпуклой и, следовательно, дифференцируемой и может использоваться как приближение к норме L_0. L_1 norm работает как регуляризатор, вызывающий разреженность, делая большое количество коэффициентов равным нулю, работая как отличный селектор функций.

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

Если вы хотите что-то прочитать заранее, проверьте дипломную работу или статью.

Реализация в PyTorch доступна здесь.

Не стесняйтесь комментировать любые идеи, отзывы или находить меня здесь. Чтобы узнать больше о блогах по соответствующей теме, посетите: