본문 바로가기
기계학습/[밑바닥부터 시작하는 딥러닝]

6장 정리 - 학습관련 기술들

by tryotto 2019. 8. 6.

학습 관련 기술들-6장


신경망 학습 핵심 개념

1) 가중치 매개변수 최적값 탐색 방법 (최적화 방법)

2) 가중치 매개변수 초깃값/하이퍼파라미터 설정방법

3) 오버피팅 대응책 - 가중치 감소/드롭아웃 등의 정규화 방법

4) 배치 정규화 방법


-> 신경망(딥러닝) 학습의 효율+정확도 상승 가능



1. 매개변수 갱신//


- 의의 :

    신경망 학습의 목적 = 손실함수의 값을 최대한 낮추는 매개변수 탐색

        -> 매개변수의 최적값을 찾는 것

             -> "최적화" 라 한다


- 문제점 : 매개변수 공간이 너무 넓고, 복잡 -> 최적의 솔루션 찾기 힘듬

-> 그나마 빠른 최적화 방법 : 확률적경사하강법, etc


- SGD의 한계점 : 

     - 비등방성 함수에서는 탐색 경로가 비효율적

-> 해결책 : 모멘텀, AdaGrad, Adam


- 모멘텀 방식 :  속도값 갱신 + 가중치값 갱신 -> 지그재그 정도 완화


- AdaGrad 방식 : 

         - 학습률 감소 : 각각의 매개변수에 맞는 맞춤형 학습률을 제시해줌

             -> 엄청난 개선 가능


- Adam 방식 : 모멘텀 + AdaGrad방식 (섞은 것)  -> 편향 보정도 가능케 함.

        ** 이 방식들 중에서 절대적 우위를 지니고 있는 건 없다! 상황에 따라 우세한 방식이 있음




2. 가중치의 초깃값//


- 의의 : 어떤 초기값을 설정하는가에따라 신경망 학습의 승패가 자주 갈림.

        -> 가중치 감소 기법을 사용한다면, 오버피팅 억제 가능


- 가중치 초깃값을 균일한 값으로 설정해서 안되는 이유? 

        ->역전파시, 가중치가 모두 똑같이 갱신됨. 가중치를 갖는 것이 무의미해짐

   -> 가중치 값은 활성화 값들의 치우침이 최소일때 가장 효율적이다.


- 은닉층의 활성화값 분포 :

        가중치의 초깃값에따라 은닉층의 활성화값이 어떻게 변하는지 실험.

   -> 이걸 관찰해서, 가중치 초깃값이 어떻게 설정되는게 좋은지를 알아내자.


        - 가중치의 표준편차 변형 : 

  ex1) 가중치 표준편차가 1일때 : 활성화값들이 0과 1에 치우침 -> 기울기 손실발생

  ex2) 가중치 표준편차가 0.1일때 : 특정 활성화값에 치우침 -> 표현력 제한 (한개짜리 뉴런이나 다름없음)

       ** 해결방법!! : Xavier 초깃값!!


        - Xavier 초깃값 : 앞 계층의 노드가 n개일 경우, 표준편차가 1/루트n  일때 가장 효율


- ReLU를 사용할 때의 가중치 초깃값 

        - Xavier 초깃값의 전제 : 활성화 함수가 선형 함수이다 !  

        -> 선형함수가 아닌 경우엔 어떻하지? 상황따라 적용 다르게!


        - ReLU 함수를 사용할 때 : He초깃값을 사용하라!

   - He 초깃값 : 앞 계층의 노드가 n개일때, 표준편차가 루트(2/n) 인 정규분포사용

(Xavier보다 좀 더 넓은 정규분포를 사용했으면 하기 때문)


*** 가장 적절한 초깃값 조합

- 활성화함수가 ReLU일때 : He 초깃값 사용

- S자 모양 곡선일때 (sigmoid, tanh등) : Xavier 초깃값 사용


- 표준편차가 0.01일때의 정규분포를 사용하는 가중치 초깃값 : 

학습이 거의 이뤄지지 않음

(활성화값의 분포가 너무 작은 값에 밀집되어있기 떄문)



배치 정규화//

각 층이 활성화를 적당히 퍼뜨리도록 강제하는 방식


- 배치 정규화 알고리즘

       -장점 : 

1) 학습 속도 빠름

2) 초기값에 그게 의존 않암

3) 오버피팅 억제

       - 단점 : 딥러닝 학습 시간이 길다


       - 방식 : 미니배치를 단위로 정규화를 한다

-> 각 값들을 평균=0, 분산=1 이 되게 정규화를 해준다


       - 배치 : 활성함수 전or후


       - 추가 연산 : 확대와 이동 연산 


       - 효과 : 정확도가 훨씬 빠르게 올라간다 (학습 속도가 매우 빨라진다)



바른 학습을 위해//


- 오버피팅의 정의 : 신경망이 훈련데이터에만 지나치게 적응되어 그 외의 데이터에

대응을 제대로 못하는 상태

-> 좋은 머신러닝은, 오버피팅을 억제할 수 있어야함


- 오버피팅이 일어나는 경우 : 

1) 매개변수가 많고 표현력이 높음

2) 훈련데이터가 적음

-ex) 훈련데이터를 줄인 시행을 했을 때, train데이터에선 

정확도가 높은 반면, 실제 test에선 정확도 폭락함.


- 오버피팅 억제용 방법(1) : 가중치 감소

- 오버피팅이 주로 발생하는 이유 : 가중치 매개변수값이 커서

-> 해결책 : 가중치 감소


- 방법 : 큰 가중치에 대해서는 그에 상응하는 큰 패널티를 부여.

-> 실제로는 모든 가중치 각각의 손실 함수에 더함.

- 도입되는 개념 : 하이퍼 파라미터

-> 정규화의 세기를 조절한다.


- 오버피팅 억제용 방법(2) : 드롭 아웃

       - 방식 : 뉴런을 임의로 삭제하면서 학습

-> 훈련을 할 때에는 할때마다 임의의 뉴런 삭제

-> 시험때, 훈련때 삭제한 비율을 곱하여 출력


** 이런 방식을 "앙상블 학습" 이라고 함. 여러 개의 표본들을 평균 내서

   학습하기 떄문.



적절한 하이퍼파라미터 값 찾기//

** 하이퍼 파라미터란? 뉴런 수, 배치 크기, 매개변수 등등의 변수들을 의미


- 특징 :

     - 하이퍼파라미터의 성능 평가시, 시험데이터를 사용 X,  검증데이터 사용 O

(시험데이터를 사용시, 하이퍼파라미터가 시험데이터에 오버피팅 될수도)


**  1) 훈련데이터 : 매개변수 학습

    2) 검증데이터 : 하이퍼 파라미터 성능평가

    3) 시험데이터 : 신경망의 범용 성능 평가


- 검증데이터 뽑아내는 방식 :

    1) 훈련 데이터, 시험 데이터를 뽑아냄

    2) 두 개를 섞음

    3) 일정 비율을 검증 데이터로 분리해냄

    4) 남은 데이터들을 훈련/시험데이터로 활용함


- 하이퍼파라미터 최적화 

     - 핵심 : 하이퍼파라미터의 최적값이 존재하는 범위를 조금씩 줄여나간다

by. 뽑아낼때마다 정확도를 살피며 반복수행.

  

     - 평균 소요시간 : 몇일~몇주

- 해결방법 : 학습을 위한 에폭 작게함 -> 1회평가에 걸리는 시간 단축


** 더 발전되고 세련된 기법 : 베이즈 최적화 (하이퍼파라미터 최적화)