역전파 데모
$$ \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} $$

역전파 알고리즘

역전파 알고리즘은 대규모 신경망을 빠르게 학습시키는 데 필수적입니다. 이 도움말에서는 알고리즘의 작동 방식을 설명합니다.

아래로 스크롤하세요.

간단한 신경망

오른쪽에는 입력 노드 1개, 출력 노드 1개, 노드 2개로 구성된 히든 레이어 2개가 있는 신경망이 표시됩니다.

인접 레이어의 노드는 네트워크 매개변수인 가중치 \(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_{target}\) 모든 입력의 \(\color{output}y_{output}\) 타겟에 가깝도록 설정하는 것입니다.

목표에서 얼마나 떨어져 있는지 측정하기 위해 오류 함수를 사용합니다 \(E\). 일반적으로 사용되는 오류 함수는 \(E(\color{output}y_{output}\color{black},\color{output}y_{target}\color{black}) = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2 \)입니다.

정방향 전파

먼저 입력 예시를 사용하고 \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) 네트워크의 입력 레이어를 업데이트합니다.

일관성을 위해 입력이 다른 노드와 같지만 활성화 함수가 없는 것으로 간주하여 출력이 입력과 같습니다. 즉, \( \color{output}y_1 \color{black} = \color{input} x_{input} \)입니다.

정방향 전파

이제 첫 번째 히든 레이어를 업데이트합니다. 이전 레이어에 있는 노드의 출력 \(\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{doutput}\frac{dE}{dy}\)의 출력입니다.

역전파

오류 파생값을 역전파하기 시작합니다. 이 특정 입력 예의 예측된 출력이 있으므로 해당 출력에서 오류가 어떻게 변경되는지 계산할 수 있습니다. 오류 함수는 \(E = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2\) 다음과 같습니다.
$$ \color{doutput} \frac{\partial E}{\partial y_{output}} \color{black} = \color{output} y_{output} \color{black} - \color{output} y_{target}$$

역전파

체인 규칙을 \(\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}$$
여기서 \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) 는 \(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}$$

역전파

해야 할 남은 작업은 모든 오류 파생값을 계산할 때까지 이전 세 가지 수식을 반복하는 것입니다.

계산 중...