[딥러닝의통계적이해] 딥러닝의 제 문제와 발전
딥러닝 모형 학습시 문제
- 경사소실
- 초깃값 설정 : 초깃값을 잘못 설정하면 손실함수가 국지적 최솟값에 머뭄
- 과대적합
- 경사하강법 - 학습시간이 너무 오래걸리고, 국지적에만 최적화
오늘은 이러한 문제를 해결하는 방법들에 대해 알아보고자 한다.



활성화 함수 선택(경사소실 문제 해결방법 : ReLU의 등장)
Sigmoid 미분 : 0에서 최댓값 0.25, x가 0에서 멀어질 수록 경사값이 0으로 간다 -> 경사소실 문제
tanh 미분 : x가 0이면 최댓값 1을 가진다. But, 0에서 멀어질 수록 시그모이드 함수의 미분보다 빠르게 경사값은 0이 된다. -> 경사소실 문제
=> tanh 미분의 경사소실이 x가 0 부근 일땐 시그모이 함수보다 작지만 but, 그 외 미분값이 1보다 작아 경사손실이 발생한다.
하지만 ReLU 함수에서 경사소실 문제 해결!
ReLU (2010년) -> x > 0에서 미분값이 1로(음수면 0, 양수면 1로) 경사소실 문제 해결!
하지만, x가 0에서는 미분이 안된다. 입력값 혹은 가중치가 음수이면 경사값은 0으로 수렴한다. 학습을 많이 하다보면 경사값이 너무 커지는 문제가 있다. 이러한 문제를 해결하고자, 파생 Relu가 나오게 된다.
- PReLU 함수
x가 음수일 때 0인것은 아니고 약간의 값을 가지게 된다. 하지만 ReLU가 더 좋은 효과인 경우가 있다. - ELU 함수
비선형이라서 x가 0일 때 미분이 가능하다.
위 두 함수는 그래프를 참고해서 보면 좋다. 파생 ReLU는 계산속도가 느리다는 제약이 있다.
초기값 설정(RBM 학습, 심층신뢰망, 세이비어와 히가 만든 초깃값)
잘 정해야 재빨리 결과물을 낼 수 있으니 중요하다.
힐트 교수 연구팀이 볼츠만 머신을 제한된 볼츠만 머신RBM으로 연구했다.
RBM 학습
구조 : 입력층 + 은닉층
! 출력층없다.
비지도 학습
뉴런이 확률 뉴런임
(넷플릭스 경진대회에서 우승한 앙상블 모델에서 RBM이 들어있었다)
n개의 은닉층과 n+1개의 가시층 서로 주고 받고 하며 학습하여 KL-다이버전스로 이들을 비교하며 가중치가 가장 최적화 되도록 함.
RBM을 적충하여 학습할 수도 있다. => 적충 RBM == 심층신뢰망
심층신뢰망
심층신뢰망은 초깃값을 정하는 방법으로 이보다 더 간단한 방법이 발견되면서 현재는 이용하지 않게되었다.
RBM_1을 보면 V_n에서 h_n을 이용해 가중치를 구해놓고 그 다음 RBM_2의 가중치를 구하게 된다. 그래서 해당 망의 끝에는 신경망 하나가 붙게되는데 앞의 가중치들을 업데이트하지 않고 끝의 신경망만 학습한다. 앞쪽은 비지도학습이고 끝인 신경망은 지도학습으로 합해서 준지도 학습이라고 한다.
그래서 사전학습하여 초깃값을 정해 다시 학습하니까 괜찮아서 딥러닝 학습이 쉬워짐을 알아냄.
초기값 선택하기 - 초기값 관련 분포
- 가장 쉬운 방법 : 모두 0으로 지정
=> 오차역전파법 적용하면 가중치가 같은 값으로 갱신됨 == 문제
=> 모두 같은 값이면, 층을 깊게 쌓아 학습하는 의미가 없음.
=> 가중치 초기값은 임의로 다르게 줘야함 - 가장 일반적인 방법 : 평균= 0, 분산=난수 from 매우 작은 정규분포
- 층별 뉴런 수 고려해야 함 -> 방법 1. 세이비어 Xavier 방법 , 방법 2. 히 He 방법.
- 세이비어Xavier와 히He가 만든 초깃값
- 세이비어 초깃값 : 시그모이드, tahn 함수 일 때 초기값이 적절하다!
각 층마다 입력뉴런과 출력뉴런 수가 달라 층마다 초기값이 변화한다.
- 히 초깃값 : ReLU함수
시그모이드 함수대비 분산을 2배 늘린 가중치를 준다.
+ 연속형 균등분포
다양한 최적화 방법
(확률적 경사하강법, 모멘텀 방법, AdaGrad 방법, RMSProp 방법, Adam 방법 + 학습률 + 편의와 분산)
확률적 경사하강법
손실함수의 최솟값으로 구할 때 데이터를 임의로 뽑아서 진행한다. 최솟값으로 진동하며 내려간다.
처음 초깃값의 설정에 따라 학습 속도가 달라진다
모멘텀Momentum 방법
기울기에 따라 관성을 이용할 수 있도록함
이전의 미분값(경사)에 ß를 곱해줘서 누적 갱신
AdaGrad 방법
최저점에 가까워질수록 학습률 감소시키는 방법
하지만 최저점 근방에서 가중치 갱신이 너무 느려져서 최저점에 도달하기 전에 학습이 끝나는 문제가 발생한다.
매우 작은 값인 10^(-10)을 넣는 이유는 s가 0이 되면 계산이 불가능하기 때문이다.
RMSprop 방법
AdaGrad 방법에 지수평활법 적용해 성능 개선
위 식에서 더 최근것에 더 큰 가중치를 줌으로써 이전에 계산했던 것들의 가중치를 줄여주어 연산의 부담을 줄여주었다.
Adam 방법
두 종류 사용
모멘텀 방법에서 미분값의 지수평활값 + RMSProp 방법에서 미분값 제곱의 지수평활값 => 이거로 가중치 갱신
학습률
최적화 방법과 별도로 학습률을 변경하여 학습할 수 있다.
학습이 진행될 수록 학습률을 조금씩 줄여준다.
편의와 분산
편의와 분산의 적절한 지점
분산이 많거나 편의가 많은 경우 과대적합과 과소적합의 문제가 생긴다.
과대적합
training 오류율 낮음 validation 보통 => 과대적합(고분산)
training 오류율 보통 validation 보통 => 과소적합(고편의)
training 오류율 보통 validation 높음 => 고편의, 고분산
training 오류율 낮음 validation 낮음 => 저편의, 저분산
과소적합 -> 보다 깊거나 넓은 신경망으로 모형을 더 복잡하게 작성
과대적합 -> 새로운 데이터 추가, 모형을 단순화하여 다시 학습
정칙화 방법과 드롭아웃
두 가지 가설 중 간단한 가설을 사용해라
머신러닝, 딥러닝 모형 성과가 비슷하면 간단한 모형을 선택하라 (계산량이 적고 분산이 적기 때문이다)
- 조기 학습종료
검증데이터의 손실함수가 감소하다가 증가하는 부분에서 학습을 중단하고 그 가중치를 이용
데이터 부족 시 과대적합을 막는 간단한 방법 - 정칙화 regularization
기존 손실함수 + 가중치 벌칙항. 가중치의 수가 커지면 손실함수가 오히려 많아지는 것을 방지한다.
L2 : 가중치의 수를 줄인다. 뉴런 중 일부를 사용한다. (이걸 사용하면 예측률이 더 좋다)
L1 : 많은 가중치들이 0이 된다. (설명력은 이게 더 좋다) - 드롭아웃 Dropout
층마다 50% ~ 80% 뉴런을 삭제하고 미니배치 단위로 학습( 네트워크 가중치 수가 줄어듬 )
미니배치 단위 무작위 학습 -> 수많은 신경망 생성 -> 신경망 평균 -> 앙상블 모형 생성
- test data 에서는 드롭아웃 적용하지 않음, 모든 가중치 이용.
상황에 따른 드롭아웃 - 뉴런이 많으면 드롭아웃 비중 늘리기 , 뉴런 적으면 비중 줄이기
- But, 손실함수 정의가 정확하지 않게돼, 실제로 손실함수가 줄어드는지 확인 불가. - 데이터 증식 data augmentation
데이터 수 증가시키기
데이터가 부족해 네트워크 가중치가 더 필요할 때 사용
이미지 한장을 회전하고 뒤집고 늘리고 ... 다양한 비율로 이미지 증식이 가능하다
데이터 부족으로 인한 과대적합 문제 개선 가능
배치 정규화
통계학의 표준화(데이터에서 단위 또는 범위의 영향력을 제거하기 위해 하는 것)
활성화 함수에 의존하지 않는 방법. 이를 통해 경사하강법을 효과적으로 적용 가능.
배치 정규화로 은닉층에도 적절한 분포가 되게 함. -> 결과값 상승 가능 ( 경사소실 문제 해소 )
두 가지 방법이 있다.
1. (데이터값 - min.데이터값) / (max.데이터값 - min.데이터값)
2. (데이터값 - mean.데이터값) / 표준편차
입력층, 은닉층의 데이터 값 표준화 -> 활성화 함수 적용 전 값을 0 근처 값으로 분포 -> 딥러닝 학습에서 활성화 함수의 영향력 감소
경사하강법과 활성화 함수
시그모이드 함수, 탄 함수
배치 정규화
각 층별로 가지는 가중치를 층별로 표준화 하는 것이다.
표준화 : 분산 1, 평균은 0으로 만든 다음 z_norm^l을 구한다.
1. 양쪽 극단 값이 덜 발생하도록 학습이 된다.
2. 은닉층에서 입력값들이 제대로 분포되도록한다.
3. 초깃값의 의존성이 줄어든다.
4. 과대적합을 억제한다.
배치 정규화를 적용하면 드롭아웃과 정칙화 문제가 불필요할 수 있다.
But, 모형이 더 복잡해지고 학습시간이 추가적으로 소요된다.