본문 바로가기

파이썬 프로그래밍/딥러닝과 수학10

6. 2차원 행렬을 입력받는 합성함수의 도함수(이론) 1. 2차원 행렬을 입력받는 합성함수의 정의 입력이 2차원인 경우에는 도함수를 어떻게 구할 수 있을까? 일단 합성함수부터 정의하자. 입력 X, W는 아래와 같다. g(X, W)함수를 아래와 같이 정의한다. σ(X) 함수를 아래와 같이 정의한다. h(X) 함수를 아래와 같이 정의한다. 합성함수 f(X, W) = h(σ(g(X, W)))를 정의한다. 합성함수의 정의와 연산의 결과는 아래와 같다. 딥러닝에서 상당히 유사하게 사용하는 forward 연산이다. g -> σ -> h 정방향 순서대로 연산하여 출력한다. 2. 도함수 구하기 도함수는 체인룰을 사용하여 forward 연산과 반대로 h -> σ -> g 순서대로 구한다. 그래서 backward 연산이다. 우리는 X의 변화에 따른 최종출력 f의 변화가 궁금.. 2021. 12. 31.
5. 벡터 합성함수의 도함수 표현 벡터로 이루어진 합성함수의 도함수는 어떻게 표현할 수 있는지 알아보자. 지난 시간에 벡터 X, W에 대한 합성함수 f(X, W)를 아래와 같이 정의했었다. 1. 도함수 ∂f/∂X , ∂f/∂W 구하기 입력 변수는 X, W 두개이므로 각각에 대한 도함수 ∂f/∂X , ∂f/∂W 를 구하면 된다. 체인룰을 이용하여 구해보자 즉, ∂g/∂X , ∂g/∂W 를 구해야 한다는 것이다. (앞의 부분은 sigmoid 자체를 미분하면 되므로 쉽다) ∂g/∂X 에 대하여 각 요소를 구해보면 이렇게 표현할 수 있으므로 ∂g/∂X 를 구해보면 X에 대한 편미분이므로 W를 상수취급한다. 즉 결과는 아래와 같다. W행렬의 전치행렬(transpose matrix)이다. 즉, W의 shape가 (a, b)였다면 W의 전치행렬은 (.. 2021. 12. 29.
4. 벡터 입력에 대한 합성함수 표현 벡터 입력에 대한 합성함수와 도함수 표현을 알아보자. 벡터를 행렬로 표현하여 곱셈, 합성함수와 도함수를 어떻게 표현할 것인지 알아볼 것이다. 1. 벡터의 곱 연산 벡터 입력에 대해 다음과 같은 출력을 가정해 보자.(딥러닝에서 본 것 같지 않나요?) 이를 파이썬 코드로 표현해보면 다음과 같다. import numpy as np X = np.array([[1, 2, 3]]) W = np.array([[3], [2], [1]]) print('x.shape', X.shape) print('w.shape', W.shape) def matmul_forward(X, W): return np.dot(X, W) print('matmul_forward ', matmul_forward(X, W)) 행렬의 곱셈을 복습해보자... 2021. 12. 29.
3. 입력이 여러 개인 함수와 도함수의 표현 입력이 여러 개인 함수와 도함수는 어떻게 표현할 수 있는지 알아보자. 간단한 함수부터 출발하자. 입력 x, y를 받아서 더하여 출력한다. geogebra로 그려보면 x, y, z로 이루어진 3차원에서 2차원 평면 그래프가 그려진다. sigmoid라고 하여 딥러닝에서 많이 봤던 함수와 합성하고자 한다. 로 정의되는 함수고, 이렇게 그려지는 함수다. 보통 classification, 분류에서 사용할 수 있는 활성화함수로도 쓰인다. g(x) -> f(x)로 합성시킬 것이다. 이 합성함수의 그래프를 파이썬으로 그려보자. matplotlib의 3차원 모듈을 이용할 것이다. from mpl_toolkits.mplot3d import axes3d import numpy as np import matplotlib.py.. 2021. 12. 28.