본문으로 건너뛰기
32 / JACOBIAN LAB
먼저 알아두면 좋아요 · 행렬 곱과 연쇄법칙
단원 목록 (103) · Jacobian과 계산 그래프
이해하는 속도로 읽으세요.개념도이론실험확인 문제
BUILD YOUR INTUITION

먼저 그림으로 이해하기

한 번에 한 단계씩 살펴보세요.

Jacobian은 현재 점 근처에서 비선형 함수를 대신하는 행렬입니다. 입력 방향을 앞으로 보내는 Jd와 출력의 중요도를 뒤로 보내는 Jᵀq는 같은 국소 정보를 다르게 사용합니다.

(x,y)2, 3xy6x²+y7J = [[3,2],[4,1]]
값과 민감도의 계산 그래프 · 작은 화면에서는 가로로 이동하세요. 선 길이는 크기를 나타내지 않습니다. 고정된 기준 예제이며 아래 실험의 설정과 독립적입니다.
1 / 4

값의 흐름

입력 (2,3)은 곱셈과 제곱·덧셈으로 나뉘어 출력 (6,7)을 만듭니다.

F(2,3) = (6,7)

실험에서 확인하기 →
이 단원 목차

하나의 민감도에서 민감도의 지도로

스칼라 미분은 한 입력이 한 출력에 미치는 영향을 설명합니다. AI 모형에서는 수천 개의 입력이 수백 개의 특징으로 바뀔 수 있습니다. 각 출력이 각 입력에 얼마나 민감한지 체계적으로 모은 행렬이 Jacobian입니다.

핵심 용도는 국소 예측입니다. 비선형 함수도 현재 점 근처에서는 ‘현재 출력 + 입력 변화에 행렬을 곱한 값’으로 근사할 수 있습니다. 앞서 배운 선형변환과 미분을 연결하는 관점입니다. 원래 함수 전체가 선형이라는 뜻은 아닙니다.

이 단원에서는 Jacobian을 손으로 구하고, 입력 방향을 앞으로 전달하며, 출력의 중요도를 뒤로 전달합니다. 계산을 공유하는 경로에서 왜 기울기를 더해야 하는지도 확인합니다. 모든 벡터는 실수 열벡터이고 내적은 표준 유클리드 내적입니다.

예제 함수와 차원부터 확인하기

입력이 두 개, 출력도 두 개인 함수를 사용합니다.

F(x,y)=(xyx2+y).F(x,y)=\begin{pmatrix}xy\\x^2+y\end{pmatrix}.
기호 차원과 역할
p=(x,y)Tp=(x,y)^T 현재 입력점, 2×12\times1
F(p)F(p) 현재 출력, 2×12\times1
J(p)J(p) 출력별·입력별 미분 행렬, 2×22\times2
dd 입력의 방향 또는 유한 이동, 2×12\times1
qq 출력에 부여할 고정 가중치, 2×12\times1
JdJd 예측한 출력 변화, 2×12\times1
JTqJ^Tq qTFq^TF의 입력 기울기, 2×12\times1

정사각형 예제에서는 차원 오류를 놓치기 쉽습니다. 일반적으로 F:Rn→RmF:\mathbb R^n\to\mathbb R^m이면 Jacobian은 m×nm\times n입니다. 행은 출력, 열은 입력이라는 순서를 계속 유지하세요. 서로 다른 문헌의 표기 규약을 읽을 때도 먼저 확인해야 합니다.

한 행씩 Jacobian 만들기

첫 출력 F1=xyF_1=xy를 xx로 편미분할 때 yy는 고정합니다. 결과는 yy입니다. yy로 편미분하면 xx이므로 첫 행은 (y,x)(y,x)입니다. 두 번째 출력 F2=x2+yF_2=x^2+y의 편미분은 (2x,1)(2x,1)입니다.

J(x,y)=(yx2x1).J(x,y)=\begin{pmatrix}y&x\\2x&1\end{pmatrix}.

기준점 p=(2,3)Tp=(2,3)^T에서는 출력이 (6,7)T(6,7)^T이고

J(p)=(3241)J(p)=\begin{pmatrix}3&2\\4&1\end{pmatrix}

입니다. 예를 들어 원소 4는 yy를 고정하고 xx만 조금 늘릴 때 두 번째 출력이 그 변화의 약 4배 증가함을 뜻합니다. 두 번째 출력값 7과는 다른 종류의 정보입니다.

입력 방향을 앞으로 보내기: JVP

d=(0.1,−0.2)Td=(0.1,-0.2)^T로 이동한다고 합시다. Jacobian과 벡터의 곱인 JVP는

