경사하강법 I

2021. 1. 26. 17:27·AI/이론
경사하강법(순한맛)

경사하강법 I¶


미분¶

  • 미분은 변수의 움직임에 다른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법이다.
  • 최근엔 미분은 컴퓨터가 계산한다.

image.png

수식¶

$$f(x) = x^{2} +2x+3$$$$f'(x) = 2x+2$$


image.png

  • 미분은 함수 $f$의 주어진 점$(x,f(x))$에서의 접선의 기울기를 구한다.
  • 함수에서 $h$→0으로 보내면 $(x,f(x))$에서 접선의 기울기로 수렴한다.
  • 미분을 계산하려면 연속 함수이어야 한다.


image.png

  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.
  • 증가시키고 싶다면 미분값을 더한다.
  • 감소시키고 싶다면 미분값을 뺀다



미분값이 음수 일 때¶


image.png

미분값이 양수 일 때¶

image.png

  • 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
  • 목적함수를 최대화할 때 사용한다.
  • 미분값을 빼면 경사하강법(gradient descent)이라 하며 함수의 극소값의 위치를 구할 때 사용한다.
  • 목적함수를 최소화할 때 사용한다.


극값¶

image.png

  • 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다.
  • 극값에서는 미분값이 0이므로 더이상 업데이트가 안 된다.



경사하강법: 알고리즘(미분값)¶

# gradient: 미분을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(abs(grad) > eps):
    var=var- lr*grad
    grad=gradient(var)

while(abs(grad) > eps)
컴퓨터로 계산할 때 미분이 정확히 0이 되는것은 불가능하므로 eps보다 작을 때 종료하는 조건이 필요하다.

var=var- lr*grad 이 부분이 $x- \lambda f'(x)$을 계산하는 부분. lr은 학습률로서 미분을 통해 업데이트하는 속도를 조절한다. 이 값은 잘 조절해야 한다.



변수가 벡터인 경우¶

  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용한다.

image.png

  • $e_{i}$는 $i$번째 값만 1이고 나머지는 0인 단위벡터이다.


예시) image.png

  • $x$에 대해서 편미분한 값이다.


image.png

각 변수 별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다. 앞서 사용한 미분값인 $f'(x)$대신 벡터$\nabla f$를 사용하여 변수 $x=(x_{1},...,x_{d})$를 동시에 업데이트 가능하다.



경사하강법: 알고리즘(norm)¶

# gradient: 그레디언트을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(norm(grad) > eps):
    var=var- lr*grad
    grad=gradient(var)

벡터에서는 절대값 대신 노름(norm)을 계산해서 종료조건을 설정

'AI > 이론' 카테고리의 다른 글

딥러닝 학습방법 이해하기  (0) 2021.01.27
Pandas II  (0) 2021.01.27
Pandas I  (0) 2021.01.27
경사하강법 II  (0) 2021.01.26
행렬  (0) 2021.01.25
벡터  (0) 2021.01.25
Numpy part III  (0) 2021.01.25
Numpy part II  (0) 2021.01.25
'AI/이론' 카테고리의 다른 글
  • Pandas I
  • 경사하강법 II
  • 행렬
  • 벡터
N-analyst
N-analyst
  • N-analyst
    개발자CuCu
    N-analyst
  • 전체
    오늘
    어제
  • 공지사항

    • 티스토리에서 원하는 글 찾는 방법
    • 분류 전체보기 (140)
      • 티스토리 (4)
      • 알고리즘 (5)
        • 알고리즘 정리 (1)
        • 백준 (4)
      • 마크다운(Typora) (13)
        • 사용법 (13)
      • 에러 (1)
        • 파이썬 (1)
      • 데이터 분석 (5)
        • python_analysis (3)
        • Machine Learning (2)
      • AI (109)
        • 파이토치로 시작하는 딥러닝 기초 (2)
        • 부스트 캠프 AI tech (41)
        • 이론 (66)
      • 파이썬(python) (1)
        • 기타 (1)
      • 웹 프로그래밍 (1)
        • 설정 팁 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
N-analyst
경사하강법 I
상단으로

티스토리툴바