역전파 데모
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$

역전파 알고리즘

역전파 알고리즘은 대규모 신경망을 빠르게 교육하는 데 필수적입니다. 이 문서는 알고리즘의 작동 방식을 설명합니다.

아래로 스크롤하세요...

간단한 신경망

오른쪽에 표시된 신경망은 입력 노드 한 개, 출력 노드 한 개 그리고 두 노드 각각의 히든 레이어가 있습니다.

인접하는 레이어의 노드는 가중치 \(w_{ij}\)로 연결되어 있으며, 이는 네트워크 매개변수입니다.

활성화 함수

각 노드에는 총 입력 \(\color{input}x\), 활성화 함수 \(f(\color{input}x\color{black})\) 및 출력 \(\color{output}y\color{black}=f(\color{input}x\color{black})\)이(가) 있습니다. \(f(\color{input}x\color{black})\)은(는) 비선형 함수여야 하며, 그렇지 않으면 신경망은 선형 모델만 학습할 수 있습니다.

일반적으로 사용되는 활성화 함수는 시그모이드 함수입니다. \(f(\color{input}x\color{black}) = \frac{1}{1+e^{-\color{input}x}}\).

오류 함수

목표는 네트워크의 가중치를 데이터로부터 자동으로 학습하여 예측된 출력 \(\color{output}y_{출력}\)이(가) 모든 입력 \(\color{input}x_{입력}\)의 목표 \(\color{output}y_{대상}\)에 가까워지게 하는 것입니다.

목표까지 얼마나 남았는지 확인하기 위해 오류 함수 \(E\)을(를) 사용합니다. 일반적으로 사용되는 오류 함수는 \(E(\color{output}y_{출력}\color{black},\color{output}y_{대상}\color{black}) = \frac{1}{2}(\color{output}y_{출력}\color{black} - \color{output}y_{대상}\color{black})^2 \)입니다.

순전파

먼저 입력 예 \((\color{input}x_{입력}\color{black},\color{output}y_{대상}\color{black})\)(으)로 네트워크의 입력 레이어를 업데이트합니다.

일관성을 위해 입력은 \( \color{output}y_1 \color{black} = \color{input} x_{입력} \)과(와) 같이 다른 모든 노드와 같은 형태이나 활성화 함수가 없어 출력이 입력과 같은 것으로 간주합니다.

순전파

이제 첫 번째 히든 레이어를 업데이트합니다. 이전 레이어의 노드 출력 \(\color{output}y\)으로 가중치를 사용하여 다음 레이어의 노드 입력 \(\color{input}x\)을(를) 계산합니다.
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

순전파

그런 다음 첫 번째 히든 레이어의 노드 출력을 업데이트합니다. 이를 위해 활성화 함수 \( f(x) \)를 사용합니다.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

순전파

이 두 가지 수식을 사용하여 나머지 네트워크에 전파시키고 네트워크의 최종 출력을 얻습니다.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

오류 파생값

역전파 알고리즘은 특정 예에서 예측 출력과 원하는 출력을 비교한 후 네트워크의 각 가중치를 얼마나 업데이트할지 결정합니다. 이를 위해 각 가중치 \(\color{dweight}\frac{dE}{dw_{ij}}\)의 오류가 얼마나 변화하는지를 계산해야 합니다.
오류 파생값을 도출하면 간단한 업데이트 규칙으로 가중치를 업데이트할 수 있습니다.
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
\(\alpha\)은(는) 양의 상수로 학습률이라고 하며, 경험을 통해 세부적으로 조정해야 합니다.

[참고] 업데이트 규칙은 아주 간단합니다. 가중치가 증가할 때 오류가 감소하면 (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), 가중치를 증가시키고, 가중치가 증가할 때 오류가 증가하면 (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), 가중치를 감소시킵니다.

추가 파생값

\(\color{dweight}\frac{dE}{dw_{ij}}\)을(를) 계산하기 위해 각 노드에 두 가지 파생값을 추가로 저장하였습니다. 다음에 관해 오류가 어떻게 변화하는지 계산합니다.
  • 노드의 총 입력\(\color{dinput}\frac{dE}{dx}\) 및
  • 노드의 출력\(\color{dinput}\frac{dE}{dy}\)

역전파

먼저 오류 파생값을 역전파시킵니다. 이 특정 입력 예의 예측된 출력이 있으므로 이 출력의 오류가 어떻게 변화하는지 계산할 수 있습니다. 오류 함수가 다음과 같이 주어지면 \(E = \frac{1}{2}(\color{output}y_{출력}\color{black} - \color{output}y_{출력}\color{black})^2\) 값은 다음과 같습니다.
$$ \color{doutput} \frac{\partial E}{\partial y_{출력}} \color{black} = \color{output} y_{출력} \color{black} - \color{output} y_{대상}$$

역전파

이제 \(\color{doutput} \frac{dE}{dy}\)이(가) 있으므로 연쇄법칙을 사용하여 \(\color{dinput}\frac{dE}{dx}\)을(를) 얻을 수 있습니다.
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
\(f(\color{input}x\color{black})\)이(가) 시그모이드 활성화 함수일 때 \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\)입니다.

역전파

총 노드 입력의 오류 파생값을 도출하면 이 노드에 들어오는 가중치의 오류 파생값을 얻을 수 있습니다.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

역전파

그리고 연쇄법칙을 사용하면 이전 레이어에서 \(\frac{dE}{dy}\)을(를) 얻을 수 있습니다. 이렇게 하여 완전한 원을 완성했습니다.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

역전파

이제 모든 오류 파생값을 계산할 때까지 앞의 세 가지 수식을 반복하면 됩니다.

계산 중...