ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 신경망 학습(3)
    AI 모델(딥러닝 기초)/3. 신경망 학습 2023. 1. 7. 17:44
    728x90

    ※ 수치 미분

     

    일반적으로 우리는 미분 자체를 순간의 변화량으로 판단한다.

     

     

    위와 같이 흔히 표현하며 이를 전방 차분이라고 부른다.

     

    하지만, 코드로 위의 식을 구현할 때 몇 가지 고려할 점이 생긴다.

    1. lim 표현을 위해 h를 아주 작은 값을 대입하는 방식을 사용하는데, 반올림 오차를 고려하여 이를 e^(-4) 정도로 하는 것이 적당하다.

    2. x+h와 x 사이의 함수 f의 차분을 계산하는데, 이 계산에 오차가 존재한다. -> 진정한 미분은 x 위치의 함수의 기울기에 해당하지만 x+h와 x 사이의 차분을 계산하므로 오차가 발생함.

     

    이 두가지 고려사항들을 통해 일반적으로 중심 차분 or 중앙 차분이라고 부르는 방식으로 코드를 구현한다.

     

     

    이렇게 표현하는 미분 방식도 눈에 꽤 익숙할 것이다. 중앙 차분으로 코드를 구현해야 오차가 최대한 없는 진정한 미분과 동일한 값이 나오게 된다는 것을 알고 넘어가자.

     

    def numerical_diff(f,x):
        h = 1e-4
        return (f(x+h) - f(x-h)) / (2*h)

     

    중앙 차분과 반올림 오차를 고려하여 미분을 구현해 주었다.

     

    ※ 편미분

    - 변수가 여럿인 함수에 대한 미분

     

    위 함수를 예로 들어보자.

    def function(x):
        return x[0]**2 + x[1]**2

     

    이 함수를 x0 = 3, x1 = 4 일 때, x0에 대한 편미분을 구하게 되면, 2x0 + x1^2이 된다.

    def function_tmp1(x0):
        return x0*x0 + 4.0**2.0

     

    이 함수를 x0 = 3, x1 = 4 일 때, x1에 대한 편미분을 구하게 되면, x0^2 + 2x1이 된다.

    def function_tmp2(x1):
        return 3.0**2.0 + x1*x1

     

    이 함수들을 출력시켜 보자.

    print(numerical_diff(function_tmp1, 3.0))
    
    print(numerical_diff(function_tmp2, 4.0))
    6.00000000000378
    8.000000000016882

     

    이렇게 편미분은 변수가 하나인 미분과 마찬가지로 특정 장소의 기울기를 구한다. 여러 변수 중 목표 변수를 지정하고 다른 변수는 값을 고정시켜 계산하면 된다.

    728x90

    'AI 모델(딥러닝 기초) > 3. 신경망 학습' 카테고리의 다른 글

    3. 신경망 학습(6)  (0) 2023.01.15
    3. 신경망 학습(5)  (0) 2023.01.10
    3. 신경망 학습(4)  (0) 2023.01.09
    3. 신경망 학습(2)  (0) 2023.01.07
    3. 신경망 학습(1)  (2) 2023.01.05
Designed by Tistory.