ANN에서 사용하는 Backpropagation 노트

2398 단어 기계 학습

입문


이 문장에서 쓰지 않고 끝난 Backpropagation을 기록합니다.
계산 방법과 설치는 비교적 쉽지만 이해하는 데 시간이 걸리기 때문에 정리한 후 자신의 메모용으로 사용한다.

어디에서 사용합니까?


인공신경망(ANN: Artificial Neural Network)과 심층신경망(DNN: Deep Neural Network)을 학습할 때 발생하는 오차가 네트워크에 반영될 때 사용하는 방법은 Backpropagation이다.
Backpropagation은 일본어에서 오차 역전파법이라고 불린다.

계산 방법


업데이트 처리에서 다음 원가 함수 $J$는 매개 변수 $\Theta$로 미세한 값을 나누어야 합니다.
\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)
이것은 매개 변수 $\Theta_모든 {ij}^(l)}$에서 오차를 구합니다. 한 번에 모든 것을 구하는 것은 비현실적입니다. 이보다 효율이 좋은 구법이 있습니다. 이것이 바로 Backpropagation Algorithm입니다.
다음 4층 ANN을 예로 들어 Backpropagation을 계산합니다.

우선, 입력 값이 $x$이면 Forward Propagation의 계산은 다음과 같습니다.
\begin{align}
a^{(1)} &= x \\
\\
z^{(2)} &= \Theta^{(1)}a^{(1)} \\
a^{(2)} &= g(z^{(2)}) \\
a^{(2)} &:= \left(\begin{matrix}
1 \\
a_1^{(2)}\\
\vdots\\
a_{s_2}^{(2)}
\end{matrix}\right)\\
\\
z^{(3)} &= \Theta^{(2)}a^{(2)} \\
a^{(3)} &= g(z^{(3)}) \\
a^{(3)} &:= \left(\begin{matrix}
1 \\
a_1^{(3)}\\
\vdots\\
a_{s_3}^{(3)}
\end{matrix}\right)\\
\\
z^{(4)} &= \Theta^{(3)}a^{(3)} \\
a^{(4)} &= g(z^{(4)}) = h_\Theta(x)
\end{align}
레이어당 $l$노드 $j$의 오차는 $\delta_{j}^{(l)}$.
그리고 각 노드의 오차 $\delta_{j}^(l)}$는 다음과 같이 계산됩니다.
\begin{align}
\delta^{(4)} &= a^{(4)} - y \\
\\
\delta^{(3)} &= (\Theta^{(3)})^T \delta^{(4)} \circ g^\prime(z^{(3)}) \\
\\
\delta^{(2)} &= (\Theta^{(2)})^T \delta^{(3)} \circ g^\prime(z^{(2)}) \\
\end{align}
$\delta^ (1)}$이 없는 이유는 입력 값에 오차가 없기 때문입니다.
$g^\prime(\cdot)$는 활성화 함수의 도수입니다. Sigmoid 함수라면 $x(1-x)$입니다. 또한 $\circ$는 아다마적으로 행렬의 요소 간의 누적을 나타냅니다.
각 레이어의 $\delta^ (l)}$를 구할 수 있으면 업데이트 값을 계산합니다.
\begin{align}
\triangle_{ij}^{(l)} &= \sum_{i=1}^m a_j^{(l)}\delta_i^{(l+1)} \\

\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) &= \frac{1}{m}\triangle_{ij}^{(l)} + \lambda\Theta_{ij}^{(l)} \\
\end{align}

총결산


Backpropagation은 단순한 계산이 아니라 Forward propagation과 비슷한 설치입니다.
만약 식을 이해하지 못한다면, 변수의 비수를 확인하면 된다.

좋은 웹페이지 즐겨찾기