[Week 1] CNN / RNN

혜 콩·2022년 9월 22일
0
post-thumbnail

🚩 CNN


  • Convolution 연산: 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조

🍏 2차원 Convolution 연산

  • 출력 크기 계산 가능

    why 26x26?
    → 28 - 3 + 1 = 26
  • 채널이 여러개인 2차원 입력의 경우, 2차원 Convolution을 채널 개수만큼 적용한다
  • 커널의 채널 수와 입력의 채널 수가 같아야 한다

🍏 3차원 Convolution 연산

  • 커널 개수를 OCO_C개로 늘리면 출력값이 텐서가 된다

🍏 Convolution 연산의 역전파

  • 입력 5개 - 커널 3개 + 1 = 출력 3개

  • 입력 X3X_3을 기준으로, W3X3W_3 * X_3를 통해 O1O_1이 나오고, O2O_2에서는 W2X3W_2 * X_3, O3O_3에서는 W1X3W_1 * X_3이다.
  • 그러므로 역전파에서 미분이 저 순서대로 들어가는 것이다




🚩 RNN


🍏 시퀀스 데이터란?

  • 소리, 문자열, 주가 등의 데이터를 시퀀스(sequence) 데이터로 분류합니다
  • 시퀀스 데이터는 독립동등분포(i.i.d) 가정을 위배하기 때문에 순서를 바꾸거나 과거 정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 된다.
  • 과거 정보 or 앞뒤 맥락 없이 미래를 예측하거나 문장을 완성하는 건 불가능하다

🍏 조건부확률 (for 데이터의 확률분포)

  • 이전 시퀀스의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부 확률을 이용
  • 조건부확률은 과거의 모든 정보를 사용하지만, 시퀀스 데이터를 분석할 때 모든 과거 정보들 필요 x



🟨 자기회귀모델 (Autoregressive Model)

  • 시퀀스 데이터를 다루기 위해서는 길이가 가변적인 데이터를 다룰 수 있는 모델이 필요하다
  • 고정된 길이 τ\tau만큼의 시퀀스만 사용하는 경우


🟨 잠재 AR 모델

  • 현재 바로 이전 정보를 제외한 나머지 (과거)정보들은 HtH_t라는 잠재변수로 인코딩해서 활용
  • 현재 정보와 직전 정보만 가지고 예측하기 때문에, 고정된 길이의 데이터를 가지고 모델링 가능


  • 나머지 과거 정보들을 어떻게 잠재변수 HtH_t로 인코딩 하는데?
    ✔️ 순환신경망 RNN
    (HtH_t를 신경망을 통해 반복해 사용하여 시퀀스 데이터의 패턴을 학습)

🍏 RNN (Recurrent Neural Network)

🟨 기본적인 RNN 모형

  • 기본적인 RNN 모형은 MLP(Multi Layer Perceptron) 와 유사한 모양이다.
  • 하지만, 아래 모델은 과거의 정보를 다룰 수 없다
  • 왜? : 입력 행렬로 딱 tt번째 (현재) 행렬이 주어지기 때문에
  • W1,W2W^1, W^2는 시퀀스와 상관없이 불변의 행렬


🟨 현재 RNN 모형

  • 이전의 잠재변수와 현재의 입력을 활용하여 모델링
  • 현재 잠재벡터 HtH_t는 현재 입력벡터 XtX_t와 이전 시점의 잠재벡터 Ht1H_{t-1}를 받아서 생성
  • HtH_t를 받아서 현재 출력벡터 OtO_t를 만들어낸 것

🍏 RNN의 역전파

  • RNN의 역전파는 잠재변수의 연결 그래프에 따라 순차적으로 계산한다.
  • Backpropagation Through Time (BPTT) : RNN의 역전파 방법

    빨간색: gradient 전달 경로
  • 현재 잠재벡터 Ht+1H_{t+1}의 gradient를 현재 입력벡터 Xt+1X_{t+1}와 이전 잠재벡터 HtH_t로 전달한다.


🟨 truncated BPTT

  • Sequence 길이가 길어지는 경우 기울기(미분값)가 0으로 죽을 수도 있다. (기울기 소실)
  • BPTT 알고리즘 계산이 불안정해지므로 길이를 끊는 것이 필요

🟨 기울기 소실의 해결책 (LSTM, GRU)

profile
배우고 싶은게 많은 개발자📚

0개의 댓글