오차역전파법

Amps93·2024년 3월 13일
0

밑바닥 딥러닝

목록 보기
7/11

앞에 나온 수치 미분은 단순하고 구현도 쉽지만 계산 시간이 오래걸리는 것이 단점

매개변수의 기울기를 효율적으로 계산하는 오차역전파법

 일단, 경사하강법은 계산이 어려운 함수의 극값의 근삿값을 1차 미분계수를 이용해 찾아가는 방법이다. 이런 방법이 왜 필요할까? 예를 한번 들어보자. 다음 수식의 최솟값을 구해보자. 중학교 수학에서 배우는 간단한 이차함수라서 대부분 간단하게 계산기나, 복잡한 연산 없이 쉽게 최솟값을 구할 수 있을 것이다. 그렇다면, 사차함수의 최솟값을 구해보자. 아까보다는 복잡하지만 고심해서 열심히 그래프를 그려보면 최솟값을 구할 수 있을 것이다.  겨우 이차함수에서 사차함수로 바뀌었을 뿐인데, 계산이 매우 복잡해진다. 그래도 여전히 계산이 가능하기는 하다. 하지만, 딥러닝에서는 신경망을 거치면서 만들어진 복잡한 고차원의 합성함수를 계산해야 한다. 계산할 수 있을까? 아마도 매우 힘들 것이다. 또한, 계산이 가능하다고 해도 상대적으로 많은 계산량을 필요로 할 것이다. 경사하강법은 이처럼 딥러닝에서 다루는 고차원 함수들의 최솟값을 구하기 위해서 고안된 방법이다.
신경망을 통과하면서 만들어진 굉장히 복잡한 고차원의 합성함수의 기울기(Gradient)를 계산하기 위해서는 미분의 연쇄법칙을 활용해야 한다. 미분의 연쇄법칙이란, 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다. 즉, 편미분을 활용해서 더 쉽게 기울기를 구할 수 있다는 것이다.  합성함수의 기울기를 계산하려면, 이전의 함수의 미분값이 필요하고 그리고 이전의 함수의 미분값을 구하기 위해서는 그 이전의 미분값이 필요하다. 이런식으로 이전의 값이 다음에 구하는 값에 필요하게 된다. 딥러닝에서는 기울기를 계산하기 위해서, 미분의 연쇄법칙의 계산을 따라 뒤에서부터 하나씩 계산하면서 계산한 값을 다음의 값을 구하기 위해 사용하며 나아가게 된다. 이것이 바로 뒤에서 앞으로 전파하는 역전파라는 말이 나온 이유다. 
출처 - 딥러닝의 핵심, 역전파

계산 그래프

문제1
100원인 사과 2개 구매, 소비세 10%를 계산한 그래프
위 그래프를 아래와 같이 표현 가능함

문제2
사과 2개, 귤 3개 구매. 사과는 1개에 100원 귤은 150원. 소비세 10%

위의 예시처럼 계산 그래프를 이용한 문제 풀이는 다음 흐름으로 진행됨

  1. 계산 그래프를 구성한다
  2. 그래프에서 계산을 왼쪽에서 오른쪽으로 진행한다

여기서 ‘계산을 왼쪽부터 오른쪽으로 진행’하는 단계를 순전파(forward propagation)라고 함. 반대의 경우는 역전파(backward propagation)

국소적 계산

계산 그래프의 특징 : 국소적 계산을 전파함으로써 최종 결과를 얻음

국소적 = 자신과 직접 관계된 작은 범위

국소적 계산 = 전체에서 어떤 일이 벌어지든 상관없이 자신과 관계된 정보만으로 결과를 출력

계산 그래프로 푸는 이유

  1. 국소적 계산 - 전체가 아무리 복잡해도 각 노드에서는 단순한 계산에 집중
  2. 중간 계산 결과를 모두 보관 가능
  3. 미분을 효율적으로 계산할 수 있음
  • 역전파는 국소적 미분을 계산하고 미분 값은 화살표 아래에 표시
  • 사과가 1원 오르면 최종 금액은 2.2원 오른다는 의미
  • 소비세에 대한 지불 금액의 미분이나 사과 개수에 대한 지불 금액의 미분도 같은 순서로 구할 수 있음
  • 중간까지 구한 미분 결과 공유 가능하고 수 미분 효율적 계산 가능
  • 계산 그래프의 이점은 순전파와 역전파를 활용해 각 변수의 미분을 효율적으로 구할 수 있음

역전파 사용 시 계산그래프 대신 방정식을 사용하면역전파(Backpropagation)는 신경망의 학습 알고리즘 중 하나로, 가중치와 편향에 대한 손실 함수(비용 함수)의 기울기(Gradient)를 계산하여 가중치 업데이트를 수행하는 과정입니다. 역전파는 계산 그래프(Computational Graph)를 통해 각 노드에서의 미분 값을 계산하고, 이를 통해 오차(손실)를 역전파하여 네트워크의 가중치를 조정합니다. 이 과정은 연쇄 법칙(Chain Rule)을 사용하여 미분 값을 전파하므로 미분 계산에 매우 유용합니다.
방정식을 사용해 역전파를 구현하려면 다음과 같은 어려움이 있을 수 있습니다:
-계산 복잡성: 딥러닝 모델은 매우 복잡하며 수천, 수백만 개의 가중치와 노드로 구성됩니다. 이런 모델을 다루는데 방정식을 직접 사용하면 복잡한 수학 계산을 수동으로 수행해야 하므로 계산 복잡성이 급증할 수 있습니다.
-실수에 대한 감수성: 방정식을 사용한 미분 계산은 수치적 안정성과 오차에 민감할 수 있습니다. 부동 소수점 오차와 반올림 오차로 인해 역전파 알고리즘을 안정적으로 구현하기 어려울 수 있습니다.
-코드 복잡성: 방정식을 직접 구현하려면 복잡한 코드를 작성해야 합니다. 신경망은 다양한 레이어, 활성화 함수, 손실 함수 등을 포함하므로 이러한 구성 요소를 방정식으로 처리하는 것은 복잡할 수 있습니다.
따라서 대부분의 신경망과 딥러닝 프레임워크에서는 역전파 알고리즘을 계산 그래프를 통해 자동으로 처리하며, 이는 미분을 수동으로 계산하는 복잡성과 오차를 피할 수 있도록 도와줍니다. 계산 그래프를 통해 미분 값을 효과적으로 계산하고, 그 결과를 사용하여 가중치를 업데이트하여 모델을 효과적으로 학습시킵니다.
chatgpt 답변

profile
머신러닝 개발자

0개의 댓글