슈코딩

[머신러닝] 딥러닝 본문

코딩공부/머신러닝

[머신러닝] 딥러닝

Roshu 2022. 5. 16. 19:47

 

1. 딥러닝이란?

딥러닝은 머신 러닝의 한 분야이다.

선형회귀와 논리회귀는 모두 1차 함수를 이용해서 문제를 풀었는데,

자연계에서는 직선으로 설명할 수 없는 문제들이 훨씬 많다.

그래서 복잡한 문제들을 풀기위해서 선형회귀를 여러번 반복했지만,

그럼에도 풀리지않아서 선형회귀 사이에 비선형의 무언가를 넣어야 한다고 생각을했더니

층(Layer)이 여러개 쌓이게 되면서 잘 작동하는 모델이 탄생했다. 층(Layer)을 깊게(Deep) 쌓는다고 해서

딥러닝이라고 불리게 되었다. 

 

#딥러닝의 다른 표현

1.딥러닝(Deep learning)

2.Deep neural networks

3.Multilayer Preceptron(MLP)

 

2. Deep Neural Networks 구성 방법

보통 설계를 할때 노드의 갯수를 늘렸다가 줄이는 방식으로 설계를 한다.

ex)

입력층 노드 갯수 4개

은닉층1 노드 갯수 8개 

은닉층2 노드 갯수 16개

은닉층3 노드 갯수 8개

출력층 노드 갯수 3개

 

이때 활성화 함수는 은닉층의 뒤쪽에 들어가게 된다.

네트워크의 너비(width) 깊이(depth) 늘리는 방법 (튜닝)

 

너비를 늘리는것은 은닉층의 노드의 갯수를 늘리는 방법이고

깊이를 늘리는것은 는 은닉층의 갯수를 늘리는 방법이다.

두가지 다사용해서 너비와 깊이를 둘다 늘리는 방법도 있다.

*실무에서는 너비와 깊이를 바꿔가면서 실험을 굉장히 많이 한다.

*활성화 함수도 바꿔보고, 너비와 깊이도 바꿔보고 등등 과적합을 피하는 방법을 연구하게 된다.

 

 

3. 딥러닝의 주요 개념과 기법(스킬)

 

1. 배치 사이즈( Batch Size )

Batch & Iteration

10,000,000개의 데이터셋을 가지고있다고 가정 했을때 이를 작은 단위로 쪼개서 학습을 시키는데,

이때 쪼개는 단위를 Batch 라고 하고, 반복하는 횟수를 Iteration 이라고 한다.

1,000개(Batch Size)씩 쪼개어 10,000번(Iteration)을 반복

 

2. 에폭 ( ephocs )

같은 데이터셋을 가지고 머신러닝에서는 반복학습을 하는데 100번 반복학습을 할때

100ephocs 을 반복한다고 말한다. 

 

3. 활성화 함수 ( Activation functions )

뇌의 뉴런이 다음뉴런으로 전달 할 때 보내는 전기신호의 특성에 영감을 받아

전기신호의 임계치(threshold)를 넘어야 다음뉴런이 활성화 한다고해서( 다음 노드로 넘어간다 )

활성화 함수라고 부른다. (동의안하는 사람도 있다.) 보통은 Activation이라고 말한다.

활성화 함수는 비선형 함수여야 한다. 대표적 Sigmoid 함수, 보편적으로 많이 사용하는 ReLU 함수

활성화 함수 종류

 

4. 과적합( Overfiting )과 과소적합( Underfiting )

 

딥러닝 모델을 설계/튜닝하고 학습시키다 보면 가끔씩 Training loss 는 점점 낮아지는데

Validation loss가 높아지는 시점이 있다. 이런현상을 과적합 현상이라고 한다. 반대의 현상을 과소 적합이라 한다.

따라서 적당한 복잡도를 가진 모델을 찾아야 하고, 수십번의 튜닝 과정을 통해 최적합(Best fit) 모델을 찾아야 한다.

 

문제 난이도에 비해 모델의 복잡도가 클 경우  --> 과적합

문제 난이도에 비해 모델의 복잡도가 낮을 경우 --> 과소적합

 

5. 데이터 증강기법 ( Data augmentation )

Overfitting을 해결할 가장 좋은 방법은 데이터의 갯수를 늘리는 방법이다.

하지만 실무에선 데이터가 부족한 경우가 대다수기 때문에 데이터 증강기법이라는 스킬을 써서 이를 메꾼다.

원본 이미지 한장을 가지고 여러가지 방법으로 복사를해서 어떤 사진을 봐도

사자인것처럼 딥러닝 모델도 똑같이 보도록 학습을 시킨다.

Data augmentation을 통해 딥러닝 모델이 기존에도 일반화를 잘시키는데

더 효과적으로 일반화를 시킬 수 있게된다.

 

 

6. 드랍아웃 ( Dropout )

과적합을 해결할 수 있는 가장 간단한 방법이다. 

단어 의미대로 각 노드들이 이어진 선을 빼서 끊어버리는 작업을 하게된다.

" 사공이 많으면 배가 산으로 간다 " 

드랍아웃은 과적합 발생시 생각보다 좋은 효과를 낸다. 사용하기도 정말 간단해서 

실무에서 과적합이 발생했을때 적용시켜보면 좋다.

 

7. 앙상블 ( Ensemble )

컴퓨팅 파워만 충분하다면 시도해보기 좋은 방법이다.

머신러닝의 모델중 랜덤 포레스트랑 유사한 방법이다. 

여러개의 딥러닝 네트워크를 설계해놓고 각각 입력을 넣어 각각의 출력을 

가지고 다수결로 투표해서 하는 방법도 있고, 평균값을 구하는 방법도 있다.

다양한 방법으로 응용이 가능하다.

 

8. 학습률 조정 (Learning rate Scheduler, Learning rate decay)

Local minimum에 빠르게 도달하고 싶을때 사용하는 기법

Local minimum을 효과적으로 찾도록 도와주고 쉽게 찾는다.

 

 

4. 실습

 

1. Sign Language MNIST 

https://colab.research.google.com/drive/1pEI6oz4h0FlCMMMzgF9D8KKiC17trmGD

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

2. 숫자 MNIST 

https://colab.research.google.com/drive/1RZuwqEAmYPEtwlQDgB5-w2jhIZpxjX0_#scrollTo=saH55PB0mCvL

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

 

 

Comments