1. 딥러닝이란?
딥러닝 (Deep Learning, 이후 DL)은 기계학습 (Machine Learning, 이후 ML)의 한 종류다. 전통적인 ML 알고리즘과 다른 점은 인공신경망(Artificial Neural Network, 이후 NN)을 기반으로 하고 있어 파라미터 개수가 훨씬 많고, 성능도 대체로 더 좋다는 것.
지도학습 딥러닝은 결국, 전통적인 ML과 같이 독립변수와 종속변수의 관계를 가장 잘 설명하는 최적의 파라미터의 값을 찾는 모델을 만드는 과정이다. (딥러닝 모델에서 파라미터는 가중치)
최적의 파라미터는 모델을 학습시켜 얻은 종속변수의 예측치와 실제 값의 차이, 즉 오차를 최소화하는 파라미터다. 이는 파라미터에 대한 함수인 비용함수(가중치에 대한 함수)를 최소화함으로써 구할 수 있다.
아래 그림은 은닉층이 2개인 간단한 NN 아키텍처다.
출처 : Jinwon Lee님의 텐서플로으 2.0 강의 자료 |
은닉층이 3개 이상이면 다층 신경망(Deep NN, DNN)이라고 부른다.
은닉층을 몇 겹으로 할 것인지, 각 은닉층의 노드(뉴런)의 수를 몇 개로 할 것인지는 연구자가 정하는 하이퍼 파라미터다. 은닉층 뉴런의 수는 일반적으로 입력층이나 출력층보다 많다. (예외, auto encoder??)
2. 활성화 함수란?
인공신경망은 이름이 잘 보여주듯 생물의 신경망에서 아이디어를 얻어 고안된 방법이다. (feat. McCulloch와 Pitts의 인공뉴런 모델) 생물의 신경망에 있는 뉴런들이 모든 자극에 대해 반응하는 것이 아니라 일정 수준 이상 자극에만 반응하는 원리를 따라 뉴런에 들어온 인풋의 가중치(weight, w)와의 선형 결합과 활성화 함수를 통해 아웃풋이 나온다.
보통 같은 레이어의 노드들은 같은 종류의 활성화 함수를 갖는다. 은닉층은 반드시 활성화 함수를 갖고, 출력층은 경우에 따라 활성화 함수를 가질 수도 있고 가지지 않을 수도 있다.
DL으로 풀려는 문제가 회귀 문제일 경우 출력층은 활성화 함수를 갖지 않거나 ( 혹은 활성화 함수가 항등식 형태라고 볼 수도 있다) 분류 문제일 때는 활성화 함수를 갖는다.
좀 더 들어가면, 분류 문제는 '한 카테고리로 분류될 수 있는 문제'와 '카테고리 복수 선택이 가능한 문제'가 있는데, 전자의 경우 소프트맥스 함수를 사용하고 후자의 경우 시그모이드 함수를 사용한다.
카테고리 복수 선택의 가능한 문제의 예를 들어보자. 가령, 영화 장르를 분류하는 문제를 DL으로 해결하려고 할 때 영화 A는 '코미디', '가족', '드라마' 등 여러 카테고리에 동시에 속할 수 있다. 이럴 때 시그모이드 함수를 사용한다. (그런데 정확히 왜 그런거지?)
여러 활성화 함수. 위 그림에는 빠졌지만 렉티파이 ReLU도 많이 사용된다. |
3. NN 작동 원리
신경망 작동 원리를 설명하기 위해 은닉층이 1개인 NN 아키텍처를 그렸다. b는 bias, 즉 편향을 뜻한다. 1차 함수의 절편과 같은 역할을 한다.
출처 : 갓상엽 교수님 |
출처 : 갓상엽 교수님 |
위 NN은 아주 간단한 형태임에도 가중치 즉, 파라미터가 6개나 된다.
출처 : 갓상엽 교수님 |
위와 같은 방식으로 y^(종속변수 y의 예측치)를 구했다. 이제 이 예측치를 실제 y와 비교해서 오차(E)를 구한다. DL을 '학습'시킨다는 것은 w에 따른 오차를 최소화할 수 있는 모델을 찾는 것이다.
구체적으로는 가중치를 여러번 바꿔가며 (= 업데이트하며) 비용함수를 최소화 하는 가중치를 찾는다. 비용함수는 회귀 문제의 경우 MSE, 분류 문제의 경우 교차 엔트로피를 사용한다. (related post : MSE, MLE 차이)
4. 비용함수 최소화
비용함수를 최소화하는 파라미터 값을 찾는 방법(= optimization)은 크게 3가지가 있다. (읽어볼 것)
1) normal equation using POC
appropriate when the cost function is convex. But, usually the cost function of DL is not convex ( a lot more complex) , 참고 : [ML] Linear Regression
2) 뉴턴-랩슨법
경사 하강법과 유사하지만, 비용함수를 두 번 미분해야 하기 때문에 계산 시간이 더 오래 걸린다. 때문에 잘 안 쓰인다.
3) 경사 하강법 (Gradient Descent)
딥러닝에서는 주로 사용되는 방법
경사 하강법은 한번 파라미터(=가중치)를 업데이트할 때 사용하는 데이터 포인트의 양에 따라 크게 3가지 종류가 있다.
1) Batch Gradient Descent : 가지고 있는 모든 관측치를 사용해서 비용함수 계산해서 가중치들 업데이트. 모든 데이터 포인트를 계산해야 하므로, 시간이 오래 걸린다.
2) Stochastic Gradient Descent : 학습 데이터에 있는 가중치들 중 랜덤하게 뽑힌 하나의 관측치 정보만 사용해서 비용함수를 계산해 가중치들 업데이트 -> 반복
Batch에 비해 계산 시간이 덜 걸리지만, converge가 잘 안 되거나 핑퐁을 많이 칠 수 있다. 특히 랜덤하게 뽑힌 관측치가 아웃라이어일 경우 그렇다.
3) Mini-batch Gradient Descent : Batch + Stochastic hybrid.
학습 데이터 한 번만 사용하지 않고 여러 번 사용한다. epoch size가 10이면 학습 데이터에 있는 (예를 들어) 100개의 관측치를 10번 사용한다는 뜻이다. 즉, 학습 데이터 포인트가 100개, epoch size가 10일 때 총 100번 업데이트 한다.
신경망 아키텍트에서 업데이트를 무조건 많이 한다고 좋은 게 아니다. 시간도 고려해야 하고 ..
출처 : 갓상엽 교수님 가장 처음 가중치current는 순전파 계산으로 구하고, 그 다음부터 역전파를 사용한다. |
SGD를 사용한다고 한다면, 랜덤하게 뽑힌 하나의 관측치에 대하여 위 NN 총 9개의 가중치들이 업데이트 되는 것이다.
5. 오차 역전파 🍀🍀
그렇다면, NN에서 가중치는 구체적으로 어떻게 업데이트 되는가, 이 부분이 중요하다. '오차 역전파' 라는 개념을 잘 알아야 한다.
출처 : 갓상엽 교수님 |
0 Comments
Post a Comment