λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
1️⃣ AI•DS/πŸ“’ Deep learning

[인곡지λŠ₯] RNN

by isdawell 2022. 6. 7.
728x90

πŸ“Œ ꡐ내 '인곡지λŠ₯' μˆ˜μ—…μ„ 톡해 κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€. 

 

 

Intro 


✨ sequential data, temporal data 와 같이 데이터가 μ‹œκ°„μƒμ— μˆœμ„œκ°€ μžˆλŠ” 경우 RNN 은 쒋은 μ„±λŠ₯을 λ°œνœ˜ν•œλ‹€.

 

β—Ύ language : μ‹œκ°„ μƒμ—μ„œ 단어듀이 λ°°μ—΄λœλ‹€ (speech, text) 

β—Ύ video : 이미지가 μ‹œκ°„ μƒμ—μ„œ sequential ν•˜κ²Œ μ‘΄μž¬ν•œλ‹€. 

 

✨ spatial data → 이미지 data λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° CNN λͺ¨λΈμ΄ 쒋은 μ„±λŠ₯을 λ°œνœ˜ν•œλ‹€. 2D, 3D conv μžμ²΄κ°€ μ£Όλ³€μ˜ 곡간상에 μžˆλŠ” ν”½μ…€λ“€μ˜ 정보λ₯Ό κ°€μ Έμ˜€λŠ” 것이기 λ•Œλ¬Έμ΄λ‹€. 

 

✨ λ‹¨μΌν•œ RNN, LSTM λͺ¨λΈλͺ¨λ‹¨ Attention 을 μ‚¬μš©ν•œ RNN, LSTM λͺ¨λΈμ΄ μ‚¬μš©λ˜κ³  μžˆλ‹€. 

 

 

 

 

1️⃣  RNN 


 

β‘   Neural Networks That process Sequence 

 

(1)  Conceptual view 

 

 

 

β—Ό One-to-One : 기본적인 NN 의 ꡬ쑰둜 CNN 이 μ΄λŸ¬ν•œ ν˜•νƒœλ₯Ό 띄고 μžˆλ‹€. 이와 같은 ν˜•νƒœλŠ” sequential ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ” 방법이 μ „ν˜€ μ—†λ‹€. 

 

β—Ό sequence λ₯Ό μ²˜λ¦¬ν•  수 μž‡λŠ” NN 을 μ„€κ³„ν•˜κ³  input κ³Ό output 을 μ–΄λ–»κ²Œ λΆ™μ—¬μ£ΌλŠλƒμ— 따라 νŠΉμ • application 을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•œλ‹€. 

 

β—Ό Example 

 

  • image captioning : μš΄μ „ν•˜κ³  μžˆλŠ” μ‚¬λžŒμ˜ λͺ¨μŠ΅μ΄ λ‹΄κΈ΄ μ΄λ―Έμ§€λ‘œλΆ€ν„° 'A person drives a car' μ΄λΌλŠ” λ¬Έμž₯을 λ„μΆœν•œλ‹€. One-to-many
  • action prediction : μžμœ¨μ£Όν–‰ μ‹œ 이전 μš΄μ „ 기둝을 λ°”νƒ•μœΌλ‘œ ν•Έλ“€μ˜ λ°©ν–₯을 μ˜ˆμΈ‘ν•œλ‹€. Many-to-one
  • video captioning : frame λ‹¨μœ„λ‘œ λΉ„λ””μ˜€λ₯Ό 읽은 λ‹€μŒ λ§₯락을 보고 λΉ„λ””μ˜€ λ‚΄μš©μ„ λ¬Έμ„œν™”ν•œλ‹€. Many-to-Many

 

 

(2)  Example 

 

β—Ό One-to-Many : image captioning 

 

β—Ό Many-to-Many : video captioning 

 

 

 

