ROKO
What is Linear Regression? 본문
Problem Setup
- 함수(Hypothesis)를 통해 변수 x에 대한 t값을 예측하는 게 목표
- Given dataset pairs \(\left\{(x^{(i)},t^{(i)}) \right\}_{i=1}^{N}\), \(x^{(i)}\) = inputs, \(t^{(i)}\) = targets
- Model y is a linear function that y(predicition) = W(Weight)x + B(bias)
- Setting of the parameters = Hypotheses
- \(Loss\,function\) : \(L(y, t) = \frac{1}{2}(y-t)^2\) (squared error) / \(\frac{1}{2}\)은 미분을 활용한 컴퓨터 연산시 효율성을 위한 것
- \((y-t)\) is residual (잔차)
- Cost function : loss function averaged over all training samples
\(J(w,b) = \frac{1}{2N}\sum_{i=1}^{N}(y^{(i)}-t^{(i)})^2 = \frac{1}{2N}\sum_{i=1}^{N}(wx^{(i)}+b-t^{(i)})^2\) - Suppose that multi-dimensional inputs \(x = \left\{x_{1}, x_{2}, ~, x_{D} \right\} \), Linear model \(y = \sum_{j}w_{j}x_{j}+b\)
다변수 확률변수인 경우 곱셈 연산시 변수 하나하나씩 곱해야 했지만, numpy라는 lib를 통해 변수를 벡터화 알고리즘을 통해 행렬로 처리하면 훨씬 간단하고 빠르게 처리 할 수 있다.
Vectorization
벡터화가 자세히 어떤부분이 좋을까?
- 방정식, 코드면에서 가독성을 높이고 간단하게 처리
- 더미 변수를 제거
- 파이썬 인터프리터 오버헤드를 줄여 성능 향상
- 최적화된 선형대수 라이브러리 제공
- GPU활용시 행렬연산이 매우 빠름
Optimization Problem
Direct Solution
- 줄이고자 하는 Cost function을 정의
- 미적분학에 따르면 smooth 함수에서 극소일 때 (미분계수 = 0, critical point) 최소값을 가진다
- Direct solution : 모든 편미분(partial derivatives)이 0인 점
위 결과에 의해 모든 편미분 값이 0일 때가 최소이다. 만약 편미분 값이 0이 나올수 없는 형태이면 가중치를 갱신하여 다시 계산해야한다.
Optimal weight : \(w = (X^{T}X)^{-1}X^{T}t\) [proof link]
Linear Regression 은 direct solution(최적의 해답을 바로 얻음)을 이끌어 낼 수 있는 유용한 모델이다.
Gradient Descent
하지만 위처럼 Optimal solution이 항상 구해지는건 아니다. 이를 위한 방법이 경사하강법이다.
- Iterative algorithm
- Intialize to something reasonable
- Re-weight direction of steepest descent
Gradient는 함수의 값이 최대가 되는 방향 벡터를 의미 - Weight space에서 Gradient 와 반대되는 방향으로 위치를 옮겨야 최소값에 근사
\(\alpha\)는 learning rate(학습률)로 gradient에 곱해져 위치를 얼만큼 옮길지에 영향을 미친다. \(\alpha\)값이 크다면 위치가 크게 옮겨지고 작으면 조금씩 옮겨지게 된다. learning rate가 크다고 항상 좋은 것은 아니다. 처음은 빠르게 수렴하는게 좋지만 이후에 최소값에 근접했을때는 조금씩 세밀히 조정하는게 좋다.
Direct solution은 \(d\)차원벡터에 대해 \(O(d^{3})\)으로 많은 자원이 필요하지만 gradient descent는 빠르고 간결하다.
Polynomial Regression
- Feature map 이 있을때 다항식을 이용해 근사하는 방식
- 최적의 함수가 있을때 이를 근사하는 Taylor-Series를 구한다고 생각
- 변수 개수가 너무 많으면 과적합(overfitting), 너무 적으면 모델이 단순해 과소적합(underfitting)이 발생
훈련데이터 개수와 변수 개수에 따른 error값 그래프를 나타낸 것이다. 왼쪽 같은 경우 데이터가 많으면 많을수록 좋다는 것을 의미하고 오른쪽은 매개변수가 너무 많으면 과적합 위험이 있음을 나타낸다.
따라서 매개변수의 개수는 Polynomial Regression 에서 hyperparameter로 작용한다. Hyperparameter는 학습이 아닌 실험자가 직접 튜닝하여 정해주어야 하는 값을 의미한다. 보통 검증데이터셋(validation set)을 이용해 해결한다.
변수 개수를 제한하는 것은 더 복잡한 모델이나 나은 성능을 만드는데 좋은 영향을 미치지 못한다.
Regularization
성능 한계를 극복하기 위한 방법으로 정규화라고 한다. 이는 과적합과 연관되기도 하는데 각 변수의 계수값이 너무 커서 훈련데이터들에 민감하게 반응하게 된다. 이를 정규화 기법을 통해 억제하고 더 좋은 성능을 이끌어 낼 수 있다.
대표적인 정규화 기법으로 L2-regularization, L1-regularization 이 있다. Loss 식에 hyperparameter \(\alpha\)를 곱해 추가해주면 새로운 Loss식이 완성된다.
$$J_{reg} = J + \lambda R = J + \frac {\lambda}{2} \sum_{j}{w_{j}}^{2}$$
(\(\lambda\) is a hyperparameter that can tune in validation set)
\((1-\alpha \lambda)\)는 weight decay라 불리며 또다른 hyperparameter이다.
이때 weight decay 자체에 여러 hyperparameter가 섞여있기 때문에 선택을 잘해야 한다.
위는 \(\lambda\)값에 따른 결정트리 모양이다. Hyperparameter 가 얼마나 중요하고 또 적절한 값을 찾기가 어렵다는 것을 의미한다.
L1-norm vs L2-norm
L1-norm과 L2-norm의 차이는 무엇이고 장단점이 무엇일까?
- L2-norm은 다항식이고 L1-norm 은 절대값이므로 미분시 L2-norm이 더 계산 효율이 좋다
- L2-norm은 Loss값을 제곱하여 더하므로 error값에 민감하게 반응한다, 이는 이상치 대응에 약함을 의미하기도 한다
- L1-norm은 Loss값을 절대값하여 더하므로 이상치에 L2-norm보다 강하게 대응한다
- 오른쪽 그래프를 보면 L1-norm을 사용할때 얻는 최적 가중치 w는 각 꼭짓점에서 만날 확률이 L2-norm보다 높다 따라서 가중치에서 필요한 feature만 추출하는 값만 남고 나머지는 0이 된다 (희소행렬, sparse matrix)
Summary
Linear Regression
- model, loss function 설계
- Optimization Problem 설계
Strategies Direct solution or Gradient descent - Vectorize algorithm
- make a linear model with feature
- improve the generalization by adding a regularizer
'Artificial Intelligence > Machine Learning' 카테고리의 다른 글
What is Linear Classification? [Ⅱ] (0) | 2022.12.19 |
---|---|
What is Linear Classification? [Ⅰ] (0) | 2022.12.17 |
Ensemble (Bagging, Boosting) (0) | 2022.10.10 |
What is Decision Trees? (3) | 2022.09.19 |