*강의 영상*: https://www.youtube.com/watch?v=dB-u77Y5a6A
이전 강의에서 Space Wrapping, 신경망의 비선형성과 비볼록성(non-convexity)으로 인해 이론적인 보장이 적다는 단점이 있고 이론적으로 보장된 결과를 얻기 어렵지만, 그럼에도 신경망이 선형 분류기보다 훨씬 강력한 계산 능력을 제공한다는 것을 배웠다.
신경망은 비선형 결정 경계를 학습할 수 있으며, 이를 통해 보다 복잡한 데이터 구조를 처리할 수 있다. 그러나 이전에 말했던 convexity issue로 인해 손실 함수를 최소화하는 것이 어려울 수 있으며, 여기서 역전파 알고리즘이 중요해진다.
오늘 6강에서는 역전파(Backpropagation) 알고리즘에 대해 다루며, 이는 신경망에서 그라디언트를 계산하여 가중치를 업데이트하는 핵심 방법을 배울것이다. 역전파를 이해하는 것은 신경망 모델을 효과적으로 학습시키는 데 필수적이다.
가장 먼저 역전파가 이끌어내진 방법론에 대해 설명하겠다.
무엇이든 비싼 Computational cost가 들고, 복잡한 매커니즘을 가지고 있는 연구를 할 때에는 손으로 하나부터 열까지 하는것 보단 공식, 패턴, 알고리즘을 찾아 기계에게 iterative 작업을 시키는것이 가장 효율이 잘 나올 것이다.
그런 의미에서 역전파 알고리즘, Backpropagation Algorithm은 Computational Graph, 계산 그래프라는 단순한 노드, 벡터, 게이트를 사용하여 효율적인 전개를 완성했다. 계산 그래프는 모델의 각 연산을 노드로 표현하고, 노드 간의 연결을 통해 전체 연산 과정을 나타낸다. 역전파는 이 계산 그래프를 역방향으로 탐색하면서 그라디언트를 계산한다.
다음 예제를 보면, 간단한 함수에서 역전파를 수행하는 과정을 설명한다. 예를 들어, 함수 f(x, y, z) = (x + y) * z에 대해, 순전파 단계에서 x와 y를 더하고, 이를 z와 곱하여 출력을 계산한다. 역전파 단계에서는 출력에 대한 x, y, z의 그라디언트를 계산하는데, Chain rule, 연쇄 작용을 사용하여 각각의 gradient를 계산한다.
역전파 알고리즘의 작동 원리에 대해 살펴보자,
역전파는 주어진 입력에 대해 모델의 출력을 계산하는 순전파(forward pass) 단계와, 출력에 대한 손실의 그라디언트를 계산하는 역전파 단계, Backpropagation으로 이루어진다.
역전파는 체인 룰(chain rule)을 이용하여 출력에서 입력으로 그라디언트를 전파하며, 각 단계에서 local gradient를 계산하고, 이를 upstream gradient와 곱하여 다운스트림 그라디언트, downstream gradient를 계산한다.
$
\frac{\partial L}{\partial \mathbf{x}} = \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \cdot \frac{\partial L}{\partial \mathbf{y}}
$
이 예제에서 사용하는 함수는 f(x, w)로, 이는 입력 변수와 가중치를 받아 파란색 네모안에 있는 과정들이 모두 Sigmoid 함수로 축소되었다.
• 입력 값으로 가중치 w0, w1, w2와 입력 변수 x0, x1을 받아, 각각 곱한 후 더한다. 즉, 첫 번째 단계에서는 w0 곱하기 x0, w1 곱하기 x1, w2를 계산한다.
• 이들의 합을 계산한 후, 이 결과를 Sigmoid 함수에 입력으로 사용한다. Sigmoid 함수는 해당 값을 변환하여 최종 출력을 만든다.
Sigmoid 함수로 축소되지않았다면 더 많은 computational cost가 들고 비효율적이었지만 시그모이드로 변환하여 한번에 gradient를 구한 모습이다. Computational Graph를 왜 사용하는지에 대한 좋은 예이며, 그림에서는 계산 그래프를 사용하여 Sigmoid 함수의 그라디언트를 효율적으로 계산하는 방법을 설명하고 있다. Sigmoid 함수는 자주 사용되므로, 이 함수에 대한 그라디언트를 미리 계산해 두거나, 특정 조건에서 계산 과정을 간소화할 수 있다.
다음 그림은 벡터나 행렬 같은 다차원 텐서에 대해 역전파를 수행하는 방법을 설명한다. 이 경우, 그라디언트는 스칼라가 아니라 벡터나 행렬이 될 수 있으며, 이로 인해 야코비안(Jacobian) 행렬과 같은 개념이 등장한다. 특히, vector-vector, vector-matrix 곱셈의 형태로 나타나는 그라디언트를 효율적으로 계산하는 방법이 강조된다.
Backprop with Vectors에 대해 알아본다. 개인적으로 좀 중요하다고 판단되어 수식으로 풀어나가 보자.
벡터를 사용하는 역전파에서는 각 벡터 요소에 대한 그라디언트를 계산한다. 예를 들어, ReLU 함수의 경우, 입력 벡터 x가 [1, -2, 3, -1]일 때, 출력 벡터 y는 [1, 0, 3, 0]이 된다. 이때 손실에 대한 그라디언트 dy는 [4, -1, 5, 9]로 주어진다.
벡터 y에 대한 벡터 x의 그라디언트는 야코비안 행렬로 표현되며, ReLU 함수의 영향을 받아, max(0, x), 음수는 모두 0이 되어 야코비안 행렬은 다음과 같이 구성된다:
- 첫 번째 행: [1, 0, 0, 0]
- 두 번째 행: [0, 0, 0, 0]
- 세 번째 행: [0, 0, 1, 0]
- 네 번째 행: [0, 0, 0, 0]
야코비안 행렬을 사용하여 입력 벡터 x에 대한 손실의 그라디언트 dx를 계산한다. 결과적으로, dx는 [4, 0, 5, 0]이 된다.
Backprop with Matrix Multiplication 역시 중요하다. 수식으로 풀어나가보자.
행렬 곱셈의 역전파에서는 입력 행렬과 가중치 행렬에 대한 그라디언트를 계산한다. 주어진 예제에서 입력 행렬 x는 다음과 같다:
- 첫 번째 행: [2, 1, -3]
- 두 번째 행: [-3, 4, 2]
$
\frac{\partial L}{\partial \mathbf{x}} = \frac{\partial L}{\partial \mathbf{y}} \cdot \mathbf{w}^T
$
가중치 행렬 w는 다음과 같이 주어진다:
- 첫 번째 행: [3, 2, 1, -1]
- 두 번째 행: [2, 1, 3, 2]
- 세 번째 행: [3, 2, 1, -2]
$
\frac{\partial L}{\partial \mathbf{w}} = \mathbf{x}^T \cdot \frac{\partial L}{\partial \mathbf{y}}
$
결과 행렬 y는 x와 w의 곱으로 계산되며, y는 다음과 같이 나타난다:
- 첫 번째 행: [-1, -1, 2, 6]
- 두 번째 행: [5, 2, 11, 7]
이제, 주어진 그라디언트 dy는 다음과 같다:
- 첫 번째 행: [2, 3, -3, 9]
- 두 번째 행: [-8, 1, 4, 6]
이를 바탕으로 입력 행렬 x와 가중치 행렬 w의 그라디언트를 계산한다.
- 입력 행렬에 대한 그라디언트 dx는 dy와 w의 전치행렬을 곱하여 계산된다. dx는 다음과 같다:
- 첫 번째 행: [0, 16, -9]
- 두 번째 행: [-24, 9, -30]
- 가중치 행렬에 대한 그라디언트 dw는 x의 전치행렬과 dy를 곱하여 계산된다. dw는 다음과 같다:
- 첫 번째 행: [-34, 10, -14, -6]
- 두 번째 행: [10, 7, -1, 22]
- 세 번째 행: [18, -11, 17, -25]
$
\frac{\partial L}{\partial \mathbf{w}} = \mathbf{x}^T \cdot \frac{\partial L}{\partial \mathbf{y}} = \begin{bmatrix}
-34 & 10 & -14 & -6 \\
10 & 7 & -1 & 22 \\
18 & -11 & 17 & -25
\end{bmatrix}
$
처음엔 나도 이해가 가지 않았다. 쉽게 설명하면 dx(1,1)으로 편미분하는것이니 w(1,1)만 남고 결국은 w의 첫 번째 행만 남고 나머지는 0으로 채워지는 것이다..
마지막으로, 역전파 알고리즘은 손실 함수 scalar만 구할 수 있는것이 아니다. 무궁무진한 가능성을 지니고 있는것 같다.
역전파를 확장하여 고차 도함수(higher-order derivatives)를 계산하는 방법도 다룬다. 예를 들어, 2차 도함수인 헤시안(Hessian) 행렬을 계산하거나, 헤시안과 벡터의 곱을 계산하는 방법을 설명한다. 이러한 계산은 네트워크의 학습을 더 정교하게 할 수 있는 정보를 제공할 수 있다.
또한 GAN 논문 중에 gradient Norm을 고차, 이계 도함수(derivatives)로 정리한 것도 있다.
...오늘은 신경망 모델에서의 기울기 계산을 효율적으로 수행하기 위한 역전파 알고리즘에 대해 심도 있게 다루어 보았다. Computational Graph를 사용하여 역전파 알고리즘이 어떻게 세워졌는지 알았고. 수식을 필두로 하여 역전파 과정을 세밀하게 들여다 보았으며 원리를 이해할 수 있었다.
'Computer Vision' 카테고리의 다른 글
[EECS 498-007] lec8. CNN Architectures (0) | 2024.08.13 |
---|---|
[EECS 498-007] lec7. Convolutional Networks (0) | 2024.08.12 |
[EECS 498-007] lec5. Neural Networks (1) | 2024.08.07 |
[EECS 498-007] lec4. Optimization (0) | 2024.08.05 |
[EECS 498-007] lec3. Linear Classifiers (0) | 2024.08.05 |