빅데이터 & 인공지능

신경망의 딥러닝의 여러가지 문제

헬로월드! 2020. 11. 22. 21:39

DNN 이란 ? MLP (다층 퍼셉트론) 에서 은닉층의 개수를 증가시킨 것이다. (MLP 에서는 2-3개의 은닉층 )

deep 이라는 용어가 은닉층이 깊다는 것을 뜻한다.  (여러개의 은닉층 , CPU 로는 버겁고 GPU환경에서 구동해야됨 ) 

 

기존의 모델을 학습시킬 때는 특징 추출 과정을 거쳐서 데이터 전처리, 가공을 통해 데이터를 추출한 후, 학습데이터로 패턴분류기를 훈련했다. 그러나 딥러닝에서는 특징 추출 과정이 필요가 없다! 왜냐하면 스스로 특징을 추출하기 때문!!!! 

 

* 딥러닝에서는 특징을 추출하지 않아도 Input data에 들어간 데이터를 은닉층에서 한층 한층 가면서 필요한 정보들을 스스로 추출해 낸다. 앞쪽의 은닉층에서는 엣지처럼 저급 특징을 추출하고 뒤쪽의 은닉층은 코너와 같은 고급 특징을 추출한다. 

 

딥러닝은 MLP 의 여러가지 문제점을 해결할 수 있다. 

1) 그래디언트 소멸 문제:

은닉층이 많아지면 출력층에서 계산된 그래디언트가 역전파 되다가 값이 점점 작아져서 없어진다.

시그모이드 함수 때문에, 이 함수의 특성상 아주 큰 양수나 아주 작은 음수가 들어올 경우 포화되어서 기울기가 거의 0에 가까워지기 때문이다.

초기 레이어에서 각각의 파라미터들에 대한 출력 gradient 는 극도로 작아져서 학습에 영향을 끼치지 않는다. 즉 , 매우 느리고 고차원 데이터가 잘 처리되지 않는 현상이 발생하는데 이러한 문제는 은닉층이 깊어질수록 악화된다.

해결책: - 층별 선훈련) 층층이 별도로 훈련 

               - 새로운 활성화 함수 ReLU ) Rectified Linear Units 뉴런이 선형적으로 활성화, 미분 시 경사도가 0이 아닌 상수 , Vanishing gradient 를 방지한다. 

 

2) 손실함수 문제:

손실함수로 MSE (제곱 오차 함수)를 사용하고 활성화 함수로 시그모이드가 사용된다면 MSE 는 저속 수렴 문제에 부딪치게 된다.

=> 따라서 출력층의 노드에는 softmax 함수(활성화 함수)를 사용하고 손실함수로는 교차엔트로피를 많이 사용한다.

 

- one-hot 인코딩 : 정답에 해당하는 인덱스의 원소만 1이되고 나머지는 0 이다. 

예를들어 3 이라는 숫자를 one - hot 인코딩으로 나타낸다면(출력노드가 10개 일때) , [0 0 1 0 0 0 0 0 0 0 ] 이렇게 나타낼 수 있다. 

이렇게 해서 정확도를 높이고, 연산을 편하게 하고 다양한 모델에 적용할 수 있다는 장점이 있다. ( categorical_crossentropy와 함께 사용할 수 있다.)

 

- 교차 엔트로피 오차 (cross Entropy Error , CEE ) 

엔트로피? 불확실성에 대한 척도 

교차 엔트로피란 2개의 확률분포 간의 거리를 측정한 것으로 교차 엔트로피가 크면 확률 분포가 많이 다른 것이고 작으면 거의 일치한다고 볼 수 있다. 

교차 엔트로피 형태의 오차함수를 사용하면 출력 레이어에서 활성화 함수의 미분 함수에 의한 영향을 제거할 수 있다.

 

3) 가중치 초기화 문제 

출력층에서 계산된 오차는 가중치의 값에 비례하면서 역전파된다. 따라서 모든 가중치가 0이면 오차 역전파가 제대로 되지 않는다.

가중치를 동일하게 주는 것도 문제, 가중치의 초기값을 난수로 결정 ! 

 

4) 과잉 적합 (overfitting) 

과잉 적합이란 학습하는 데이터에서는 성능이 뛰어나지만 새로운 데이터에 대해 테스트 했을 때는 그 결과가 잘 나오지 않는 것을 의미한다. 학습데이터에 너무 딱 맞아서 일반화 능력이 떨어지는 현상이다.

 

과잉적합의 해결책은 소량의 데이터라면 이 데이터를 이동,회전,반전 시켜서 소량의 데이터에서 많은 데이터를 만드는 방법과

학습데이터와 테스트 데이터를 반드시 분리하여 최적의 모델을 찾는 방법이 있다. 이외에도 은닉층의 개수가 너무 많을 경우 과잉 적합이 심해지기 때문에 은닉층의 수를 줄이는 방법과 가중치 값의 크기를 줄이는 방법 등 다양한 방법이 존재한다.