본문 바로가기

Tensor4

벡터 함수를 행렬로 미분하기 다변수 스칼라 함수를 벡터로 미분한 것을 그래디언트(gradient), 벡터 함수를 벡터로 미분한 것을 자코비안(Jacobian), 스칼라 함수를 벡터로 두 번 미분한 것을 헤시안(Hessian)이라고 한다. 이번에는 스칼라 함수를 행렬로 미분해 보자. \( X=\begin{bmatrix} x_{11} & \cdots & x_{1n} \\ \vdots & \ddots & \vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n}\) 가 행렬이고 스칼라 함수 \(f(X)\)가 주어졌을 때 \(f(X)\)에 대한 \(X\)의 미분은 다음과 같이 정의한다. \[ \frac{d f}{d X} = \begin{bmatrix} \frac.. 2021. 3. 27.
텐서와 변수 - 3 Tensorflow의 변수와 텐서와의 결정적인 차이는 가변성(mutability)이다. 변수는 값을 업데이트할 수 있지만, 텐서는 값을 변경할 수 없으며 새로운 텐서를 생성할 수 있을 뿐이다. 가변성이 무엇을 말하는지 구체적으로 알아보자. 다음 코드를 보자. a0 = tf.constant(2) a1 = a0 print(a0) print(a1) 이렇게 하면 a0라는 이름은 2라는 텐서 객체가 저장된 메모리의 위치를 가리킨다. a1도 a0와 동일한 메모리의 위치를 가리킨다. Output: tf.Tensor(2, shape=(), dtype=int32) tf.Tensor(2, shape=(), dtype=int32) 그런데 a1에 덧셈 연산을 하면 a1은 연산 결과인 3을 저장한 다른 메모리 위치를 가리킨다... 2021. 2. 11.
텐서와 변수 - 2 Tensorflow의 텐서는 일정한 데이터 타입(dtype이라고 함)을 가진 다차원 배열이다. numpy의 ndarray과 매우 유사하지만 변경이 불가능하다. 즉, 텐서는 생성된 후에는 변경할 수 없는 상수(constant)다. 모델에서 텐서를 추출할 수도 있지만 모델에 관계없이 직접 텐서를 생성할 수도 있다. 먼저 몇 가지 Tensorflow 함수를 이용해서 텐서를 생성해 보자. 다음은 tf.constant를 이용한 텐서의 생성 예다. a0 = tf.constant(2) a1 = tf.constant([1.0, 2.0]) a2 = tf.constant([[1, 2, 3], [4, 5, 6]]) a3 = tf.constant([ [ [1.0], [2.0] ], [ [3.0], [4.0] ], [ [5.0.. 2021. 2. 10.
텐서와 변수 - 1 신경망은 일종의 수학 함수다. 입력 데이터를 신경망에 주면 각 레이어를 거치면서 여러가지 연산을 거쳐서 출력 데이터가 산출된다. 신경망 모델에 입력과 출력이 있듯이 모델 내부의 각 레이어에도 입력과 출력이 있다. 각 레이어의 입력은 신경망의 가중치(weight) 또는 파라미터와 벡터/행렬 연산을 거쳐서 출력을 산출하게 된다. 신경망의 파라미터는 학습을 시작하면 최적화 알고리즘에 의해서 그 값이 변경되고 반복적으로 업데이트 된다. 이와 같은 반복적인 업데이트를 통해서 목적함수를 최적화하도록 신경망의 파라미터를 계산하는 것이 딥러닝의 핵심이다. 텐서(tensor)는 Tensorflow에서 사용하는 데이터 구조로서 다차원 배열(n-dimensional array)이다. Tensorflow 프로그램에서는 모든 .. 2021. 2. 9.