사실 이번 장에서는 밑바닥부터 시작하는 딥러닝 1의 경우 계산 그래프를 이용해 설명을 진행한다. 해당 방식의 경우 그래프 개념으로 이해하기 쉽게 설명되어 있지만, 기계적인 암기 방법이라 시간복잡도 개선에 대한 인사이트를 얻긴 쉽지 않았다. 따라서 이번 장의 내용은 책의 내용이 아닌 수식으로 정리한 방식으로 설명을 진행한다.
계산 그래프와 시각 자료를 이용한 설명이 필요하시다면, 해당 책을 구입하셔서 보시는 것을 추천드립니다. 책 내용도 좋습니다.
기존 방식
먼저 들어가기 전에, 기존 방식의 문제점을 파악해보자.
식 정리
모델이 갖고 있는 가중치의 집합을 θ라 하자.
아래를 "특정 y에 대한 손실 함수"라고 하자.
전체 우리가 최소화하고자 하는 전체 손실 함수(Cost function)은 다음과 같이 표현될 것이다.
수식에 y햇, 즉 예측값이 들어간다. 우리가 수치 미분으로 그라디언트를 구하는데는, 한번의 예측(predict, y햇)이 필요하다.
시간복잡도로 표현하면 다음과 같다.
경사 하강법 수식
m: 배치 데이터의 개수
(t): t층 레이어
기존 수치 미분의 처리 방식
현재 수치 미분은 수치를 구하기 위한 함수 f를 매개변수로 받는데, 이 f는 보통 순전파 함수가 들어온다.
또한 신경망 모델에선 브로드캐스팅으로 모든 가중치 각각에 loss 함수를 실행한다.
따라서, 가중치가 많아지면 많아질수록 순전파 횟수가 선형적으로 증가한다.
역전파(backpropagation)의 등장 1 - 연쇄 법칙
이 비효율을 해결하기 위해, 역전파 기법이 등장했다. 이 내용을 이해하기 전에, 먼저 근간이 되는 연쇄법칙부터 알아보자.
식 정리
연쇄법칙을 알아보기 전에, 이왕 하는거 우리 문제에 바로 적용시키기 위해, 신경망의 함수 구조를 다음과 같이 그려보자.
추론 과정
레이어 넘어가는걸 수식으로 표현하면 다음과 같을 것이다.
먼저 첫번째 레이어에 다음 수식이 존재할 것이다.
다음 레이어에는 다음 식이 존재할 것이다.
한번의 예측에 내부 함수들이 합성함수 형태로 존재한다.
그림으로 표현하면 다음과 같다.
활성화 함수로 하이퍼볼릭 탄젠트와 시그모이드를 사용한 신경망의 수식 표현
연쇄법칙
우리는 고등학교때 합성함수의 미분에 대해서 배웠다.
이는 편미분에 대해서도 유사하게 성립한다.
이 법칙이 편미분에서 갖는 특별한 점은, 미분 대상을 선택하는데 비교적 자유로워진다는 것이다.
예제로 위에 정의한 신경망의 순전파 함수를 x로 편미분해보자.
미분을 하게되면 다음과 같이 중첩된 구조로 바꿀 수 있을 것이다.
각 중첩 구조는 해석적으로 미분할 수 있고, 다음과 같이 표현할 수 있다.
이제 위 식을 완성해주자.
편미분은 현재 벡터에 대한 그라디언트를 계산하는 방법이다.
즉, 남은 기호들은 현재 값에 대입해주면 끝난다.
역전파(backpropagation)의 등장 2 - 최적화 포인트
역전파의 미분값 계산 원리
역전파는 연쇄법칙을 계산 그래프 위에서 뒤로 적용하는 알고리즘이다. VJP(벡터-야코비안 곱)만 단계별로 계싼해 모든 파라미터의 미분값을 얻는다.
모델은 계산 그래프(DAG)로 볼 수 있다.
출력 쪽 기울기를 가지고, 각 노드의 지역 도함수를 곱해 입력 쪽 기울기로 분배할 수 있다.
이렇게 뒤로 가면서 모든 경로의 기여도를 합하면 아래가 나온다.
우리가 구하고자 하는 것을 우선 정리해보자. 모든 레이어의 각 가중치와 편향 w, b에 대한 L의 편미분값이다.
먼저 간단하게 식을 세워보고 편미분을 진행해보자.
라고 한다면,
라고 할 수 있게 된다.
주의
이거 아니다. 가중치끼리는 서로 독립변수이다.
앞장에서 살펴봤듯이, 보통 손실함수로는 CEE/SSE 중 하나를 사용한다. 이번에는 아래 CEE를 사용한다고 가정해보자.
여기서 y햇은 모델의 출력 값. 즉 여기선 a^{[2]}이다.
그럼 아래 손실함수부터 차근차근 미분해가며 진행해보자.
손실 함수를 출력값 y로 미분하는 것부터 시작해보자.
2층 레이어
2층레이어에선
위를 재사용할 것이다.
여기서 a_prev는 순전파 시 계산했던 이전 계층의 결과값이 들어간다.
만약 역전파가 아니었다면, a_prev와 δ 모두 매번 재계산해야 했을 것이다.
그리고 아래를 이전 계층의 그라디언트 계산에 이용한다.
1층 레이어
이번 레이어는 이전 레이어의 설명을 기반으로 직접 수식을 작성해보는 것을 추천한다.
1층 레이어에선
위를 재사용한다.
즉 식을 정리하면 다음과 같아진다.
순전파 시 구해놓은 a와 윗 계층의 그라디언트를 재사용한다. 여기서 역전파는 뒤에서부터 오는 만큼 층수가 큰 레이어(2<3층)의 재사용을 의미한다.
상수 대입이 가능한 시점에 대입을 적절히 수행해가며 계산한다.
수치미분처럼 여러번 모델을 호출하지 않고, 위에서 진행한 기호미분처럼 식이 장황해지지도 않았다.
여러 경로로 같은 텐서에 도달하면(최적 부분구조), 누적 합으로 중복 부분문제를 제거했다.(DP)
그리하여 시간복잡도로 표현하면, 다음과 같아진다.
더이상 가중치 파라미터의 갯수에 관계없이 순전파와 역전파 2회만 수행하면 가중치 파라미터의 편미분값을 구할 수 있게 되었다.
손실함수의 미분
지금부터 위에서 설명하지 않았던 손실함수 L의 미분값을 직접 계산해보자.
CEE의 미분 - 소프트맥스 기준
모델의 로짓(logit)을 z_i라 하면,
여기서 로짓은 우리가 앞에서 정의한 선형 함수를 통과한 값입니다. 자세한 내용은 해당 링크를 참고하시기 바랍니다.