-오차 역전파로 2층 신경망 학습 시키기
p147
<aside>
기존에 배웠던 신경망이 학습되는 원리
오차가 가장 작아지는 지점의 가중치를 알아내게금 학습이 되는 원리
처음에는 랜덤으로 지정된 가중치 w를 임의 지정 후 수치미분을 통해 오차가 적은 가중치w 찾기 아래는 기울기를 통해서 가중치를 갱신하는 원리를 설명하는 그림
기울기를 구하기 위해 아래의 미분 함수 생성
def numerical_diff (f,x):
h = 0.0001
return ( f(x - h) -f(-h) / (2*h) )
위의 함수로 신경망을 학습시킬 시 구해야하는 가중치가 많기에 작업속도가 느리다는 단점이 있다
미분이 아닌, 도함수를 통한 미분계수 계산으로 작업속도 향상
</aside>
아래 함수의 x=3인 지점의 기울기(미분계수)를 구하시오
f(x) = 2*x^2 + 3x + 7
오차함수
def f(x):
return 2*x**2 + 3*x + 7
미분함수
def numerical_diff (f,x):
h = 0.0001
return ( f(x - h) -f(-h) / (2*h) )
x가 3인 지점의 미분계수 구하기
numerical_diff(f, 3) # 15.000000000036096
도함수를 이용해서 미분계수(기울기)를 구하는 실습
아래의 함수의 x=3인 지점의 기울기(미분계수)를 구하시오
f(x) = 2x^2 +3x + 7
도함수를 파이썬으로 생성
def f_prime(x):
return 4*x +3
위의 도함수에 3을 입력해서 x가 3일 때 미분계수(기울기) 구하기
f_prime(3)
아래의 오차함수의 x가 7인 지점의 미분계수를 구하시오
f(x) = 12*x**2 + 4*x + 3
def f_prime(x):
return 12*x**2 + 4*x + 3
f_prime(7)
도함수를 이용해서 신경망을 구성하면 빠르게 학습 시킬 수 있다. 구글에서 만든 텐써 플로우 함수 내에도 모두 도함수로 코딩되어져 있어 속도가 빠른것이다.
f(x) = 9x^5 + 2x^3 + 3x + 24
f(x') = 45*x**4 + 6*x**2 + 3
def f_prime(x):
return 45*x**4 + 6*x**2 + 3
f_prime(4) #11619