Jd=(3(0.1)+2(−0.2)4(0.1)+1(−0.2))=(−0.10.2)Jd=\begin{pmatrix}3(0.1)+2(-0.2)\\4(0.1)+1(-0.2)\end{pmatrix} =\begin{pmatrix}-0.1\\0.2\end{pmatrix}

입니다. 각 출력에 두 입력의 기여가 더해집니다. ‘입력을 이 방향으로 움직이면 출력이 일차적으로 어떻게 바뀌는가?’에 대한 답입니다. 방향 벡터가 반드시 단위벡터일 필요는 없습니다. 단위 거리당 변화를 원한다면 방향을 정규화했다는 사실을 명시하세요.

미분 가능한 함수에서는

F(p+d)=F(p)+J(p)d+o(∥d∥)F(p+d)=F(p)+J(p)d+o(\lVert d\rVert)

로 표현합니다. 여기서 모든 국소 미분은 이동하기 전의 점 pp에서 평가합니다.

실제 유한 이동과 비교하기

새 점은 (2.1,2.8)T(2.1,2.8)^T이며 출력은 (5.88,7.21)T(5.88,7.21)^T입니다. 이전 출력 (6,7)T(6,7)^T을 빼면 실제 변화는 (−0.12,0.21)T(-0.12,0.21)^T입니다. 일차 예측 (−0.1,0.2)T(-0.1,0.2)^T과 조금 다릅니다.

이 다항식은 전개를 통해 정확한 나머지까지 구할 수 있습니다.

F(p+d)−F(p)−Jd=(dxdydx2).F(p+d)-F(p)-Jd =\begin{pmatrix}d_xd_y\\d_x^2\end{pmatrix}.

기준 예제의 나머지는 (−0.02,0.01)T(-0.02,0.01)^T입니다. 미분이 틀린 것이 아니라 유한 이동에서 이차항을 버렸기 때문에 생기는 차이입니다.

dd를 (0.01,−0.02)T(0.01,-0.02)^T로 10분의 1로 줄이면 JVP는 (−0.01,0.02)T(-0.01,0.02)^T, 나머지는 (−0.0002,0.0001)T(-0.0002,0.0001)^T입니다. 나머지는 100분의 1로 줄어듭니다. 이런 크기 조절 실험은 구현 오류와 정상적인 근사 오차를 구분하는 데 유용합니다.

출력의 중요도를 뒤로 보내기: VJP

출력의 차이 L=F1−F2L=F_1-F_2가 관심 점수라고 합시다. 고정 가중치 q=(1,−1)Tq=(1,-1)^T로 L=qTFL=q^TF라고 쓰면 입력 기울기는

∇pL=JTq=(3421)(1−1)=(−11)\nabla_p L=J^Tq =\begin{pmatrix}3&4\\2&1\end{pmatrix} \begin{pmatrix}1\\-1\end{pmatrix} =\begin{pmatrix}-1\\1\end{pmatrix}

입니다. 보통 행벡터 표기로 qTJq^TJ를 VJP라고 부릅니다. 이 교재에서는 기울기를 열벡터로 유지하려고 그 전치인 JTqJ^Tq를 표시합니다. 방향 규약을 밝히면 같은 민감도를 표현합니다.

qq는 입력의 이동이 아닙니다. 각 출력에 얼마만큼의 중요도를 줄지 나타냅니다. 역방향 계산은 ‘이 출력 점수에 어떤 입력이 영향을 주는가?’에 답합니다. 여기서 전치가 수반 연산인 것은 유클리드 내적을 쓰기 때문입니다. 다른 내적이나 좌표의 계량을 쓰면 대응하는 수반을 따로 정의해야 합니다.

두 방향에서 같은 스칼라 얻기

입력 방향과 출력 가중치를 짝지으면

qT(Jd)=(JTq)Td=−0.3q^T(Jd)=(J^Tq)^Td=-0.3

입니다. 입력 방향을 출력 공간으로 보낸 뒤 점수를 계산해도 되고, 점수의 민감도를 입력 공간으로 가져온 뒤 방향과 내적해도 됩니다. 이 항등식은 행렬의 방향과 구현을 검산하는 좋은 방법입니다. 차원이 맞는 모든 행렬과 벡터에 성립하며, 그 행렬을 도함수로 해석하려면 미분 가능성이 필요합니다.

실제 유한 이동으로 계산하면 qTΔF=−0.33q^T\Delta F=-0.33입니다. −0.3-0.3과의 차이는 비선형 나머지입니다. 쌍대성 항등식은 국소 선형변환에 대해 정확한 것이지, 임의의 유한 비선형 변화가 모두 같은 값이라는 뜻은 아닙니다.

분기된 경로에서는 더해야 한다