β—Ό OpenAI : GPT-3 

 

  • GPT-3 λŠ” sequential NN 쀑 ν•˜λ‚˜λ‘œ, 챗봇에 많이 ν™œμš©λœλ‹€. 슀슀둜 ν”„λ‘œκ·Έλž˜λ° ν•΄μ£ΌλŠ” 인곡지λŠ₯ 섀계에도 μ‚¬μš©λœλ‹€. 
  • ν˜„μž¬κΉŒμ§€ μ„€κ³„λœ 신경망 쀑 크기가 κ°€μž₯ 크닀.  3000μ–΅ 개의 데이터 μ…‹μœΌλ‘œ ν•™μŠ΅μ„ ν•˜μ˜€μœΌλ©° 1750개의 λ§€κ°œλ³€μˆ˜λ₯Ό 가지고 μžˆλ‹€. 
  • GPT-3 λŠ” 2021λ…„ μ΄ˆκΉŒμ§€ λ°œν‘œλœ μ–Έμ–΄λͺ¨λΈ 쀑 κ°€λ‚­ μ„±λŠ₯이 λ›°μ–΄λ‚œ λͺ¨λΈμ΄λ‹€.
  • ν•œκ΅­μ–΄ νŒ¨μΉ˜κ°€ 잘 λ˜μ–΄μžˆκ³ , 이미 μΆ©λΆ„ν•œ ν•™μŠ΅μ„ μˆ˜ν–‰ν•œ λͺ¨λΈμ΄κΈ° λ•Œλ¬Έμ— 좔가적인 κ³Όμ • 없이 input 을 λ„£κΈ°λ§Œ ν•˜λ©΄ λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. 

 

 

 

πŸ‘€ 인곡지λŠ₯(AI) μžμ—°μ–΄ 처리(NLP)μ—μ„œ κ°€μž₯ ν™”μ œκ°€ 되고 μžˆλŠ” ν”Œλž«νΌμœΌλ‘œλŠ” κ΅¬κΈ€μ˜ μ–‘λ°©ν–₯ μ–Έμ–΄λͺ¨λΈ λ²„νŠΈ(Bert), OpenAI의 단방ν–₯ μ–Έμ–΄λͺ¨λΈ GPT-2, 기계신경망 λ²ˆμ—­(Transformer) λͺ¨λΈ 등을 꼽을 수 μžˆλ‹€. 

 

πŸ‘€ μ½”λž© μ‚¬μš©λ²•, ν•œκ΅­μ–΄ 적용 예제 : https://gimkuku0708.tistory.com/12 , https://github.com/gimkuku/GPT3-colab/blob/main/%EC%8B%9C%EC%A1%B0%EC%B0%BD%EC%9E%91.ipynb 

 

πŸ‘€ GPT3 ν™œμš© 사둀 : https://uipath.tistory.com/44 

 

 

β‘‘ RNN 

 

(1)  Idea

 

  • RNN 은 sequential data λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ 기본적인 신경망이닀. 
  • RNN 은 ν˜„μž¬λŠ” 많이 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ‚˜, 쑰상격에 ν•΄λ‹Ήν•˜λŠ” λͺ¨λΈμ΄κΈ° λ•Œλ¬Έμ— λ°°μ›Œλ‘μ–΄μ•Ό ν•œλ‹€ ⭐
  • internal state (memory) = hidden state λ₯Ό 가지고 μžˆμ–΄μ„œ λ‹€μ–‘ν•œ 길이의 input sequence λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ” 신경망이닀. 

 

 

(2) Unrolled Recurrent NN 

 

  • 보톡 RNN 은 μ‹œκ°„μƒμœΌλ‘œ ν’€μ–΄μ„œ recurrent ꡬ쑰λ₯Ό ν‘œν˜„ν•œλ‹€. 

 

 

(3) Simple RNN 

 

  • κ°„λ‹¨ν•œ RNN 은 vanilla RNN 이라고도 λΆ€λ₯Έλ‹€.

 

β—Ύ RNN  ꡬ쑰의 μˆ˜ν•™κ³΅μ‹ 

 

  • 맀 time step λ§ˆλ‹€ hidden state 값을 update ν•΄μ€€λ‹€. 

 

