ML 관련 서적 개념요약/밑바닥부터 시작하는 딥러닝

[Chapter 5] 오차역전파법 (Back Propagation)

수수킴 2021. 5. 24.

본 글은 '밑바닥부터 시작하는 딥러닝' 책을 참조하여 정리한 요약본입니다.

혹여나 제가 잘못 이해하고 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

신경망의 가중치 매개변수에 대한 손실 함수의 기울기 → ‘수치미분을 사용하여 구함


Problem

  • 수치미분은 단순하고 구현하기 쉽지만 계산 시간이 오래 걸린다. 
  • MLP의 파라미터 개수가 많이지면서 각각의 weigh와 bias를 학습시키는 것이 매우 어려워진다.

Solution

  • ‘Backpropagation (오차역전파법)’을 사용하여 가중치 매개변수의 기울기를 효율적으로 계산한다.

Training Process (Learning) : Identify w value that minimizes the Loss

 

Gradient Descent Algorithm : If we are using thousands of weigh, it is impossible to identify w value. Gradient Descent Algorithm is a systemic way that automatically computes w value. (α is usually small value like 0.01)
Back-Propagation : In the case of complicated (non-linearity) network, back-propagation is better way for compute the gradient of loss with respect to w using chain rule on the computational graph.

 

1. Computational Graph (계산 그래프)

  • 계산 과정을 그래프로 나타낸 것이다.
  • node edge (node 사이의 직선)로 표현한다.
  • 국소적 (자신과 직접 관계된 작은 범위) 계산을 전파함으로써 최종 결과를 얻는다.
  • Computational Graph의 장점 
    1. 전체가 아무리 복잡해도 각 노드에서는 단순한 계산에 집중하여 문제를 단순화할 수 있다.
    2. 계산 그래프는 중간 계산 결과를 모두 보관할 수 있다.
    3. 역전파를 통해 미분을 효율적으로 계산할 수 있다.

  • Forward Propagation (순전파) : 계산을 왼쪽(출발점)에서 오른쪽(종착점)으로 진행하는 단계
  • Backward Propagation (역전파) :  계산을 오른쪽(종착점)에서 왼쪽(출발점)으로 진행하는 단계, 국소적 미분을 전달

2. Chain Rule (연쇄법칙)

  • 국소적 미분을 전달하는 원리 = 계산 그래프 상의 역전파
  • 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있음'

3. 역전파의 계산 절차

  • 신호 E에 노드의 국소적 미분(f’(x), x에 대한 y의 미분)을 곱한 후 다음 노드로 전달한다. 
  • 덧셈 노드의 역전파 : 상류에서 전해진 미분에 1을 곱하여 하류로 흘린다. , 1을 곱하기만 할 뿐의므로 입력된 값을 그대로 다음 노드로 보내게 된다.

  • 곱셈 노드의 역전파 : 상류의 값에 순전파 때의 입력 신호들을 서로 바꾼 값을 곱해서 하류로 보낸다.
    덧셈의 역전파에서는 상류의 값을 그대로 흘려 보내서 순방향 입력 신호의 값은 필요하지 않지만, 곱셈의 역전파는 순방향 입력 신호의 값이 필요하다.
    그래서 곱셈 노드를 구현할 때는 순전파의 입력 신호를 변수에 저장해둔다.

