모든 강의 자료와 영상은 공개된 해당 링크들을 통해서 학습하고 있다.

강의자료: https://cs229.stanford.edu/syllabus-spring2022.html

강의 영상: https://www.youtube.com/playlist?list=PLoROMvodv4rNyWOpJg_Yh4NSqI4Z4vOYy

2강 슬라이드: https://drive.google.com/file/d/1O_zLW3xvxv7w3R-kw7ZZMRPMcgY-gcim/view


 

요약

1. Linear Regression: 입력값 $ x $와 가중치 $ \theta $의 선형 결합으로 예측값 $ h_\theta(x)=\theta^Tx $를 만드는 회귀 모델을 정리한다.

2. Gradient Descent & LMS Algorithm: 비용 함수 $ J(\theta) $를 최소화하기 위해 기울기를 계산하고 파라미터 $ \theta $를 반복적으로 업데이트하는 방법을 살펴본다.

3. Batch vs Stochastic vs Mini-batch: 한 번의 업데이트에 사용하는 데이터 개수에 따라 Batch, SGD, Mini-batch 방식이 어떻게 달라지는지 비교한다.

 

0. Supervised Learning

Given Training Set

$ \{(x^{(1)}, y^{(1)}), \cdots, (x^{(n)}, y^{(n)})\} $

$ x^{(i)} \in \mathcal{X}, \quad y^{(i)} \in \mathcal{Y} $

좋은 $ h: \mathcal{X} \to \mathcal{Y} $ 찾기

 

y 가 discrete(이산형) 일때, classification

y 가 continous(연속형) 일때, regression

 

1. Linear regression

주택 가격 예시

$ h: Lot.area \to Price $ 찾기

 

$ h(x) = \theta_0 + \theta_1 x_1 $

 

선형이지만, 엄밀히는 아핀 모델(Affine Model)

절편($ \theta_0 $)이 포함된 아핀 모델의 계산 번거로움을 피하고자 

입력값에 $ x_0 = 1 $을 강제로 추가하는 트릭입니다. 

이를 통해 모든 식을 하나의 선형 결합($ \theta^T x $)으로 묶어, 단순화할 수 있습니다.

 

$ h(x) = \theta_0 x_0 + \theta_1 x_1 + \cdots + \theta_d x_d $

$ = \sum_{j=0}^{d} \theta_j x_j $

 

벡터 표기

 

$
\theta =
\begin{bmatrix}
\theta_0 \\
\theta_1 \\
\theta_2 \\
\vdots \\
\theta_d
\end{bmatrix}
$, $
x^{(i)} =
\begin{bmatrix}
x_0^{(i)} \\
x_1^{(i)} \\
\vdots \\
x_d^{(i)}
\end{bmatrix}
$

 

$ (x_0^{(i)} = 1) $

 

행렬 표기

 

$
X =
\begin{bmatrix}
(x^{(1)})^T \\
(x^{(2)})^T \\
\vdots \\
(x^{(n)})^T
\end{bmatrix}
\in \mathbb{R}^{n \times (d+1)}
$

 

그래서

$ h(x) = \theta_0 x_0 + \theta_1 x_1 + \cdots + \theta_d x_d $, 

$ h_\theta(x) \approx y $

에서

 

'어떤 가중치()를 써야 예측값이 실제 정답()과 가장 비슷해질까?'를 찾기 위해

비용 함수(Cost Function) $ J(\theta) $를 도입한다. (최소제곱법(Least Squares)을 기반)

 

$ J(\theta) = \frac{1}{2}\sum_{i=1}^{n}\left(h_\theta(x^{(i)}) - y^{(i)}\right)^2 $

 

$ min J(\theta) $

2. 경사 하강법 (Gradient Descent) & LMS Algorithm

$J(\theta)$를 최소화하기 위해, 미분을 통해 기울기를 구하고 파라미터 를 점진적으로 업데이트하는