ν˜„μž¬ hidden state 에 κ°€μ€‘μΉ˜λ₯Ό λ‘μ–΄μ„œ output yt λ₯Ό λ§Œλ“ λ‹€.

 

 

 

β—Ύ Many-to-Many ꡬ쑰의 simple RNN 

 

  • 각 time step λ³„λ‘œ 같은 weight matrix λ₯Ό μ‚¬μš©ν•œλ‹€. 
  • time step λ³„λ‘œ λ„μΆœλœ loss λ₯Ό λͺ¨λ‘ ν•©ν•˜μ—¬ ν•˜λ‚˜μ˜ loss 둜 κ²°κ³Όλ₯Ό λ„μΆœν•œλ‹€. 

 

 

 

 

(4) Example : Character-level language model 

 

  • Training : 원핫벑터 ν˜•νƒœλ‘œ 각 κΈ€μžκ°€ input 으둜 λ“€μ–΄μ˜€λ©° ν›ˆλ ¨μ΄ 이루어진닀. ν›ˆλ ¨μœΌλ‘œ 얻어진 weight matrix 듀을 inference 과정에 κ·ΈλŒ€λ‘œ ν™œμš©ν•œλ‹€. 
  • Inference  : ν›ˆλ ¨λœ λͺ¨λΈμ„ 가져와 μž…λ ₯에 λŒ€ν•œ 닡을 μΆ”λ‘ ν•˜λŠ” κ³Όμ •μœΌλ‘œ, input 에 'h' κΈ€μžλ§Œ λ„£μ–΄μ£Όλ©΄, μ°¨λ‘€λ‘œ e,l,l,o λ₯Ό κ²°κ³Όκ°’μœΌλ‘œ λ„μΆœν•œλ‹€. μ΄λ•Œ μ†Œν”„νŠΈλ§₯슀 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 각 step 별 output κΈ€μžλ₯Ό λ„μΆœν•΄λ‚Έλ‹€. 

 

 

 

 

 

 

(5) Multi-layer RNN 

 

  • μ‹€μ œλ‘œλŠ” multi-layer RNN ꡬ쑰가 많이 ν™œμš©λœλ‹€. 
  • hidden state λ₯Ό μ—¬λŸ¬ layer 둜 늘린 ꡬ쑰 

 

κ°€λ‘œμΆ•μ€ time step

 

 

 

β‘’ 기울기 μ†Œμ‹€ 문제 

 

Grandient Vanishing Problem 

 

  • Vanilla RNN 은 ν˜„μž¬ μ „ν˜€ μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ°, κ·Έ μ΄μœ λŠ” 기울기 μ†Œμ‹€ λ¬Έμ œκ°€ RNN μ—μ„œ μ‹¬κ°ν•˜κ²Œ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • graidnet κ°€ ν˜λŸ¬κ°€λ©° 점차 μž‘μ€ κ°’μœΌλ‘œ μˆ˜λ ΄ν•˜κΈ° λ•Œλ¬Έμ— μ•žλ‹¨ layer 의 weight update κ°€ 이루어지지 μ•ŠλŠ”λ‹€. 

 

 

  • Vanilla RNN 은 λ¬Έμž₯의 길이가 κΈΈμ–΄μ§ˆμˆ˜λ‘ ν•™μŠ΅μ΄ 잘 λ˜μ§€ μ•ŠλŠ”λ‹€. 
  • μ—­μ „νŒŒ κ³Όμ •μ—μ„œ Loss function 에 λŒ€ν•œ weight matrix 미뢄값을 κ΅¬ν•˜κ³ μž ν•  λ•Œ, time step 이 길수둝 μ†Œμˆ˜κ°’λ“€μ΄ 점차 κ³±ν•΄μ Έμ„œ weight gradient 값이 0에 μˆ˜λ ΄ν•˜κ²Œ λœλ‹€. 

 

tanh 값도 μ†Œμˆ˜κ°’, Weight matrix μ›μ†Œκ°’λ„ μ†Œμˆ˜κ°’

 

 

 

 

 

 

 

2️⃣ LSTM 


