네이버 부스트캠프 🔗/⭐주간 학습 정리

[네이버 부스트 캠프 AI Tech] 딥러닝 수학기초

Dobby98 2023. 3. 10. 20:11

본 글은 네이버 부스트 캠프 AI Tech 기간동안

개인적으로 배운 내용들을 주단위로 정리한 글입니다

 

본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고

복습 중요도를 선정해서 정리하였습니다

 

 Week 1 

목차

 

  • 벡터
  • 행렬
  • 경사하강법
  • 역전파
  • 확률, 통계

 


벡터 (복습 중요도 : ⭐⭐)

벡터는 공간에서 한 점

 

n차원 공간에서 한 점 (공간 ⬇️)

1 차원 - 수직선

2 차원 - 좌표 평면

 

  • 벡터는 원점으로부터 상대적 위치를 표현
  • 벡터에 숫자를 곱해주면(스칼라 곱) 길이만 변화 (방향 변화 x)
  • 단, 곱해주는 실수의 값이 0보다 작다면 반대 방향으로 변화
  •  
  • 벡터끼리 같은 모양이면 덧셈, 뺄셈을 계산할 수 있다.
  • 같은 모양이 아니면 불가
  • 벡터가 같은 모양이면 성분곱(Hadamard product)를 계산할 수 있다

 

  • 두 벡터의 덧셈은 다른 벡터로 부터 상대적 위치 이동
  • 벡터는 원점에서 거리 → 0 + x
  • 만약 0 위치에 다른 벡터를 추가하면 벡터의 덧셈
  • 벡터의 뺄셈은 반대 방향으로 덧셈 해준 것

벡터의 노름(norm)

  • 원점에서부터의 거리
  • 노름은 2가지 종류가 있다
  • L1 노름과 L2 노름

L1
L2

#넘파이를 활용해서 norm을 구현한다면
def l1_norm(x):
	x_norm = np.abs(x) #절대값
	x_norm = np.sum(x_norm) #합
	return x_norm

def l2_norm(x):
	x_norm = x * x
	x_norm = np.sum(x_norm)
	x_norm = np.sqrt(x_norm)
	return x_norm

노름을 나누는 이유

노름의 종류에 따라서 기하학적 성질이 달라진다

L1 norm

  • 벡터의 절대값에 대한 합을 의미
  • 맨하탄 거리(Manhattan distance)로도 불림

L2 norm

  • 유클리드 거리(Euclidean distance)와 같은 개념
  • 벡터의 각 성분을 제곱한 후에 더한 뒤, 제곱근을 씌운 값
  • L2 norm은 벡터의 크기를 나타내는 가장 일반적인 방식

 

Norm1, Norm2를 활용해서 거리, 각도 구하기

  • 각도의 경우 L2 Norm만 구할 수 있다
  • 제2 코사인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있다
  • 두 벡터 내적곱 / (l2 norm[x] * l2 norm[y])
  • 2차원이 아니더라도 임의의 N차원에서 연산가능
  •  
def angle(x, y):
	v = np.inner(x,y) / (l2_norm(x) * l2_norm(y))
	theta = np.arccos(v)
	return theta

내적의 의미

  • 내적은 정사영(orthogonal projection)된 벡터의 길이와 관련
  • Proj(x)의 길이는 코사인 법칙에 의해서 llxll cos(theta)가 된다.
  • 내적은 정사영의 길이를 벡터 y 의 길이를 llyll 만큼 조정한것

행렬 (복습 중요도 ⭐⭐)

 

행렬(matrix)은 벡터를 원소로 가지는 2 차원 배열

 

행렬의 전치 행렬

행과 열을 바꿔주는 행렬

 

행렬의 덧셈과 뺄셈, 그리고 성분곱, 스칼라곱

  • 벡터와 같음

행렬 곱셈은 다름

matrix multiplication

  • 내적으로 곱해짐

그래서 x 행과 y열의 크기가 같아야 x행렬과 y행렬이 곱해질 수 있음

 

역행렬

np.linalg.inv(x)
#역행렬을 계산하려면 행과 열이 같아야함(크기가)

만약 행과 열의 크기가 다르다면 → under or over

유사 역행렬 (pseudo-inverse)를 이용해서 연산

= 무어 펜로즈(Moore-Penros)

n ≥ m이면 A^+*A = I

n ≤ m 이면 AA^+ = I

np.linalg.pinv(y)
#유사역행렬 계산

선형회귀 분석

#sklearn 이용
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
y_test = model.predict(x_test)

#Moore_penrose 역행렬 이용
X_ = np.array([np.append(x,[1]) for x in x]) #intercept 항 추가
beta = np.linalg.pinv(X_) @ y
y_test = np.append(x, [1]) @ beta

✅경사 하강법

