www.youtube.com/watch?v=lKRatcD9hEg
이번 강의에서는 기본적인 Neural Network의 구조와 파라미터를 업데이트하는 방법인 BACK PROPAGATION에 대해 다룬다.
Part 1
파라미터 업데이트 과정을 그레프로 봐보자.
이러한 flow를 생각해볼 때 Loss function은 다음과 같이 정의할 수 있다.
이러한 Loss를 MSE loss라고 한다. 또한, 모델을 Linear regression이라 칭할 수 있다.
이제 하나의 원소가 아닌 벡터단위에서 생각해보자.
여기서 X는 dot product가 된다.
보통 모델에서는 원소단위가 아니라 Matrix, Vector 단위이기에 벡터단위는 앞으로 생략하도록 한다.
다음으로는 Negative log-likelihood loss(softmax 형태)를 가지는 Logistic regression을 생각해보자.
여기서 Log를 취하면 다음과 같은 형태가 된다.
Inner product(dot product)를 거치면 하나의 상수값이 되기에 이러한 상수값을 쌓는다고 생각해보자.
여기서 Label y는 one-hot vector 형태이다.
이러한 그래프를 거친 최종 결과물은 위의 Negative log-likelihood가 된다.
더 정교하게 그래프를 그려보자.
👉🏻 여기서 변수는 두 가지 타입이 있다.
1. Data (ex. x, y) : input x과 label y
2. Parameters (ex. $\theta$)
여기서 2번째인 파라미터는 input x를 일종의 변환하는 역할을 한다. 또한 첫번째 data에서 y는 loss function시 사용된다.
위의 그래프는 다음과 같이 linear layer로 축약하여 표현이 가능하다.
Input x가 들어와서 linear layer를 거쳐 softmax를 취한 후 label y와의 cross-entropy loss를 줄이는 방식으로 훈련된다고 이해할 수 있다.
Neural Network 다이어그램으로 이해해보면 다음과 같다.
여기서 주황색은 update될 파라미터를 의미하고 파란색인 softmax는 파라미터를 따로 가지지 않은 함수이기때문에 파란색으로 표현하였다. 또한, cross entropy는 보통 softmax 함수가 나오면 같이 나오기 때문에 거의 따로 표기하지 않는다.
Logistic Regression에 대해 더 알아보자.
두번째와 같은 복잡한 형태로 데이터가 분포해있다면 단순히 데이터를 넣는 것이 아니라 $\phi(x)$와 같이 함수를 취해 x로부터 feature를 뽑아내어 softmax를 취해야 한다.
여기서 Features란 무엇일까?
👉🏻 x에 대한 features를 softmax를 취하여 뽑아낼 수도 있다. 보통 neural network에는 이러한 방식을 사용하는데 여기서 나오는 softmax는 각 원소를 exponential취한 후 normalize하는 보통의 softmax가 아닌 각각에 sigmoid를 취한 형태이니 유의해야 한다.(sigmoid는 softmax의 특수한 경우이니 softmax라 할 수도 있다.)
앞에 나왔던 computation graph의 좀 더 깊은 버전은 다음과 같다.
Neural Network 버전은 다음과 같다. Linear layer가 추가된 형태라 볼 수 있다.
이를 좀 더 간단히 줄이자면 다음과 같다.
이러한 layer를 많이 거치면 소히 말하는 Deep Neural Network가 되는 것이다!
이제까지는 sigmoid, softmax라는 function을 썼는데 이 함수는 무엇을 의미할까? 꼭 이 함수만을 써야할까?
이는 Activation functions이라고 불리는 model에 nonlinearity를 추가하는 함수이다.
🌟 만약 Linear함수를 사용한다면 어떨까?
👉🏻 그렇다면 층을 깊게 쌓을 필요가 없다. 어차피 Matrix 곱도 linear이기 때문에 100개의 Matrix를 곱하는 것은 하나의 Matrix를 곱하는 것과 같기 때문이다!! 모델의 Capacity가 늘어나지 않게 된다.
Part 2
앞에서는 어떻게 Network를 디자인하는지에 대해 배웠다.
이제 어떻게 디자인된 Network를 학습하는지에 대해 알아보자.
🌟 모델의 훈련은 다음의 과정을 거치게 된다.
1. Model Class 정의 : 어떠한 Class로 모델을 학습시켜야 할지를 정한다.
2. Loss function 정의 : MSE loss, Cross-entropy loss 등으로 정하여 이런 loss를 줄여나가는 방식이 학습과정이 된다.
3. Optimizer 선택 : 앞에서 배운 Adam, Momentum등의 optimizer를 사용하여 loss function을 최적화한다.
앞에서 배운 Stochastic Gradient Descent는 gradient를 이용하여 parameter를 업데이트하는 방식이다.
그럼 각 Layer에 해당하는 Gradient를 어떻게 계산할 수 있을까?
👉🏻 해석학에 나오는 Chain Rule를 이용하여 계산하게 된다.
다음과 같이 x가 두 가지 함수를 거쳐 output이 된다면, 최종 output z에 대한 x의 gradient는 다음과 같이 계산된다.
여기서 모든 값은 스칼라가 아닌 벡터이므로 gradient는 Jacobian matrix로 표현된다.(각 원소에 대해 미분한 값을 행렬값으로 갖는 행렬이라 보면 된다.)
(책에 따라 row vector로 쓰는 곳도 있으니 유의해야함.)
이제 이 Chain Rule을 Neural Network에 적용해서 생각해보자.
Chain rule에 의해 Loss function의 첫번째 layer의 weight에 대한 gradient는 위와 같이 여러 layer의 parameter gradient를 곱하여 계산된다.
이러한 방법이 잘 작동할까?
👉🏻 사실 이러한 Jacobian matrix는 계산하는 데 시간 측면에서 비효율적이다.
예를 들어 AlexNet은 4096개의 유닛을 가지고 있는데 Back propagation을 위해 gradient를 계산하려면
계산양이 엄청나기 때문이다.
🌟 어떻게 더 효율적으로 계산할 수 있을까?
직관적으로 생각할 수 있는대로 gradient값을 keep 해놨다가 필요시 꺼내서 사용하는 식을 사용하면
좀 더 효율적으로 back propagation이 가능하다.
이렇게 Chain Rule을 이용하여 gradient를 계산하는 방식이 Back propogation이다.
Part 3
앞에서는 Neural Network의 디자인에 대해 알아보고 Back propagation을 알고리즘 관점에서 살펴보았다.
이제 실습 관점에서 자세히 알아보자.
실제로 모델을 만들고 학습시키려고 할 때는 다음과 같은 질문이 생길 수 있다.
Layer는 몇개나 쌓아야 할까? 차원을 얼마로 해야할까? Activation Function은 sigmoid, softmax 말고도 어떤 함수로 해야할까?
그 전에 잠깐 Bias term에 대해 알아보자.
👉🏻 이는 통계에서 나오는 bias와는 무관하게 input이 영벡터일 때 Weight matrix를 곱한 output이 반드시 0이 나오는 것 때문에 추가하는 term이다.
Back propagation 계산 과정을 좀 더 살펴보면 다음과 같다.
matrix W에 대한 gradient는 위와 같이 계산된다.
Sigmoid 함수의 미분으로 계산해보면, 다음과 같다.
ReLU를 activation function으로 사용했다면 다음과 같다.
🌟 요약하자면, Last Layer부터 gradient를 계산해서 chain rule를 사용해서 각 layer의 weight에 대한 gradient를 계산하는 것이 Back propagation이라 할 수 있다.
'개발 > UC Berkely CS182' 카테고리의 다른 글
[Lecture 8] Computer Vision (2) | 2021.05.09 |
---|---|
[Lecture 7] Initialization, Batch Normalization (0) | 2021.05.02 |
[Lecture 4] Optimization (2) | 2021.04.11 |
[Lecture 3] Error Analysis (2) | 2021.04.04 |
[Lecture 2] Machine Learning Basics (2) | 2021.03.28 |
댓글