⭐ RNN 의 기울기 μ†Œμ‹€ 문제λ₯Ό κ°œμ„ ν•œ λͺ¨λΈ 

 

β‘  Architecture 

 

πŸ‘€ hidden state μ—μ„œ LSTM ꡬ쑰가 쓰인닀. 

 

f, i, o, c λͺ¨λ‘ λ²‘ν„°ν˜•νƒœλ‘œ 이루어져 μžˆλ‹€.

 

각 gate λ³„λ‘œ wiehgt matrix κ°€ μ‘΄μž¬ν•˜μ—¬ ν•™μŠ΅μ„ μ§„ν–‰ν•œλ‹€.

 

ν™”μ‚΄ν‘œ λ°©ν–₯ λ”°λΌκ°€λ©΄μ„œ μœ„μ˜ μˆ˜μ‹μ΄ μ „κ°œλœ 흐름 μ΄ν•΄ν•˜κΈ°

 

 

βœ” κ·Έλ¦Όμ—μ„œ output gate notation Ot 와 output notation Ot ν—·κ°ˆλ¦¬μ§€ μ•ŠκΈ° 

 

(1) Forget gate

 

  • 0κ³Ό 1μ‚¬μ΄μ˜ 값을 가진닀. 
  • cell 에 μ €μž₯된 기얡을 μžƒμ–΄λ²„λ¦΄μ§€ 말지 κ²°μ •ν•œλ‹€. whether to erase cell 
  • Ct 값을 ꡬ할 λ•Œ, C(t-1) 이전 cell μ—μ„œ μ–Όλ§ŒνΌ 정보λ₯Ό 보쑴할지 κ²°μ •

 

(2) Input gate

 

  • 0κ³Ό 1μ‚¬μ΄μ˜ 값을 가진닀. 
  • cell 에 이전 step의 hidden state h(t-1) κ°’κ³Ό ν˜„μž¬ input κ°’ xt을 μ–Όλ§ŒνΌ λ°˜μ˜ν• μ§€ κ²°μ •ν•œλ‹€.  whether to write to cell 

 

(3) Output gate, Ot

 

  • 0κ³Ό 1μ‚¬μ΄μ˜ 값을 가진닀.
  • Ct , ν˜„μž¬ memory cell 이 ν˜„μž¬ hidden state ht 생성에 λ°˜μ˜λ˜λŠ” 정도λ₯Ό κ²°μ •ν•œλ‹€ πŸ‘‰ long term memory Ct κ°€ short term memory ht 에 μ–Όλ§ˆλ§ŒνΌ λ°˜μ˜λ μ§€ κ²°μ •ν•œλ‹€. 

 

(4) Cell 

 

  • μž„μ˜μ˜ μ‹œκ°„λ™μ•ˆ μ–΄λ–€ 값을 κΈ°μ–΅ν•˜λŠ” μ—­ν•  (λ©”λͺ¨λ¦¬) 을 μˆ˜ν–‰ν•˜λŠ” 뢀뢄이닀. 
  • long term memory λ₯Ό μ €μž₯ν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€. 

 

 

 

β‘‘ LSTM Gradient Flow 

 

 

  • LSTM 의 Gradient ν˜•νƒœλŠ” forget output 이 반볡적으둜 κ³±ν•΄μ§€λŠ” ν˜•νƒœμ΄λ‹€. 
  • λ”°λΌμ„œ ν›ˆλ ¨μ„ 톡해 forget gate κ°€ 거의 1의 값을 가진닀면, 기울기 μ†Œμ‹€ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€. 

 

β—Ύ ν›ˆλ ¨μ„ 톡해 forget gate κ°€ 1의 값을 가지도둝 ν•œλ‹€λŠ” κ²ƒμ˜ 의미 

 

  • 이전 step 의 cell 의 값을 거의 κ·ΈλŒ€λ‘œ λ°˜μ˜ν•œλ‹€.
  • long term memory λ₯Ό 거의 항상 가지고 μžˆλŠ”λ‹€. 
  • κΈ΄ λ¬Έμž₯μ—μ„œλ„ μ•žμ— 있던 단어λ₯Ό μžƒμ–΄λ²„λ¦¬μ§€ μ•ŠλŠ”λ‹€.

 

 

 

 

 

 

