Как протекает процесс обучения в нейронной сети в зависимости от размера партии и эпох? - PullRequest
0 голосов
/ 18 мая 2018

Я запутался с событиями в нейронной сети в отношении таких терминов, как размер партии, эпохи и распределение весов между процессами.

Я хочу проверить, если мое пониманиепотока действителен в следующем порядке:

Considering one training/data point has 8 features(8 input nodes).
I have 20 training/data points.
I choose batch size of 2.
Now I want to make the model learn.

Выполнение первой эпохи

Executing first batch

    Data point-1 :8 feature's values go through the 8 input nodes.
        Random weights are initialised
        Forward Propagation happens
        Backward Propagation happens
        The result of backward propagation-all the weights are updated.

    Data point-2 :8 feature's values go through the 8 input nodes.
        Forward propagation happens with the updated weights found from the previous(aka Data point-1) back propagation result.
        Backward propagation happens and all the weights are again updated.

Executing second batch

    Data point-3 :8 features go through the 8 input nodes.
        Forward propagation happens with the updated nodes found from the previous(aka  Data point-2) back propagation result
        Backward propagation happens and all the weights are again updated.

This process continues………….until the first epoch ends

Выполнение второй эпохи

Executing the second batch
    Data point-1: 8 feature's value go through 8 input nodes.
        No random weights this time. Forward propagation happens with the last back-propagated values found(from the First Epoch, last executed batch)
        Backward propagation happens and all the weights are again updated.

This process continues.. until the second epoch ends.

Процесс продолжается до тех пор, покажелаемая эпоха.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

У вас есть почти все правильно, но обновление веса обратного распространения.Ошибка вычисляется для каждого образца в мини-партии, но веса обновляются только после того, как все образцы из мини-партии прошли прямое распространение.Вы можете прочитать больше об этом здесь

0 голосов
/ 18 мая 2018

Неправильная обработка mini-batch: для пакета мы вычисляем градиенты всего пакета одновременно, затем суммируем все градиенты и затем обновляем весовые коэффициенты один раз для пакета.

Вот кодкоторый иллюстрирует вычисление градиента d(loss)/d(W) в простом примере: y = W * x для ввода mini-batch и single:

X = tf.placeholder(tf.float32, [None, 1])
Y = tf.placeholder(tf.float32, [None, 1])

W1 = tf.constant([[0.2]], dtype=tf.float32)
out = tf.matmul(X, W1)

loss = tf.square(out-Y)
#Calculate error gradient with respect to weights.
gradients = tf.gradients(loss, W1)[0]

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

#Giving individual inputs
print(sess.run([gradients], {X: np.array([[0.1]]), Y:[[0.05]]})) 
# [[-0.006]]
print(sess.run([gradients], {X: np.array([[0.2]]), Y:[[0.1]]}))  
#[[-0.024]]

#Give a batch combining the above inputs
print(sess.run([gradients], {X: np.array([[0.1],[0.2]]), Y:[[0.05], [0.1]]}))   
# [[-0.03]] which is the sum of the above gradients.
0 голосов
/ 18 мая 2018

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

Для сценария с минимальной партией, такого как размер партии = 2, он должен рассчитать новые веса (через backprop.) Вместе, а затем использовать их в следующей партии (размера 2) и продолжить до кульминации всех партий. Другие вещи, которые вы упоминаете, верны.

...