Story of CowHacker

딥러닝 3.1 신경망 학습 본문

공부/딥러닝

딥러닝 3.1 신경망 학습

Cow_Hacker 2020. 8. 12. 10:57
728x90

이번 글에서는 먼저 미분에 대해 알아볼 것이다.

 

미분 : 특정 순간의 변화량을 뜻한다.

 

 

 

 

 

그림1

그림 1은 미분을 수식으로 나타낸 것이다.

좌변은 x에 대한 f ( x )의 변화량을 나타내는 기호다.

결국, x의 작은 변화가 함수 f ( x )를 얼마나 변화시키느냐를 의미한다.

이때 시간을 뜻하는 h를 한없이 0에 가깝게 한다는 의미로 lim h->0로 나타낸다.

 

이제 위 미분을 파이썬으로 구현해보겠다.

 

 

 

미분 코드

 

def numerical_diff ( f, x ) :

    h = 1e-4 

    return ( f ( x + h ) - f ( x - h ) ) / ( 2 * h )

 

 

함수 이름은 수치 미분을 뜻한다.

이 함수는 함수 f와 함수 f에 넘길 인수 x라는 두 인수를 받는 원리다.

 

그럼 이제 위 함수를 사용해 간단한 함수를 미분해보겠다.

 

일단 우리가 미분할 2차 함수를 보겠다.

 

 

 

그림2

 

 그림 2가 바로 우리가 미분할 2차 함수다.

이것을 파이썬으로 구현해보겠다.

 

 

 

 

2차원 함수 코드

 

def function_1 ( x ) :

    return 0.01 * x ** 2 + 0.1 * x

 

이제 이 2차원 함수 그래프를 그리는 코드를 짜 보겠다.

 

 

 

 

 

 

2차원 그래프 코드

 

import numpy as num

import matplotlib.pylab as plt

 

def function_1 ( x ) :

    return 0.01 * x ** 2 + 0.1 * x

 

x = num.arrange ( 0.0, 20.0, 0.1 )

y = function_1 ( x )

plt.xlabel ( "x" )

plt.ylabel (  "f(x)" )

plt.plot ( x, y )

plt.show()

그림3

위 코드를 실행시키면 그림 3처럼 2차 함수 그래프가 나온다.

 

 

이제 아까 파이썬으로 구현한 수치 미분 함수로 미분을 해볼 것이다.

 

 

 

 

2차 함수 미분 코드

 

print ( numerical_diff ( function_1, 5 ) )

print ( numerical_diff ( function_1, 10 ) )

 

 

위 코드는 x = 5일 때와 10일 때의 함수를 미분한 것이다.

 

결과 값은

0.1999999999990898
0.2999999999986347

이렇게 나오는데 한번 그래프를 그려 보겠다.

 

 

그림4
그림5

그림 4는 x 가 5일 때의 접선을 나타 낸 것이다.

그림 5는 x 가 10일 때의 접선을 나타 낸 것이다.

 

 

 

 

다음은 편미분에 대해서 알아보겠다.

 

먼저 변수가 2개인 함수 수식을 한 개 보자.

 

그림6

위 수식을 이제 파이썬으로 구현해보겠다.

 

 

 

 

 

 

 

 

변수 2개 함수 코드

 

def function_2 ( x ) :

    return x [ 0 ] ** 2 + x [ 1 ] ** 2

 

 

 

편미분이란

위 함수처럼 변수가 여러 개 있는 함수에 대한 미분을 편미분이라고 한다.

 

그럼 편미분을 수식으로 나타 내보겠다.

 

 

 

 

그림7

 

그림 7에 있는 편미분 수식을 이용해 파이썬으로 편미분 문제를 풀어 보겠다.

 

그림8

그림 8 문제를 파이썬 코드를 짜 보겠다.

 

 

 

 

def numerical_diff ( f, x ) :

    h = 1e-4 

    return ( f ( x + h ) - f ( x - h ) ) / ( 2 * h )

 

def function_tmp1 ( x0 ):

    return x0 * x0 + 4.0 ** 2.0

 

print ( numerical_diff ( function_tmp1, 3.0 ) )

 

출력 값 즉, 답은 6.00000000000378이다.

 

이까지 미분과 편미분을 파이썬 구현을 통해 알아보았다.

 

728x90

'공부 > 딥러닝' 카테고리의 다른 글

딥러닝 3.3 신경망 학습  (0) 2020.08.13
딥러닝 3.2 신경망 학습  (0) 2020.08.13
딥러닝 3.0 신경망 학습  (0) 2020.08.11
딥러닝 2.9 신경망  (0) 2020.08.10
딥러닝 2.8 신경망  (0) 2020.08.08
Comments