Изменения

Перейти к: навигация, поиск

Сети глубокого доверия

111 байт добавлено, 16:23, 8 ноября 2020
Исправление опечаток и неточных формулировок
== Как развивались сети глубокого доверия ==
В нейронных сетях первого поколения использовались персептроны[[Нейронные сети, перцептрон|перцептроны]], которые идентифицировали конкретный объект или что-либо еще, принимая во внимание «вес» или предварительные свойства. Однако перцептроны могут быть эффективны только на базовом уровне и бесполезны для передовых технологий. Для решения этих проблем во втором поколении нейронных сетей была введена концепция обратного распространения, при которой полученный вывод сравнивается с желаемым выводом, а значение ошибки было снижено до нуля. [[Метод опорных векторов (SVM)|Метод опорных векторов]] позволил создать больше контрольных примеров, ссылаясь на ранее введенные контрольные примеры. Затем последовали циклические графы, называемые сетями доверия, которые помогли в решении проблем, связанных с выводом и проблемами обучения. За этим последовали сети глубокого доверия, которые помогли создать непредвзятые значения для хранения в конечных узлах.
== Композиция простых обучающих модулей ==
[[Файл:Rbmimage4.png |400px|thumb| right| Рис. 1 Распределение RBMrestricted Boltzmann machine]]Глубокая сеть доверия может рассматриваться как набор простых обучающих модулей, каждый из которых представляет собой [https://ru.wikipedia.org/wiki/%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%91%D0%BE%D0%BB%D1%8C%D1%86%D0%BC%D0%B0%D0%BD%D0%B0 ограниченную машину Больцмана(restricted Boltzmann machine, RBM)], которая содержит слой видимых узлов, представляющий данные, и слой скрытых узлов, которые обучаются представлению особенностей, которые захватывают более высокие порядки корреляции в данных. Ограниченные машины Больцмана могут быть сложены и обучены [[Теорема Радо-Эдмондса (жадный алгоритм)|жадным алгоритмом]], чтобы сформировать так называемые Глубокие глубокие сети доверия, которые моделируют совместное распределение между наблюдаемым вектором <math>x</math> и скрытыми слоями <math>h^{k}</math> следующим образом: <center><tex>P(x, h^1, \ldots, h^l)=\left( \prod\limits_{k = 0}^{l - 2}P(h^k|h^{k + 1}) \right) P(h^{l - 1}|h^l)</tex>,</center>,
где $x=h^0$, $P(h^{k-1}|h^{k})$ {{---}} условное распределение для видимых узлов, обусловленных скрытыми узлами RBM на уровне <math>k</math>, и $P(h^{l - 1}|h^l)$ {{---}} это видимое-скрытое совместное распределение в RBM верхнего уровня. Это показано на рисунке 1.
RBM используют вероятностный подход для нейронных сетей, и поэтому их также называют стохастическими нейронными сетями.
Если мы разложим RBM, то становится ясно, что они состоят из трех частей:
# Один входной слой , так называемые "Видимые узлы".# Один скрытый слой . # Один узел Узлы смещения.
В приведенном выше примере видимые узлы {{---}} это не что иное, как то, нравится ли вам книга или нет. Скрытые узлы помогают найти то, что заставило вас одобрить эту книгу. Узлы смещения добавлены, чтобы включить различные виды свойств, разных книг.
Простая визуализация Ограниченной машины Больцмана показана на рисунке 2.
Зеленым отмечены видимые узлы, а красным скрытые, а белые узлы с меткой "bias" соответствуют узлам смещения.
Сети глубокого доверия имеют две фазы:
# Фаза предварительного обучения.# Фаза тонкой настройки.
Фаза предварительного обучения {{---}} это не что иное, как несколько уровней RBN, в то время как фаза тонкой настройки {{---}} это нейронная сеть с прямой связью. Визуализация обеих фаз показана на рисунке 3 ниже
[[Файл:Vis2f.png |600px|thumb| center| Рис. 3 Визуализация фаз RBM]]
Как работают Глубокие Алгоритм обучения глубокой сети доверия?, состоит из нескольких этапов:
# Нахождение признаков видимых узлов, используя алгоритм контрастной дивергенции.
# Нахождение скрытых признаков объектов, найденных в предыдущем шаге.
# Когда фаза обучения скрытого слоя закончена, можно сказать, что Глубокая сеть доверия обучена.
== Реализация ==
self.finetune_cost = self.logLayer.negative_log_likelihood(self.y)
self.errors = self.logLayer.errors(self.y)
Класс также предоставляет метод, который генерирует обучающие функции для каждой из RBM. Они возвращаются в виде списка, где элемент <tex>i</tex> является функцией, которая реализует один этап обучения для RBM на уровне <tex>i</tex>.
def pretraining_functions(self, train_set_x, batch_size, k):
index = T.lscalar('index') # index to a minibatch
Эта сеть состоит из двух этапов: (1) этап предварительного обучения и (2) этап точной настройки.
На этапе предварительного обучения мы перебираем все слои сети. Для каждого уровня мы используем скомпилированную функцию <code>anano</code>, которая определяет вход в RBM <tex>i</tex>-го уровня и выполняет один шаг CD-k в этом RBM. Эта функция применяется к обучающему набору для фиксированного числа эпох, заданных <code>pretraining_epochs</code>.
print('... getting the pretraining functions')
pretraining_fns = dbn.pretraining_functions(train_set_x=train_set_x,
Анонимный участник

Навигация