ROKO

[coursera] Sequence Models: Week 1 본문

Artificial Intelligence/Deep Learning

[coursera] Sequence Models: Week 1

RO_KO 2024. 7. 3. 16:03
728x90

Notation

  • Let x is sequence, then \(x^{<t>}\): data indexed with position in x
  • \(x^{(r)<t>}\): \(s^{th}\) word in the \(r^{th}\) training examples
  • \(T_x\): length of sequence data x

dictionary에 자주 언급되는 단어들을 모아놓고 dictionary 크기만큼의 one-hot vector로 mapping하여 단어를 표현한다.

 

Sequence data를 standard network로 다루기 힘든 이유는 input, output이 데이터마다 다르기 때문이다. 가장 큰 표현을 벡터 크기로 고정하고 빈 공간은 padding하는 방법이 있지만 비효율적이다. 그리고 다른 문제점은 서로 다른 위치에서 학습한 데이터의 정보를 공유하지 않는다는 것이다. 1번째와 2번째에서만 사람의 이름이 언급된 데이터로 학습할 경우 그 이후에 언급되는 이름은 이름이라고 예측하기 어려울 것이다. 결론은 sequence data를 다루기 위한 neural architecture가 필요하다.

Recurrent Neural Network

Backpropagation Through Time

Examples of RNN architecture

many-to-many를 2 part로 나누어서 encoder-decoder 구조로 볼 수 있다.

 

Language model

 

Training set: large corpus of english text

 

Special token

  • <eos>: end of sentence token
  • <unk>: unknown token (not in vocabulary)

Sampling a sequence from a trained RNN

<unk> 토큰이 생성되는게 싫다면 추론시 <unk> 토큰을 rejection하고 resampling하면 된다.

문장 생성시 초기값으로 영벡터를 넣어주면 학습된 분포에서 가장 높은 확률값이 softmax 를 통해 나온다. 하지만 이렇게 되면 계속 같은 문장만 생성하게 될 것이다. 그땐 그냥 첫번째 단어를 random selection을 통해 초기화 하면 해결된다.

 

Character-level language model

data의 길이가 길어져 word-level language model 보다 long range 정보를 학습하는데 어렵고 computational cost가 크다. 하드웨어가 발전하면서 일부 분야는 character-level 을 발전시키려는 노력도 있지만 현재는 character, word-level 둘 다 잘 쓰이지 않는다.

 

Vanishing Gradients with RNNs

Gradient exploding의 경우 gradient clipping으로 완화하면 되지만 gradient vanishing 의 경우는 clipping으로 해결할 수 없어 심각한 문제다. 이런 문제를 해결하기 위해 LSTM, GRU 와 같은 구조가 제안되었다.

GRU

  • \(c\) = memory cell
  • \(c^{<t>} = a^{<t>}\)
  • \(\tilde{c}^{<t>}=tanh(w_c[c^{<t-1>},x^{<t>}]+b_c)\)
  • \(\Gamma_u=\sigma(w_u[c^{<t-1>},x^{<t>}]+b_u)\)
  • \(c^{<t>}=\Gamma_u * \tilde{c}^{<t>}+(1-\Gamma_u)*c^{<t-1>}\)

 

LSTM

  • \(c\) = memory cell
  • \(Gamma_u = \sigma(w_u[a^{<t-1>},x^{<t>}]+b_u)\)
  • \(\Gamma_f = \sigma(w_f[a^{<t-1>},x^{<t>}]+b_f)\)
  • \(\Gamma_o = \sigma(w_o[a^{<t-1>},x^{<t>}]+b_o)\)
  • \(c^{<t>}=\Gamma_u * \tilde{c}^{<t>}+\Gamma_f * c^{<t-1>}\)
  • \(a^{<t>}=\Gamma_o * c^{<t>}\)

이후 LSTM의 Gate들 수식 안에 \(c^{<t-1>}\)를 포함시켜 문맥을 더 잘 파악하는 peephole connection이 제안되었다.

Bidirectional RNN (BRNN)

BRNN의 단점은 예측을 위해서 전체 입력 sequence를 받는 과정이 필요하다는 것이다. 따라서 real-time application으로 쓰기에는 부적절할 수 있지만 대부분의 작업에서 문장 전체를 이해하는 작업이 많기 때문에 무작정 나쁘다고 하기에도 어렵다.

Deep RNN

은닉층이 하나가 아닌 여러개인 RNN이다.

728x90
Comments