AI Tech Day 1 (벡터, 행렬, 경사하강법)

이연걸·2021년 8월 2일
0
post-thumbnail

1. 오늘 일정

1) 타운홀 미팅

  • 프로그램 소개
  • 이번 주 일정 안내
  • 정보 보호 규정

2) meetup with peer

  • 자기소개
  • 그라운드 룰 정하기

3) 학습

4) 피어 세션

5) 어색하DAY (멘토 소개)

2. 학습 내용

1강: 벡터

벡터란?

벡터는 숫자를 원소로 가지는 리스트(list) 또는 배열(array)이다.

벡터의 특징

  1. 벡터는 공간에서 한 점을 나타낸다.
  2. 벡터는 원점으로부터 상대적 위치를 표현한다.
  3. 벡터에 숫자를 곱해주면 길이만 변한다.
  4. 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다.

벡터의 연산

  1. 두 벡터의 덧셈은 다른 벡터로부터 상대적 위치이동을 표현한다.
  2. 벡터의 뺄셈은 방향을 뒤집은 덧셈이다.

벡터의 노름

  • 벡터의 노름은 원점에서부터의 거리를 말한다.
  • L1L1-노름은 각 성분의 변화량의 절대값을 모두 더한다.
  • L2L2-노름은 피타고라스 정리를 이용해 유클리드 거리를 계산한다.
  • L1,L2L1, L2- 노름을 이용해 두 벡터 사이의 거리를 계산할 수 있다.

다른 노름을 소개하는 이유

노름의 종류에 따라 기하학적 성질이 달라진다. 머신러닝에서는 각 성질들이 필요할 때가 있으므로 둘 다 사용한다.

내적이란?

  • 정사영된 벡터의 길이와 관련 있다.
  • 내적은 정사영으 ㅣ길이를 **벡터 yy의 길이 y||y||만큼 조정한 값이다.

2강: 행렬

행렬이란?

  • 행렬은 벡터를 원소로 가지는 2차원 배열이다.
  • 행렬은 행(row)열(column)이라는 인덱스(index)를 가진다.
  • 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부른다.
  • 벡터가 공갆에서 한 점을 의미한다면 행렬은 여러 점들을 나타낸다.

행렬의 연산

  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산할 수 있다.
  • 성분곱과 스칼라곱은 벡터와 차이가 없다.
  • 행렬 곱셈은 ii번째 행벡터와 jj번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다.

행렬의 내적

넘파이의 np.innernp.innerii번째 행벡터와 jj번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다.

행렬의 이해

  • 행렬은 **벡터공간에서 사용되는 연산자(operator)로 이해한다.
  • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있다.
    • 행렬곱을 통해 패턴 추출, 데이터 압축 가능

역행렬

  • 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우 역행렬 존재
  • 역행렬을 계산할 수 없다면 유사역행렬 또는 무어-펜로즈 역행렬을 이용한다.
    -> np.linalg.pinv를 활용하여 연립방정식 풀기, 선형회귀분석 가능

3강: 경사하강법 1

미분이란?

  • 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법이다.
  • 미분은 함수 ff의 주어진 점(x,f(x))(x, f(x))에서의 접선의 기울기를 구한다.

미분의 사용

  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지/감소하는지 알 수 있다.
    • 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
    • 미분값을 빼면 경사하강법(gradient descent)이라 하며 함수의 극소값의 위치를 구할 때 사용한다.

경사하강법: 알고리즘

# gradient: 미분을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var = init
grad = gradient(var)
while(abs(grad) > eps):
	var = var - lr * grad
	grad = gradient(var)

변수가 벡터라면?

  • 벡터가 입력인 다변수 함수의 경우 편미분을 사용한다.
  • 각 변수 별로 편미분을 계산한 그레디언트 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다.

4강: 경사하강법 2

경사하강법으로 선형회귀 계수 구하기

βyXβ2=(δβ1yXβ2,,δβdyXβ2)\nabla_\beta ||y - X\beta||_2 = (\delta_{\beta_1}||y - X\beta||_2,\dots,\delta_{\beta_d}||y - X\beta||_2)
= δβkyXβ2=δβk{1ni=1n(yij=1dXijβj)2}1/2\delta_{\beta_k}||y - X\beta||_2 = \delta_{\beta_k}\left\{ \frac{1}{n} \sum_{i=1}^{n} \left( y_i - \sum_{j=1}^{d} X_{ij}\beta_j \right)^2 \right\}^{1/2}
= XkT(yXβ)nyXβ2- \frac{X^T_k(y-X\beta)}{n||y - X\beta||_2}

경사하강법 기반 선형회귀 알고리즘

for t in range(T):
	error = y - X @ beta
    	grad = - transpose(X) @ error
    	beta = beta - lr * grad

경사하강법은 만능인가?

  • 이론적으로 경사하강법은 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장되어 있다.
  • 하지만 비선형회귀 문제의 경우 목적식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지는 않는다.

확률적 경사하강법

  • 모든 데이터를 사용해서 업데이트하는 대신 데이터 한개 또는 일부 활용하여 업데이트한다.
  • 볼록이 아닌(non-convex) 목적식은 SGD를 통해 최적화할 수 있다.
  • SGD는 데이터의 일부를 가지고 패러미터를 업데이트하기 때문에 연산자원을 좀 더 효율적으로 활용하는데 도움이 된다.

확률적 경사하강법의 원리?

미니배치 연산!

  • 미니배치는 확률적으로 선택하므로 목적식 모양이 바뀌게 된다.
  • SGD는 볼록이 아닌 목적식에서도 사용 가능하므로 경사하강법보다 머신러닝 학습에 더 효율적이다.
  • 따라서 이미지 데이터같은 큰 메모리가 필요할 때 미니배치를 활용하면 Out-of-memory를 피할 수 있다.

3. 피어세션 정리

  • 첫날인 만큼 많은 질문이 오고 가지는 않았다.
  • 멘토님의 말씀 - 잘될 때는 왜 잘되는지, 안될 때는 왜 안되는지 고민하라.

4. 과제수행 과정

  • 아직 파이썬 파트를 듣지는 못했지만, 기존 실력으로 과제2까지 제출완료.

5. 회고

  • 잠을 못자서 피곤하다. 패턴을 제대로 돌리자.
  • 과제3까지는 다하고 자고 싶었는데, 피곤해서 안되겠다.
  • 공부 내용 정리를 어느정도로 하는 게 좋을지 고민해야겠다.

6. 내일 할일

  • 파이썬 강의 빠르게 듣기
  • AI 5, 6강 듣기
  • 강의가 오늘보단 적어서 빨리 듣고 과제하고 파이썬 밀린거 듣자.
profile
AI가 세상을 바꾼다. 열심히 AI를 배워서 선한 영향력을 펼치는 개발자가 되고싶다. 인생은 Gradient Descent와 같지.

0개의 댓글