본문 바로가기
기술/딥러닝

[Boostcamp AI Tech] 1주차 학습정리

by 팡팡구리 2021. 8. 6.
반응형

1주차 학습 회고


Boostcamp AI Tech의 1주차를 마무리했다.(이겨냈다?)

전반적으로 Pre-Course의 강의 영상을 복습하는 한 주였기 때문에

무난무난할 것이라 생각했지만.... 주어지는 과제들과 퀴즈들을 풀면서

내가 이해한다고 생각했던 것들은 사실 이해한 게 아니었다는 것을 깨닫게 되었다.

 

특히, 수식적인 부분과 그동안 잘 짜여진 모듈을 이용해서 다뤘던 것들을

원리를 따라 line by line으로 구현하는 것이 참 어렵게 느껴졌었다.

 

앞으로는 들은 것을 그저 안다고 치부하지 않고 정리하면서 내걸로 만드는 연습을 해야겠다.

+ 일주일치를 몰아서 정리한다는 생각은 버릴 예정이다 ㅠ.ㅠ

 

This week I Learned (TIL)


1. 미분의 사용처 & 경사하강법

 

미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기를 구해준다.

이 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지 감소하는지 알 수 있다.

 

미분값은 접선의 기울기로, 이 기울기를 이용해 함수값의 증감 방향을 알 수 있다.

 

함수값을 증가시키고 싶으면 x에 f'(x)를 더해주고, 함수값을 감소시키고 싶으면 x에 f'(x)를 빼주면 된다.

위 그래프에서 f'(x)는 음수값이므로 아래 이미지와 같이 x에 f'(x)를 빼주면 함수값은 감소하게 된다.

이처럼 미분값을 빼주는 것을 경사하강법(Gradient Descent)이라 하며, 극솟값 위치를 구할 때 사용한다.  

( 반대로 미분갑을 더해주는 것을 경사상승법(Gradient Ascent)라 하며, 극댓값 위치를 구할 때 사용한다. )

 

미분값을 이용해 함수값을 원하는 방향으로 움직일 수 있으며, 미분값을 빼주는 작업을 경사하강법이라 한다!!

 

위에서는 2차 함수로, 미분을 통해 쉽게 경사하강법을 수행할 수 있었지만

벡터가 입력인 다변수 함수의 경우는 어떤 방식으로 경사하강법을 수행할까?

 

이때에는 각 변수별로 편미분(partial differentiation)을 사용하여 경사하강법을 수행한다.

이 변수별 편미분의 계산값을 그레디언트 벡터(Gradient Vector)라 하며, 아래와 같이 표현한다.

 

그레디언트 벡터의 표현식

 

쉬운 이해를 위해 함수 f(x)의 등고선을 아래와 같이 그리게 되면,

경사하강법 수행 시 각 점에서 가장 빨리 감소하는 방향을 찾을 수 있다.

경사하강법을 통해 그레디언트 벡터가 극소값의 방향으로 이동한다.

 

 

2. 경사하강법을 이용한 선형회귀 계수 구하기

선형회귀의 목적식은 ∥y − Xβ∥2이고, 따라서 이를 최소화하는 β를 찾는 것이 목표이다.

그러므로 이 β를 구하기 위해서는 다음과 같은 그레디언트 벡터를 구해야 한다.

 

목적식(∥y − Xβ∥2)을 최소화하는 그레디언트 벡터 계산식

 

선형회귀 목적식은 L2-norm이지만 굳이 제곱근을 취한 채로 계산하지 않아도

목적식을 최적화하는 방향은 제곱을 취해도 같으므로 계산 편의상 아래와 같이 변환하여 계산할 수 있다.

L2-norm에 제곱을 취해서 목적식을 최소화(최적화)

 

하지만, 경사하강법은 항상 목적식을 최소화하는 값으로의 수렴을 보장하지는 않는다.

이론상 미분가능하고 볼록(Convex)한 함수에는 적절한 Learnig_rate와 epochs을 설정한다면 가능하지만,

비선형회귀 문제의 경우 볼록하지 않은 목적식이 성립할 수 있으므로 수렴을 항상 보장하지는 않는다.

그리고, 대부분의 문제는 비선형회귀의 문제일 경우가 많기 때문에 경사하강법은 만능이라 할 수 없다.

 

 

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

SGD는 모든 데이터를 가지고 그레디언트를 업데이트하는 것이 아니라

데이터 한개 혹은 일부(Mini-Batch)를 사용하여 그레디언트를 업데이트 하는 방식이다.

엄밀히 따지면 데이터 한개를 사용하는 것이 SGD이지만,
Mini-Batch를 사용하는 SGD를 Mini-Batch SGD이다.
그러나 대개는 Mini-Batch SGD를 SGD라 칭한다.

 

Mini-Batch를 가지고 그레디언트 벡터를 계산하게 되면 미니 배치는 데이터를 확률적으로 선택하기 때문에

아래와 같이 전체 데이터를 가지고 세운 목적식과는 다른 모양의 목적식으로 바뀌게 된다.

전체 데이터를 가지고 세운 목적식과 모양이 다른 목적식을 볼 수 있다.

 

이와 같은 성질로 인해 최소값을 찾는 과정은 경사하강법과 아래와 같은 차이를 보인다.

왼쪽은 경사하강법, 오른쪽은 SGD를 수행했을 때 최소값을 찾아나가는 과정

 

SGD의 장점)

1. 경사하강법의 한계( 볼록하지 않은 목적식의 문제 )를 극복하기 위한 방법 중 하나로,

   볼록이 아닌(non-conves) 목적식에서도 최적화가 가능하다.

2. 데이터 일부를 가지고 업데이트하기 때문에 연산자원을 효율적으로 활용 가능하다.

   - 경사하강법으로 전체 데이터를 업로드할 경우, Out-of-memory가 발생할 수 있다.

   - GPU에서 행렬 연산과 파라미터 업데이트하는 동안 CPU는 전처리와 업로드 데이터를 준비 가능하다.

 

 

1주차 과제 수행 과정 및 결과 코드


https://github.com/Gwang-chae/Minibatch_28

 

GitHub - Gwang-chae/Minibatch_28

Contribute to Gwang-chae/Minibatch_28 development by creating an account on GitHub.

github.com

Week_1/서광채 폴더에서 확인할 수 있습니다.

 

 

피어세션


이번 부스트캠프를 통해 5주간 함께할 팀원분들을 만났다.

각자 다른 환경을 가지셨지만 6분 모두 학습 의지가 넘치셔서 많이 배울 수 있을 거라는 기대감이 생긴다.

 

팀명은 SGD에서 아이디어를 얻어 MiniBatch28이라는 이름으로 정했다.

피어세션에서 진행하는 논의들과 Ground Rule 등은 아래의 Notion 링크에서 확인할 수 있습니다.

 

https://kcseo25.notion.site/kcseo25/28-a20618dfafbc4edf95c3355eabe13c57

 

미니배치28

[28조] 미니배치28 / 임동욱 멘토님

kcseo25.notion.site

 

 

References


https://www.boostcourse.org/

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org