Размер пакета относится к количеству обучающих выборок, которые следует учитывать одновременно для обновления весов вашей сети. Итак, в сети с прямой связью, допустим, вы хотите обновить веса вашей сети на основе вычисления градиентов по одному слову за раз, ваш batch_size = 1. Поскольку градиенты вычисляются из одного образца, это очень дешево в вычислительном отношении. С другой стороны, это тоже очень беспорядочная тренировка.
Чтобы понять, что происходит во время обучения такой сети прямого распространения, я отсылаю вас к этому очень хороший наглядный пример обучения single_batch по сравнению с mini_batch и single_sample.
Однако вы хотите понять, что происходит с вашей переменной num_steps. Это не то же самое, что ваш batch_size. Как вы могли заметить, до сих пор я говорил о сетях прямого распространения. В сети с прямой связью выход определяется из входных данных сети, а отношение вход-выход отображается с помощью изученных сетевых отношений:
hidden_activations (t) = f (ввод (t))
output (t) = g (hidden_activations (t)) = g (f (input (t)))
После обучающего прохода размером batch_size вычисляется градиент вашей функции потерь по каждому из параметров сети, и ваши веса обновляются.
Однако в рекуррентной нейронной сети (RNN) ваша сеть работает немного иначе:
hidden_activations (t) = f (input (t), hidden_activations (t-1))
output (t) = g (hidden_activations (t)) = g (f (input (t), hidden_activations (t-1)))
= g (f (ввод (t), f (ввод (t-1), hidden_activations (t-2)))) = g (f (inp (t), f (inp (t-1), ..., f (inp (t = 0), hidden_initial_state))))
Как вы, возможно, догадались из смысла именования, сеть сохраняет память о своем предыдущем состоянии, и активация нейронов теперь также зависит от предыдущего состояния сети и, соответственно, от всех состояний, в которых когда-либо находилась сеть. Большинство RNN используйте фактор забывчивости, чтобы придать большее значение более поздним состояниям сети, но это не является предметом вашего вопроса.
Затем, как вы можете предположить, вычисление градиентов функции потерь относительно сетевых параметров является очень и очень затратным с точки зрения вычислений, если вам нужно учитывать обратное распространение через все состояния с момента создания вашей сети, есть небольшая хитрость, чтобы ускорить вычисления: аппроксимировать градиенты с помощью подмножества исторических состояний сети num_steps.
Если это концептуальное обсуждение не было достаточно ясным, вы также можете взглянуть на более математическое описание вышеперечисленного.
person
Uvar
schedule
15.06.2017