데이터 과학

기초인공신경망 - 미분 개요 본문

인공지능/기초 인공신경망

기초인공신경망 - 미분 개요

티에스윤 2023. 4. 3. 09:30

변화율

 

변화율(rate of change)은 어떤 변수가 달라졌을 때 그 변화의 정도를 나타내는 개념입니다. 수학에서는 함수의 변화율을 구할 때 이 개념을 많이 사용합니다.

예를 들어, 자동차가 1시간 동안 100km를 달려서 속도가 100km/h일 때, 시간이 변할 때 속도의 변화율을 구할 수 있습니다. 이때 시간과 속도는 서로 반비례하므로, 시간이 변할 때 속도는 그에 반비례하여 감소하게 됩니다. 변화율을 구하기 위해서는 어떤 시간 구간에 대한 속도의 변화를 계산해야 합니다. 예를 들어, 0~1시간 구간에서의 속도 변화율을 구하려면 다음과 같이 계산합니다.

변화율 = (종료값 - 시작값) / (종료시간 - 시작시간)
= (100 - 0) / (1 - 0)
= 100 km/hour

따라서, 0~1시간 구간에서 자동차의 속도는 시간이 경과함에 따라 100km/h로 감소하고 있습니다. 이처럼 변화율을 계산함으로써 시간이 변할 때 속도가 어떻게 변화하는지를 정량적으로 파악할 수 있습니다.

수학에서는 이와 같이 함수의 변화율을 계산하는데 이용되는데, 함수의 미분값이 변화율을 나타내므로, 미분을 이용하여 함수의 변화율을 계산할 수 있습니다. 따라서, 변화율은 미분과 밀접한 관련이 있으며, 미분을 통해 함수의 변화율을 정확하게 계산할 수 있습니다.

 

 

미분


미분(differentiation)은 함수(function)가 어떻게 변화하는지를 설명하는 수학적 개념입니다. 미분의 원리는 함수의 기울기(slope)를 구하는 것으로, 기울기는 함수의 값의 증가량을 입력 값의 변화량으로 나눈 것으로 정의됩니다.

미분의 공식은 다음과 같습니다.
f'(x) = lim (h→0) [f(x+h) - f(x)] / h

여기서 f(x)는 미분하려는 함수를 나타내고, h는 x값이 증가할 때 변화하는 양을 의미합니다. 미분의 원리는 h값을 0에 가까운 작은 값으로 만들어서 x값의 변화량을 측정하면, 그 순간의 기울기를 알 수 있다는 것입니다.

미분의 원리를 이용하면 함수의 최댓값, 최솟값, 극점 등을 구할 수 있습니다. 함수의 최댓값이나 최솟값은 기울기가 0인 지점에서 나타나기 때문입니다. 또한 함수의 기울기가 양수인 부분과 음수인 부분을 구분하여, 함수의 증가와 감소를 판별할 수도 있습니다.

미분은 공학, 물리학, 경제학 등 여러 분야에서 사용되며, 수학적 모델링에 매우 중요한 개념입니다.


미분(differentiation)과 극한(limit)은 서로 밀접하게 연관되어 있습니다. 미분은 극한의 개념을 사용하여 함수의 변화율을 정의하는 것이기 때문입니다.

함수 f(x)의 x=a에서의 미분값은 다음과 같이 정의됩니다.
f'(a) = lim (h→0) [f(a+h) - f(a)] / h

여기서 h는 0에 가까워지는 양입니다. 이때 h가 0에 가까워짐에 따라 f(a+h)와 f(a)가 점점 가까워지고, h가 0이 되었을 때 둘 사이의 차이가 0에 수렴하게 됩니다. 이러한 극한의 개념을 이용하여 x=a에서의 함수 f(x)의 미분값을 구할 수 있습니다.

즉, 미분은 극한의 개념을 사용하여 함수의 변화율을 정의하는 것입니다. 미분값은 극한을 이용하여 구할 수 있으며, 이때 극한값이 존재하면 미분값도 존재합니다. 미분값은 함수의 경사도나 기울기를 나타내므로, 극한의 개념은 함수의 변화율을 이해하는 데 매우 중요한 개념입니다.

따라서, 미분과 극한은 서로 밀접한 관련이 있으며, 미분을 이해하기 위해서는 극한의 개념을 잘 이해해야 합니다.

 



파이썬 작성

SymPy 라이브러리를 사용하여 미분을 계산하는 방법을 소개하겠습니다.

import sympy as sp

# 미분하려는 함수를 정의합니다.
x = sp.Symbol('x')
f = x**3 - 2*x**2 + x + 3

# f(x)를 x로 미분한 결과를 출력합니다.
df_dx = sp.diff(f, x)
print("f'(x) = ", df_dx)


위 코드에서 sp.Symbol('x')는 x를 기호로 표현하기 위한 코드입니다. sp.diff(f, x)는 f를 x로 미분하는 함수입니다. 이를 실행하면 함수 f(x)의 도함수 f'(x)를 출력합니다.

만약 구체적인 x값에서의 미분값을 구하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.


# x=1일 때 f'(x)의 값을 출력합니다.
df_dx_value = df_dx.subs(x, 1)
print("f'(1) = ", df_dx_value)


위 코드에서 df_dx.subs(x, 1)는 x=1일 때 f'(x)의 값을 계산하는 코드입니다. 이를 실행하면 x=1일 때의 미분값을 출력합니다.



NumPy를 사용하여 함수의 미분값을 구하는 방법은 다음과 같습니다.

import numpy as np

# 함수 정의
def f(x):
    return x**3 - 2*x**2 + x + 3

