Deep Learning/2023 DL κΈ°μ΄ μ΄λ‘ 곡λΆ
[λ°λ°λ₯λΆν° μμνλ λ₯λ¬λ 2] chap5(μν μ κ²½λ§ RNN)
μ λ£½
2023. 7. 9. 00:51
728x90
λ°μν
5.1 νλ₯ κ³Ό μΈμ΄ λͺ¨λΈ
1. μΈμ΄λͺ¨λΈ
- λ¨μ΄ λμ΄μ νλ₯ μ λΆμ¬
- νΉμ ν λ¨μ΄μ μνμ€μ λν΄ κ·Έ μνμ€κ° μΌμ΄λ κ°λ₯μ±μ΄ μ΄λ μ λμΈκ°(μΌλ§λ μμ°μ€λ¬μ΄ λ¨μ΄ μμμΈμ§)λ₯Ό νλ₯ λ‘ νκ°νλ κ².ex) you say goodbye ⇒ 0.092 but, you say good die ⇒ 0.0000000032
- μ¬μ© μμ: κΈ°κ³ λ²μ λ° μμ± μΈμμ μ£Όλ‘ μ¬μ©, μλ‘μ΄ λ¬Έμ₯ μμ± μ©λ
- CBOWμ λ¬λ¦¬ μΌμͺ½ μλμ°λ§ λ§₯λ½μΌλ‘ κ³ λ €ν¨.
- μ¦, μΈμ΄λͺ¨λΈμ λ³κ²½λ μμμ²λΌ t-2λ²μ§Έ λ¨μ΄, t-1λ²μ§Έ λ¨μ΄κ° λ°μνμ λ, λ€μ μμλ‘ λμ¬ λ¨μ΄μΈ tλ²μ§Έ λ¨μ΄κ° 무μμΌλ‘ λμ¬μ§ μμΈ‘νλ λͺ¨λΈμ μλ―Έ.
- λ€μ μμμ λμ¬ λ¨μ΄μ μμ°μ€λ¬μμ νλμ νλ₯ μ§νκ°μΌλ‘ μμΈ‘.

- λμ νλ₯ μ΄λ: mκ°μ λ¨μ΄κ° μλ€κ³ κ°μ ν λ, λ¨μ΄κ° m μμλ‘ λ°μν νλ₯ μ P(w1,w2,,,,wm)μΌλ‘ μ μν κ²

- μ¬ν νλ₯ μ μ΄ κ³± = λμ νλ₯ (νΉμ μ¬κ±΄ λ°μ νμ λ€λ₯Έ μ¬κ±΄μ΄ λ°μν νλ₯ ⇒ μ¬ννλ₯ )

- P(wt| w1,w2,,,,,,wt-1) μ μ‘°κ±΄λΆ μΈμ΄ λͺ¨λΈμ΄λΌκ³ ν¨.
- μ§μ 2κ°μλ§ μμ‘΄νλ€κ³ νλ©΄ 2μΈ΅ λ§λ₯΄μ½ν 체μΈμ΄λΌκ³ ν¨( μ§μ Nκ°μλ§ μμ‘΄νλ€κ³ νλ©΄ NμΈ΅ λ§λ₯΄μ½ν 체μΈμ΄λΌκ³ ν¨)
- νμ§λ§ μ΄λ λ¨μ΄μ μμλ₯Ό 무μνκ² λ¨.ex) Tom was watching TV in his room. Mary came into the room. Mary said hi to (?)
- λΌκ³ κ°μ νμ λ λ¬Έλ§₯μ Tomμ΄ λμμΌ ν¨. νμ§λ§ μ§μ λ¨μ΄ 2~10κ°λ§μ κ°μ§κ³ ν κ²½μ°, Tomμ κΈ°μ΅νμ§ λͺ»ν¨.

