Неоднозначность в повторном обучении нейронной сети в Julia Flux

Я использую библиотеку Julia Flux, чтобы узнать о нейронных сетях. Согласно документации для (где принимает аргументы (loss, params, data, opt)):

Для каждой точки данных d в данных вычислите градиент потерь относительно параметров через обратное распространение и вызовите оптимизатор opt.

(см. источник: https://github.com/FluxML/Flux.jl/blob/master/src/optimise/train.jl)

Для обычной NN, основанной, скажем, с одномерным вводом и выводом, то есть с одной функцией, это легко понять. Каждый элемент в dataпредставляет собой пару отдельных чисел, независимую выборку одномерных значений ввода / вывода. выполняет прямое и обратное распространение для каждой пары одномерных выборок по одному. При этом функция оценивается на каждой выборке. (Имею ли я это право?)

Мой вопрос: как это распространяется на повторяющуюся NN? Возьмем случай RNN с 1-мерным (то есть с одной функцией) входом и выходом. Кажется, есть некоторая двусмысленность в том, как структурировать входные и выходные данные, и результаты меняются в зависимости от структуры. В качестве одного примера:

      x = [[1], [2], [3]]
y = [4, 5, 6]
data = zip(x, y)
m = RNN(1, 1)
opt = Descent()
loss(x, y) = sum((Flux.stack(m.(x), 1) .- y) .^ 2)
train!(loss, params(m), data, opt)

(функция взята из: https://github.com/FluxML/Flux.jl/blob/master/docs/src/models/recurrence.md)

В этом примере при просмотре каждого образца ( for d in data), каждое значение представляет собой пару отдельных значений из и, например ([1], 4). оценивается на основе этих отдельных значений. Это то же самое, что и в Dense дело.

С другой стороны, рассмотрите:

      x = [[[1], [2], [3]]]
y = [[4, 5, 6]]
m = RNN(1, 1)
opt = Descent()
loss(x, y) = sum((Flux.stack(m.(x), 1) .- y) .^ 2)
train!(loss, params(m), zip(x, y), opt)

Обратите внимание, что единственная разница здесь в том, что x и yзаключены в дополнительную пару квадратных скобок. В результате получается всего одна, и это пара последовательностей: ([[1], [2], [3]], [4, 5, 6]). можно оценить на этой версии d, и он возвращает одномерное значение, необходимое для обучения. Но значение, возвращаемое функцией, отличается от любого из трех результатов из предыдущего случая, поэтому процесс обучения оказывается другим.

Дело в том, что обе структуры действительны в том смысле, что loss и train!обрабатывать их без ошибок. Концептуально я могу аргументировать правильность обеих структур. Но результаты разные, и я предполагаю, что верен только один способ. Другими словами, для обучения RNN каждый должен d in data быть целой последовательностью или отдельным элементом последовательности?

0 ответов

Другие вопросы по тегам