본문 바로가기

전체 글159

정정(positive-definite) 행렬이란 다음과 같은 행렬 부등식을 가끔 볼 수 있다. \[ A>0 \] 행렬 \( A \)가 0 보다 크다는 이야기인 것 같은데 ‘크다’ 또는 ‘작다’는 실수값에 대해서나 하는 이야기이지 어떻게 행렬에 대해서 말할 수 있을까. 혹시 행렬 \( A \)의 모든 성분이 0보다 크다는 것을 의미하는 것일까? 아니다. 위 식은 행렬 \( A \)가 정정 행렬(positive-definite matrix)이라는 것을 나타내는 기호이다. 부등호에 등호를 함께 쓴 다음 식은 행렬 \( A \)가 준정정 행렬(positive semi-definite matrix)이라는 것을 나타내는 기호이다. \[ A \ge 0 \] 그렇다면 정정 행렬이란 무엇인가. 성분이 모두 실수이고 대칭인 \( n \times n \) 정방(squar.. 2020. 7. 20.
실수 대칭행렬의 고유값과 고유벡터 행렬의 성분이 모두 실수(real number)이고 대칭인 행렬을 실수 대칭행렬이라고 한다. 일반적인 행렬에서 고유값(eigenvalue)과 고유벡터(eigenvector)는 복소수 값을 가질 수 있다. 하지만 실수 대칭행렬의 고유값과 고유벡터는 모두 실수값이다. 또한 서로 다른 고유값에 해당하는 고유벡터는 서로 직각이다. 이를 증명해 보자. 먼저 \( n \times n \) 정방 행렬 \( A \)의 고유값과 고유벡터는 다음과 같이 정의된다. \[ A \mathbf{v}=\lambda \mathbf{v} \tag{1} \] 여기서 \( \lambda \)는 고유값, \( \mathbf{v} 는\) 그에 해당하는 고유벡터다. 켤레 복소수를 사용하면 위 식은 다음과 같이 쓸 수 있다. \[ \bar{A}.. 2020. 7. 18.
고유값과 고유벡터의 정의 행과 열의 갯수가 같은 행렬인 정방 행렬(square matrix)은 선형변환을 나타내는데 사용된다. 좌표변환은 벡터의 크기는 일정하게 유지하며 방향만 바꾸는 변환인데 비해, 선형변환은 벡터의 크기와 방향을 모두 바꾸는 일반적인 변환이다. 좌표변환 행렬로서 방향코사인행렬(DCM)이 있다. ( https://blog.naver.com/pasus/221858887468 ) 정방 행렬 \( A \)로 다음 식과 같이 벡터 \( \mathbf{v} \)를 다른 벡터 \( \mathbf{w} \)로 변환시킬 수 있다. \[ \mathbf{w}=A \mathbf{v} \] 만약 \( A \)가 다음과 같이 주어진다면, \[ A = \begin{bmatrix} 2 & 0 \\ 1 & 3 \end{bmatrix} \].. 2020. 7. 17.
행렬의 덧셈과 곱셈 사이즈가 같은 두 개의 행렬 A와 B의 덧셈은 다음과 같이 각 행렬의 구성 성분 간의 덧셈으로 정의한다. 즉 \( A = [a_{ij}] \)이고 \( B=[b_{ij}] \)일 때, 두 행렬의 덧셈은 \( A+B=[a_{ij}+b_{ij}] \)이다. 예를 들면, \[ A = \begin{bmatrix} 2 & 3 & 1 \\ 5 & -2 & 7 \end{bmatrix}, \ \ \ B = \begin{bmatrix} 1 & -1 & 0 \\ 2 & 4 & 3 \end{bmatrix} \] 일 때, 두 행렬의 덧셈은 다음과 같다. \[ \begin{align} C = A+B &= \begin{bmatrix} 2+1 & 3-1 & 1+0 \\ 5+2 & -2+4 & 7+3 \end{bmatrix} \\ .. 2020. 7. 17.
Sequential API로 간단한 CNN 구현해 보기 TensorFlow2에서 제공하는 모델 구현 API는 크게 3가지 종류가 있다. 신경망 레이어를 순차적으로 쌓아 나가는 방식의 Sequential API, 레이어를 함수형태로 정의하는 Functional API, 그리고 클래스 형으로 모델을 만들 수 있는 Model Subclassing API다. Sequential API는 간단한 모델을 쉽게 구축할 수 있으며, 빈 깡통 모델을 만들어 놓고 순차적으로 레이어를 추가하거나 한꺼번에 순차적인 모델을 구축할 수 있다. Functional API는 복잡한 모델을 구축할 때 유리하며 ResNet과 같이 순차적이지 않은 모델도 구축할 수 있다. Model Subclassing API는 자유도가 제일 높은 모델 구축 방법으로서 사용자 자신의 방법으로 신경망을 만들고.. 2020. 7. 17.
스칼라 함수를 벡터로 두번 미분하기 : 헤시안 스칼라 함수의 그래디언트는 벡터다. 그러면 그래디언트를 벡터에 대해 한번 더 미분한다면 행렬이 될 것이다. 이 행렬은 스칼라 함수를 벡터로 두 번 미분하여 얻어진 것으로 헤시안(Hessian)이라고 한다. 수식으로 알아보자. 벡터 \( {\bf x} = \begin{bmatrix} x_1 & x_2 & ... & x_n \end{bmatrix} ^T \)의 구성요소를 변수로 하는 다변수 스칼라 함수 \( f( {\bf x}) \)를 벡터 \( \bf x \)에 대해 미분하면 다음과 같이 된다. \[ \frac{d f}{d {\bf x} } = \begin{bmatrix} \frac{\partial f}{\partial x_1 } \\ \frac{\partial f}{\partial x_2 } \\ \vd.. 2020. 7. 17.
벡터 함수를 벡터로 미분하기 : 자코비안 벡터 \( {\bf x} = \begin{bmatrix} x_1 &x_2 & ... & x_n \end{bmatrix} ^T \) 의 구성요소를 변수로 하는 다변수 스칼라 함수 \(f(x_1, x_2, …, x_n) \) 을 간단히 \( f( {\bf x}) \) 로 표기했다. 동일한 벡터를 변수로 갖는 스칼라 함수가 여럿 있다면 \( f( {\bf x}) \), \( g( {\bf x}) \), \( h( {\bf x}) \), \(... \) 이렇게 구별할 수 있을 것이다. 그런데 함수가 많다면 함수 이름으로 사용할 알파벳이 동날 것이므로, 보통 함수에 아래 첨자를 써서 그 함수들을 구별한다. 만약 스칼라 함수가 \( m \) 개 있다면, \( f_1( {\bf x}) \), \( f_2( {\bf .. 2020. 7. 16.
스칼라 함수를 벡터로 미분하기 : 그래디언트 대부분의 딥러닝 학습 알고리즘은 손실함수나 목적함수를 만드는 것으로 시작한다. 그리고 손실함수를 최소화하거나 목적함수를 최대화하기 위해 최적화 방법을 사용한다. 손실함수나 목적함수는 신경망 연결값을 변수로 갖는 스칼라 함수다. 이러한 연결값의 갯수는 신경망의 크기에 따라서 수 십 개에서 수 십억 개가 될 수도 있다. 따라서 손실함수나 목적함수는 다변수 스칼라 함수다. 손실함수나 목적함수를 최소화하거나 최대화할 때 필요한 것이 미분이다. 벡터 \( {\bf x} = \begin{bmatrix} x_1 & x_2 & ... & x_n \end{bmatrix} ^T \) 의 구성요소를 변수로 하는 다변수 스칼라 함수 \(f (x_1, x_2, …, x_n ) \) 을 간단히 \( f( {\bf x}) \) 로.. 2020. 7. 16.
행렬과 벡터의 정의 행렬(matrix)과 벡터(vector)는 많은 양의 데이터와 함수 등을 간결하고 체계적으로 표현해 주는 수학적 도구다. 행렬은 함수나 숫자를 직사각형 형태로 배치하고 대괄호(또는 소괄호)로 묶은 배열로 정의한다. 다음은 행렬의 예다. \[ \begin{align} & \begin{bmatrix} 1 & 2 \\ -3.1 & 5 \\ 0 & -0.5 \end{bmatrix} , \ \ \ \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} , \\ \\ & \begin{bmatrix} e^x & x^2 & 2x \\ 4 & 0 & \sin(x) \end{bmatrix} , \ \ \ \begin{bmatrix} 3 \\ 2 \\ 1 \end.. 2020. 7. 15.