3️⃣ Attention 


 

β‘   κΈ°κ³„λ²ˆμ—­ (Seq2Seq) 

 

(1)  Encoder - Decoder 

 

LSTM 으둜 λ²ˆμ—­μ„ μˆ˜ν–‰ν•˜λŠ” 예제

 

 

πŸ’¨ Language Translation Example 

 

  • λ²ˆμ—­μ΄λž€ input sequence λ₯Ό 톡해 output sequence λ₯Ό μƒμ„±ν•˜λŠ” κ²ƒμœΌλ‘œ sequence to sequence model 이라 λΆ€λ₯Έλ‹€. 

 

 

πŸ’¨ Encoder 

 

  • λ²ˆμ—­ν•˜κ³ μž ν•˜λŠ” λŒ€μƒ λ¬Έμž₯을 input 으둜 λ°›μ•„ λ‹¨μ–΄λ‘œ μͺΌκ°œμ„œ time step λ§ˆλ‹€ input 으둜 λ°›λŠ”λ‹€. 
  • input word 에 λŒ€ν•΄ hidden state Zi λ₯Ό λ„μΆœν•΄λ‚΄κ³ , output 이 FC layer λ₯Ό κ±°μ³μ„œ context vector 둜 μ••μΆ•λœλ‹€. 
  • Context vector λŠ” decoder 의 맀 input step λ§ˆλ‹€ ν•¨κ»˜ μž…λ ₯λœλ‹€. 

 

πŸ’¨ Decoder

 

  • context vector λ₯Ό μ°Έμ‘°ν•˜μ—¬ λ²ˆμ—­μ„ μˆ˜ν–‰ν•œ κ²°κ³Όλ₯Ό λ„μΆœν•΄λ‚Έλ‹€. 
  • λ¬Έμž₯이 μ‹œμž‘λœλ‹€λŠ” 의미λ₯Ό 가진 start token 을 λͺ¨λΈμ— λ„£μ–΄μ£Όλ©΄, person 을 output 으둜 내놓고, person 이 λ‹€μ‹œ λ‹€μŒ λ‹¨κ³„μ˜ μž…λ ₯으둜 λ“€μ–΄κ°€λŠ” ꡬ쑰λ₯Ό 가진닀. 

 

(2) RNN-based Seq2Seq Problem 

 

πŸ’¨ Information Bottleneck

 

  • Encoder → context vector → decoder 둜 μ „λ‹¬ν•˜λŠ” κ³Όμ • μ†μ—μ„œ, λ§Œμ•½ λ¬Έμž₯이 길어지면 그것을 ν•˜λ‚˜μ˜ context vector 둜 μΆ•μ•½ν•˜λŠ” κ³Όμ •μ—μ„œ μ •λ³΄μ˜ 손싀이 크게 λ°œμƒν•  수 μžˆλ‹€ 

 

 

 

β‘‘ Attention 

 

(1)  Intuition 

 

 

  • Seq2Seq μ—μ„œ λ°œμƒλ˜λŠ” μ •λ³΄μ˜ 손싀 문제λ₯Ό ν•΄κ²°ν•  방법 ⭐ attention 
  • λ²ˆμ—­μ„ ν•  λ•Œ, μ–΄λ””κΉŒμ§€ ν˜„μž¬ λ²ˆμ—­μ„ μ§„ν–‰ν–ˆκ³  λ‹€μŒ λ²ˆμ—­μ„ 이루어낼 λ•Œ, input λ¬Έμž₯μ—μ„œ μ€‘μš”ν•˜κ³  관련이 높은 단어듀에 μ’€ 더 μ£Όλͺ©ν•˜μ—¬ κ·Έ 단어듀에 λŒ€ν•΄μ„œ κ°€μ€‘μΉ˜λ₯Ό λΆ€μ—¬ν•˜κ² λ‹€λŠ” 아이디어 
  • 단어간 관련성을 κ³„μ‚°ν•˜μ—¬ attention 값을 λ„μΆœ (ν•˜μ–€μƒ‰μΌμˆ˜λ‘ 관련성이 높은 λ‹¨μ–΄μŒ)
  • λ²ˆμ—­λ¬Έλ“€ 사이에 μ–΄μˆœμ΄ μΌμΉ˜ν•˜μ§€ μ•Šμ•„λ„ 잘 λ²ˆμ—­λ˜λŠ” 것은 attention 덕뢄

 

 

