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>: sth word in the rth training examples
  • Tx: 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>
  • c~<t>=tanh(wc[c<t1>,x<t>]+bc)
  • Γu=σ(wu[c<t1>,x<t>]+bu)
  • c<t>=Γuc~<t>+(1Γu)c<t1>

 

LSTM

  • c = memory cell
  • Gammau=σ(wu[a<t1>,x<t>]+bu)
  • Γf=σ(wf[a<t1>,x<t>]+bf)
  • Γo=σ(wo[a<t1>,x<t>]+bo)
  • c<t>=Γuc~<t>+Γfc<t1>
  • a<t>=Γoc<t>

이후 LSTM의 Gate들 수식 안에 c<t1>를 포함시켜 문맥을 더 잘 파악하는 peephole connection이 제안되었다.

Bidirectional RNN (BRNN)

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

Deep RNN

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

728x90