Skip to main content
  1. Posts/
  2. Today I Learned/

밑바닥부터 시작하는 딥러닝 2 5장

·611 words·3 mins
Jiho Kim
Author
Jiho Kim
달려 또 달려

📝 상세 정리
#

  • 지금까지 살펴본 신경망은 피드포워드 유형의 신경망이다.
    • 이는 흐름이 단방향인 신경망을 말한다.
    • 하지만 이에는 시계열 데이터를 잘 다루지 못한다는 단점이 있는데…
    • 따라서 여기서 순환 신경망이 등장한다.

5.1 확률과 언어 모델
#

  • 5.1.1 word2vec을 확률 관점에서 바라보다
    • $t$번째 단어를 타깃으로, 그 전후 단어를 맥락으로 취급해보자.
    • CBOW모델은 $w_{t-1}, w_{t+1}$로부터 $w_t$를 추측하는 일을 수행할 것이다.
    • 이 확률을 수식으로, $P(w_t | w_{t-1}, w_{t+1})$ 로 나타낼 수 있겠다.
    • 그런데, 맥락이 좌우대칭이 아니어도 되지 않나? $P(w_t | w_{t-1}, w_{t-2})$같은걸 생각해보자.
      • 이걸 어따 써먹지?
  • 5.1.2 언어 모델
    • 언어 모델은 단어 나열에 확률을 부여한다.
    • 단어 $w_1, w_2, \cdots , w_m$이 있다고 해보자.
      • 이들이 순서대로 출연할 확률은 $P(w_1, \cdots, w_m)$이다.
      • 이는 분해해서 다음과 같이 쓸 수 있다.
      • $P(w_1, \cdots, w_m) = P(w_m | w_1, \cdots, w_{m-1}) \cdots P(w_2 | w_1) P(w_1)$
  • 5.1.3 CBOW 모델을 언어 모델로?
    • $P(w_1, \cdots, w_m) = \prod\limits_{t = 1}^mP(w_t|w_1, \cdots, w_{t-1} \approx \prod\limits_{t = 1}^mP(w_t | w_{t-2}, w_{t-1})$
      • 맥락을 두개 단어로 한정!
      • 이를 2층 마르코프 연쇄라고도 볼 수 있겠다.
    • 하지만 고정 길이의 한계로, 대답하기 곤란한 문장들이 생긴다.
      • Tom was watching TV in his room. Mary came in to the room. Mary saind hi to $w$
    • 또한, 은닉층에서 평균내는 특징상 단어 순서가 무시된다.
      • 그렇다면 평균내지 말고 은닉층에서 연결해볼까…?
        • 그러면 맥락의 크기에 비례해 매개변수가 너무 커진다.

5.2 RNN이란
#

  • Recurrent Neural Network
    • 재발하다 / 주기적으로 일어나다 / 순환하다라는 뜻
  • 5.2.1 순환하는 신경망
    • 순환하다? 반복해서 되돌아가다?
      • 이를 위해선 어떤 닫힌 경로가 필요하다.
      • ![[Pasted image 20260203151615.png]]
      • 이때 $x_t$를 입력 받는데, $t$는 시각을 의미한다.
      • $x_t$는 벡터이다. 예를 들어 문장 (단어 순서)를 다루는 경우 각 단어의 분산 표현(단어 벡터)가 $x_t$가 된다. 이것이 순서대로 하나씩 RNN에 입력되는 것.
    • 위의 순환 과정을 펼치면 다음과 같다.
      • ![[Pasted image 20260203151754.png]]
      • 이제 여태까지의 피드포워드 신경망과 비슷하게 보인다!
        • 하지만, 이제는 다수의 RNN계층 모두가 실제로는 같은 계층이라는 차이가 있다.
        • 이 계산의 수식은 다음고 같다. $h_t = tanh(h_{t-1}W_h + x_t W_x + b)$
          • $x$를 $h$로 변환하기 위한 가중치 $W_x$
          • RNN 출력을 다음 시각의 출력으로 변환하기 위한 가중치 $W_h$
          • 편향 $b$
          • 세가지가 존재한다.
      • 행렬 곱을 계산하고, 그 합을 계산해서 쌍곡탄젠트함수를 먹인다. 그 결과가 시각 $t$의 출력 $h_t$가 된다. 이는 다른 계층을 향해 위쪽으로 출력되는 동시에, 다음 시각의 RNN계층을 향해 오른쪽으로도 출력된다.
        • $h_t$는 $h_{t-1}$에 의해 계산되므로, RNN 계층을 상태를 가지는 계층, 혹은 메모리가 있는 계층이라고 한다.
  • 5.2.3 BPTT
    • ![[Pasted image 20260203152426.png]]
    • 순환 구조에서도 똑같이 오차역전파법을 수행할 수 있다.
    • 이를 시간 방향으로 펼친 신경망의 오차역 전파법이란 뜻으로
      • BPTT(BackPropagation Through Time) 라고 한다.
    • 하지만 시계열 데이터의 시간 크기가 커지는것에 비례해서 BPTT가 소비하는 컴퓨팅 자원이 늘어난다는 단점이 있다…
      • 기울기도 불안정해지고
  • 5.2.4 Truncated BPTT
    • 큰 시계열 데이터를 처리할때는 신경망 연결을 적당한 길이로 끊자.
      • 작은 신경망 여러개로 만들자!
      • 이것을 Truncated BPTT라고 한다.
    • 사실 제대로 구현하려면, 순전파는 그대로 두고 역전파만 끊어야 한다.
      • 그리고 그 잘린 단위로 학습
    • ![[Pasted image 20260203153224.png]]
      • 1000개 깊이의 RNN계층이라도 10개단위로 학습하도록 이렇게 자를 수 있다!
        • 이 하나의 단위를 블록이라고 하자.
  • 5.2.5 Truncated BPTT의 미니배치 학습
    • ![[Pasted image 20260203153906.png]]
    • 두번째 미니배치를 학습 넣을 때 데이터를 시작 위치로 옮겨서 다시 순서대로 데이터를 제공해야 한다.

5.3 RNN 구현
#

  • 구현구현

5.4 시계열 데이터 처리 계층 구현
#

  • 구현구현

5.5 RNNLM 학습과 평가
#

  • 5.5.1 RNNLM 구현
  • 5.5.2 언어 모델의 평가
    • 언어 모델의 예측 성능을 평가하는 척도로 퍼플렉서타를 이용한다.
      • Perplexity, 혼란도
      • 이는 확률의 역수값
        • 이는 직관적으로 분기 수로 해석할 수 있다.
      • 입력데이터가 여러개라면?
        • $L = -\frac{1}{N}\sum\limits_{n}\sum\limits_{k}t_{nk}\log y_{nk}$
        • $\text{perplexity} = e^L$

5.6 정리
#

  • 이번 장의 주제는 순환 신경망
    • 이를 이용해 데이터를 순환시켜서, 과거 -> 현재 -> 미래로 데이터를 흘려보낸다.
  • 이를 이용해서 언어 모델을 만들었고, 이는 단어 시퀀스에 확률을 부여하고 다음에 출연할 단어의 확률을 계산한다.
    • 이론적으로는 아무리 긴 시계열 데이터라도 RNN의 은닉상태에 정보를 기억하게 할 수 있지만, 실제로는 잘 학습하지 못하는 경우가 많다.
  • 다음장에서 LSTM, GRU등을 알아보겠다.

❔질문 사항
#

  • 미니배치를 만들 때, 문장의 시작이 아닐 때도 있지 않을까? 그러니까, 미니배치에 넣기 좋게 문장이 생긴 데이터가 아닐 경우가 더 많을 것 같은데…

🔗 참고 자료
#