(2) Attention in Seq2Seq

 

πŸ’¨ overview 

 

πŸ‘€ hat 을 λ²ˆμ—­ 결과둜 λ„μΆœν•˜λŠ” 단계에 ν•΄λ‹Ήν•˜λŠ” 예제 

 

 

  • Attention 은 LSTM μ—μ„œ 덧뢙여 μ‚¬μš©ν•˜λŠ” 도ꡬ라고 μƒκ°ν•˜λ©΄ λœλ‹€. 
  • Attention score , attention distribution 을 μ°¨λ‘€λ‘œ λ„μΆœν•˜κ³  attention value λ₯Ό λ„μΆœν•˜μ—¬ λ²ˆμ—­ 과정에 ν™œμš©ν•œλ‹€.
  • attention 이 μ—†λŠ” κ΅¬μ‘°μ—μ„œλŠ” 전체 time step 에 λŒ€ν•΄ ν•˜λ‚˜μ˜ context vector 둜 뭉틍그렀 λ²ˆμ—­ν•˜μ˜€λ‹€λ©΄, attention 이 μžˆλŠ” ꡬ쑰에선 맀 time step λ§ˆλ‹€ attention 을 기반으둜 context vector κ°€ μƒμ„±λ˜μ–΄ μž…λ ₯λ˜λ―€λ‘œ μ •λ³΄μ˜ 손싀이 λ°œμƒν•˜μ§€ μ•Šκ³  더 쒋은 μ„±λŠ₯으둜 λ²ˆμ—­μ΄ κ°€λŠ₯ν•˜λ‹€.  

 

 

πŸ’¨ Attention Score 

  • scalar κ°’μœΌλ‘œ 얻어짐 : e1,e2,e3,e4
  • ν˜„μž¬ λ²ˆμ—­ν•˜κ³ μž ν•˜λŠ” time step μ—μ„œ decoder 의 hidden state ht 와 encoder 의 각 time step μ—μ„œμ˜ hidden state λ“€ z1,z2,z3,z4 λ₯Ό κ³±ν•΄ attention score λ₯Ό μ–»λŠ”λ‹€. 

 

 

 

 

πŸ’¨ Attention distribution 

 

  • attention score 듀은 softmax 측을 거쳐 ν™•λ₯ λΆ„포 값을 μ–»κ²Œ λœλ‹€. 

 

 

 

πŸ’¨ Attention Value 

 

  • λ„μΆœλœ attention distribution κ°’κ³Ό encoder 의 hidden state 듀을 각각 κ³±ν•˜μ—¬ λ”ν•œ κ²°κ³Ό C3 λ₯Ό μ–»λŠ”λ‹€. 
  • C3 λŠ” h3 에 λŒ€μ‘λ˜λŠ” attention value κ°’μœΌλ‘œ context vector 라고 λ³Ό 수 μžˆλ‹€. 

 

 

 

πŸ’¨ Output 

 

  • μ•žμ„œ κ΅¬ν•œ C3 와 h3 λ₯Ό concatenate ν•œ 벑터와 Weight matrix 값을 tanh μ—°μ‚°ν•˜μ—¬ 얻은 κ°’ h3' λ₯Ό μ†Œν”„νŠΈλ§₯슀 μ·¨ν•˜λ©΄ output 인 'HAT' 단어가 λ„μΆœλœλ‹€. 

 

 

 

 

 

 

 

 

728x90

λŒ“κΈ€