728x90
경사하강법에 대해 더 알아보자.
1. np.linalg.pinv
Numpy에서 데이터를 선형 모델로 해석하는 선형회귀식을 찾을 수 있다.
sklearn에서 Lienar Regression 를 통해서도 선형회귀를 접할 수 있다.
2. 경사하강법 알고리즘을 활용하여 선형회귀식 찾기
선형회귀 목적식을 구하기 위해서는 위의 목적식을 최소화하는 베타를 찾아야 한다.
위의 식을 통해 그레디언트 벡터를 구하고 주어진 베타에서 미분값을 빼면 된다.
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] # [1, 2, 3] 이 정답
X_ = np.array([np.append(x,[1]) for x in X]) # intercept 항 추가
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)
>> 결과
- 이는 정확한 값을 도달할 때까지 계산하는 것이 아니라 학습률, 학습횟수 하이퍼파라미터 값을 잘 지정해주어야
주어진 계수를 찾을 수 있다. - 이론적으로 미분이 가능하고 볼록한 함수에 대해 적절한 학습률과 학습 횟수를 선택했을 때 수렴이 보장된다.
- 선형회귀의 경우 회귀계수 베타에 대해 볼록함수이기에 수렴이 보장된다.
- 비선형회귀의 경우 목적식이 볼록하지 않을 수도 있기에 수렴이 항상 보장되지 않는다.
3. 확률적 경사하강법 (Stochastic Gradient Descent) 이란?
데이터를 한 개 또는 일부(Mini-batch)를 활용하여 그레디언트를 계산 후 업데이트하는 방식을 말한다.
- 확률적 경사하강법이 만능은 아니고 경사하강법보다 실증적으로 더 낫다고 많이 검증되어 있다.
- 데이터 일부를 가지고 업데이트 하기 때문에 경사하강법보다 연산량이 감소되어 효율적인 활용이 가능하다.
경사하강법 | 확률적 경사하강법 |
전체 데이터 사용 | 일부 데이터 사용(Mini-batch) |
그레디언트 벡터 계산 |
-> 많은 데이터를 경사하강법을 적용할 경우 메모리가 부족하여 하드웨어 적인 한계를 겪을 수 있다.
이러한 한계를 극복하고 빠르고 병렬적인 연산을 하기 위해 확률적 경사하강법(SGD)을 사용한다.
확률적 경사하강법은 볼록이 아닌 목적식에서도 사용할 수 있어 경사하강법보다 머신러닝, 딥러닝 학습에 더 효율적이다.
[AI Tech Pre-course] 인공지능(AI) 기초 다지기
부스트코스 무료 강의
www.boostcourse.org
728x90
'Python > 인공지능' 카테고리의 다른 글
[인공지능 기초] 경사하강법 (2) | 2021.06.05 |
---|---|
[인공지능 기초] 행렬(Matrix) 이란? (2) | 2021.06.03 |
[인공지능 기초] Vector 란? (2) | 2021.06.01 |
댓글
최근에 올라온 글
TAG
- Pandas
- Ai
- MongoDB
- SQL
- cnn
- algorithm
- 주니온
- 부스트코스
- 파이썬
- 프로그래머스
- db
- Scikit
- Programmers
- 경사하강법
- Project
- Min()
- numpy
- Max()
- 딥러닝
- VGGNet
- SQLD
- 알고리즘
- Python
- 기계학습
- 자료구조
- sklearn
- 인공지능
- 머신러닝
- slqd
- OpenCV
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Total
- Today
- Yesterday
250x250