- λ°λΌμ μ€λ₯Έμͺ½κ³Ό κ°μ΄ λ°μ΄ν°μ inputκ°μ μμλλ‘ λΆμ¬μ€μΌ ν¨.(μ°κ²°)
5.2 (μνμ κ²½λ§) RNNμ΄λ
- μννλ€: λ°λ³΅ν΄μ λλμκ°λ€μ μλ―Έ(λ°μ΄ν°κ° μννλ©΄μ μ λ³΄κ° λμμμ΄ κ°±μ νκ² λ¨⇒ κ³Όκ±°μ μ 보λ₯Ό κΈ°μ΅νλ λμ μ΅μ λ°μ΄ν°λ‘ κ°±μ λ¨.)



- ht: μΆλ ₯κ°
- ht-1: μ μ μΆλ ₯κ°(= μλ μν 벑ν°λΌκ³ νν)
- κ°μ€μΉλ λ κ°κ° νμ
BPTT( Backpropagation Through Time)
5.3 RNN ꡬν

- Tκ° λ¨κ³λΆμ μμ μ νκΊΌλ²μ μ²λ¦¬νλ κ³μΈ΅ : Time RNN κ³μΈ΅

class TimeRNN: """ λ¨μΌ RNN κ³μΈ΅μ΄ Tκ° μλ TimeRNN κ³μΈ΅ ꡬν Args: Wx: μ
λ ₯ λ²‘ν° xμ κ³±ν΄μ§λ νλΌλ―Έν° Wh: μ΄μ RNN κ³μΈ΅μΌλ‘λΆν° νλ¬λ€μ΄μ€λ μλ μν λ²‘ν° hμ κ³±ν΄μ§λ νλΌλ―Έν° b: νΈν₯ νλΌλ―Έν° stateful: μλ μνλ₯Ό μ μ§ν μ§ μ¬λΆ. μ μ§νλ©΄ Truncated BPTT μννλ©΄μ μμ νλ₯Ό λμ§ μκ³ μ λ¬ """ def __init__(self, Wx, Wh, b, stateful=False): self.params = [Wx, Wh, b] self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)] self.layers = [] # μ¬λ¬κ°μ λ¨μΌ RNN κ³μΈ΅μ μ μ₯ν 리μ€νΈ self.h = None # λ€μ μ κ²½λ§ λΈλ‘μ λκΈΈ μ΄μ μ κ²½λ§μ λ§μ§λ§ μλ μν λ²‘ν° self.dh = None # μ΄μ λΈλ‘μ μλ μν κΈ°μΈκΈ° κ°(μ΄λ Truncated BPTTμμλ νμμμ§λ§ seq2seqμμ νμνκΈ° λλ¬Έμ΄λΌκ³ ν¨) self.stateful = stateful # μλ μνλ₯Ό μ€μ νλ ν¨μ def set_state(self, h): self.h = h # μλ μνλ₯Ό μ΄κΈ°ννμ¬ μλ μν μ μ§λ₯Ό λμ΄λ²λ¦¬λ ν¨μ def reset_state(self): self.h = None def forward(self, xs): """ xsλΌλ T κΈΈμ΄μ μκ³μ΄ μ 체 μ
λ ₯ 벑ν°λ₯Ό μμ ν μν Args: xs: T κΈΈμ΄μ μκ³μ΄ μ 체 μ
λ ₯ λ²‘ν° """ Wx, Wh, b = self.params N, T, D = xs.shape # (batch_size, time length, μ
λ ₯λ²‘ν° μ°¨μ μ) D, H = Wx.shape # (μ
λ ₯λ²‘ν° μ°¨μ μ, μλ μν λ²‘ν° μ°¨μ μ) self.layers = [] # TκΈΈμ΄μ RNN κ³μΈ΅ μ 체μ μλ μν 벑ν°λ₯Ό λ΄μ λ°°μ΄ μ΄κΈ°ν hs = np.empty((N, T, H), dtype='f') # μμ ν μ μ§ λμ κ²½μ° if not self.stateful or self.h is None: self.h = np.zeros((N, H), dtype='f') for t in range(T): layer = RNN(*self.params) self.h = layer.forward(xs[:, t, :], self.h) # loop λ€ λκ³ λ§μ§λ§μ self.hμλ ν΄λΉ λΈλ‘μ μ΅μ’
μλ μν λ²‘ν° λ€μ΄μμ hs[:, t, :] = self.h self.layers.append(layer) return hs def backward(self, dhs): """ TκΈΈμ΄μ μκ³μ΄ μ 체λ₯Ό ν λ²μ μμ ν μν Args: dhs: TκΈΈμ΄ μκ³μ΄ λ΄μ λͺ¨λ μλ μν 벑ν°μ κΈ°μΈκΈ° """ Wx, Wh, b = self.params N, T, H = dhs.shape D, H = Wx.shape dxs = np.empty((N, T, D), dtype='f') # TκΈΈμ΄ μκ³μ΄ λ΄μ λͺ¨λ μ
λ ₯ 벑ν°μ κΈ°μΈκΈ° dh = 0 grads = [0, 0, 0] # νλμ RNN κ³μΈ΅μμμ Wx, Wh, b νλΌλ―Έν°μ κΈ°μΈκΈ° λ΄μ 리μ€νΈ for t in reversed(range(T)): layer = self.layers[t] # κ° RNN κ³μΈ΅ λΉ, μμ ν μ μλμν h 벑ν°κ° λ κ°λλ‘ λΆκΈ°λμμΌλ―λ‘ μμ ν μμλ κΈ°μΈκΈ°λ₯Ό sum! dx, dh = layer.backward(dhs[:, t, :] + dh) dxs[:, t, :] = dx # νλμ RNN κ³μΈ΅μμμ Wx, Wh, b νλΌλ―Έν°μ κΈ°μΈκΈ° λ΄κΈ° for i, grad in enumerate(layer.grads): grads[i] += grad # TκΈΈμ΄ μκ³μ΄ μ 체μ RNN κ³μΈ΅μ κ±Έμ³μ λ§λ€μ΄μ§ Wx, Wh, b νλΌλ―Έν°μ κΈ°μΈκΈ° λ΄κΈ° for i, grad in enumerate(grads): self.grads[i][...] = grad self.dh = dh # μμ ν λ°©ν₯μΌλ‘ νμ λ, λ§μ§λ§ μλ μν 벑ν°μ κΈ°μΈκΈ° κ° μ μ₯ for seq2seq return dxs
- stateful= True μ§μ λ ν λ°ν΄(Time step)κ° μ’ λ£λ μ΄νμλ μνλ₯Ό μ΄κΈ°ν νμ§ μκ³ , λ€μ λ°ν΄μ μ΄κΈ° μνλ‘ μ¬μ©νλ€.
- μλμνλ₯Ό μ μ§νλ κ² ( μ΄μ μκ°μ μλ μνλ₯Ό μ μ§ν μ§ λ§μ§ μ§μ )


5.5 RNNLM νμ΅κ³Ό νκ°
νκ° μ²λ( νΌνλ μν°- νΌλλ)
- νλ₯ μ μμλ₯Ό μλ―Έ

ex) 1λ²μ§Έλ sayλΌλ λ¨μ΄κ° 0.8λ‘ λ±μ₯, 2λ²μ§Έ λͺ¨λΈμ κ²½μ°, sayκ° 0.2μ νλ₯ λ‘ μμΈ‘ ⇒ μμλ₯Ό μ·¨ν κ²½μ°, 1.25 / 5 λ‘ κ°κ° λμ€κ² λ¨
- 1.25 λΌλ κ°μ λΆκΈ° μλ‘ ν΄μν μ μμ
- λΆκΈ°μ: λ€μμ μΆνν μ μλ λ¨μ΄μ ν보 μ)ex) λΆκΈ°μκ° 1.25 λΌλ κ²μ λ€μμ μΆνν μ μλ λ¨μ΄μ νλ³΄κ° 1κ° μ λλ‘ μ’νμ‘λ€λ λ»μ μλ―Έ. 5μΈ κ²½μ°, λ€μμ μΆνν μ μλ λ¨μ΄ νλ³΄κ° 5κ°λ λλ€.
- μ¦, μμμλ‘ μ’μ κ°.

728x90
λ°μν