미분 (differentitation) → 변수의 움직임에 따른 함수값의 변화를 측정하기 위해 사용할 수 있다

#미분계산
import sympy as sym
from sympy.abc import x

sym.diff(sym.poly(x**2 + 2*x + 3, x))

 

함수를 증가 시키고 싶으면 미분값을 더해주고

함수를 감소 시키고 싶으면 미분값을 빼준다

'''
Input : gradinet, init, lr, eps, 
Output : var
'''

var = init
grad = gradient(var)

while(abs(grad) > eps):
	var = var - lr * grad
	grad = gradient(var)

 

변수가 벡터이면?

  • 미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용한다.

파이썬에서 미분하는 법 ⬇️

import sympy as sym
from sympy.abc import x, y 

sym.diff(sym.poly(x**2 + 2*x*y + 3) + sym.cos(x + 2*y), x)

변수가 D개라면 D개만큼 편미분

 

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

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

X = np.array([[1,1], [1,2], [2,2], [2,3]])
y = np.dot(X, np.array([1, 2])) + 3

beta_gd = [10.1, 15.1, -6.5]
X_ = np.array([np.append(x, [1]) for x in X])

for t in range(5000):
	error = y - X_ @ beta_gd
	grad = - np.transpose(X_) @ error
	beta_gd = beta_gd - 0.01 * grad

print(beta_gd)

✅역전파 (복습 중요도 ⭐⭐⭐⭐)

backpropagation (역전파)

  • 각층 파라미터에 대한 그레디언트를 계산한 다음 → 윗층에서 아래 층으로 이동 하면서 역순으로 계산
  • 연쇄법칙 (Chain rule)을 활용해서 auto-differentitaion(자동미분)을 활용

 

딥러닝에서 역전파는 혁식에 가까웠음

딥러닝 모델은 합성함수 이기때문에 Chain rule을 활용해서 계산해줄 수 있다.

 

역전파 논문 🆙

https://www.iro.umontreal.ca/~vincentp/ift3395/lectures/backprop_old.pdf

 

+추가) 작년에 forward - forward 방식의 새로운 방법도 제안

 

[딥러닝] The Forward-Forward Algorithm: Some Preliminary Investigations (FF)

Forward-Forward (FF) 리뷰

velog.io

 

 

The Forward-Forward Algorithm: Some Preliminary Investigations

The aim of this paper is to introduce a new learning procedure for neural networks and to demonstrate that it works well enough on a few small problems to be worth further investigation. The Forward-Forward algorithm replaces the forward and backward passe

arxiv.org


✅확률 변수 - 복습 중요도 (⭐⭐⭐)

이산확률변수 vs 연속확률변수

→ 확률 변수는 확률 분포에 따라서 이산형(discrete)과 연속형(continuous)로 구분된다.

이산형 확률 변수는 확률 변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링

연속형 확률 변수는 데이터 공간에 정의된 확률변수의 밀도(density)위에서 적분을 통해 모델링

 

[ADsP] 확률 변수를 정리했다. (이산형, 연속형)

이산형 확률 변수, 연속형 확률 변수의 정의와, 각각에 해당하는 확률 분포를 살펴보겠다 :) * 이산형 확률...

blog.naver.com

 

 

 

이산형 확률변수와 연속형 확률변수 - datadata.link

확률 구하기 확률변수에 대응하는 확률이 있다. 특정 두 확률변수에 대응하는 누적확률밀도함수값의 차 기본이 되는 확률함수 P(X)이다. P(a≤X≤b)이다. 확률분포 대개 막대그래프 모양이다. 대

www.datadata.link

 

주변 확률 분포

주변 확률 분포는 결합확률 분포를 전제로 시작

 

[기초통계학] 확률(Probability) 2 - 결합확률, 주변확률, 조건부확률

Review 참고 포스팅 : 2020/05/20 - [Statistics/Basic Statistics] - [기초통계학] 확률(Probability) 1 - 확률의 기본 개념 [기초통계학] 확률(Probability) 1 - 확률의 기본 개념 Review 참고 포스팅 : 2020/05/18 - [Statistics/Ba

datalabbit.tistory.com


통계 (복습중요도 ⭐⭐⭐⭐)

Maximum liklihood estimation, MLE

 

 

최대가능도추정(Maximum Likelihood Estimation) 개념 정리

최대가능도추정(Maximum Likelihood Estimation) 개념 정리

losskatsu.github.io

 

 

최대 우도 추정법(Maximum Likelihood Estimation)

"본 포스팅에서는 최대 우도 추정법의 개념을 설명하고자 합니다" 통계학에서 중요한 것 중 하나가 샘플(표본)을 통해서 모집단(전체 집단)을 추정하는 것입니다. 이 때, 모집단의 분포를 가정하

everyday-tech.tistory.com