now is better than never

[인공지능(AI) 기초 다지기] 3. 기초 수학 첫걸음 (4) 본문

Python/[코칭스터디 9기] 인공지능 AI 기초 다지기

[인공지능(AI) 기초 다지기] 3. 기초 수학 첫걸음 (4)

김초송 2023. 2. 9. 18:18

5) 경사하강법 2

 

- 선형회귀분석

  • n개의 데이터를 가장 잘 설명하는 선형 모델
  • 무어-펜로즈 역행렬을 이용해서 회귀분석 가능 - L2노름을 최소화하는 y의 근사치를 찾음
  • 경사하강법으로도 선형 모델을 찾을 수 있음 -> 선형모델이 아닌데도 적용 가능, 좀더 일반적인 ML 모델
  • 선형회귀 목적식 : ∥y − Xβ∥2 
    이를 최소화하는 β를 찾아야 함
     = 이 목적식을 β로 미분 -> 주어진 β에서 미분값을 뺌

 

- 경사하강법으로 선형회귀 계수 구하기

  •  원래 L2 노름과 달리 n개의 데이터를 가지고 계산
    i = 1에서 n까지 더해준 다음에 제곱근 X -> 평균값을 계산하기 위해 1/n 나눈 다음에 제곱근 계산
  • 결과: Xβ를 계수 β에 대해 미분한 결과인 X^T만 곱해지는 것주어진 β에 대해서 목적식을 최소화하는 β를 구하는 경사하강법 알고리즘

  • t+1번째 coeffient : t번째 coeffient에서 위에서 구한 그래디언트 벡터를 빼주면 됨.
    경사하강법 알고리즘 원리 (경사(=미분법 =그래디언트 벡터)를 빼주면 목적식을 최소화하는 원리)를 다변수에서 활용하는 것
  • λ : 학습률 -> 수렴속도를 결정함
  • L2 노름의 제곱을 목적식으로 최소화를 해도 최적화하는 방향이 똑같음, 식은 좀 더 간단해짐
# 경사하강법 기반 선형회귀 알고리즘
for t in range(T):
    error = y = X @ beta
    grad = - transpose(X) @ error # 그래디언트 벡터
    beta = beta - lr * grad
  • Input : X, y, lr, T / Output : beta
  • norm : L2 노름을 계산하는 함수
  • lr : 학습률
  • T : 학습횟수
  •  정답 = y, 선형모델 = X
    X @ beta : X와 beta 벡터의 행렬곱
  • error = 목적식의 y − Xβ
  • 종료조건 외에 경사하강법 알고리즘과 똑같음
  • 학습횟수를 너무 작게 하면 경사하강법 알고리즘에 수렴하지 못할 수 있음
    학습률을 너무 크게 잡으면 경사하강법 알고리즘이 불안정하게 움직히고 너무 작으면 수렴을 너무 늦게함

 

- 경사하강법은 만능일까?

  • 역행렬을 사용하지 않고도 최적화를 할 수 있는 편리한 최적화 알고리즘
  • 이론적으로 미분이 가능하고 볼록(convex)한 함수
    + 학습률과 학습횟수를 매우 적절하게 선택해야 수렴이 보장
  • 볼록한 함수는 그래디언트 벡터가 항상 최소점을 향함 
  • 선형회귀의 목적식에 사용하는 L2 노름은 회귀계수 β에 대해서 볼록함수
  • 비선형회귀일 경우거나 목적식이 볼록하지 않을 경우 항상 수렴이 보장되지는 않음 -> 특히 딥러닝인 경우 대부분 아님

이런 경우...

 

- 확률적 경사하강법 (Stochastic Gradient Descent , SGD)

  • 모든 데이터를 사용해 업데이트를 하는 대신 데이터를 한 개 또는 일부만 활용하여 업데이트(=그래디언트 계산)
  • 데이터 한 개만 사용 - SGD, 데이터를 일부만 사용 - mini batch SGD
    하나만 사용하면 비효율적이기 때문에 mini batch SGD를 많이 이용해서 그냥 SGD로도 부름
  • 모든 데이터를 사용한 그래디언트 벡터와 유사 -> 딥러닝의 경우 경사하강법보다 SGD가 실증적으로 더 나음
  • 볼록이 아닌(non-convex) 목적식은 SGD로 최적화 가능
  • 전제데이터 = n, 미니배치 = b -> 연산량이 b/n으로 줄어듦

 

- 미니 배치 연산

  • 경사하강법은 전체데이터  D=(X, y)를 가지고 목적식(L)의 그래디언트 벡터인 ∇θL(D, θ) (=나블라 세터 L)을 계산
    주어진 목적식의 최솟점의 방향으로 안내
  • SGD는 미니배치 D(b) = (X(b) , y(b) ) ⊂ D 를 가지고 그래디언트 벡터를 계산
    미니배치 : 전체 데이터의 일부
    목적식이 살짝 바뀌지만 방향은 유사하다고 기대할 수 있음
  • 원래 경사하강법에서 이동시키고 싶어하는 이동식의 방향과 유사
  • 매번 다른 미니배치를 사용하기 때문에 곡선 모양이 바뀌게 된다 -
    > 극솟점이나 극댓점에서 목적식이 확률적으로 바뀜
    ->  극솟점/극댓점이 더이상 아님
    -> 원래 경사하강법 그래디언트 극솟점/극댓점에서 탈출

  • 단 정확하게 극댓점으로 흐르는게 아님
  • 각각의 화살표를 계산하는 연산속도가 경사하강법보다 훨씬 빠름
    -> 정확하지 않지만 훨씬 빨라서 머신러닝, 딥러닝 학습에 훨씬 더 효율적
  • 단, 미니배치를 너무 작게 잡으면 경사하강법보다 더 느릴 수도 있음
  • 확률적 경사하강법에서는 학습률, 학습횟수, 미니배치 사이즈를 고려해야 함