Русская Википедия:Ограниченная машина Больцмана

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Файл:Restricted Boltzmann machine-ru.svg
Ограниченная машина Больцмана

Ограниченная машина Больцмана (Шаблон:Lang-en), сокращённо RBM — вид генеративной стохастической нейронной сети, которая определяет распределение вероятности на входных образцах данных.

Первая ограниченная машина Больцмана была построена в 1986 году Полом Смоленски под названием Harmonium[1], но приобрела популярность только после изобретения Хинтоном быстрых алгоритмов обучения в середине 2000-х годов.

Такое название машина приобрела как модификация обычной машины Больцмана, в которой нейроны разделили на видимые и скрытые, а связи допустимы только между нейронами разного типа, таким способом ограничив связи. Значительно позже, в 2000-х годах, ограниченные машины Больцмана приобрели большую популярность и стали рассматриваться уже не как вариации машины Больцмана, а как особые компоненты в архитектуре сетей глубинного обучения. Объединение нескольких каскадов ограниченных машин Больцмана формирует глубокую сеть доверия, особый вид многослойных нейронных сетей, которые могут самообучаться без учителя при помощи алгоритма обратного распространения ошибки[2].

Особенностью ограниченных машин Больцмана является возможность проходить обучение без учителя, но в определённых приложениях ограниченные машины Больцмана обучаются с учителем. Скрытый слой машины представляет собой глубокие признаки в данных, которые выявляются в процессе обучения (см. также Data mining).

Ограниченные машины Больцмана имеют широкий спектр применений — это задачи снижения размерности данных[3], задачи классификации[4], коллаборативная фильтрация[5], выделение признаков (Шаблон:Lang-en)[6] и тематическое моделирование[7].

В ограниченной машине Больцмана нейроны образуют двудольный граф, с одной стороны графа находятся видимые нейроны (вход), а с другой стороны — скрытые, причём перекрёстные связи устанавливаются между каждым видимым и каждым скрытым нейроном. Такая система связей позволяет применить при обучении сети метод градиентного спуска с контрастивной дивергенцией[8].

Структура сети

Ограниченная машина Больцмана базируется на бинарных элементах с распределением Бернулли, составляющие видимый <math>v_i</math> и скрытый <math>h_j</math> слои сети. Связи между слоями задаются с помощью матрицы весов <math>W = (w_{i,j})</math> (размера m × n), а также смещений <math>a_i</math> для видимого слоя и <math>b_j</math> для скрытого слоя.

Вводится понятие энергии сети Шаблон:Math как

<math>E(v, h) = -\sum_i a_i v_i - \sum_j b_j h_j -\sum_i \sum_j v_i w_{i,j} h_j,</math>

или в матричной форме

<math>E(v, h) = -a^{\mathrm{T}} v - b^{\mathrm{T}} h -v^{\mathrm{T}} W h.</math>

Подобной функцией энергии обладает также Сеть Хопфилда. Как и для обычной машины Больцмана, через энергию определяется вероятность распределения на векторах видимого и скрытого слоя[9]:

<math>P(v, h) = \frac{1}{Z} e^{-E(v, h)},</math>

где <math>Z</math> — статсумма, определяемая как <math>\sum e^{-E(v, h)}</math> для всех возможных сетей (иными словами, <math>Z</math> — константа нормализации, которая гарантирует, что сумма всех вероятностей равна единице). Определение вероятности для отдельного входного вектора (маргинальное распределение) проводится аналогично через сумму конфигураций всевозможных скрытых слоёв[9]:

<math>P(v) = \frac{1}{Z} \sum_h e^{-E(v, h)}.</math>

По причине структуры сети как двудольного графа, отдельные элементы скрытого слоя независимы друг от друга и активируют видимый слой, и наоборот отдельные элементы видимого слоя независимы друг от друга и активируют скрытый слой[8]. Для <math>m</math> видимых элементов и для <math>n</math> скрытых элементов условные вероятности Шаблон:Mvar определяются через произведения вероятностей Шаблон:Mvar:

<math>P(v|h) = \prod_{i=1}^m P(v_i|h),</math>

и наоборот условные вероятности Шаблон:Mvar определяются через произведение вероятностей Шаблон:Mvar:

<math>P(h|v) = \prod_{j=1}^n P(h_j|v).</math>

Конкретные вероятности активации для одного элемента определяются как

<math>P(h_j=1|v) = \sigma \left(b_j + \sum_{i=1}^m w_{i,j} v_i \right)</math> и <math>P(v_i=1|h) = \sigma \left(a_i + \sum_{j=1}^n w_{i,j} h_j \right),</math>

где <math>\sigma</math> — логистическая функция для активации слоя.

Видимые слои могут иметь также мультиномиальное распределение, в то время как скрытые слои распределены по Бернулли. В случае мультиномиальности вместо логистической функции используется softmax:

<math>P(v_i^k = 1|h) = \frac{\exp(a_i^k + \Sigma_j W_{ij}^k h_j)}{\Sigma_{k'=1}^K \exp(a_i^{k'} + \Sigma_j W_{ij}^{k'} h_j)},</math>

где K — количество дискретных значений видимых элементов. Такое представление используется в задачах тематического моделирования[7] и в рекомендательных системах[5].

Связь с другими моделями

Ограниченная машина Больцмана представляет собой частный случай обычной машины Больцмана и марковской сети[10][11]. Их графовая модель соответствует графовой модели факторного анализа[12].

Алгоритм обучения

Целью обучения является максимизация вероятности системы с заданным набором образцов <math>V</math> (матрицы, в которой каждая строка соответствует одному образцу видимого вектора <math>v</math>), определяемой как произведение вероятностей

<math>\arg\max_W \prod_{v \in V} P(v),</math>

или же, что одно и то же, максимизации логарифма произведения:[10][11]

<math>\arg\max_W \mathbb{E} [\log P(v)].</math>

Для тренировки нейронной сети используется алгоритм контрастивной дивергенции (CD) с целью нахождения оптимальных весов матрицы <math>W</math>, его предложил Джеффри Хинтон, первоначально для обучения моделей PoE («произведение экспертных оценок»)[13][14]. Алгоритм использует семплирование по Гиббсу для организации процедуры градиентного спуска, аналогично методу обратного распространения ошибок для нейронных сетей.

В целом один шаг контрастивной дивергенции (CD-1) выглядит следующим образом:

  1. Для одного образца данных Шаблон:Mvar вычисляются вероятности скрытых элементов и применяется активация для скрытого слоя Шаблон:Mvar для данного распределения вероятностей.
  2. Вычисляется внешнее произведение (семплирование) для Шаблон:Mvar и Шаблон:Mvar, которое называют позитивным градиентом.
  3. Через образец Шаблон:Mvar проводится реконструкция образца видимого слоя Шаблон:Mvar, а потом выполняется снова семплирование с активацией скрытого слоя Шаблон:Mvar. (Этот шаг называется Семплирование по Гиббсу.)
  4. Далее вычисляется внешнее произведение, но уже векторов Шаблон:Mvar и Шаблон:Mvar, которое называют негативным градиентом.
  5. Матрица весов <math>W</math> поправляется на разность позитивного и негативного градиента, помноженного на множитель, задающий скорость обучения: <math>\Delta W = \varepsilon (vh^\mathsf{T} - v'h'^\mathsf{T})</math>.
  6. Вносятся поправки в биасы Шаблон:Mvar и Шаблон:Mvar похожим способом: <math>\Delta a = \varepsilon (v - v')</math>, <math>\Delta b = \varepsilon (h - h')</math>.

Практические указания по реализации процесса обучения можно найти на личной странице Джеффри Хинтона[9].

См. также

Ссылки

Шаблон:Примечания

Литература

Шаблон:Нейросети Шаблон:Машинное обучение