일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다익스트라
- 딥러닝
- 1107번
- 자바
- 관심사분리
- 알렉스넷
- 백준9095
- 머신러닝
- MachineLearning
- deeplearning
- 백준
- 논문
- 논문구현
- 짝지어제거하기
- 알고리즘
- 논문리뷰
- 백준 1916 자바
- 디미터법칙
- cs231n
- 백준 1339 자바
- 3745
- 백준 1339
- Java
- dijkstra
- 1916
- 1261
- NLP
- 클린코드
- GPT
- Alexnet
- Today
- Total
산 넘어 산 개발일지
[CS231n - Lecture 4] Backpropagation and Neural Networks 본문
[CS231n - Lecture 4] Backpropagation and Neural Networks
Mountain96 2021. 7. 27. 11:16Backpropagation 기본 원리
위 그래프에서 초록색 숫자는 forward feed 시에 계산되는 숫자들이다. 그리고 Backpropagation을 위해 맨 마지막 노드인 f에서부터 시작을 한다. 맨 처음 받는 값은 df/df이므로 1이다. f노드에 해당하는 식은 q*z 이므로 q에대한 f의 미분은 z이고, z에 대한 f의 미분은 q이다. 따라서 아래와 같은 결과값들을 얻을 수 있다. 이 때, "A에 대한 B의 미분" 이라 함은 "B에 대한 A의 영향력" 이라고 해석할 수 있다. 즉 A가 바뀌는 정도에 따라서 B가 얼만큼 바뀌는지를 정의한 식이다.
q에 대한 f의 미분을 알았으니, 다음으로는 x, y 에 대한 f의 미분(f에 대한 x, y의 영향력)을 구해야 한다. 이를 구하기 위해서 "Chain Rule" 이 등장한다.
즉, df/dx를 구하기 위해서 (df/dq) * (dq/dx)를 하는 것이다. 이는 곧 (위에서 내려온 미분값) * (현재 미분) 이라 할 수 있다. 위 df/dx를 예로 들자면, 우선 q에 해당하는 +식은 x+y이다. 이를 x에 대해서 미분을 하면 1을 얻을 수 있다. 즉 현재미분 = 1 인 것이다. 그리고 위에서 내려온 미분값 = -4 이다. 따라서 1*(-4)=-4가 나오므로 df/dx = -4가 되는 것이다. Chain Rule에 대한 것은 아래 슬라이드를 보면 더 깔끔하게 알 수 있다.
이처럼 간단히 말하면 Chain Rule = (위에서 내려온 미분값) * (현재 미분) 이 되는 것이다.
Backpropagation(Vectorized)
위와 같은 그래프가 있을 때, Vector들의 Backpropagation은 어떻게 진행되는지 살펴보자. 우선 첫 번째 *연산에 대한 식은 좌측 하단에 q로 나타나있고, L2에 대한 식은 f(q)로 나타나있다.
f(q) = 0.22^2 + 0.26^2였으므로, 이를 각각에 대해 미분하면 2*0.22, 2*0.26를 얻는다. 따라서 [0.44, 0.52]T를 얻는 것이다. 이제 W에 대한 미분을 진행해보자.
식이 복잡해보이지만, 어디까지나 Chain Rule에 해당하는 식임을 명심하자. 우선 곱연산이니 미분 후 남는 것은 W가 아닌 x의 값들이다. 이를 1_k=i * x_i로 표현하였고, 위에서 내려온 미분값은 2q_k로 표현하였다. 이들을 합쳐 2q_i * x_j 가 된 것이다. (k에 대한 시그마가 있지만, k=i인 식이 존재하므로 k=i로 치환하면 시그마를 없앨 수 있다) 이를 사용하여 구하면 [[0.088, 0.176], [0.104, 0.208]]이 나온다. 다음으로 x에 대한 미분을 보자.
이 또한 식이 어려워보이지만 Chain Rule을 벗어나지 않는다. 곱연산에 의해 미분을 하게 되면, 위 W에 대한 미분과는 반대로 W에 대한 값들만이 남는다. 그리고 위에서 내려온 미분은 동일하게 2q_k이므로 이를 합치면 위와 같은 식이 나온다. 다만 이 때는 k=i와 같은 식이 없기 때문에 k에 대한 시그마를 없앨 수 없다. 예를 들어, -0.112를 구해본다면 (2*0.22*0.1) + (2*0.26*(-0.3)) = -0.112가 되는 것이다.
출처 : https://www.youtube.com/c/stanfordengineering/featured
'머신러닝&딥러닝 > cs231n' 카테고리의 다른 글
[CS231n - Lecture 7] Training Neural Networks - Part II (0) | 2021.08.11 |
---|---|
[CS231n - Lecture 6] Training Neural Networks - Part I-2 (0) | 2021.08.02 |
[CS231n - Lecture 6] Training Neural Networks - Part I (0) | 2021.07.30 |
[CS231n - Lecture 5] Convolutional Neural Network (0) | 2021.07.28 |
[CS231n - Lecture 3] Loss Functions and Optimization (0) | 2021.07.14 |