Backpropagation은 현대의 인공신경망, 소위 딥 러닝에서 학습을 진행하는 방식으로, 과거 1950 - 60년대 인공신경망 기술의 한계를 극복하는 계기가 된 기술입니다.
구체적으로는
supervised learning에서, 정답과 신경망이 계산한 답 사이의 오차를 계산하고 오차를 줄이도록 계산하는 것이에요.
최종 단계의 neuron에서, weight값(네트워크에서 반영되는 비중, 가중치)을 이용해서 이전에 거쳤던 neuron들이 error에 어느 정도의 영향을 끼쳤는지 반영해서 일반적인 데이터 흐름과 '반대로' 흘러보내거든요.
그래서 이를 '오류역전파법'이라고 하기도 합니다.
이를 통해 오차율을 역으로 내부 신경망의 각 neuron들에 흘려보내 뉴런이 가진 weight를 조정하도록 함으로서, 신경망 내부의 오차들을 감소시킵니다.
스팬포드 대학의 오픈 강좌인 cs231에 보면 이러한 오류역전파법이 실제로 어떻게 적용되는지 잘 설명이 되어있는데요.
lecture 4에 있는 backpropagation에 대해 간단하게 설명을 해 드릴까 해요.
일단 neuron에서의 기본적인 데이터 입출력 구조입니다.
녹색 선 z 는 신경망 하에서의 기본적인 데이터 흐름이나, backpropagation에서의 오류는 역전파되므로 데이터의 흐름이 반대로(빨강색 선) 흘러요.
일반적으로 backpropagation에 활용되는 방식은 경사하강법으로
미분을 이용해 오차의 기울기를 구해 neuron들에 역으로 보내는 방식을 활용합니다. 그래서 저 위의 적색 선 위의 기호들이 편미분 기호로 표현되어 있습니다.
cs231강의에서 오류역전파법에 대해 간략하게 설명이 되어 있는데요.
이를 이용해서 설명을 드려보자면...
일단 신경망의 가중치가 이런 식으로 있다고 하면...
초기 오류값은 1.00이라고 해 봅시다.
여기서 backpropagation을 이용하여 첫 번째 뉴런의 가중치를 구해야 하는데, 경사하강법에서는 미분 값을 이용하므로, 첫 번째 뉴런에 대해 미분을 해 불 수 있겠죠. 여기서는 -1/x^2 가 나오네요.
위의 미분값에 이전의 x값(x = 오류역전파가 아닌 일반 데이터)을 대입해서 이전의 오류 수치를 여기에 반영하는 방식으로, 앞의 neuron에 오류 값이 보내지죠.
갈래가 아닌 단일 neuron 연결 구조라면, 앞 neuron의 오차값을 이어받아 neuron내부의 오차값을 이어받아 계산을 해서 반영해주면 됩니다.
참고로 앞의(-1* , exp, +1, 1/x)는 sigmoid와 사실상 같아서, 한 번의 연산으로 4개를 건너뛸 수 있습니다.
(+) neuron의 경우에는 조금 특수한데요.
오차율이 별도의 계산을 거치지 않고 선행 neuron에 그냥 전파되게 됩니다.
(*) 뉴런일 경우에는..
반대쪽 neuron의 x(데이터 입력)을 반영하여 오류가 반영됩니다.
그 외에 max gate(neuron)일 경우 값이 높은 쪽에만 오차를 전파한다고 하네요.
입력 데이터(y)가 matrix형태일 경우, jacobian matrix을 사용해요.
jacobian matrix는, 행렬의 각 변수에 대해 편미분을 한 것입니다.
참고 - https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant
다만 이러한 backpropagation방식에는 한계가 있는데요.
gradient descent(경사하강법 - 미분의 기울기를 이용해 오차를 줄여 나가는 방식) 에서는 global optimum을 찾기가 어려운 점이 있다고 하네요.
참고 - https://en.wikipedia.org/wiki/Backpropagation#Limitations
댓글 없음:
댓글 쓰기
글에 대한 의문점이나 요청점, 남기고 싶은 댓글이 있으시면 남겨 주세요. 단 악성 및 스팸성 댓글일 경우 삭제 및 차단될 수 있습니다.
모든 댓글은 검토 후 게시됩니다.