본문 바로가기

카테고리 없음

내일배움캠프 2022.05.16 TIL

딥러닝의 배경

자연계에는 선형적으로 해결할 수 없는 문제들이 너무 많았다. 그럼 비선형적인 문제를 풀기 위해서는 어떻게 하면 될까 생각해보았다. 선형적인 문제 해결을 반복한다고 해서 그 방법이 비선형적이게 되지는 않았다. 그래서 사람들은 선형적인 문제 해결 사이 사이에 비선형적인 무언가를 넣어주어야 한다고 생각하게 되었다. 그렇게 층(Layer)을 쌓게 되었고 이를 딥러닝으로 부르게 되었다.

 

 

XOR 문제

OR이나 AND는 그래프에서 직선으로 데이터를 분류할 수 있다. 반면에, XOR의 경우에는 직선으로 개념을 정의할 수 없다. 만약, input이 x1, x2라면 y=w0+w1x1+w2x2라는 직선을 그어 OR문제나 AND문제를 해결할 수 있다고 사람들은 생각하였다. 이를 그림으로 나타내면 다음과 같다.

퍼셉트론 (Perceptron)

위와 같은 형태를 퍼셉트론(Perceptron)이라 불렀다. 하지만, 이런 퍼셉트론으로부터 생각을 해보아도 XOR문제는 해결할 수 없었다. 그래서 사람들은 퍼셉트론을 여러 개 이어붙여보았고, 이를 MLP(Multi-Layer Perceptron)라고 이름붙였다. 이는 기발한 생각이었으나 너무 많은 계산이 요구되기 때문에 당시 기술로는 불가능했고, 딥러닝은 침체기를 맞게 되었다.

 

그러던 도중, 역전파(Back Propagation)라는 알고리즘이 발표되었다. 역전파의 개념은 대강 이러하다.

 

"Weight와 bias를 가지고 입력으로부터 출력을 만들어내는데 MLP로부터 나온 출력값이 정답과 다르면 Weight와 bias를 다시 조정해야한다. 이를 조절하기 위한 가장 좋은 방법은 출력으로부터의 오차를 발견하여 뒤에서 앞으로 점차 조절하는 것이다."

 

즉, 순전파 → 역전파 → Weight 업데이트 → 순전파 → .... 와 같은 순서를 반복하게 되면 오차가 0에 가까워진다는 원리를 이용한다는 것이다.

 

 

Deep Neural Network

MLP, 즉 딥러닝 네트워크는 여러 개의 층으로 구성된다. 그 층들은 크게 세 개로 구분할 수 있다. 각각 입력층(Input Layer), 은닉층(Hidden Layer), 출력층(Output Layer)이다. 입력층과 출력층은 말 그대로 네트워크의 입력과 출력 부분이며 각각 x값과 y값을 의미하고, 은닉층은 입력층과 출력층을 제외한 중간층들을 가리킨다. 보통의 Deep Neural Network들은 은닉층의 중간 부분을 넓게 만든다. 입력층에서부터 노드의 개수가 늘어나다가 줄어들어 출력층이 나타나는 형태가 대개의 방식이다.

네트워크의 성능을 테스트할 때 '너비'와 '깊이'를 확인하고는 하는데, 은닉층 내부의 노드의 개수를 늘리는 것을 '네트워크의 너비를 늘린다' 라고 하고, 은닉층의 개수를 늘리는 것을 '네트워크의 깊이를 늘린다' 라고 한다.

 

 

딥러닝의 주요 개념

Batch

우리는 데이터셋의 모든 데이터를 메모리에 올려 학습시키지 않고, 데이터셋을 나누어 학습시키는데 이때 데이터셋을 쪼개는 단위를 Batch라 한다.

 

Iteration

데이터셋을 쪼개는 단위가 Batch라면 Iteration은 반복 횟수이다. 즉, 10000개의 데이터가 있을 때 100개씩 쪼개서 학습시킨다 하면 100번의 Iteration을 돌아야하는 것이다.

 

Epoch

보통 머신러닝에서는 같은 데이터셋으로 반복하여 학습을 한다. 학습을 반복하는 횟수를 Epoch이라 한다. 10000개의 데이터가 있을 때 100개씩 쪼개서 학습시키는 것을 10번 반복한다하면 Epoch이 10이 되는 것이다. (Iteration보다 큰 개념이라고 생각하면 됨!!!!)

 

batch, iteration, epoch 비교

 

활성화 함수 (Activation Functions)

처음에 '비선형적인 문제를 해결하기 위해서는 선형적인 문제 해결 사이 사이에 비선형적인 무언가를 넣어주어야 한다' 고 했는데 이때 비선형적인 무언가가 활성화 함수이다. 활성화 함수는 비선형 함수인데 대표적인 예로는 시그모이드 함수가 있다. 이외에도 여러 함수가 존재한다.

 

활성화 함수 종류

 

위의 6개가 대표적인 활성화 함수의 예시이다. 이 중에서도 딥러닝에서는 ReLU를 가장 많이 사용하는데, 그 이유는 ReLU가 다른 활성화 함수들에 비해 학습이 빠르고, 비용도 적게 들며, 구현이 간단하기 때문이다.

 

 

과적합(Overfitting)과 과소적합(Underfitting)

딥러닝 모델을 설계하고 학습시키다보면 가끔 Training loss는 낮아지는데 Validation loss가 높아진다. 이를 과적합 현상이라 한다. 실제로 풀어야 하는 문제의 난이도에 비해 모델의 복잡도가 너무 커서 발생하는 현상이다. 즉, Train set에 너무 초점을 맞추어 모델을 학습시킨 것이다. 반대로 복잡도가 너무 작아서 문제를 풀 수 없는 현상을 과소적합이라 한다. 그러므로 우리는 이 두 현상이 나타나지 않는 적정점을 찾아 모델을 설계하고 학습시켜야 한다.

과적합 (Overfitting)
과소적합 (Underfitting)
적절히 fitting된 경우

 

 

딥러닝의 주요 스킬

데이터 증강기법 (Data Augmentation)

과적합을 해결하기 위한 방법 중 하나는 데이터의 수를 늘리는 것이다. 그러나 데이터는 부족한 경우가 대부분이다. 그렇기 때문에 이미지 처리 분야 딥러닝의 경우에 데이터 증강기법을 사용하는데, 하나의 사진을 흑백으로 하거나 흐리게 하거나 회전시키거나 등등의 처리를 하여 다른 데이터로 여겨지게 만드는 것이다.

데이터 증강기법 (Data Augmentation)

 

드랍아웃 (Dropout)

과적합을 해결하기 위한 방법 중 하나이다. 랜덤한 연결된 노드의 선을 제거해버리는 방법이다. Train set에 대해 너무 정확하게 맞추다 보면 과적합으로 이어지기 때문에 이를 방지하기 위한 것이다.

드랍아웃 (Dropout)

 

앙상블 기법 (Ensemble)

여러 개의 학습시킨 딥러닝 모델로부터 나온 출력들을 기반으로 투표를 하는 기법을 뜻한다. 다수결로 투표하는 방법도 있고, 평균값을 내는 방법도 있고, 마지막에 결정 레이어를 이어붙이는 방법도 있다. 보통 앙상블 기법을 사용하게 되면 최소 2% 가량의 성능이 향상된다.

 

Learning Rate Decay (Learning Rate Schedules)

고정된 Learning Rate를 사용하는 것이 아니라 변경해가며 Local Minimum을 찾는 기법을 뜻한다.