본문 바로가기

딥러닝 공부

딥러닝

딥러닝의 역사

 - XOR 문제 : 딥러닝의 태동을 불러온 문제로써, OR연산이나 AND연산은 직선 하나만 있으면 되므로 논리회귀로 쉽게 만들 수 있었는데, XOR연산은 Perceptron을 여러개 이어 붙인 Multilayer Perceptrons(MLP)개념을 도입하여 만들었다. 이런 논리 게이트를 잘 조합하면 생각하는 기계를 만들 수 있겠구나! 하게 된 것이 딥러닝의 시초이다.

 

 하지만, 이런 딥러닝의 시초는 Marvin Minsky의 주장을 통해 중단되었다가, Paul Werbos의 Backpropagation(역전파) 알고리즘을 통해 다시 살아나게 된다. 

 

 Paul Werbos의 Backpropagation 알고리즘이란 출력에서 오차를 발견하여 뒤에서 앞으로 점차 조절하는 방법이다. 이게 어떤 의미냐면, MLP에서 출력을 만들어낼 때, 입력 값만을 통해서 출력을 만들어내는 것이 아닌, Weight(W, 가중치)와 Bias(B, 편향)을 함께 사용하여 출력 값을 만들어낸다. 만약, MLP의 출력값이 정답값과 오차가 있을 경우 우리는 W와 B를 조절해주어야 한다. 이러한 W와 B를 조절하는데 있어서 가장 좋은 방법이 Paul Werbos의 Backpropagation이고, 우리는 이것을 '스스로 학습한다'라고 볼 수 있는 것이다.

 

Deep Neural Networks 구성 방법

 앞서 나온 내용처럼 딥러닝 네트워크(MLP)는 여러 층을 쌓아 구성된다. 딥러닝 네트워크의 구조는 크게 3가지로 나눌 수 있다. 

출처: https://www.kdnuggets.com/2016/10/deep-learning-key-terms-explained.html

Input nodes(입력층) : 네트워크의 입력 부분. 학습시키고자하는 x값을 넣는다.

Output nodes(출력층) : 네트워크의 출력 부분. 예측된 값, y값이다.

Hidden layers(은닉층) : 입력층과 출력층을 제외한 중간층. 완전연결 계층(Fully connected layer = Dense layer)으로 이루어져 있다. 보편적으로 활성화 함수는 은닉층의 바로 뒤에 위치한다.

 

 문제에 따라 입력층과 출력층은 정해져 있으므로 우리가 작성해야하는 부분은 은닉층이다. 기본적인 뉴럴 네트워크(Deep neural networks)에서는 보통 은닉층의 중간 부분을 넓게 만든다. 3개의 은닉층이 있다면 1, 3번째 층보다 2번째 층을 더 넓게 만드는 것이다. 여기서 층을 넓게 만든다는 것은 너비를 늘린다고 말하며, 은닉층의 개수는 그대로 두고, 각 층의 노드의 개수를 늘리는 것이다. 

 

딥러닝의 용어 

Batch size : 데이터 셋을 작은 단위로 쪼개서 학습을 시키는데 쪼개는 단위를 Batch라 한다. 예를 들어 1000만개의 데이터 셋을 1000개씩 쪼갠다면, 총 10000개의 배치로 나눠진다.

Epoch : 데이터셋을 통해 반복학습하는 횟수.

Iteration : 데이터셋을 도는 총 횟수. 1000만개의 데이터 셋을 10000개의 배치로 쪼갠다면, 각 1000개의 데이터 셋이 10000배치개가 되고, 해당 배치들을 100에폭으로 돈다고 하면, 100만번의 이터레이션을 돌게 되는 것이다.

 

Activation function(활성화 함수) (= Activation) : thresh hold(임계값)과 비슷한 역할, 비선형 함수여야 한다. 사용되는 함수는 아래와 같이 여러가지 종류가 있다. 

Reference https://medium.com/@shrutijadon10104776/survey-on-activation-functions-for-deep-learning-9689331ba092

 여기서 가장 보편적으로 쓰이는 함수는 ReLU함수이며, 다른 함수에 비해 학습이 빠르고, 연산 비용이 적으며 구현이 간단하기 때문이다. 쉽게 가성비가 좋다고 할 수 있다.

 

Overfitting(과적합): 구조가 복잡해질수록 trainning error는 줄어드는데, test error는 오히려 증가하는 현상. 모의고사를 다회 풀면서 정답을 외우는 구조와 비슷하다고 생각하면 됨.

UnderFitting(과소적합) :  구조가 너무 단순해서 error가 많이 발생함.

출처: https://vitalflux.com/overfitting-underfitting-concepts-interview-questions/

딥러닝의 주요 스킬

Data augmentation(데이터 증강) : 원본 자료를 여러가지 방법으로 복사. 이미지를 예로 들면, 자료의 반전, 회전, 확대, 축소 등의 다양한 작업을 통해서 부족한 데이터 셋을 보충한다.

Dropout(드랍아웃) : 무작위의 노드를 제거. '사공이 많으면 배가 산으로 간다'

Ensemble(앙상블) : 다수의 딥러닝 네트워크들의 출력 중 가장 만족스러운 출력을 선택한다.

Learning rate decay(Learning rate schedules) : Local minimum에 빠르게 도달하고자 할 때 사용하는 기법. Learning rate를 처음에는 큰 폭으로 가져가면서 점점 폭을 줄여가는 방법.

 

--> keras에서는 callback 모듈을 사용해 learning rate를 조절한다.