CNN과 RNN에 대한 간단한 설명

CNN

Convolution

  • Kernel을 입력 벡터 위에서 움직여 가며 선형 모델과 합성 함수가 적용되는 구조
  • 수학적 의미의 Convolution
    • f, g가 Continuous
      [fg](x) = Rdf(z)g(xz)dz = Rdf(xz)g(z)dz = [gf] (x)[f*g](x)\ =\ \int_{{R}^d} f\left(z\right)g\left(x-z\right)dz\ =\ \int _{{R}^d}f\left(x-z\right)g\left(z\right)dz\ =\ \left[g*f\right]\ \left(x\right)
    • f, g가 Discrete
      [fg] (x) = aRdf(a)g(ia) = aRdf(ia)g(a)dz = [gf] (x)\left[f*g\right]\ \left(x\right)\ =\ \sum _{a\in {R}^d}^{ }f\left(a\right)g\left(i-a\right)\ =\ \sum _{a\in {R}^d}^{ }f\left(i-a\right)g\left(a\right)dz\ =\ \left[g*f\right]\ \left(x\right)
    • 신호(Signal; f(x))를 커널(g(x))를 이용하여 국소적으로 증폭 또는 감소시켜 정보를 추출하거나 필터링 하는 것
  • Kernel은 계속해서 움직이지만 절대로 값이 변경되지는 않음
    • Transloation invariant
    • 커널을 국소적(Local)으로 적용
  • 1차원 뿐만이 아닌 다양한 차원에서 계산이 가능
  • Channel이 여러개인 2차원 Data의 경우, 2차원 Convolution을 Channel 개수만큼 적용함
위 말을 풀어서 하면 2차원 Kernel을 N층으로 복사하고, 이를 3차원 입력에 대해 
Convolution으로 수행해주면 되는 것이다.

예를 들어, Dimension이 각각 Kernel은 (A,B,C)이고 Data는 (H,W,C)라고 가정하자.
이 때, Convolution을 수행할 경우 Kernel에서 (a, b, x) 구간을 뽑았다면,
Data에서도 (h, w, x) 구간을 뽑아 같은 x를 가진 Kernel과 Data 부분을 뽑아
연산을 수행해주는 것이다.
즉, Data와 Kernel에서 x 위치에 존재하는 것들만 뽑아 
2차원 Convolution을 수행해주고, 모든 x에 대해 이런 연산을 수행한 이후 이렇게
나온 2차원 결과값들을 모두 더해주면 Channel이 여러 개인 Data의 Convolution도
수행할 수 있는 것이다.

이 말인 즉슨, C 숫자가 무엇이든 간에 결과값은 (O1, O2, 1)로 나온다는 것이다
  • 만약, (Oh,Ow,Oc)(O_h, O_w, O_c)

