rnn_layer
Last updated
Was this helpful?
Last updated
Was this helpful?
RNN (Recurrent Neural Network) Layerλ μν μ κ²½λ§ λͺ¨λΈ μ€ νλλ‘, μ λ ₯ λ°μ΄ν°μ μμμ μν μ 보λ₯Ό λͺ¨λΈλ§νλ λ°μ μ ν©ν λͺ¨λΈμ λλ€. RNNμ μ΄μ μ κ³μ°λ κ°μ λ€μ νμ¬ κ³μ°μ νμ©νκΈ° λλ¬Έμ μ΄μ μ μ λ ₯μ λν μ 보λ₯Ό κΈ°μ΅νκ³ μ΄λ₯Ό λ€μ κ³μ°μ νμ©ν©λλ€. μ΄μ μ λ ₯μ λν μ 보λ₯Ό νμ¬ κ³μ°μ νμ©νκΈ° λλ¬Έμ μκ³μ΄ λ°μ΄ν°μ κ°μ΄ μ λ ₯ κ°μ μμκ° μ€μν λ°μ΄ν°λ₯Ό λ€λ£° λ λ§€μ° μ μ©ν©λλ€.
RNN Layerλ μκ° μΆμΌλ‘ νΌμ³μ§ ννμ λ€νΈμν¬ κ΅¬μ‘°λ₯Ό κ°μ§λ©°, μκ° tμμμ μ λ ₯ λ°μ΄ν°λ₯Ό λ°μ μΆλ ₯ λ°μ΄ν°λ₯Ό κ³μ°νλ λμμ λ°λ³΅μ μΌλ‘ μνν©λλ€. RNN Layerμ κ° λ΄λ°μ νμ¬ μ λ ₯ λ°μ΄ν°μ μ΄μ μμ μ μΆλ ₯κ°μ μ λ ₯μΌλ‘ λ°μ νμ¬ μμ μ μΆλ ₯κ°μ κ³μ°ν©λλ€. μ΄λ₯Ό μμμΌλ‘ λνλ΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
μ¬κΈ°μ λ μκ° tμμμ μ λ ₯ 벑ν°, λ μκ° tμμμ μΆλ ₯ 벑ν°, λ μ λ ₯ κ°μ€μΉ νλ ¬, λ μ΄μ μμ μ μΆλ ₯κ°κ³Ό νμ¬ μ λ ₯κ°μ μ°κ²°ν κ°μ€μΉ νλ ¬, λ νΈν₯ 벑ν°, λ νμ±ν ν¨μμ λλ€.
RNN Layerλ λ€μν μ’ λ₯κ° μμΌλ©°, λνμ μΌλ‘ Simple RNN, LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit) λ±μ΄ μμ΅λλ€. μ΄λ€μ κ°κ° μ λ ₯κ³Ό μΆλ ₯ μ¬μ΄μ μ 보 νλ¦μ λ€λ₯΄κ² μ‘°μ νμ¬, λ€μν μκ³μ΄ λ°μ΄ν°μ λν λͺ¨λΈλ§μ κ°λ₯νκ² ν©λλ€.
ν¨μ μ΄λ¦: increment_layer
μ λ ₯:
layer *l
int steps
λμ:
RNN λ μ΄μ΄μμ timestep λ¨μλ‘ μ λ ₯ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ, μ΄μ timestepμμ μΆλ ₯ν κ²°κ³Όκ°μ νμ¬ timestepμμ μ λ ₯μΌλ‘ μ¬μ©νκΈ° μν΄, νμ¬ timestepμ ν΄λΉνλ λ μ΄μ΄ ν¬μΈν°(l)κ° κ°λ¦¬ν€λ λ°μ΄ν° ν¬μΈν°(output, delta, x, x_norm)λ₯Ό steps(νμ¬ timestepκ³Ό μ΄μ timestep κ°μ μ°¨μ΄)λ§νΌ μ¦κ°μμΌμ£Όλ ν¨μμ΄λ€.
μ€λͺ :
RNN λ μ΄μ΄λ μνμ€ ννμ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ, μ΄μ timestepμμ μΆλ ₯ν κ²°κ³Όκ°μ νμ¬ timestepμμ λ€μ μ λ ₯μΌλ‘ μ¬μ©νλ€.
μ΄ λ, νμ¬ timestepμ λ μ΄μ΄ ν¬μΈν°κ° μ΄μ timestepμμμ λ μ΄μ΄ ν¬μΈν°μ κ°λ¦¬ν€λ λ°μ΄ν°μ μμΉκ° λ¬λΌμ§κΈ° λλ¬Έμ, νμ¬ timestepμμμ λ°μ΄ν° ν¬μΈν°λ₯Ό μ΄μ timestepμμμ λ°μ΄ν° ν¬μΈν°μμ μ μ ν μ΄λμμΌμ£Όμ΄μΌ νλ€.
μ΄ ν¨μλ μ΄λ₯Ό μννλ μν μ νλ€. μ λ ₯μΌλ‘ νμ¬ timestepμ λ μ΄μ΄ ν¬μΈν°(l)μ μ΄μ timestepκ³Όμ μ°¨μ΄(steps)λ₯Ό λ°μμ, lμ΄ κ°λ¦¬ν€λ λ°μ΄ν° ν¬μΈν°(output, delta, x, x_norm)λ₯Ό stepsλ§νΌ μ¦κ°μμΌμ€λ€.
μ΄ λ, λ°μ΄ν° ν¬μΈν°μ μ¦κ°λμ timestep κ°μ μ°¨μ΄μ λ°μ΄ν°μ ν¬κΈ°(output, delta, x, x_norm)μ λ°°μΉ ν¬κΈ°(batch)λ₯Ό κ³±ν κ°μ΄λ€.
ν¨μ μ΄λ¦: forward_rnn_layer
μ λ ₯:
layer l (νμ¬ RNN λ μ΄μ΄)
network net (λ€νΈμν¬)
λμ:
νμ¬ RNN λ μ΄μ΄λ₯Ό ν¬μλ ν¨μ€νλ ν¨μλ‘, RNN λ μ΄μ΄μ μ λ ₯, μλ μν, μΆλ ₯μ κ³μ°ν©λλ€.
μ λ ₯, μλ μν, μΆλ ₯ κ³μ°μ μν΄ connected λ μ΄μ΄κ° μ¬μ©λ©λλ€.
RNN λ μ΄μ΄μ μ λ ₯μ νμ¬ λ μ΄μ΄ μ΄μ μ μΆλ ₯κ³Ό νμ¬ μμ μ μ λ ₯μ λν κ°μ λλ€.
μ΄μ μ μΆλ ₯μ λν΄μ£Όλ μ΄μ λ RNNμ΄ μ΄μ μ μ 보λ₯Ό κΈ°μ΅νκΈ° μν΄μμ λλ€.
λν, νμ¬ μμ μ μ λ ₯κ³Ό μλ μνλ₯Ό λν΄μ£Όλ μ΄μ λ νμ¬ μ λ ₯κ³Ό μ΄μ μνκ° λ€μ μνμ μΆλ ₯μ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ λλ€.
λ μ΄μ΄μ μ λ ₯, μΆλ ₯, μλ μν, λΈν κ°μ΄ μ λ°μ΄νΈλ©λλ€.
μ€λͺ :
μ΄ ν¨μλ RNN λ μ΄μ΄λ₯Ό ν¬μλ ν¨μ€νλ ν¨μλ‘, μ΄μ λ μ΄μ΄μμ μΆλ ₯λ κ°μ νμ¬ λ μ΄μ΄μ μ λ ₯μΌλ‘ μ¬μ©ν©λλ€.
μ΄μ λ μ΄μ΄μμ μΆλ ₯λ κ°κ³Ό νμ¬ μ λ ₯ κ°μ λν κ°μ RNN λ μ΄μ΄μ μ λ ₯μΌλ‘ μ¬μ©νλ©°, μλ μνλ₯Ό μ λ°μ΄νΈνκ³ μΆλ ₯μ κ³μ°ν©λλ€.
μ΄μ μνμ νμ¬ μ λ ₯μ΄ λ€μ μνμ μν₯μ λ―ΈμΉλ―λ‘, μ΄μ μνμ νμ¬ μ λ ₯μ λν΄μ£Όλ κ²μ λλ€.
μ΄ ν¨μλ λ€νΈμν¬λ₯Ό νμ΅ μ€μΈμ§ μλμ§μ λ°λΌ λ€νΈμν¬ μνλ₯Ό λ³κ²½ν©λλ€.
λν, RNN λ μ΄μ΄λ μ°μλ μ€ν μ κ³μ°ν΄μΌ νλ―λ‘, μ λ ₯, μλ μν, μΆλ ₯ λ μ΄μ΄λ₯Ό μ€ν μλ§νΌ λ°λ³΅μ μΌλ‘ κ³μ°ν©λλ€.
ν¨μ μ΄λ¦: backward_rnn_layer
μ λ ₯:
layer l: μμ νλ₯Ό μνν RNN λ μ΄μ΄
network net: RNN λ μ΄μ΄λ₯Ό ν¬ν¨νλ μ κ²½λ§
λμ:
RNN λ μ΄μ΄μ μμ ν(backpropagation)λ₯Ό μννλ€. RNN λ μ΄μ΄λ μκ° μ€ν (time step)μ΄ μκΈ° λλ¬Έμ, μμ νλ μκ°μ λ°λ λ°©ν₯μΌλ‘(step-by-step) μνλλ€.
μ€λͺ :
λ¨Όμ , μ λ ₯ λ μ΄μ΄(input_layer), μκΈ° λ°λ³΅ λ μ΄μ΄(self_layer), μΆλ ₯ λ μ΄μ΄(output_layer)λ₯Ό κ°μ Έμ¨λ€.
κ° λ μ΄μ΄μ μΆλ ₯(delta)μ 0μΌλ‘ μ΄κΈ°ννλ€.
RNN λ μ΄μ΄κ° νμ΅ λͺ¨λ(train mode)μΌ κ²½μ°, μν(state)λ₯Ό 0μΌλ‘ μ΄κΈ°ννλ€.
λͺ¨λ μκ° μ€ν μ λν΄ λ°λ³΅νλ©°, λ€μμ μννλ€:
input_layerμ νμ¬ μ λ ₯(net.input)μ λ£κ³ , forward_connected_layer()λ₯Ό νΈμΆνμ¬ input_layerμ μΆλ ₯(output)μ κ³μ°νλ€.
self_layerμ μ΄μ μκ° μ€ν μ μν(l.state)λ₯Ό λ£κ³ , forward_connected_layer()λ₯Ό νΈμΆνμ¬ self_layerμ μΆλ ₯(output)μ κ³μ°νλ€.
RNN λ μ΄μ΄μ νμ¬ μνλ₯Ό κ³μ°νλ€. μ΄μ μν(old_state)λ₯Ό μ μ§ν ν, input_layerμ self_layerμ μΆλ ₯μ λν κ°μ νμ¬ μν(l.state)λ‘ κ°±μ νλ€.
output_layerμ νμ¬ μν(l.state)λ₯Ό λ£κ³ , forward_connected_layer()λ₯Ό νΈμΆνμ¬ μΆλ ₯(output)μ κ³μ°νλ€.
input_layer, self_layer, output_layerμ μΆλ ₯(delta)λ₯Ό κ³μ°νλ€.
net.inputμ λ€μ μκ° μ€ν μ μ λ ₯μΌλ‘ μ΄λνλ€.
input_layer, self_layer, output_layerλ₯Ό ν μκ° μ€ν μμΌλ‘ μ΄λμν¨λ€.
λͺ¨λ μκ° μ€ν μ λν΄ μμ νλ₯Ό μννλ©°, λ€μμ μννλ€:
output_layerμ μμ ν(delta)λ₯Ό κ³μ°νλ€.
self_layerμ μμ ν(delta)λ₯Ό κ³μ°νλ€.
input_layerμ μμ ν(delta)λ₯Ό κ³μ°νλ€.
input_layer, self_layer, output_layerλ₯Ό ν μκ° μ€ν λ€λ‘ μ΄λμν¨λ€.
ν¨μ μ΄λ¦: update_rnn_layer
μ λ ₯:
layer l (RNN λ μ΄μ΄)
update_args a (κ°μ€μΉ μ λ°μ΄νΈμ νμν μΈμλ€)
λμ:
RNN λ μ΄μ΄μ μ λ ₯ λ μ΄μ΄, μκΈ° μν λ μ΄μ΄, μΆλ ₯ λ μ΄μ΄ κ°κ°μ λν΄ update_connected_layer ν¨μλ₯Ό νΈμΆνμ¬ κ°μ€μΉλ₯Ό μ λ°μ΄νΈν¨.
μ€λͺ :
μ΄ ν¨μλ RNN λ μ΄μ΄μ κ°μ€μΉλ₯Ό μ λ°μ΄νΈνκΈ° μν΄ νΈμΆλ©λλ€.
RNNμ μ λ ₯ μνμ€λ₯Ό μ²λ¦¬ν λ, μνμ€ λ΄ μ΄μ μμ μμμ μκΈ° μνλ₯Ό μ¬μ©νλ―λ‘, μ λ ₯ λ μ΄μ΄, μκΈ° μν λ μ΄μ΄, μΆλ ₯ λ μ΄μ΄ κ°κ°μ λν΄ κ°μ€μΉλ₯Ό μ λ°μ΄νΈν΄μΌ ν©λλ€.
μ΄λ₯Ό μν΄ μ λ ₯ λ μ΄μ΄, μκΈ° μν λ μ΄μ΄, μΆλ ₯ λ μ΄μ΄μ λν΄ update_connected_layer ν¨μλ₯Ό νΈμΆν©λλ€.
ν¨μ μ΄λ¦: make_rnn_layer
μ λ ₯:
batch: intν, λ°°μΉ ν¬κΈ°
inputs: intν, μ λ ₯ λ°μ΄ν°μ μ°¨μ μ
outputs: intν, μΆλ ₯ λ°μ΄ν°μ μ°¨μ μ
steps: intν, μννλ λ¨κ³ μ
activation: ACTIVATION μ΄κ±°ν, νμ±ν ν¨μ
batch_normalize: intν, λ°°μΉ μ κ·ν μ¬μ© μ¬λΆ (1: μ¬μ©, 0: λ―Έμ¬μ©)
adam: intν, Adam μκ³ λ¦¬μ¦ μ¬μ© μ¬λΆ (1: μ¬μ©, 0: λ―Έμ¬μ©)
λμ:
μ λ ₯κ°μ λ°νμΌλ‘ RNN λ μ΄μ΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ€.
μ λ ₯κ°μΌλ‘λΆν° μ°κ²°λ λ μ΄μ΄λ€μ μμ±νκ³ μ΄κΈ°ννλ€.
μμ±λ λ μ΄μ΄λ€ κ°μ μνΈ μ°κ²°μ μ€μ νλ€.
μμ±λ RNN λ μ΄μ΄λ₯Ό λ°ννλ€.
μ€λͺ :
μ λ ₯κ°μΌλ‘λΆν° RNN λ μ΄μ΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ ν¨μμ΄λ€.
RNN λ μ΄μ΄λ μ λ ₯ λ°μ΄ν°λ₯Ό λ°μμ μν μ κ²½λ§ μ°μ°μ μννλ€.
μ΄ ν¨μλ μ λ ₯κ°μ λ°νμΌλ‘ μ°κ²°λ μ λ ₯ λ μ΄μ΄, μκΈ° μ°κ²° λ μ΄μ΄, μΆλ ₯ λ μ΄μ΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ€.
μ΄ ν¨μλ μμ±λ λ μ΄μ΄λ€ κ°μ μνΈ μ°κ²°μ μ€μ νλ€.
μ΄ ν¨μλ μμ±λ RNN λ μ΄μ΄λ₯Ό λ°ννλ€.