# 미분 함수 정의
def df_dx(f, x, h):
    return (f(x + h) - f(x)) / h

# x=1일 때의 미분값 계산
x = 1
h = 1e-6
df_dx_value = df_dx(f, x, h)

# 결과 출력
print("f'(1) = ", df_dx_value)


위 코드에서 f(x)는 미분하려는 함수를 정의한 함수입니다. df_dx(f, x, h)는 f(x)를 x에서 미분하는 함수를 정의한 것입니다. 이때 h는 x의 작은 변화량을 나타냅니다. 이를 실행하면 x=1일 때의 미분값을 계산하여 출력합니다.

위 코드에서 h는 작은 값으로 설정해야 합니다. h값이 너무 작으면 수치적 불안정성(numerical instability) 문제가 발생할 수 있습니다. 또한, h값이 너무 크면 미분값이 부정확해질 수 있습니다. 따라서 적절한 h값을 찾는 것이 중요합니다. 보통은 h=1e-6 정도로 설정하는 것이 일반적입니다.


시그모이드 미분

시그모이드 함수(sigmoid function)는 입력값을 0과 1 사이의 값으로 변환하는 함수로, 주로 이진 분류(binary classification) 문제에서 출력층의 활성화 함수로 사용됩니다. 하지만, 시그모이드 함수의 미분값은 출력값이 0이나 1에 가까워질수록 0에 수렴하므로, 역전파(backpropagation) 과정에서 기울기 소실 문제(vanishing gradient problem)가 발생할 수 있습니다. 이러한 문제는 딥러닝 모델의 학습을 어렵게 만들어, 성능 저하나 수렴하지 않는 문제를 야기할 수 있습니다.

따라서, 시그모이드 함수를 사용하는 딥러닝 모델에서는 주로 다른 활성화 함수를 사용합니다. 예를 들어, ReLU(Rectified Linear Unit) 함수는 시그모이드 함수와 비교해서 연산이 빠르고 기울기 소실 문제가 발생하지 않기 때문에, 많이 사용되는 활성화 함수 중 하나입니다.

하지만, 일부 문제에서는 시그모이드 함수를 사용해야 하는 경우도 있습니다. 예를 들어, 이진 분류 문제에서 클래스 간의 경계가 비교적 선형적(linear) 일 때, 시그모이드 함수를 사용하면 성능이 좋을 수 있습니다. 또한, 시그모이드 함수의 미분값이 0에서 멀리 떨어지는 경우, 기울기 소실 문제가 발생하지 않을 수 있습니다.

따라서, 시그모이드 함수를 사용해야 하는 경우에는 기울기 소실 문제에 대한 대처책을 마련하고, 적절한 하이퍼파라미터를 조절하여 문제를 해결해야 합니다.

 

 

분수 미분

 

 

분수 미분은 분수를 구성하는 변수들의 변화율을 구하는 것입니다. 아래의 과정을 따라서 분수 미분을 할 수 있습니다.

1. 분모와 분자를 분리합니다.
2. 분모와 분자의 미분을 각각 구합니다.
3. 분모와 분자를 다시 합칩니다.

 

미분 공식에 따라서, 변수 x에 대한 n차 미분 결과는 다음과 같습니다.

1.상수 미분: 상수 c에 대한 미분은 0입니다.
2. x 미분: x에 대한 미분은 1입니다.
3. 상수배 미분: cf(x)에 대한 미분은 c*f'(x)입니다. 여기서 f'(x)는 f(x)의 미분값입니다.
4. 합/차 미분: f(x) + g(x)에 대한 미분은 f'(x) + g'(x)입니다. f(x) - g(x)에 대한 미분은 f'(x) - g'(x)입니다.
5. 곱 미분: f(x)g(x)에 대한 미분은 f'(x)g(x) + f(x)g'(x)입니다.
6. 분모의 제곱근 미분: 1 / sqrt(f(x))에 대한 미분은 -1/2f'(x) / f(x)^(3/2)입니다.

 


위의 공식들을 이용하여, 예를 들어 f(x) = (x^2 + 1) / x라는 분수를 미분하면 다음과 같습니다.

1. f(x)를 분리합니다. f(x) = x^2 / x + 1 / x입니다.
2. 각각의 분모와 분자의 미분을 구합니다. (x^2 / x)' = 2x / x - x^2 / x^2, (1 / x)' = -1 / x^2입니다.
3. 분모와 분자를 다시 합칩니다. f'(x) = (2x - x^2 / x^2) / 1 + (-1 / x^2) = (2 - x^-1) - (x^2 / x^3) = (2 - 1/x) - (1/x^2)


따라서, f(x) = (x^2 + 1) / x에 대한 미분값은 f'(x) = (2 - 1/x) - (1/x^2)입니다.

 

 

 


https://tsyoon.tistory.com/25




 

인공지능, 접선의 기울기와 경사하강법

인공신경망을 공부하다보면 필연적으로 마주쳐야 하는 이론이 경사하강법(gradient desendent) 이론입니다. 가중치 값에 대한 변화율을 만들기 위해 변화된 값을 찾는 방법으로 오류역전파 알고리즘

tsyoon.tistory.com

 

 

https://tsyoon.tistory.com/26

 

인공지능 편미분 (Partial Derivative)

고등학교 교육과정에는 없으며 대학교 공업수학에서 나오는 내용인데 요즘은 인공신경망에서 나오는 내용으로 전미분 이후에 학습하고 있습니다. 편미분의 의미는 간단합니다. 여러변수들이

tsyoon.tistory.com