계산 그래프
- 계산 그래프(computational graph)는 계산 과정을 그래프로 나타낸 것이다. 여기에서의 그래프는 복수의 노드와 엣지로 표현된다.
계산 그래프로 풀다
- 다음과 같은 간단한 문제를 계산 그래프로 풀어보자
- 문제 1: 현빈 군은 슈퍼에서 1개에 100원인 사과를 2개 샀다. 이 때 지불한 금액은? 단 소비세가 10% 부가됨
- 문제 2: 현빈 군은 슈퍼에서 사과를 2개, 귤을 3개 샀다. 사과는 1개에 100원, 귤은 1개 150원이다. 소비세가 10%일 때 지불 금액을 구하시오.
- 위 과정을 살펴보면, 그래프를 이용한 문제 풀이는 다음 흐름으로 진행횐다.
- 계산 그래프를 구성한다
- 그래프에서 계산을 왼쪽에서 오른쪽으로 진행한다.
- 계산을 왼쪽에서 오른쪽으로 진행하는 단계를 순전파(Forward Propagation)라고 한다.
- 이와 반대로 오른쪽에서 왼쪽으로의 전파가 역전파(backward propagation)이다.
국소적 계산
- 계산 그래프의 특징은 ‘국소적 계산’을 전파함으로써 최종 결과를 얻는 다는 것이다.
- 분할 정복 같은 느낌이랄까?
- 각 노드는 자신과 관련한 계산 외에는 아무것도 신경쓰지 않는다.
- 여러 식품을 구입하는 복잡한 계산은 신경쓰지 않음
왜 계산 그래프로 푸는가?
- 전체가 아무리 복잡해도 각 노드에서는 단순한 계산에 집중하여 문제를 단순화할 수 있다.
- 여기서 GPU의 효율성을 연관지어서 생각해 볼 수도 있을까?
- 가장 큰 이유는 ‘미분’을 효율적으로 계산할 수 있는 점이다.
- 만약, 사과 가격이 올랐을 때 전체 금액이 어떻게 변화하는지 보고 싶다면 사과 가격에 대하여 편미분을 수행하면 된다.
- 1 → 1.1 → 2.2 순으로 미분 값을 전달한다.
연쇄 법칙
- `역전파는 국소적인 미분을 순방향과는 반대인 오른쪽에서 왼쪽으로 전달한다. 또한, 이 국소적 미분을 전달하는 원리는 연쇄 법칙(Chain Rule)에 따른 것이다.
계산 그래프의 역전파
- \(y=f(x) \)라는 계산의 역전파를 그려면 다음과 같다.
- 상류에서 전달된 신호 E와 y를 x에 대해 편미분한 값을 곱해서 아래로 전달한다.
- 이러한 방식을 따르면 목표로 하는 미분 값을 효율적으로 구할 수 있다. 이것이 가능한 이유는?
연쇄법칙이란?
- 연쇄법칙을 이해하기 위해선 합성 함수 개념을 이해해야 한다. 합성 함수란 여러 함수로 구성된 함수이다.
- 예를 들어, \(z= (x+y)^2\) 은 다음의 두 개의 식으로 이루어져 있다.
$$ z=t^2$$ $$t = x+ y $$
- 연쇄 법칙은 합성 함수의 미분에 대한 성질이며, 다음과 같이 정의 된다.
- 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다.
- 위 식으로 예를 들면, 다음이 성립된다 (\(\partial t\) 를 지울 수 있음에 주목)
\( \frac{\partial z}{\partial x}= \frac{\partial z}{\partial t} \frac{\partial t}{\partial x} \)
\( \frac{\partial z}{\partial x}= \frac{\partial z}{\partial t} \frac{\partial t}{\partial x} =2t * 1 = 2(x+y) \)
\( \frac{\partial z}{\partial x}= \frac{\partial z}{\partial t} \frac{\partial t}{\partial x} =2t * 1 = 2(x+y) \)
밑딥이 설명이 잘되어 있긴 하지만, 책이 얇기도 한 만큼 설명이 충분하지는 않은 것 같다. 역전파가 가능한 원리에 대해서는 잘 이해 되지만 이게 왜 필요한지를 조금 더 설명하는게 필요하지 않나 싶다.
결국 이것이 필요한 이유는, 우리가 최종적으로 줄여야하는 Loss 함수가 w 로 되어 있기 때문에, 즉 \(L(x; w)\)라서 \(dL/dW\)가 필요하다.
그런데 딥러닝에서는 층이 깊어지면 마치 \( L = h(g(f(w)))\)처럼 여러 합성 함수로 되어있기 때문에, 연쇄 미분을 통해서 \(dL/dW\)를 구해야 한다. 그래서 지금 이렇게 연쇄법칙을 저자가 말하고 있는 것
$$\frac{\partial z}{\partial t} = 2t, \frac{\partial t}{\partial x} = 1$$
연쇄법칙과 계산 그래프
- 위 식을 계산 그래프로 나타내 보자
- \(\frac{\partial z}{\partial z}\)를 꼭 넣어주네?
- 즉, 역전파가 하는 일은 연쇄 법칙의 원리와 같다.
- 결국 아래처럼 연쇄법칙에 따라 \(\frac{\partial z}{\partial x} = 2(x+y)\) 임을 알 수 있다.
역전파
덧셈 노드의 역전파
- z = x + y 라는 식에 대해서 역전파를 그려보자
- 덧셈 노드의 역전파는 상류에서 전해진 미분에 1을 곱하여 하류로 흘려보내게 된다.
- \(\frac{\partial z}{\partial x} = \frac{\partial z}{\partial y} = 1\) 이라서 위 오른쪽 그림에서 1을 곱해준 것.
- 여기서 L은 최종적으로 출력해야 하는 값으로, z = x + y 계산은 그 큰 계산 그래프의 중간 어디쯤 존재하고, 상류로부터 \(\frac{\partial L}{\partial z}\)값이 전해진 것으로 간주
곱셈 노드의 역전파
- z = xy 라는 식에 대해서 생각해보자
- 곱셈 노드 역전파는 상류의 값에 상관없이 신호들을 서로 바꾼 값을 곱해서 하류로 흘려보낸다.
- 곱셈의 역전파는 순방향 입력 신호 값을 알아야 역전파의 값도 알 수 있기 때문에 미리 저장해둬야 한다.
사과 쇼핑의 예
- 위 사과 쇼핑의 예를 보면 다음과 같아진다.
활성화 함수 계층 구현하기
ReLU 계층
- ReLU의 수식은 다음과 같다.
- $$ ReLU(X) = \begin{cases} 0 & (x \leq 0) \\ x & (x > 0) \end{cases} $$
- ReLU를 x에 대해서 미분하면
- $$ \frac{\partial ReLU}{\partial x}= \begin{cases} 0 & (x \leq 0) \\ 1 & (x > 0) \end{cases} $$
- ReLU 계층의 계산 그래프
- ReLU 계층은 전기 회로의 ‘스위치’에 비유할 수 있다. 순전파 때 전류가 흐르고 있으면 스위치를 ON으로 하고, 흐르지 않으면 OFF로 한다. 역전파 때는 스위치가 ON이라면 전류가 그대로 흐르고, OFF면 더이상 흐르지 않는다.
Sigmoid 계층
$$ y = \sigma(x) = \frac{1}{1+exp(-x)} $$
- \(\frac{d}{dx} \sigma(x) = \sigma(x)(1-\sigma(x)\))이므로(증명),
- 책에서는 복잡하게 되어 있지만 결국 위와 같다.
Affine/Softmax 계층 구현하기
Affine 계층
- 신경망의 순전파 때 수행하는 행렬의 곱은 기하학에서는 Affine Transformation이라고 한다. 따라서 이 책에서는 어파인 변환을 수행하는 처리를 Affine 계층으로 구현한다.
- 위의 값들은 스칼라 값이 아니라 행렬임에 주의. 괄호안 숫자는 행렬의 형태
- Affine 계층의 역전파를 그려보면 다음과 같다.
- 여기서 X에 대한 미분 값은 어디에 쓰는거지?.?
- \(Y = WX + B\) 였으니까 \(dY/dW = X\) 임을 인지하면, \(\frac{\partial L}{\partial W} = \frac{\partial L}{\partial Y} \frac{\partial Y}{\partial W} = \frac{\partial L}{\partial Y} * X\) 가 됨을 알 수 있음
Softmax-with-Loss 계층
- Softmax 계층과 Cross Entropy Error 계층을 조합한 것을 Softmax-with-loss 계층이라 한다.
- 3개 클래스를 분류하는 신경망이라고 가정하면 계산 그래프는 다음과 같다.
- 이전 계층으로부터의 입력은 \((a_1, a_2, a_3)\)이며 Softmax 계층은 \((y_1, y_2, y_3)\)를 출력한다.
- 정답 레이블은 \((t_1, t_2, t_3)\)이다.
순전파
- Softmax 계층의 계산 그래프는 다음과 같다.
- Cross Entropy Error 계층의 순전파 계산 그래프
역전파
- Cross Entropy Error 계층의 역전파
- 곱셈노드는 값을 바꿔주고, 덧셈 노드는 상류에서 온 값을 그대로 흘리고, log 노드는 역수를 취한 값을 곱해준다. (왜냐면 \(\frac{\partial{\space log \space x}}{\partial x} = \frac{1}{x}\) 이라서)
- 따라서, \(-\frac{t_1}{y_1}, -\frac{t_2}{y_2}, -\frac{t_3}{y_3}\) 값이 역전파로 전달된다.
Softmax 계층의 역전파
1단계 : Cross Entropy Error 계층의 역전파 값이 흘러나옴
2단계 : ‘x’ 노드에서는 순전파의 입력들을 서로 바꿔주므로 아래와 같은 계산이 이뤄짐
- \(-\frac{t_1}{y_1} * e^{a_1}= -t_1 \frac{S}{e^{a_1}} * e^{a_1} = -t_1S\)
3단계: 값 S가 순전파 때는 3개의 노드로 흘렀다면, 역전파 때는 세개의 노드에서 미분 값이 더해져야 한다.
- 값 S가 순전파 때는 3개의 노드로 흘렀다면, 역전파 때는 세개의 노드에서 미분 값이 더해져야 한다.
- 따라서 \(-(t_1S + t_2S + t_3S)\) 가 더해진다.
- 이 더해진 값이 ‘/’ 노드의 역전파를 거치는데 여기서 \(y = \frac{1}{x}, \frac{\partial y}{\partial x} = - x^{-2}\) 이므로,
- \(-\frac{1}{S^2} * -(t_1S+ t_2S+ t_3S) = \frac{1}{S}(t_1+t_2+t_3)\)
- 여기서 \((t_1+t_2+t_3)=1\) 이므로, 결국 \(\frac{1}{S}\)가 역전파 출력이 된다.
4단계: 덧셈 노드이므로 입력을 그대로 흘려보냄
5단계: 곱셈 노드이므로 입력을 서로 바꿔서 흘려보낸다.
6단계
- ‘exp’ 노드에서는 미분해도 변하지 않는다.
- 두 갈래 입력에서 들어온 미분을 더한 뒤 \(e^{a_1}\)을 곱해줌
- \((\frac{1}{S}-\frac{t_1}{e^{a_1}})*e^{a_1}=y_1-t_1\)
- 결과적으로 순전파의 입력 \(a_1\)이 \(y_1-t_1\)으로 역전파 되는 것이 유도 되었다.
- 해석하면, \( t_1\)이 0 이면 미분값이 \(y_1\) 이므로, \(y_1\) 값이 0에 가까울 수록 Loss가 적다.
- \(t_1\)이 1 이면 미분값이 \(y_1-t_1\) 이므로, \(y_1\) 값이 1에 가까울 수록 Loss가 적다.
정리
오차역전파법 구현하기
신경망 학습의 전체 그림
- 1단계 - 미니배치
- 임 무작위 훈련데이터 가져오기
- 2단계 - 기울기 산출
- 미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구한다. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시한다.
- 3단계 - 매개변수 갱신
- 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다.
- 4단계 - 반복
- 위 1~3단계를 반복한다.
이번 장에서 배운 내용 정리
- 계산 그래프를 이용하면 계산 과정을 시각적으로 파악할 수 있다.
- 계산 그래프의 노드는 국소적 계산으로 구성된다. 국소적 계산을 조합해 전체 계산을 구성한다.
- 계산 그래프의 순저파는 통상의 계산을 수행한다. 한편, 계산 그래프의 역전파로는 각 노드의 미분을 구할 수 있다.
- 신경망의 구성 요소를 계층으로 구현하여 기울기를 효율적으로 계산할 수 있다(오차 역전파법)
- 수치 미분과 오차 역전파법의 결과를 비교하면 오차 역전파법의 구현에 잘못이 없는지 확인할 수 있다(기울기 확
'인공지능 > [책] 밑바닥부터 시작하는 딥러닝1' 카테고리의 다른 글
[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 7. 합성곱 신경망(CNN) (0) | 2024.11.10 |
---|---|
[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 6. 학습 관련 기술들 (0) | 2024.11.10 |
[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 3. 신경망 (0) | 2024.11.10 |
[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 4. 신경망 학습 (0) | 2024.11.09 |
[책 요약] 밑바닥부터 시작하는 딥러닝 1-Chapter 2. 퍼셉트론 (0) | 2024.11.09 |