[최적화] Gradient를 계산하는 방법

2025. 1. 7. 07:01·연구 Research/최적화 Optimization

 

 

최적화 방법을 보면 gradient 정보를 사용하는 경우가 많다. 실제 최적화 알고리즘을 구현하고자 할 때 의문인 것이 바로 이 gradient를 어떻게 구하냐는 질문이다.

 

대표적

최적화 방법을 보면 gradient 정보를 사용하는 경우가 많다. 실제 최적화 알고리즘을 구현하고자 할 때 의문인 것이 바로 이 gradient를 어떻게 구하냐는 질문이다.

 

 

그 방법으로는

0. By hand
1. Finite-difference method
2. Auto-differentiation
3. Complex step method

 

다음과 같이 설명할 수 있다.

 

0. By hand

만약 목적함수가 파라미터에 대해 간단하게 표현되어있다면 사전에 gradient를 계산해서 결과 값만 대입하면 쉽게 구할 수 있다.

 

1. Finite-difference method

대부분의 최적화 알고리즘에서 사용하는 방식이다. 함수값에 작은 $h$값의 perturbation을 통해 근사적으로 미분값을 구한다.

 

$$\frac{d f}{d x}=\frac{f(x+h)-f(x)}{h}+\mathcal{O}(h)$$

다음과 같이 forward different method를 적용할 수도 있고 더 효율적인 정확도를 위해 central difference method를 쓸 수도 있다.

$$\frac{d f}{d x}=\frac{f(x+h)-f(x-h)}{2h}+\mathcal{O}(h^2)$$

 

 

이렇게 근사하는 경우에는 두 가지 에러가 존재하게 된다.

 

- Truncation error : 위에서 보인 것과 같이 $\mathcal{O}(h)$ 텀으로 인한 에러.

- Subtractive cancellation error : floating point 계산으로 인해 발생하는 에러. $f(x+h)$와 $f(x)$의 값이 거의 비슷하기 때문에 발생하는 에러다.

 

 

2. Automatic differentiation

많은 인공지능 방법에서 gradient를 계산할 때 사용하는 방법이다. 거쳐온 모든 연산에 대해 gradient를 계산한 다음 (symbolic rule 사용) chain rule를 적용하여 구하는 방식이다.

 

참고 내용:

https://www.mathworks.com/help/optim/ug/autodiff-background.html

 

Automatic Differentiation Background

You clicked a link that corresponds to this MATLAB command: Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

www.mathworks.com

 

 

3. Complax-step method

finite difference와 유사하지만 subtractive cancellation이 존재하지 않는 방법이다. 따라서 $h$를 매우 작게 잡아도 문제가 되지 않는다.

 

$f(x + i h)$의 taylor expansion을 생각해보자. ($i = \sqrt{-1}$)

$h$이 작은 경우,

\[ f(x + i h) = f(x) + i h \frac{df}{dx} - h^2 \frac{d^2 f}{dx^2} + \mathcal{O}(h^3). \]

 

\[ \frac{df}{dx} \approx \frac{\operatorname{Im} \{f(x + i h)\}}{h} + \mathcal{O}(h^2). \]

 

그러나 이 방법도 단점은 존재한다. source code에서 complex variable을 쓸 수 있어야하고 computational cost가 디자인 변수의 수에 따라 증가한다. 또한 complax number을 사용하면 일반적인 경우보다 더 느려진다.

저작자표시 비영리 변경금지 (새창열림)

'연구 Research > 최적화 Optimization' 카테고리의 다른 글

[Optimization] Linear subspace, Affine subspace  (0) 2024.10.11
[최적화] Introduction to Optimization - Introduction  (0) 2020.09.25
'연구 Research/최적화 Optimization' 카테고리의 다른 글
  • [Optimization] Linear subspace, Affine subspace
  • [최적화] Introduction to Optimization - Introduction
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (460) N
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (7) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    우분투
    고체역학
    논문작성
    JAX
    Numerical Analysis
    matplotlib
    ChatGPT
    논문작성법
    텝스
    obsidian
    Zotero
    Julia
    WOX
    에러기록
    서버
    Statics
    Python
    IEEE
    텝스공부
    Linear algebra
    옵시디언
    인공지능
    MATLAB
    Dear abby
    pytorch
    수치해석
    LaTeX
    생산성
    딥러닝
    teps
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[최적화] Gradient를 계산하는 방법
상단으로

티스토리툴바