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) 기초 다지기

 

[AI Tech Pre-course] 인공지능(AI) 기초 다지기

부스트코스 무료 강의

www.boostcourse.org

 

 

 

 

728x90

'Python > 인공지능' 카테고리의 다른 글

[인공지능 기초] 경사하강법  (2) 2021.06.05
[인공지능 기초] 행렬(Matrix) 이란?  (2) 2021.06.03
[인공지능 기초] Vector 란?  (2) 2021.06.01
댓글
250x250
최근에 올라온 글
«   2024/10   »
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 29 30 31
Total
Today
Yesterday