Почему градиенты добавляются, а не усредняются при обратном распространении по времени? - PullRequest
1 голос
/ 21 марта 2019

В следующей реализации обратного прохода RNN градиенты для Wh, Wx и b рассчитываются путем сложения вычисленных градиентов на каждом временном шаге.Интуитивно понятно, что это делает и почему они не будут усреднены?

def rnn_backward(dh, cache):
    """
    Compute the backward pass for a vanilla RNN over an entire sequence of data.
    Inputs:
    - dh: Upstream gradients of all hidden states, of shape (N, T, H)
    Returns a tuple of:
    - dx: Gradient of inputs, of shape (N, T, D)
    - dh0: Gradient of initial hidden state, of shape (N, H)
    - dWx: Gradient of input-to-hidden weights, of shape (D, H)
    - dWh: Gradient of hidden-to-hidden weights, of shape (H, H)
    - db: Gradient of biases, of shape (H,)
    """

    Wx, Wh, b, x, prev_h, next_h = cache[0]
    N, T, H = dh.shape
    D, H = Wx.shape

    # Initialise gradients.
    dx = np.zeros([N, T, D])
    dWx = np.zeros_like(Wx)
    dWh = np.zeros_like(Wh)
    db = np.zeros_like(b)
    dprev_h = np.zeros_like(prev_h)

    # Backprop in time - start at last calculated time step and work back.
    for t_step in reversed(range(T)):

        # Add the current timestep upstream gradient to previous calculated dh
        cur_dh = dprev_h + dh[:,t_step,:]

        # Calculate gradients at this time step.
        dx[:, t_step, :], dprev_h, dWx_temp, dWh_temp, db_temp = rnn_step_backward(cur_dh, cache[t_step])

        # Add gradient contributions from each time step.
        dWx += dWx_temp
        dWh += dWh_temp
        db += db_temp

    # dh0 is the last hidden state gradient calculated.
    dh0 = dprev_h
return dx, dh0, dWx, dWh, db

1 Ответ

0 голосов
/ 20 апреля 2019

На каждом временном шаге у вас есть набор градиентов таким же образом, как в нейронной сети MLP есть набор градиентов для каждого примера обучения.Нет смысла усреднять градиенты для нейронной сети MLP по каждому учебному примеру.Таким же образом градиенты не усредняются по каждому временному шагу.Думайте о каждом временном шаге как об отдельном учебном примере для RNN.

...