딥러닝 PART.Batch Normalization

Hahnsangbeom·2022년 8월 16일
1

파이썬

목록 보기
1/2

신경망에서의 학습

  • 학습시 Gradient 기반의 방법들은 파라미터 값의 작은 변화가 신경망 출력에 얼마나 영향을 미칠 것인가를 기반으로 파라미터 값을 학습
  • 변화가 신경망 결과에 매우 작은 변화를 미치게 될 경우 효과적인 학습 불가
  • Gradient 라는 것은 변화량으로 변화량이 매우 작아지거나(Vanishing) 커진다면(Exploding) 신경망 학습이 불가

안정적인 학습을 위한 간접적인 방법

  • Sigmoid, tanh : 매우 비선형적인 방식으로 입력 값을 매우 작은 출력 값의 범위로 squash
    e.g. sigmoid는 실수 범위의 수를 [0, 1]로 맵핑

  • 위의 문제점 :

  1. 출력의 범위를 설정하여 매우 넓은 입력 값의 범위가 극도로 작은 범위의 결과 값으로 매핑

  2. 이러한 현상은 비선형성 레이어들이 여러개 있을 때 더욱 학습이 악화
    • 첫 레이어의 입력 값에 대해 매우 큰 변화량이 있더라도 결과 값의 변화량은 극소

  3. 간접 X -> 직접적으로 "학습하는 과정 자체를 전체적으로 안정화"하여 학습 속도를 가속 시킬 수 있는 근본적인 방법인 "배치 정규화(Batch Normalization)"를 사용


정규화를 하는 이유

  • 그래프를 왼쪽에서 오른쪽으로 만들어, 로컬 옵티멈에 빠질 수 있는 가능성을 낮춘다.
  • 로컬 옵티멈에 빠지는 것이 Gradient가 매우 작아져서 신경망 결과에 매우 작은 영향을 주게 되어 발생
  • 학습 자체에서 안정화를 시켜버림

학습 불안정화가 일어나는 이유

각 레이어나 엑티베이션 마다 입력값의 분산이 달라지기 때문

  • Covariate Shift : 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상
  • Internal Covariate Shift : 레이어를 통과할 때 마다 Covariate Shift 가 일어나는 현상

배치정규화

  • 정의 : 각 batch 별 평균과 분산을 기준으로 각 레이어에서 나오는 output을 정규화하는 기법
  • 평균과 분산을 조정하는 과정이 별도의 과정으로 떼어진 것이 아니라, 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정 역시 같이 조절

  • 즉, 각 레이어마다 정규화 하는 레이어를 두어, 변형된 분포가 나오지 않도록 조절
    • 레이터를 통과할 때마다 이전 레이어와 값들이 너무 심하게 차이나는 정도를 줄이고자 사용
    • 통과할 때마다 변형된 분포가 나오지 않게 하여 Covariate Shift가 일어나지 않게 해준다.

  • 배치란?
    모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음

    -> 헷갈렸던 부분 : cnn의 배치란 batch_size = 10이면 mnist 데이터의 0~9행

  • 수식

    • 미니 배치의 평균과 분산을 이용해서 정규화 한 뒤 scale 및 shift 를 감마(γ) 값, 베타(β) 값을 통해 실행

      -> 미니 배치의 평균과 분산으로 정규화하는 것은 말 그대로 전체 데이터의 측정치로 정규화하는 것이 아니라는 의미
      -> 중요 포인트는 감마(γ) 값, 베타(β) = 일반 정규화와 다른 부분

    • 위에서...

      • 감마와 베타는 학습 가능한 변수. 즉, 역전파에서 같이 학습됨
      • 이렇게 정규화된 값을 활성화 함수의 입력으로 사용하고, 최종 출력 값을 다음 레이어의 입력으로 사용 (활성화 함수의 출력을 정규화의 입력으로 사용하면 위의 간접적인 방법과 같은 결과)
    • 특징

    1. 활성화 함수 앞쪽에 배치(4, 5일차 비교)

    2. 신경망에 포함되어 역전파를 통해 학습됨

이전 스터디에서

  • 정규화 : 학습셋 전제 집합에 정규화 실시

  • 배치 정규화 : 미니 배치 단위로 정규화 실시 근데 cnn에 적용하고자 할 때는 cnn의 특성을 고려해줘야한다.

    • DNN의 배치 정규화

      • 발제자분 : "각 feature의 평균과 분산을 구해서 batch에 있는 각 특성(feature)을 정규화, batch전반에 걸쳐서 처리되므로 batch size와 관련이 깊음"
      1. 세로 120451이 하나의 샘플이다.

      2. 가로 1, 3, 6이 feature가 된다. (여기서 feature란 cnn의 feature 맵이랑 연결시켜 보면 하나의 픽셀을 feature라고 하고 feature들이 모여서 feature 맵이라고 하는 것 같다.)

        ∴ BN은 batch에 있는 “모든” sample들에 대해서 “각 feature의 평균과 분산”을 구하여 정규화

        batch_size = m
        입력 사이즈 = n

    • CNN의 배치 정규화

    • 위의 모양으로 입력x와 가중치w의 곱(wixi+b)가 생김

    • CNN의 경우 컨볼루션 성질을 유지 시키고 싶기 때문에 각 채널을 기준으로 각각의 감마와 베타를 만들게 된다.(★ 채널을 따져야한다.)

      batch_size = m
      필터 사이즈 = p x q
      채널 개수 = n

profile
돌아보면 후회 없기를 바라며

0개의 댓글