본문 바로가기

딥러닝 & 머신러닝/프로젝트

딥러닝(CNN)을 활용한 은하 분류 (3) : 문제점 보완

반응형

작년 봄에 했었던 첫 딥러닝 프로젝트인 '딥러닝을 이용한 은하분류' 발표를 마치고 문제점을 보완하기 위해 적은 메모입니다.


1. 한 번 잘못 판단 후 계속 잘못 판단한 쪽으로 치우친다 (과적합) = local minimum에 빠진다

 

해결방법 : learning rate, mini-batch learning, Initializer 등으로 해결 가능

 

1-1. Initializer

 

딥러닝 학습에선 가중치가 중요하다. 이 가중치를 매 에포크마다 새로 갱신 (초기화) 시키는데, 그 방법의 문제이다.

 

보편적으로 쓰이는 Initializer에는 Xavier Initializer, He Initializer가 있다.

 

예를 들어 He Initializer는 Keras에서 Dense((50, kernel_initializer='he_normal'))의형태로 쓰인다.

 

자세한 내용은 아래 링크에 잘 나와있다.

 

https://buomsoo-kim.github.io/keras/2018/04/22/Easy-deep-learning-with-Keras-4.md/

https://reniew.github.io/13/

 

1-2. learing rate

 

최적의 가중치와 편향을 찾기위해서 학습을 진행하며 손실함수(loss function) (또는 비용함수(cost function)라고도 함)가 최솟값을 갖도록 하는 '경사하강법'을 쓸 때, learnig rate가 반영이 된다.

 

즉, 한 번의 학습으로 얼마만큼 학습해야 할 지, 즉 매개변수 값을 얼마나 갱신하느냐를 정하는 것이 learning rate다.learing rate값은 정해진 공식이 없어서 사람이 직접 실험해가며 적절한 값을 설정해주어야 하는데, learing rate값이 크면 loss function의 최솟값을 건너뛰게 될 수도 있어서 loss function의 최솟값을 제대로 찾지 못 할 수도 있고, learing rate값이 작으면 학습시킬 때 시간이 오래 걸릴 수 있다.

 

Keras에서는 Optimizer = Adam(lr = 0.001)로 표현된다.

 

1-3. mini batch learning

 

빅데이터에서 모든 훈련데이터들을 대상으로 loss function을 일일이 계산하려면 매우 오랜 시간이 걸린다. 이런 경우 데이터 일부를 추려 전체의 '근사치'로 이용할 수 있다. 딥러닝에서도 훈련 데이터로부터 일부만 골라 학습을 수행한다.

 

이 일부를 'mini-batch'라고 하고, 이 mini-batch만을 이용해 딥러닝 모델을 학습시키는 것을 'mini-batch learning'이라고 한다.

 

learing rate와 mini batch learning에 관한 자세한 내용은 아래 링크와 책 '밑바닥부터 시작하는 딥러닝' 131p, 141p, 115p에 잘 나와있다.

 

https://computer-nerd.tistory.com/13

https://sacko.tistory.com/38

 

2. input data를 굳이 RGB형태로 넣을 필요가 없을 것이다.

 

학습 속도 문제 때문에 원본 이미지를 300*300픽셀에서 50*50픽셀로 줄였는데, 그렇다면 굳이 RGB형태로 이미지를 학습시킬 필요가 있을지에 대해 학교 선배가 조언해주었다. 그러고 보니 어차피 이 모델에선 edge, smooth, spiral 세 가지 은하의 '모양'이 중요하다. 때문에 이미지를 전부 grey로 변환한 후 1차원으로 학습시켰으면 모델 정확도도 향상되고 학습 속도도 빨라질 것이라고 생각했다.

 

3. ROC curve 그리기

 

딥러닝 모델에선, 특히 분류 모델에선 이 모델이 분류를 얼마나 잘 했는지 못 했는지를 판단하는 것, 즉 평가가 중요할 것이다. 이를 판단할 수 있는 방법 중 하나가 ROC curve를 그려보는 것이다. ROC curve는 진짜 양성 비율(TPR)에 대한 거짓 양성 비율(FPR)을 나타낸다. 이에 대한 자세한 내용은 '블록과 함께하는 파이썬 딥러닝 케라스' 69p~85p (아래 링크로도 나와있다), '파이썬 라이브러리를 활용한 머신러닝' 335p~360p에 잘 나와있다.

 

https://tykimos.github.io/2017/05/22/Evaluation_Talk/

 

반응형