본문 내용은 cs231n의 유튜브를 기반으로 작성되었음을 알려드립니다.
유튜브 링크 : https://www.youtube.com/watch?v=d14TUNcbn1k&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=4
자료 출처 : http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture4.pdf
1. Backpropagation
-
위 그림은 계산 그래프로 계산 과정을 그래프로 나타낸 것이다. 왼쪽에서 L방향으로 가는 것이 Forwardpropagation, 역방향을 Backpropagation이라고 합니다.
-
일단 오차역전파법(backpropagation)은 가중치의 gradient를 효율적으로 계산하기 위해서 사용하는 방법입니다. gradient는 모델 성능을 높이기 위해서 loss값을 줄이기 위한 방향을 결정하는 데 필요합니다. 단순하게 미분을 해서 gradient를 구해도 되지만 시간이 오래 걸리는 단점이 있습니다.
-
위의 그림에서 우리의 목표는 f를 x,y,z로 미분했을 때의 값을 구하고자 하는 것 입니다.
-
초록색 부분은 특정한 값을 넣었을 때의 f값이 되겠습니다.
-
우선 가장 끝부분(가장 우측 -12)은 df/df 이므로 1이라고 작성하였습니다.
-
-
곱하기(gradient switcher)
-
그 다음 역순으로 올라가보면 df/dz를 구하기 위해서는 위쪽에 있는 q의 값과 df/df값을 곱한 값이 되겠습니다.
-
반대로 df/dq를 구하는 것은 z*df/df인 -4가 되겠습니다.
-
-
더하기(gradient distributor)
-
쉽게 생각하면 df/dx는 체인 룰에 의해 df/dq*dq/dx가 됩니다. 여기서 dq/dx=1이므로, df/dx = df/dq가 되겠습니다.
-
df/dy도 동일한 과정에 의해 df/dq와 동일한 값을 얻게 됩니다.
-
-
체인 룰(연쇄법칙)
-
합성함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있습니다.
-
-
위에서 말씀해드린 예시가 문자로 표현되어 있다는 것을 알 수 있습니다. 체인 룰에 의해 dL/dy = dL/dq*dq/dy와 같아진다는 것을 알 수 있습니다.
-
또 다른 예제를 풀어주시면서 곱하기, 더하기 말고도 어떻게 적용해야 하는 지 설명해주셨습니다. 예시로 사용된 함수는 시그모이드 함수와 형태가 같은 것을 사용했습니다.
-
가장 우측에 -0.53은 (1/x)를 미분하고 1.37을 대입, df/df를 곱해줘서 얻을 수 있습니다.
-
아래로 가는 것도 동일한 방법으로 구할 수 있습니다.
-
위의 강의자료처럼 구할 수 있습니다. 곱하기와 더하기 부분은 맨 위의 예제와 동일한 방법으로 구할 수 있으니 생략했습니다.
-
아까 말씀드렸던 sigmoid function임을 알려주시면서 직접 미분해서 얻은 값도 동일하다는 것을 증명할 수 있습니다.
-
여기서 max라는 노드가 나오게 되는 데 이것은 z,w값 중에 큰 값을 리턴하는 함수로 backpropagation을 적용할 때에도 동일하게 한쪽으로 gradient를 전달해줍니다.
-
Jacobian Matrix
- Jacobian Matrix는 선형대수에서 나오는 데, 편미분 변수를 구해야할 것이 많을 때 사용하는 matrix라고 보면 되겠습니다.
- 자세한 내용은 블로그 url을 참고하시면 도움이 될 것 같습니다.
m.blog.naver.com/jinohpark79/110190680093
-
이번에는 단일 값이 아닌 행렬이 들어왔을 때 어떻게 구하는 지를 볼 수 있습니다.
-
L2-norm을 활용했습니다.
-
norm : 벡터의길이 혹은크기를 측정하는 방법입니다. 2강에서 봤던 유클리드 형태와 동일한 형태입니다.
-
-
행렬형태로 되어있는 경우, 위에서 처럼 W,x를 transpose하여 곱해주면 되겠습니다.
-
여기서 transpose는 전치를 뜻하게 되겠습니다. 예시) [1, 2] - [[1], [2]]
-
2. Neural Networks
-
위에서 보시는 그림과 같이 뉴런의 각각의 구성과 앞으로 우리가 구성할 Neural Networks와 매우 비슷한 구조를 가지고 있음을 알 수 있습니다.
-
하지만 우리의 뇌는 더 복잡한 일을 수행하고 있습니다. 그것을 간과하면 안됩니다.
-
위와 같이 다양한 활성함수가 존재하고 있습니다. 2012년에 생성되었던 ReLU가 많이 활용되고 있습니다.
-
Neural networks 구조는 위와 같이 input layer, hidden layer, output layer로 구성되어 있습니다. 또한 모든 레이어의 노드끼리 연결되어있는 상태를 Fully-connected라고 합니다.
3. (개인적으로) 내용 정리하기
-
오늘은 오차역전파법이 왜 사용되는 지 어떠한 방식에 의해서 작동이 되는 지를 알 수 있었습니다. 가장 주된 내용은 저번 시간에 말한 gradient 값을 구해서 loss function의 최소값으로 도달하게 만들어주기 위한 방법이라는 것을 알게 되었습니다. 직접 미분을 활용하기보단 역전파법을 활용해서 손쉽게 gradient 값을 구할 수 있습니다.
-
Neural Networks는 우리의 뇌의 뉴런의 구조와 비슷하다. 하지만, 우리의 뉴런은 생각한 것보다 더 많은 복잡한 일을 해내고 있습니다. Neural Networks는 뉴런이 수행하는 역할에는 미치지 못한다는 것을 알 수 있었습니다.