계산 그래프에서 xx는 xyxy에도, x2+yx^2+y에도 쓰입니다. L=F1−F2L=F_1-F_2의 xx 기울기에 첫 경로는 3, 두 번째 경로는 −4-4를 기여하므로 합은 −1-1입니다. yy에는 2와 −1-1이 도착해 합이 1입니다.

역방향 구현에서는 같은 변수에 여러 경로로 도착하는 기여를 누적해야 합니다. 마지막 경로의 값으로 이전 기여를 덮어쓰면 잘못된 기울기가 됩니다. 공유 매개변수, 잔차 연결, 같은 텐서의 재사용에서도 같은 원리가 적용됩니다.

합성함수 H=G∘FH=G\circ F의 행렬 연쇄법칙은 JH(p)=JG(F(p))JF(p)J_H(p)=J_G(F(p))J_F(p)입니다. 열벡터 방향이 순방향으로 이동하는 순서에 맞춰 행렬이 곱해집니다. 역방향에서는 전치들을 반대 순서로 적용하므로 전체 곱 행렬을 실제로 구성할 필요가 없습니다.

특이 Jacobian이 말하는 범위

행렬식은 y−2x2y-2x^2입니다. p=(0.5,0.5)Tp=(0.5,0.5)^T에서는 0이고

J=(0.50.511)J=\begin{pmatrix}0.5&0.5\\1&1\end{pmatrix}

입니다. 이때 d=(0.1,−0.1)Td=(0.1,-0.1)^T는 Jd=0Jd=0이지만 실제 출력 변화는 (−0.01,0.01)T(-0.01,0.01)^T입니다. 일차적으로 보이지 않는 방향이라도 고차 효과가 남습니다.

한 점의 Jacobian만으로 전역 상수성이나 전역 역함수를 단정하지 마세요. 함수가 주변에서 연속 미분 가능하고 Jacobian이 가역이면 역함수 정리는 국소 역함수의 존재를 보장합니다. 이 충분조건이 실패했다는 사실만으로 모든 전역 성질의 반대를 증명한 것은 아닙니다.

실험 화면과 수치 검산 읽기

계산 그래프는 가독성을 위해 두 입력을 한 노드에 묶습니다. 개별 편미분은 행렬과 수치 표에서 확인합니다. 화살표는 물리적 이동이 아니라 값과 민감도의 계산 방향입니다. 실제 변화와 JVP를 비교하는 그림은 같은 출력 좌표축을 사용하며, 자동 조절되는 양의 표시 한계를 숫자로 보여줍니다.

중앙차분 표시는 다음 방향미분을 추정합니다.

F(p+εd)−F(p−εd)2ε.\frac{F(p+\varepsilon d)-F(p-\varepsilon d)}{2\varepsilon}.

이 식의 대상은 JdJd이지 유한 변화 F(p+d)−F(p)F(p+d)-F(p)가 아닙니다. 이 예제의 이차 출력은 정확한 산술에서 중앙차분과 일치하지만 부동소수점 오차가 남을 수 있습니다. 일반 비선형 함수에는 절단 오차도 있습니다. dd를 바꾸는 실험과 ε\varepsilon을 바꾸는 검산의 목적을 구분하세요.

연습과 다음 연결

  1. (1,2)T(1,2)^T에서 JJ와 J(1,0)TJ(1,0)^T를 구하세요. 확인: J=[[2,1],[2,1]]J=[[2,1],[2,1]], 곱은 (2,2)T(2,2)^T입니다.
  2. 기준점에서 q=(1,1)Tq=(1,1)^T로 바꾸세요. 확인: JTq=(7,3)TJ^Tq=(7,3)^T입니다.
  3. 나머지 식을 직접 전개하고 두 이차항이 어떤 연산에서 생기는지 설명하세요.
  4. 입력 nn개, 출력 mm개인 모형에서 코드를 쓰기 전에 J,d,q,Jd,JTqJ,d,q,Jd,J^Tq의 차원을 적으세요.

미적분 배경은 MIT OpenCourseWare: Multivariable Calculus를, 역방향 자동미분의 구현 관점은 PyTorch Autograd mechanics를 참고하세요. 다음 단원에서는 이 국소 곱을 이용해 작은 신경망의 모든 매개변수 기울기를 직접 구합니다.

CHECK YOUR UNDERSTANDING

설명할 수 있나요?

실험 설정과 무관한 기준 예제를 묻습니다. 답을 고르고 설명을 확인해보세요.

1. F(x,y)=(xy,x²+y)의 (2,3)에서 Jacobian은?
2. 출력 가중치 q로 L=qᵀF를 정의하면 입력 기울기는?

선택한 답과 학습 표시는 이 브라우저에 저장됩니다. 다시 풀거나 표시를 해제할 수 있습니다.