본문 바로가기
Boostcamp AI Tech/[week 1-5] LEVEL 1

[Week 1 - Day 4] AI Math 1-4 벡터, 행렬, 경사하강법

by newnu 2021. 8. 5.
반응형

1. 강의 내용

1강. 벡터

벡터 : 숫자를 원소로 가지는 리스트 또는 배열

         공간에서의 한 점, 원점으로부터 상대적 위치

 

벡터의 노름 : 원점에서부터의 거리

L1- 노름  : 각 성분의 변화량의 절대값의 합

L2 - 노름 : 피타고라스 정리를 이용해 유클리드 거리 계산

 

노름을 이용하여 두 벡터 사이의 거리 계산 (벡터의 뺄셈)

|| y - x || = || x- y ||

 

제 2 코사인 법칙 이용하여 두 벡터 사이의 각도 계산

내적 

 

2강. 행렬

행렬 :  벡터를 원소로 가지는 2차원 배열

           공간에서 여러점 나타냄

 

행렬의 행벡터 

: i 번째 데이터

 

같은 모양을 가지면 덧셈, 뺄셈 계산 가능 

 

행렬 곱셈 :  i 번째 행벡터와 j 번째 열벡터 사이의 내적을 성분으로 가지는 행렬

np.inner : i번째 행벡터와 j 번째 행벡터 사이의 내적

-> Y 전치행렬로 구해야 수학에서의 내적

 

행렬은 벡터공간에서 사용되는 연산자

행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음

 

역행렬 : A의 연산을 거꾸로 되돌리는 행렬

행과 열의 숫자가 같고 행렬식이 0이 아닌 경우에만 계산 가능

np.linalg.inv() 으로 계산 가능

 

역행렬을 계산할 수 없는 경우  -> 유사역행렬 ( 무어펜로즈 역행렬 )

n>=m 인 경우

n<=m 인 경우

 

3강. 경사하강법

미분 : 변수의 움직임에 따른 함수 값의 변화를 측정하기 위한 도구

         최적화에서 많이 사용하는 기법

import sympy as symm
from sympy.abc import x

# 다항식 x로 미분
sym.diff(sym.poly(x**2 + 2*x + 3),x)
# Poly(2*x + 2, x, domain = 'ZZ')

미분값 < 0 : 접선의 기울기 음수 (감소)

미분값 > 0 : 접선의 기울기 양수 (증가)

 

경사상승법 (gradient ascent)

미분값을 더하기

극대값의 위치를 구할 때 사용

 

경사하강법 (gradient descent)

미분값을 빼기

극소값의 위치를 구할 때 사용

목적함수 최소화할 때 사용

 

경사상승/ 경사하강법은 극값에 도달하면 움직임을 멈춘다 (극값에서의 접선의 기울기 = 0)

( 컴퓨터로 계산할 때 미분이 정확히 0이 되는 것은 불가능 하므로 epsilon 값보다 작을 때 종료하는 조건 필요)

gradient : 미분을 계산하는 함수
init : 시작점
lr : 학습률
eps : 알고리즘 종료조건

var = init 
grad = gradient(var) # var에서의 미분값 (var에서의 접선의 기울기)
while (abs(grad)) > eps:
    var = var - lr * grad # 극소값쪽으로 점 이동
    grad = gradient(var) # 이동한 var에서의 접선의 기울기 반복

 

벡터가 입력인 다변수 함수의 경우 편미분 사용

improt sympy as sym
from sympy.abs import x,y

# x에 대해 편미분
sym.diff(sym.poly(x**2 + 2*x*y + 3) + sym.cos(x + 2*y), x))

# 2*x + 2*y - sin(x+2*y)

각 변수 별로 편미분을 계산한 그레디언트 벡터 (gradient)를 이용하여 경사하강/ 경사상승법에 사용

 

그레디언트 벡터

∇f(x,y)는 각 점에서 가장 빨리 증가하는 방향

- ∇f (=∇(-f)) 는 각 점에서 가장 빨리 감소하는 방향

gradient : 그레디언트 벡터를 계산하는 함수
init : 시작점
lr : 학습률
eps : 알고리즘 종료조건

var = init 
grad = gradient(var) # var에서의 미분값 (var에서의 접선의 기울기)
while (norm(grad)) > eps: # 벡터는 절대값 대신 노름 계산하여 종료조건 설정
    var = var - lr * grad # 극소값쪽으로 점 이동
    grad = gradient(var) # 이동한 var에서의 접선의 기울기 반복

 

4강. 경사하강법 (심화)

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

 

경사하강법 알고리즘

 

# norm = L2 노름을 계산하는 함수
# lr : 학습률
# T : 학습횟수
# 경사하강법 알고리즘에서는 학습률과 학습횟수가 중요한 hyperparameter

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

 

경사하강법은 미분가능하고 볼록한 함수에 대해서 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장

 - 선형회귀의 경우 목적식은 회귀 계수 베타에 대해 볼록함수이기 떄문에 알고리즘을 충분히 돌리면 수렴 보장

 - 비선형회귀 문제의 경우 목적식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지는 않음

 

확률적 경사하강법 ( stochastic gradient descent )

모든 데이터를 사용해서 업데이트하는 경사하강법과 달리 데이터 한개 또는 일부 활용하여 업데이트 ( 미니배치 연산 )

볼록이 아닌 목적식은 SGD 통해 최적화 가능

 - 경사하강법보다 머신러닝 학습에 더 효율적

 

미니배치 연산 

SGD는 미니 배치를 가지고 그레디언트 벡터 계산

미니배치는 확률적으로 선택하므로 목적식 모양이 바뀜

2. Peer Session

  • AI Math ~10강
  • 필수과제 5번 논의
  • 선택과제 1번 논의

3. 마스터 클래스

AI & MATH - 임성빈 교수님

 

1. 용어나 정의 외우기

2. 예제 찾아보기

 

선형대수/확률론/통계학  + 알고리즘,최적화

Dive into Deep Learning - Appendix : mathematics for deep learning

 

18. Appendix: Mathematics for Deep Learning — Dive into Deep Learning 0.17.0 documentation

 

d2l.ai

 

추천시스템 - Dive into Deep Learning 16장

 

16. Recommender Systems — Dive into Deep Learning 0.17.0 documentation

 

d2l.ai

 

Multi-Armed Bandit

반응형