4. 계층 구현 (계층 : 신경망의 기능 단위)

  • Activation Function (활성화 함수)

    • 신경망모델의 각 layer에서는 input 값과 W, b를 곱, 합 연산을 통해 a = WX + b를 계산하고 마지막에 활성화 함수를 거쳐 h(a)를 출력한다.
    • layer마다 sigmoid, softmax, relu …. 여러 활성화 함수를 이용한다.
    • Q : Activation 함수를 쓰는 이유는?
      A :
      선형 분류기는 XOR과 같은 non-linear한 문제를 해결할 수 없다. 이를 해결 하기 위해 hidden layer이란 개념을 도입하였지만, hidden layer을 무작정 쌓기만 한다고 해서 퍼셉트론을 선형 분류기에서 비선형 분류기로 바꿀 수 없다. 왜냐하면 linear한 연산을 갖는 layer을 수십 개 쌓아도 결국 이는 하나의 linear한 연산이기에 non-linearity를 해결 할 수 없다.

      활성화 함수를 사용하면 입력 값에 대한 출력 값이 linear하게 나오지 않으므로 선형분류기를 비선형 시스템으로 만들 수 있다.
      -> 따라서 MLP (Multiple Layer Perceptron)은 단지 linear layer을 여러 개 쌓는 개념이 아닌 활성화 함수를 이용한 non-linear 시스템을 여러 layer로 쌓는 개념
    • ReLU 계층
      • ReLU 함수

      • 순전파 때의 입력인 x 0보다 크면 역전파는 상류의 값을 그대로 하류로 흘려 내린다. 반면, 순전파 때 x 0 이하면 역전파 때는 하류로 신호를 보내지 않는다 (0을 보낸다)
      • ReLu 계층의 계산 그래프
    • Sigmoid 계층
      • Sigmoid 함수
      •  Sigmoid 계층의 계산 그래프
      • Sigmoid 계층의 계산 그래프 (간소화)
      • Sigmoid 계층의 역전파는 순전파의 출력 (y)만으로 계산할 수 있다.
    • Affine 계층
      • 신경망의 순전파에서는 가중치 신호의 총합을 계산하기 때문에 행렬의 곱을 사용한다.
      • 뉴런의 가중치 합 : Y = np.dot(X, W) + B (X : 입력값, W : 가중치 매개변수, B : 편향)
      • 행렬의 곱은 기하학에서 Affine Transformation이라 한다.
      • Affine Transformation을 수행하는 처리를 Affine 계층이 구현한다.
      • 행렬의 곱에서는 대응하는 차원의 원소 수를 일치 시켜야 한다. 
         
         
        C의 형상은 행렬 A의 행 수와
        행렬 B의 열 수가 됨
        1차원 배열 일 때도 대응하는 차원의
        원소 수를 일치 시켜야함
      • Numpy 배열
      • Affine 계층의 역전파

        Q : 행렬이 전치되는 이유가 행렬을 미분한 결과인가? (http://taewan.kim/post/backpropagation_matrix_transpose/)
        A :
        행렬을 미분하는 과정에서 행렬이 전치되는 것이 아니라, W의 요소를 미분하고 그 결과 수식을 선형대수의 행렬로 단순화하는 과정에서 행렬의 shape이 결정된다. 미분 과정에서 행렬이 전치되는 것이 아니라, 각 요소의 연산을 선형대수화하는 과정에서 행렬의 shape이 결정되고 전치되는 것이다.
      • Affine 계층의 계산 그래프 (노드 사이에 '스칼라 값'이 아닌 '행렬'이 흐름)
    • 배치용 Affine 계층
      • 입력 데이터로 X 하나만을 고려하지 않고, 데이터 N개를 묶어 순전파를 하는 경우
      • 배치 : 묶은 데이터
      • 배치용 Affine 계층의 계산 그래프

    • Softmax-with-Loss 계층
      • Softmax 함수 : 입력 받은 값을 출력으로 0~1사이의 값으로 모두 정규화하며 출력 값들의 총합은 항상 1이 되는 특성을 가진 함수

      • Softmax 계층 : 입력 (a1, a2, a3)을 정규화하여 (y1, y2, y3)을 출력한다. 

      • Cross Entropy Error 함수 : 교차 엔트로피 오차 함수 (손실 함수). 실제 값과 예측값의 차이를 줄이기 위한
        엔트로피이다. 
      • Cross Entropy Error 계층 : Softmax의 출력 (y1, y2, y)와 정답 레이블 (t1, t2, t3)을 받고, 이 데이터들로부터 손실 L을 출력한다.
      • Softmax 계층의 역전파 : (y1 – t1, y2 – t2, y3 – t3)
        Softmax 계층의 출력과 정답 레이블의 차분
        -> 신경망 학습의 목적 : 신경망의 출력이 정답 레이블과 가까워지도록 가중치 매개변수의 값을 조정하는 것. 따라서 신경망의 출력과 정답 레이블의 오차를 효율적으로 앞 계층에 전달해야함.

      • Softmax-with-Loss 계층의 계산 그래프

5. 오차 역전파법 구현

      • 신경망 학습의 순서
        • 전제
          신경망에는 적응 가능한 가중치와 편향이 있고, 이 가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 학습이라 함
        • 1단계 미니배치 
          훈련 데이터 중 일부를 무작위로 가져옴. 이렇게 선별한 데이터를 미니배치라 하며, 그 미니배치의 손실 함수 값을 줄이는 것이 목표.
        • 2단계 기울기 산출
          미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구함. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시. 오차역전법
        • 3단계 매개변수 갱신
          가중치 매개변수를 기울기 방향으로 아주 조금 갱신.
        • 4단계 반복
          1~3단계 반복
      • 오차 역전파법으로 구한 기울기 검증 (Gradient Check)
        • 수치 미분은 매우 느리지만 구현하기 쉽다는 이점이 있어 오차역전파법을 정확히 구현했는지 확인하기 위해 필요하다. 
        • 기울기 검증은 수치 미분의 결과와 오차역전파법의 결과를 비교하는 작업, 즉 두 방식으로 구한 기울기가 일치함을 확인하는 작업이다. 

댓글