[부스트캠프 AI Tech] U-stage. 2-2

느린 개발자·2021년 1월 26일
1

부스트캠프 AI Tech

목록 보기
8/35

📌 경사하강법(Gradient Descent)


📄 미분(Differentiation) 은 무엇인가요?

미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구 로 최적화에서 제일 많이 사용하는 방법이다.
최근엔 sympy 모듈 를 가지고 미분을 쉽게 계산할 수 있다.

f(x)=limh0f(x+h)f(x)hf'(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}


📄 미분은 우리에게 어떤 의미를 주나요?

미분은 함수 ff의 주어진 점 (x,f(x))(x,f(x)) 에서의 접선의 기울기 이다. 한 점에서 접선의 기울기를 알면 어느 방향을 점을 움직여야 함수값이 증가/감소 하는지 알 수 있다.

y=x2y=x^2 을 통해 그 의미를 파악해보면 기울기가 2인경우 양의 방향으로 점을 움직일시 함수값이 증가/ 반대방향으로 움직일시 감소 하며, 기울기가 -2인 경우 음의 방향으로 점을 움직일시 함수값이 증가/ 반대방향으로 움직일시 감소 한다.


📄 그래서 경사하강법이 무엇인가요?

즉, 경사하강법이란 미분값의 반대방향으로 (함수값이 감소하는 방향) 으로 움직여 함수의 극솟값을 찾는 방법 이며, 추가적으로 경사상승법이란 미분값의 정방향으로 (함수값이 증가하는방향) 으로 움직여 함수의 극댓값을 찾는 방법 이다. 결론적으로 경사하강법이란 극값에선 미분값이 0이므로 목적함수가 더이상 업데이트가 되지 않을때까지(loss 를 줄일수 있을때까지) 최적의 값을 찾는 방법이다.


📄 독립변수가 여러 개면 어떻게 하나요?

벡터가 입력인 다변수 함수의 경우 편미분(partial differentiaion) 을 사용하며 각 변수별로 편미분한 그레디언트 벡터(Gradient vector) f\nabla{f}를 이용한다.

xif(x)=limh0f(x+hei)f(x)h\partial_{x_i}f(\textbf{x})=\lim_{h\to0}\frac{f(\textbf{x}+h\textbf{e}_i)-f(\textbf{x})}{h}
f(x,y)=x2+2xy+cos(x+2y)xf(x,y)=2x+2ysin(x+2y)f(x,y)=x^2+2xy+cos(x+2y)\\ \Rightarrow \partial_{x}f(x,y)=2x+2y-sin(x+2y)
f=(x1f,x2f,,xdf)\Rightarrow \nabla{f}=(\partial_{x_1}f,\partial_{x_2}f,\dots,\partial_{x_d}f)


📄 경사하강법으로 선형회귀 계수를 어떻게 구하나요?


📄 경사하강법은 만능인가요?

이론적으로 경사하강법은 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을때 수렴이 보장되어 있다. 특히 선형회귀의 경우 목적식 yXβ2\left \|\textbf{y}-\textbf{X}\beta \right \|_2회귀계수 β\beta 에 대해 볼록함수이기때문에 수렴이 보장된다. 하지만 비선형회귀의 경우 목적식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지는 않는다.


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


📄 배치(Batch) vs 미니배치(Mini-Batch)

배치미니배치
모델을 학습할 때 한번에 처리하는 데이터의 묶음으로 한 iteration 당 사용되는 데이터 셋의 모임이다.전체 학습데이터를 배치 사이즈로 등분된 데이터셋의 모임이다.

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

이름에 들어가는 batch 때문에 혼동스러울수 있겠지만, 여기서 말하는 batch는 전체 학습 데이터셋 을 의미한다. 따라서 BGD(Batch Gradient Descent)는 전체 학습데이터를 하나의 배치로 묶어 학습시키는 경사하강법이다. 다음은 BGD가 가지는 특징이다.

  • 전체 데이터를 통해 학습시키기 때문에 모델 파라미터 업데이트 횟수가 적다(1 Epoch 당 1회 업데이트). 하지만 한 스텝에 모든 학습데이터를 사용하기 때문에 학습이 오래걸린다.

  • 전체 데이터를 모두 한번에 처리하기 때문에, 메모리가 가장 많이 필요하다.

  • 항상 같은 데이터(전체 데이터)에 대해 경사를 구하기 때문에, 수렴이 안정적이다.

  • 그러나 local minima 상태가 되면 빠져 나오기 힘들다.

📄 확률적 경사하강법

SGD(Stochastic Gradient Descent) 는 전체데이터 중 랜덤하게 선택된 단 하나의 데이터(배치사이즈=1)를 이용하여 학습시키는 경사하강법이다. 다음은 SGD가 가지는 특징이다.

  • BGD에 비해 적은 데이터로 학습할 수가 있고, 속도가 빠른 장점이 있다.
  • 데이터를 한개씩 처리하기 때문에 GPU의 성능을 전부 활용할 수 없다.
  • 수렴속도는 빠르지만 각 데이터에 대한 손실값의 기울기는 약간씩 다르기 때문에 shooting 이 발생한다.
  • shooting은 local minima 에 빠질 확률을 줄여준다.
  • 보편적으로 전체 학습데이터에 대한 좋은 값을 내는 방향으로 수렴하나 global minima에 수렴하기 어렵다.

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

SGD 와 BGD의 절충안으로 전체데이터를 배치 사이즈(사용자가 지정)만큼 나눠 미니배치로 학습시키는 경사하강법이다.

예를들어, 전체데이터가 100개인 데이터를 학습시킬때, 배치사이즈가 10이라면 전체 100개를 총 10묶음의 미니 배치로 나누어 1Epoch 당 10번 학습을 진행한다. 다음은 MSGD가 가지는 특징이다.

  • 한 배치의 손실값의 평균으로 학습하기 때문에 SGD 보다 shooting 이 적다.
  • local minima 에 빠질 리스크가 적다.
  • SGD 보다 GPU 병렬 연산에 유리하다.
  • 배치사이즈를 설정해야 한다. 보통 2의 제곱수를 이용하는데, 본인의 GPU 에 따른 Out of memory가 발생하지 않도록 정해줘야 한다.
  • 배치사이즈는 학습데이터 갯수에 나누어 떨어지도록 지정하는 것을 권장한다. 만약 마지막 남은 배치가 다른 사이즈면 해당 배치의 데이터가 학습에 더 큰 비중을 갖게 되기 때문이다.


📄 너무 복잡한데, 한번 정리해 볼까?

배치사이즈경사하강법
전체 학습데이터BGD
1SGD
사용자 지정, 보통 2의 제곱수MSGD
<참고>
엄밀히 따지면 MSGD 와 SGD는 다른 알고리즘이지만 요즘엔 MSGD를 SGD라고 혼용하여 부르기도 한다.

📚 Reference

그레디언트란 무엇인가?
경사하강법
벡터,행렬 미분
배치와 미니배치, 확률적 경사하강법1
배치와 미니배치, 확률적 경사하강법2
배치와 미니배치, 확률적 경사하강법3
배치와 미니배치, 확률적 경사하강법4

profile
남들보단 느리지만, 끝을 향해

0개의 댓글