Convolution 연산의 역전파(Back Propagation)

  • Back Propagation
    • Pre-Course에 배운 내용이라 정리를 하지 않았었다. 간단히 말하자면, AI가 학습을 진행하는 과정이라고 생각하면 된다
    • 수학적 의미의 Convolution 역전파 : x[fg](x) = [fg](x)\frac{\partial }{\partial x}\left[f*g\right]\left(x\right)\ =\ \left[f*g'\right]\left(x\right)
  • CNN에서 커널을 통한 순전파 과정
    • CNN에서 input값이 들어올 경우, Model을 활용해 출력을 내는 과정
    • 위에서 설명했듯, 입력 값에 대해 커널을 움직이며 곱 연산을 수행하면 됨
  • CNN에서 일어나는 역전파
    • δ1δ_1
    • 역전파는 순전파 과정을 역방향으로 수행하는 것이므로, 꼭 순전파를 완벽히 이해하자.
  • 역전파 연산에 대한 설명
    • 위 2개 사진을 보며 읽는 것이 편함
  1. 순전파 과정에서 o1o_1
  2. 역전파는 순전파의 역방향으로 미분(Gradient) 값을 활용해 학습하는 것이다.
  3. Input 기준으로 관점을 바꿔보자.
  • x3x_3
  • w2,w1w_2, w_1
  1. Kenrel 기준으로 살펴보자.
  • w1w_1
  • w2w_2
  1. 마지막으로 x3x_3
  • L : Loss Function

RNN

Sequence Data

  • 소리, 문자열, 주가 등 시간 순서에 따라 나열된 Data
  • 과거의 사용 단어나 추세 등의 영향을 받는 Data
    • 주가 : 시간 순서대로 시장 상황이나 회사 사정 등이 반영되어 변동하는 Data
    • 문자열, 소리(대화) : 이전에 말했던 대화와 연관되도록 말이 이어짐
  • 과거 정보 또는 앞뒤 맥락 없이 미래를 예측하거나 결과물을 도출할 수 없는 Data
  • 독립동등분포(i.i.d) 가정을 잘 위배함
    • i.i.d : 확률변수 X1,X2,...,XnX_1, X_2, ..., X_n
    • Sequence Data는 과거에 영향을 받기 때문에 i.i.d 가정을 잘 위배하게 됨
    • 특히, 순서를 바꾸거나 과거 정보에 손실이 발생할 경우 데이터 분포가 바뀌므로, i.i.d 가정을 더 잘 위배하게 된다.

Sequence Data의 처리 Model

  • Bayes' Theorem을 활용한 기본 Model

    P(X1,X2,...,Xt) = s=1tP(Xs  Xs1,...,X1 )P\left({X}_1,{X}_2,...,{X}_t\right)\ =\ \prod _{s=1}^tP\left({X}_s\ |\ {X}_{s-1},...,{X}_1\ \right)
    • 판단하는 시점보다 과거에 존재하는 모든 정보를 활용하여 현재 추세를 판단하는 방법
  • 자기 회귀 모델

    • X1Xn1X_1 \sim X_{n-1}
    • 판단을 위해 사용하는 길이가 τ\tau로 정해져 있을 경우, 이를 자기 회귀 모델이라고 함
      Xt+1  = P(Xt+1  Xt,..,Xn){X}_{t+1}\ \ =\ P\left({X}_{t+1}\ |\ {X}_t,..,{X}_n \right)
    • 고정된 길이(τ\tau)를 어느 정도로 해야할지 항상 신경써야 함
      • 어느 때는 짧은 과거 Data로만 현재 상황을 추측할 수 있지만, 반대로 매우 오래된 Data가 필요한 경우도 존재
      • 고정된 길이를 결정하기 위해 외부 요인을 고려해야 하는 경우도 존재
  • 잠재 AR 모델

    • 잠재 회귀 모델의 τ\tau 모호성을 해결하기 위해 나온 모델
    • 잠재 변수로 과거 일정 길이 Data를 인코딩해서 활용하는 Model
      Xt  = P(Xt  Ht){X}_{t}\ \ =\ P\left({X}_{t}\ |\ {H}_t \right)
      <Ht:X1Xt1    Data    Encoding    잠재변수><{H}_{t} : X_1 \sim X_{t-1}\;\; Data를 \;\;Encoding한\;\; 잠재변수>
    • RNN(순환 신경망)
      • 잠재변수를 인코딩하는 방법
      • 잠재변수 HtH_t

RNN의 순전파

  • Ht+1H_{t+1}
  • W 행렬은 t가 변한다고 해도 절대로 바뀌지 않는 가중치 행렬

RNN의 역전파

  • BPTT(Backpopagation Through Time)이라고 함
  • 순전파 그림의 화살표 방향을 바꾸면 BPTT의 흐름이 됨
  • Loss Function에 대한 편미분(중간 계산 과정 생략)
    whht = whf(xt,ht1,wh ) + i=1t1(j = i+1thj1f(xj,hj1,wh ))whf(xi,hi1,wh )\partial {w}_hh_t\ =\ \partial {w}_hf\left({x}_t,h_{t-1},w_h\ \right)\ \newline \quad \quad +\ \sum _{i=1}^{t-1}{\left(\textcolor{#ff0010}{\prod _{j\ =\ i+1}^t\partial {h}_{j-1}f\left({x}_j,h_{j-1},w_h\ \right)}\right)}\partial {w}_hf\left({x}_i,h_{i-1},w_h\ \right)
  • Sequence 길이가 길어질 수록 역전파의 학습 결과가 불안정해지기 쉬움
<설명>
수식의 빨간색 부분이 Sequence 길이가 길어질 때 역전파를 불안정하게 하는 요인이다.

시퀀스 길이가 길어질 경우 Gradient의 계산이 매우 불안해진다.
예를 들어, 빨간 수식 값이 모두 2라고 가정하자. Sequence 길이가 1이고, 
값이 하나 추가될 경우 1 -> 2로 Gradient가 변경되지만 변화값은 1밖에 
되지 않으므로 안정감을 가진다.
하지만, Sequence 길이가 10으로 길어질 경우, 곱 연산은 1024의 값을 가지며 
값이 하나 더 추가될 경우 1024 -> 2048로 Gradient값이 변경된다.
즉, 변화값이 매우 커 안정감을 가지지 못하고 계산이 불안해지는 것이다.

또한 기울기 소실 문제(Gradient Vanishing) 문제도 발생할 수 있다.
괄호의 값이 1/2이고 길이가 매우 길어지게 된다면 해당 값은 곱 연산이기 때문에 
0에 빠르게 수렴할 것이다.
즉, 길이가 조금만 길어지더라도 과거 Data를 거의 활용하지 못하는 
문제가 발생하게 된다.
  • Gradient Vanishing 문제를 해결한 방법
    • Sequence 길이를 끊어 BPTT를 수행함
      • 몇 개 Block을 형성하여 각각의 Block에 대해서만 역전파를 수행
    • LSTM, GRU 같은 새로운 네트워크를 활용

좋은 웹페이지 즐겨찾기