본문 바로가기

분류 전체보기151

LTI 시스템 - 선형 LTI는 Linear Time-Invariant의 약자다. 선형이고 시불변이라는 뜻이다. 따라서 "LTI 시스템"은 선형 시불변 시스템의 줄인 말이다. 컨볼루션을 얘기하다가 왜 갑자기 LTI 시스템이냐 라고 생각할 지도 모르겠다. LTI 시스템에서 컨볼루션 정의가 나오기 때문이다. LTI 시스템 뿐 만 아니라 확률론 등에서도 나오지만, CNN의 컨볼루션은 LTI 시스템에 나오는 컨볼루션이다. 그럼 선형 시스템이 무엇인지, 시불변 시스템이 무엇인지 알아보자. 먼저, 시스템이란 어떤 입력에 대해서 반응하여 동작하는 장치나 구성품의 집합을 뜻한다. 시스템의 반응을 출력 또는 응답이라고 한다. 시스템은 꼭 물리적인 장치나 구성품 또는 하드웨어일 필요는 없고, 알고리즘 또는 소프트웨어일 수도 있다. 아니면 사회경.. 2020. 7. 21.
컨볼루션(convolution)이란 딥러닝의 성공은 컨볼루션 신경망(CNN, convolutional neural network)의 성공 덕분이라고 할 정도로 CNN은 딥러닝에서 중요한 위치를 차지하고 있다. CNN이 널리 알려지면서 컨볼루션은 딥러닝을 접해본 사람에게는 일반적 용어가 된 것 같다. 사실 컨볼루션이라는 용어는 딥러닝에 문외한이더라도 공업수학, 자동제어, 신호처리 등을 공부한 사람에게는 매우 익숙한 용어다. 이런 과목을 통해 컨볼루션을 접해본 사람에게는 CNN에서 이야기하는 컨볼루션 연산을 보면, “이건 컨볼루션이 아니라 상관도(correlation)인데...”라고 할 지도 모르겠다. CNN을 처음 공부하면 으레 나오는 설명이 있다. CNN은 완전연결(FC, fully connected) 신경망과 비교하여 차별성이 있는데, .. 2020. 7. 20.
정정(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.