이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

배치와 미니 배치, 확률적 경사하강법 (Batch, Mini-Batch and SGD)

  • 2020.05.28 14:57
  • 강의/딥러닝 기초
반응형

이번 글에서는 batch와 mini-batch, 확률적 경사 하강법을 알아보자.

배치의 정의와 GPU (Batch)

현대 머신러닝의 비약적인 발전 배경에서 GPU는 빼놓을 수 없는 요소이다. CPU 대신 GPU(Graphic Processing Unit)를 이용한 가속 컴퓨팅이 머신러닝 기술의 발전을 불러온 것은 익히 알고 있을 것이다.

GPU가 CPU보다 유리한 점은 병렬 연산이다. CPU는 연산을 Queue에 담긴 순서대로 빠르게 처리한다. 마치 대학생이 선형대수 과제 문제를 1번 ~ 20번 순서로 푸는 것과 같다.
반면, GPU는 수만 픽셀의 그래픽 연산을 빠르게 처리하기 위해 여러 연산을 한 번에 처리하는데 특화되어 있다. 이는 비유하자면, 초등학생 20명이 각각 덧셈 문제를 푸는 것과 같다.

위 비유를 조금 더 설명해보자면 이렇다. 초등학생 100명을 모아놓고 대학교 과제 20문제를 풀라고 하면, 풀지 못하거나 아주 오랜 시간이 걸릴 것이다. 그러나 간단한 사칙연산 문제 100개를 푸는 경우라면, 대학생 1명보다 초등학생 100명이 각각 한 문제씩 푸는 것이 나을 것이다. 

배치는 GPU가 한번에 처리하는 데이터의 묶음을 의미한다.

배치 경사 하강법 (Batch Gradient Descent: BGD)

배치 경사 하강법이란, 전체 학습 데이터를 하나의 배치로(배치 크기가 n) 묶어 학습시키는 경사 하강법이다.

전체 데이터에 대한 모델의 오차의 평균을 구한 다음, 이를 이용하여 미분을 통해 경사를 산출, 최적화를 진행한다.
보통 딥러닝 라이브러리에서 배치를 지정하지 않으면 이 방법을 쓰고 있다고 생각할 수 있다.

배치 경사 하강법의 특징은 아래와 같다.

  • 전체 데이터를 통해 학습시키기 때문에, 가장 업데이트 횟수가 적다. (1 Epoch 당 1회 업데이트)
  • 전체 데이터를 모두 한 번에 처리하기 때문에, 메모리가 가장 많이 필요하다.
  • 항상 같은 데이터 (전체 데이터)에 대해 경사를 구하기 때문에, 수렴이 안정적이다. (아래 그림 참고)

BGD의 시각화

수렴이 안정적인 것은 장점으로 보일 수 있지만, 단점이 있다. 이는 아래서 설명하겠다.

확률적 경사 하강법 (Stochastic Gradient Descent: SGD)

확률적 경사 하강법은 전체 데이터 중 단 하나의 데이터를 이용하여 경사 하강법을 1회 진행(배치 크기가 1)하는 방법이다.
전체 학습 데이터 중 랜덤하게 선택된 하나의 데이터로 학습을 하기 때문에 확률적 이라 부른다.

배치 경사 하강법에 비해 적은 데이터로 학습할 수 있고, 속도가 빠른 장점이 있다. 무엇보다 큰 특징은 수렴에 Shooting이 발생한다는 점이다.

각 데이터에 대한 손실값의 기울기는 약간씩 다르기 때문에, 손실값의 평균이 아닌 개별 데이터에 대해 미분을 수행하면 기울기의 방향이 매번 크게 바뀐다.

SGD의 시각화

그러나 결국 학습 데이터 전체에 대해 보편적으로 좋은 값을 내는 방향으로 수렴한다. 다만, 최저점에 안착하기는 어렵다.

또한, Shooting은 최적화가 지역 최저점Local Minima에 빠질 확률을 줄여준다.

  • 한 번에 하나의 데이터를 이용하므로 GPU의 병렬 처리를 그다지 잘 활용하지는 못한다.
  • 1회 학습할 때 계산량이 줄어든다.
  • Global Minimum에 수렴하기 어렵다.
  • 노이즈가 심하다. (Shooting이 너무 심하다.)

