2023. 5. 1. 10:36ㆍCS231N강의 정리
안녕하세요! 오늘은 CS231N 4강을 리뷰해볼려고 합니다!
이 Computational Graphs는 반복적으로 chain rule을 사용해서 gradient를 구하는 Backpropagation 방법에 유용합니다!
특히 아주 복잡한 함수에 적용하는데에 유용합니다.
예를들어 아주 많은 레이어를 거치는 Convolutional Network에 적용하는데에 유용하다고 합니다!
chain rule을 사용해서 gradient를 구하는데 기본적으로 local gradient X upstream gradient 의 방법으로 gradient를 구합니다.
위 식에서 Wx가 곱해져서 들어오고 score 값을 function에다가 넣고 거기에 규제를 추가해서 loss가 나오게 되는 것입니다.
위 모델들을 보면, input부터 loss함수를 도출할 때까지의 노드들이 엄청나죠...
우린 이런 방대한 모델의 가중치를 계산해야합니다.
하지만 우리는 Back propagation으로 chain rule통해 반복적인 계산으로 전부 구할 수 있습니다.
첫 번째 예시
우선 쉬운 함수 f를 정의했습니다.
반대로 거슬러 올라가면서 가중치를 계산할 것이고 이건 Back propagation이라고 합니다.
우선 최종 f값은 df/df이므로 자기자신을 미분했으니 1이 될 겁니다.
f=qz로 정의했고, df/dz를 계산합시다.
z의 가중치는 q이므로 3(=5-2)이 됩니다.
같은 방식으로 q의 가중치는 z인 -4가 되고 더하기 노드인 x와y의 가중치를 구합니다.
그러기 위해 df/dq*dq/dy로 체인룰을 이용합니다.
빨간색 사각형안에 식을 보면 dq/dx, dq/dy는 1입니다.
df/dq(=-4) * dq/dy(=1) = -4가 되는 것이고 x도 똑같습니다.
두 번째 예시
시그모이드 함수가 예시로 나왔습니다.
아래 4개의 미분값들은 여러 함수들의 미분 값들을 표현
마지막 노드의 f 미분값부터 구하고 자기 자신을 미분하여 1이 나옵니다.
1/x 노드에서는 이를 미분하면 빨간색 박스에 그 미분값이 있습니다.
(-1/1.37)^2은 위에서 말한 local gradient가 되고, 1은 global gradient가 되기에 그 곱인 -0.53이 나옵니다.
1/x노드를 반대로 거쳐 f는 다시 c+x의 형태가 됩니다.
여기서 global gradient가 -0.53이고 local gradientc+x를 미분값은 1이 되므로 그 곱인 -0.53이 그대로 나옵니다.
exp노드는 많이 사용하는 이유중에 하나가 미분값이 그대로이기 때문입니다.
체인룰을 적용하면, global gradient는 -0.53 local gradient는 e의 역수가 되는데 e는 약 2.71이므로 -0.53을 2.71로 나누면 그 값은 -0.2에 수렴하기 때문에 이러한 값이 나옵니다.
local gradient이 -1이므로 0.2가 나왔습니다.
더하기 노드는 가중치를 뿌립니다.
곱하기 노드는 서로의 값을 바꿔줍니다.
왜냐하면 서로가 서로 계수가 되기 때문입니다.
여태껏 체인룰을 통해서 구해온 파란색 부분은 sigmoid gate로 한번에 계산이 가능합니다.
gate들을 이렇게 일반화 시킬 수 있습니다.
이번에는 L2 정규화를 한 함수 f를 알아봅시다. x는 n차원 W는 n*n 차원입니다.
L2의 최종값은 0.116이고 출력노드의 미분값은 1입니다.
[0.22, 0.26]의 값은 W와 x의 행렬 연산으로 간단히 나온 값입니다.
f(q)로 함수를 지정하면 맨아래 식 처럼 q^2의 sum으로 표현 가능합니다.
전부 2q로 미분 되므로 가중치는 곱하기 2를 해준 [0.44, 0.52]가 됩니다.
이제 곱하기 게이트입니다.
W가 2*2 행렬이기 때문에 [0.2, 0.4] * [0.44, 0.52] 를 서로 행렬 계산해서 2*2 행렬을 만들어 줍니다.
그래서 [[0.2*0.44, 0.4*0.44], [0.2*0.52, 0.4*0.52]]의 값이 도출됩니다.
식으로 x에는 local gradient가 w값들이 나오며 트랜스포즈를 한 이유는 wx에서 x1에 들어가는 w가 0.1과 0.3이기 때문입니다.
따라서 (0.1*0.44)+(-0.3*0.52)=-0.112, (0.5*.044) + (0.8 * 0.52) = 0.636 의 값이 도출됩니다.
Neural Network
이제 단순한 Linear regression이 아니라 히든레이어를 추가합니다.
히든 레이어를 input노드와 ouput노드 사이에 100개를 추가했고, 이를 102 - layer라고 하는게 아니라, 2 - layer NN이라고 합니다.
2-layer, 3-layer NN을 만들며, 함수는 max함수를 이용하게 됩니다.
이는 활성화 함수를 말하는데 예전에는 시그모이드를 활성화 함수로 많이 이용했습니다.
최근에는 relu함수를 많이 이용합니다.
4강 정리입니다!
이번 강의는 계산이 많이 나왔는데...
머리가 어지럽네요.....
영상으로만은 이해하는데 한계가 있어 다른 사람들의 설명도 조금 많이 참조 했습니다....
이상으로 힘든 4강 마무리를 하겠습니다!
포스팅을 읽어 주셔서 감사합니다!
'CS231N강의 정리' 카테고리의 다른 글
(CS231N 정리)Lecture 6 : Training Neural Networks (0) | 2023.05.15 |
---|---|
(CS231N 정리)Lecture 5 : Convolutional Neural Networks (0) | 2023.05.05 |
(CS231N 정리)Lecture 3 : Loss Functions and Optimization (0) | 2023.04.29 |
(CS231N 정리)Lecture 2 : Image Classification (0) | 2023.04.29 |