LMS(Least Mean Squares)를 구한다.

 

$
\theta^{(0)} = 0
$

 

$
\theta_j^{(t+1)}
:=
\theta_j^{(t)}
-
\alpha
\frac{\partial}{\partial \theta_j}
J(\theta^{(t)})
$

(α: learning rate, 한 번에 얼마나 이동할지 정하는 값)

 

 

$
\frac{\partial}{\partial \theta_j}J(\theta)
=
\sum_{i=1}^{n}
\frac{1}{2}
\frac{\partial}{\partial \theta_j}
\left(h_\theta(x^{(i)}) - y^{(i)}\right)^2
$

여기서 $ h_\theta(x^{(i)}) - y^{(i)} $는 i번째 데이터에 대한 예측 오차이다.

 

그래서

 

$
h_\theta(x)
=
\theta_0 x_0
+
\theta_1 x_1
+
\theta_2 x_2
+
\cdots
+
\theta_d x_d
$

 

이렇게 표현해볼 수 있고,

미분하면 다음과 같다.

 

$
\frac{\partial}{\partial \theta_j}h_\theta(x)
=
x_j
$

 

$ \theta^{(t+1)} := \theta^{(t)} - \alpha \sum_{i=1}^{n} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x^{(i)} $

 

α는 학습률이다. 보통 상수처럼 쓰인다. 

학습이 진행될수록 학습률을 감소시키며, 고전적인 머신러닝에서는 α를 사용자가 직접 조정해야 하는 하이퍼파라미터로 본다.

 

3. Batch vs Stochastic Mini Batch

 

Batch Gradient Descent (BGD)

Batch Gradient Descent는 파라미터를 한 번 업데이트할 때 전체 학습 데이터 $ n $개를 모두 사용한다.

$$ \theta^{(t+1)} := \theta^{(t)} - \alpha \frac{1}{n}\sum_{i=1}^{n} \left(h_\theta(x^{(i)}) - y^{(i)}\right)x^{(i)} $$

전체 데이터를 사용하므로 기울기 방향은 비교적 안정적이다. 하지만 데이터가 수백만 개 이상으로 커지면, 한 번 업데이트하는 데 필요한 계산 비용과 메모리 사용량이 매우 커진다.

Stochastic Gradient Descent (SGD)
Stochastic Gradient Descent는 한 번 업데이트할 때 무작위로 선택한 데이터 1개만 사용한다.

$$ \theta^{(t+1)} := \theta^{(t)} - \alpha \left(h_\theta(x^{(i)}) - y^{(i)}\right)x^{(i)} $$

매 업데이트가 빠르다는 장점이 있지만, 데이터 하나에만 의존하므로 업데이트 방향이 불안정하다. 그래서 최솟값을 향해 부드럽게 내려가기보다는 지그재그로 움직이는 경향이 있다.

Mini-batch Gradient Descent

Mini-batch Gradient Descent는 Batch와 SGD의 중간 방식이다. 전체 데이터가 아니라, 무작위로 선택한 작은 데이터 묶음 $ B_t $만 사용한다. 이때 mini-batch의 크기를 $ b $라고 하면 보통 $ b \ll n $이다.

$$ \theta^{(t+1)} := \theta^{(t)} - \alpha \frac{1}{b}\sum_{i \in B_t} \left(h_\theta(x^{(i)}) - y^{(i)}\right)x^{(i)} $$

즉, 전체 데이터로 계산한 정확한 기울기 대신 일부 데이터로 계산한 근사적인 기울기를 사용한다. 

계산 비용은 줄이면서도 SGD보다 안정적인 업데이트 방향을 얻을 수 있기 때문에, 실제 머신러닝에서는 mini-batch 방식이 가장 많이 사용된다.

 

 

후기

글 작성한다고, 강의를 한 번 더 보면서 수식과 함께 정리했다.

잘 이해하고 넘어가자.

+ Recent posts