본문 바로가기

전체 글324

LTI 시스템과 컨볼루션 이제 선형 시불변(LTI) 시스템을 알았으니 LTI 시스템에 임의의 입력 \( x[n] \) 을 가했을 때 출력 \( y[n] \) 이 어떻게 계산되는지 알아보자. 그 전에 먼저 특별한 입력 신호인 임펄스(impulse) 신호에 대해 알아보자. 임펄스 신호는 \( n=0 \) 일 때만 크기가 1 이고, \( n \ne 0 \) 에서는 크기가 모두 0 인 신호다. 기호로 \( \delta [n] \) 라 쓴다. 크기가 1 이므로 단위 임펄스라고 하기도 한다. 임펄스를 수식으로 표현하면 다음과 같다. \[ \delta [n]= \begin{cases} 1, & \mbox{if }n=0 \\ 0, & \mbox{if }n \ne 0 \end{cases} \] 그림으로 표현하면 다음과 같다. 임펄스 신호를 오른.. 2020. 7. 23.
특이값 분해(SVD)의 증명 어떤 \( m \times n \) 실수 행렬(real matrix) \( A \)와 그 전치 행렬 \( A^T \)의 행렬곱 \( AA^T \)와 \( A^T A \)는 대칭행렬이며 준정정 행렬(positive semi-definite matrix)이다. 먼저 대칭행렬인지 확인해 보자. 행렬곱을 전치한 다음에 원래 행렬과 같은 지 확인하면 된다. \[ (AA^T )^T=AA^T, \ \ \ (A^T A)^T=A^T A \] 그렇다면 \( AA^T \)이 준정정 행렬인지 확인해 보자. 어떤 벡터 \( \mathbf{x} \)에 대해서 다음 부등식을 만족하는지 확인하면 된다. \[ \begin{align} \mathbf{x} ^T (AA^T ) \mathbf{x} &= (A^T \mathbf{x} )^T .. 2020. 7. 23.
특이값 분해(singular value decomposition) 행렬을 다른 여러 개의 행렬의 곱으로 쪼개는 것을 분해(decomposition)라고 한다. 행렬의 분해로는 고유값 분해(eigen decomposition), 촐레스키 분해(Cholesky decomposition), LU 분해(lower-upper decomposition), 특이값 분해(singular value decomposition) 등 여러가지가 있지만 그 중에서도 가장 중요한 것이 SVD라고 불리는 특이값 분해가 아닐까 싶다. 특이값 분해는 이미지 압축, 모델의 차원 축소, 근사해 계산, 웹서치, 제어분야에서 액추에이터와 센서의 최적 위치를 선정하는 문제, 제어력 할당 문제 등 매우 폭넓게 응용되고 있기 때문이다. 고유값이 행과 열의 갯수가 같은 정방 행렬(square matrix)에서만 .. 2020. 7. 23.
정정(positive-definite) 행렬의 고유값 실수 대칭행렬(real symmetric matrix)의 고유값(eigenvalue)과 고유벡터(eigenvector)는 모두 실수값이다. 또한 서로 다른 고유값에 해당하는 고유벡터는 서로 직각이다. 증명하기는 다소 어렵지만 실수 대칭행렬의 경우에는 서로 다른 고유값 뿐만 아니라 같은 고유값에 대응하는 고유벡터가 여러 개일 경우에도 그 고유벡터들은 서로 직각이다. 정정 행렬도 실수 대칭행렬이므로 고유값과 고유벡터는 실수값을 가지며, 고유벡터들은 서로 직각이다. 이에 덧붙여서 정정 행렬의 고유값은 모두 0보다 크다. 증명해 보자. 정정 행렬 \( A \)의 고유값을 \( \lambda \), 그에 대응하는 고유벡터를 \( \mathbf{v} \)라고 하면, \[ A \mathbf{v} = \lambda \.. 2020. 7. 21.
LTI 시스템 – 시불변 이번에는 시불변(time-invariant) 시스템이 무엇인지 알아보자. 시불변 시스템은 시스템의 입력 싯점에 따라 시스템의 출력이 바뀌지 않는 시스템을 말한다. 예를 들어서 ‘어제’ A라는 패턴을 갖는 신호를 시스템에 입력으로 주었더니 B라는 출력 신호가 나왔다고 했을 때, ‘오늘’ 동일한 A라는 입력 신호를 시스템에 가했더니 '어제'와 동일한 B라는 출력 신호가 나왔다면 그 시스템은 시불변 시스템이다. 만약 ‘어제’와 동일한 입력 A에 대해서 ‘오늘’은 C라는 출력이 나왔다면 시변(time-varying) 시스템이라고 한다. 시불변 시스템을 수식으로 표현하면 다음과 같다. \( y[n] = \mathbb{F}(x[n]) \) 일 때, \( y[n-n_0] = \mathbb{F}(x[n-n_0]) \).. 2020. 7. 21.
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.