미니 배치 확률적 경사 하강법 (Mini-Batch Stochastic Gradient Descent: MSGD)

딥러닝 라이브러리 등에서 SGD를 얘기하면 최근에는 대부분 이 방법을 의미한다.
SGD와 BGD의 절충안으로, 전체 데이터를 batch_size개씩 나눠 배치로 학습(배치 크기를 사용자가 지정)시키는 것이다.

예를 들어, 전체 데이터가 1000개인 데이터를 학습시킬 때, batch_size가 100이라면, 전체를 100개씩 총 10 묶음의 배치로 나누어 1 Epoch당 10번 경사하강법을 진행한다.

Shooting이 발생하기는 하지만, 한 배치의 손실값의 평균으로 경사하강을 진행하기 때문에, Shooting이 심하지는 않다.

MSGD의 시각화

  • BGD보다 계산량이 적다. (Batch Size에 따라 계산량 조절 가능)
  • Shooting이 적당히 발생한다. (Local Minima를 어느정도 회피할 수 있다.)

Batch Size 정하기

Batch Size는 보통 2의 n승으로 지정하는데, 본인의 GPU의 VRAM 용량에 따라 Out of memory가 발생하지 않도록 정해줘야 한다.

또한, 가능하면 학습데이터 갯수에 나누어 떨어지도록 지정하는 것이 좋은데, 마지막 남은 배치가 다른 사이즈이면 해당 배치의 데이터가 학습에 더 큰 비중을 갖게 되기 때문이다.

예를 들어, 530 개의 데이터를 100개의 배치로 나누면, 각 배치 속 데이터는 1/100 만큼의 영향력을 갖게 된다. 그러나 마지막 배치(30개)의 데이터는 1/30의 영향력을 갖게 되어 과평가되는 경향이 있다. 그렇기 때문에 보통 마지막 배치의 사이즈가 다를 경우 이는 버리는 방법을 사용한다.

정리

  • 배치는 경사 하강법 1회에 사용되는 데이터의 묶음이다.
  • 배치의 크기에 따라 아래와 같이 나눌 수 있다.
    • (배치 크기) == (전체 학습 데이터): 배치 경사 하강법 (BGD)
    • (배치 크기) == 1: 확률적 경사 하강법 (SGD)
    • (배치 크기) == (사용자가 지정) 미니 배치 확률적 경사 하강법 (MSGD)
  • 확률적 경사 하강법을 이용하면 아래와 같은 특징이 있다.
    • 1회 학습 당 계산량이 줄어든다.
    • Shooting이 발생하여 Local Minima를 회피할 수 있다.
  • 최근에는 SGD라고 하면 MSGD를 의미하고, 배치라 하면 미니 배치를 의미하는 경우가 많다.
  • 배치 크기는 아래 조건에 따라 정한다.
    • 2의 n승이 좋다. (GPU 구조 때문에 연산이 빨라진다고 한다.)
    • 본인의 VRAM 크기를 고려한다.
    • 가능하면 전체 데이터 수가 나누어 떨어지도록 하고, 아니라면 마지막 배치는 버린다.
반응형

'강의 > 딥러닝 기초' 카테고리의 다른 글

데이터 일반화 vs 표준화 (Normalization and Standardization of Data)  (3) 2020.04.28
Convexity와 딥러닝 (Convex Function과 Convex Set)  (1) 2020.04.13
경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function)  (8) 2020.01.23
퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기  (3) 2020.01.06
왜 지금인가? - 딥러닝의 역사  (0) 2020.01.06

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 데이터 일반화 vs 표준화 (Normalization and Standardization of Data)

    데이터 일반화 vs 표준화 (Normalization and Standardization of Data)

    2020.04.28
  • Convexity와 딥러닝 (Convex Function과 Convex Set)

    Convexity와 딥러닝 (Convex Function과 Convex Set)

    2020.04.13
  • 경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function)

    경사하강법과 손실 함수: 심층 신경망 학습시키기 (Gradient Descent and Loss Function)

    2020.01.23
  • 퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기

    퍼셉트론(Perceptron): 덧셈과 곱셈으로 뉴런 구현하기

    2020.01.06
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (281) N
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (47) N
      • 회고 & 계획 (19) N
      • 내 이야기 (9)
      • 리뷰 (3)
      • 군대에 간 공돌이 (10)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바