Tuesday, August 15, 2017

Gradient, Jacobian, Hessian, Laplacian, eigenvector, eigenvalue 개념

요약

  • Gradient : (다변수 함수 f에 대한) 각 변수에 대한 1차 미분
  • Jacobian : 1차 미분
  • Hessian : 2차 미분
  • Laplacian: 2차 편미분값의 합

Gradient

  • (다변수 스칼라 함수 f에 대한) 1차 미분을 통해, 함수 f의 값이 가장 가파르게 변하는 방향 및 크기(=기울기)를 표현
    • 어떤 함수를 local하게 linear approximation할 경우
    • gradient descent 방식으로 최소값(또는 최대값) peak를 찾을 경우
    • 영상 입력의 edge 및 edge 방향을 찾을 경우.

Jacobian

  • Jacobian matrix: the matrix of all first-order partial derivatives of a vector-valued function (= 다변수 벡터 함수에서의 1차 미분값을 나타내는 행렬
    • 미분 기울기를 구할 때, $\Delta x$ 후의 $y$값을 선형 근사하여 예측하는 것과 비슷한 원리
    • 복잡하게 얽혀있는 식을 (미분을 통해 linear approximation시킴으로써) 간단한 근사 선형식으로 만들어주는 것
    • 비선형 연립방정식의 해를 구할 때도 활용됨.
  • Gradient는 단일 변수 함수의 1차 미분을 다변수 함수로 확장한 개념이라면, Jacobian은 이를 다시 다변수 벡터 함수로 확장 적용한 개념임.
  • 벡터 함수 vs 스칼라 함수
    • 벡터 함수: 결과값이 다차원인 함수
    • 스칼라 함수: 결과값이 1차원 값인 함수
      • 스칼라 = 크기만 있고 방향을 가지지 않는 양

Hessian

  • 함수의 곡률(curvature)를 나타내는 행렬
    • 2차 편미분값의 행렬
    • symmetric matrix(=편미분의 순서가 바뀌어도 결과 동일)이므로, 항상 고유값 분해가 가능; 서로 수직인 n개의 고유벡터를 가짐.
  • 함수의 1차 미분값이 0이 되는 지점(=critical point=stationary point=peak)의 종류가 {saddle point, 극대점, 극소점} 중 어떤 종류인지를 구별하기 위해, 2차 미분값을 구하여 계산할 수 있음
    • critical point에서 계산한 Hessian matrix의 고유벡터(eigenvector)는 함수의 곡률이 큰 방향 벡터를 나타냄
    • critical point에서 계산한 Hessian matrix의 고유값(eigenvalue)은 함수의 곡률(2차미분값)을 나타냄
      • 모든 고유값이 positive = 극소점
      • 모든 고유값이 negative = 극대점
      • 고유값에 posive & negative 포함 = saddle point(안장점) 
  • 영상 입력에 대한 Hessian은 픽셀의 밝기를 나타내는 함수로 활용됨.

Laplacian

  • 각 변수로의 2차 편미분 값의 합
  • 영상 입력에서의 픽셀 밝기를 나타내는 함수로 활용됨
    • +, - 값을 0~255 사이의 값으로 scale하면 급격한 이미지 밝기 변화를 찾는 필터 효과.
  • vs Gradient
    • Gradient의 크기값은 영상의 밝기 변화가 급격할 수록 큰 값을 나타냄
    • Laplacian의 크기값은 {영상 밝기 변화}의 변화가 급격할 수록 큰 값을 나타냄. 즉, 밝기 변화의 속도가 일정하다면, 작은(0에 가까운) 값을 가짐. 
      • 영상의 밝기 변화가 평면형(planar)를 이룰 때 최소값을 가지며, 극대/극소점에서 처럼 모든 방향으로의 밝기 변화가 심할 때 최대값을 가짐 -> blob이나 corner point 를 찾는 용도로 활용 가능.

Other

  • 영상 특징점 추출방법 (2014.04)
  • Image scale 다루기 (2014.05)
    • 영상 입력에서의 개체 특징을 계산함에 있어 다중의 크기(multi-scale)를 고려하여 분석하기
      • 방법1) image pyramid: 이미지를 단계적으로(예: 1.05배 또는 1.1배씩) 축소시켜 생성된 이미지들의 집합에 대해 (고정 크기의) sliding window(=filter=kernel)을 이용하여 특정 개체 존재 여부를 판단하는 기법
      • 방법2) scale space: 대상이 가질 수 있는 다양한 스케일의 범위를 한꺼번에 활용하고자, Gaussian blurring으로 smoothing된 이미지들을 이용. ->  scale parameter(=sigma) 값이 높아질 수록 blur 정도가 높아져서 흐릿한 이미지가 생성됨. -> 이미지의 blur 정도가 높아지면 세부적인 detail이 사라지고, 보다 큰 scale에서의 이미지 구조를 파악할 수 있다고 함.
      • 기타 방법) Gaussian Pyramid: bluring과 sub-sampling을 반복하여 입력을 1/2씩 축소하여 피라미드를 생성하는 방식. -> scale 변화가 매우 coarse하게 sampling하는 방식이므로 연산 비용 및 시간 단축되나, 개체 비교/매칭이 다소 어려워진다고 함. 
  • eigenvalue, eigenvector (2013.10)
    • eigenvector : (n x n정방행렬 = 선형 변환) $A$에 의한 변환 결과가 자기 자신의 (0이 아닌) 상수배가 되는 벡터 $v$
      • 이 때의 상수배 값을 eigenvalue(고유값)이라고 정의함.
      • $Av = \lambda v$ ($\lambda \neq 0$)
      • 결국, 주어진 선형 변환에 의해 방향이 보존되는 방향 벡터를 의미함 (예를 들어, 지구의 자전운동에 해당하는 회전변환의 경우, 회전변환에 의해 변화하지 않는 회전축을 고유벡터로 간주될 수 있음)
        • 선형변환이 일어나더라도 방향이 변하지 않는 벡터.
      • 예를 들어, 그림을 선형변환 시켰을 때, 변화하지 않는 축 방향의 벡터로 볼 수 잇음.
    • eigendecomposition (고유값 분해)
      • $AP=P\Lambda$ -> $A=P\Lambda P^{-1}$ 
      • 정방 행렬 $A$를 eigenvector 행렬($P$)와 eigenvector 행렬($\Lambda$)을 이용한 행렬 곱으로 대각화 분해하는 기법.
      • 고유값분해를 이용할 경우, A의 행렬식(determinant=선형변환의 scale 및 방향), A 거듭제곱, 역행렬, 대각합(trace), 행렬 다항식을 손쉽게 계산할 수 있다고 한다.
    • eigenvector 개념에 대해서 가장 잘 설명한 블로그

Wednesday, August 9, 2017

Kalman Filter (칼만필터) 개념

Kalman filter

  • linear quadratic estimation (LQE)
  • (잡음 또는 불확실성이 암묵적으로 포함된 환경에서) 측정된 데이터를 기반으로 통계적 예측을 수행하는 알고리즘. optimal recursive processing algorithm.
    • 예) 자율 주행차의 경우, 차량 및 보행자의 미래 위치를 예측하는 데 활용.
    • 예) 시스템의 상태를 추적하거나 추정하는 데 활용.
    • 따라서, (가우시안 에러를 고려하여) 예측하고자 하는 값의 평균과 분산을 고려한 예측치를 도출하고 있음.
    • 바로 직전 시점에서 추정된 상태와 현재의 측정값을 바탕으로 현재 상태를 예측하는 방식
  • 현재 상태 예측 + 업데이트(현재 상태에서 관측된 측정까지 포함한 값을 통한 예측)
    • prediction/motion updates: convolution 수행
    • measurement updates: 베이즈 규칙을 활용하여, prior 업데이트. 즉, 가우시안의 평균값과 분산값을 업데이트.
  • 측정값에 포함된 (확률에 기반한다고 전제된) 잡음을 제거함으로써 원하는 신호나 정보를 골라내고자 함. 
    • (통계적인 잡음이 포함된) 시계열로 측정된 값에, Baysian inference를 적용하여 변수들의 joint 확률 분포를 추정하는 방법 
    • 비행기, 우주선, 로봇, 미사일의 운항 및 제어에 주로 활용됨.
    • 과거와 현재값을 가지고, recursive 연산을 통해, 다음의 순간에 대한 최적 예측값을 추정하는 것.
    • 수학적으로는 linear system(선형 시스템)의 상태를 예측해서 발생할 수 있는 오류를 최소화하면서 예측을 하는 방식
      • linear system: 시스템을 모델한 수식이 linear operator로 표현이 가능한 시스템
  • 관련 자료
  • Kalman gain = 새로운 측정값을 얼마나 반영하여 추정값 업데이트에 활용할 지를 결정하는 계수. 값이 1에 가깝다면, 측정값이 정확하다는 것을 의미하는 대신, 추정값이 unstable함을 나타냄. 즉, 새롭게 측정되는 값에 의해서, 예측값이 크게 변동한다는 것임. 반대로, 값이 0에 가깝다면, 추정값이 안정적이며, 새롭게 측정되는 값을 상대적으로 적게 반영해서 예측하겠다는 것임. 궁극적으로는 K 값이 작은 상태로 수렴해야, 예측값이 안정적으로 나올 수 있음을 의미함.
    • 상태 변화에 대해서는 State Covariance 및 Measurement Covariance Matrix가 이용됨.
    • 선형(LKF)보다는 비선형에 대한 EKF(Extented) 또는 UKF(Unscented)가 많이 활용됨.

Wednesday, August 2, 2017

Coherence, Cross Spectrum, Random Process 개념

Cross power spectrum

  • Wiki
    • Cross spectral density (CSD) = cross power spectrum = cross-correlation 함수의 fourier transform 
      • 따라서, PSD는 CSD의 특수한 경우($x(t)=y(t)$)라고도 볼 수 있음.
    • 연관된 개념: Total signal power, $R(0)$ = PSD 아래의 면적 = zero lag에서의 autocorrelation = 신호를 구성하는 데이터의 variance.
  • 의미
    • 두 개의 신호가 있을 때, (각 주파수 별로) 한 쪽 신호가 다른 쪽 신호에게 얼마나 많은 linear information을 전달하는 지에 대한 지표를 나타냄

Coherence

  • Wiki
    • Spectral coherence: 두 개의 신호(또는 데이터 집합) 사이의 관계를 나타내는 통계치; 0에서 1사이의 값으로 표현됨.
      • 즉, 두 개의 신호가 존재할 때, (주파수 차원에서) 한쪽 신호의 변화가 다른쪽 신호의 변화에 '선형적으로' 얼마나 영향을 미치는 지 판단할 수 있음; 선형 시스템에서 외부 잡음이 없다면, 해당 값은 1이 될 것임.
      • 만약 값이 0이라면, 두 신호는 전혀 관련되어 있지 않은 것을 나타냄.
      • 다음의 coherence 식은 때때로 magnitude-squared coherence (MSC)라고도 불림 (MathWorks 설명 참조). 한편, MSC를 계산할 때, 모든 주파수에서 1로 동일한 값을 얻는 상황을 방지하기 위해, averaged MSC estimator을 사용해야 한다고 함 (예: WOSA). 
$$ C_{xy}(f) = \frac{\left |G_{xy}(f)  \right |^2}{G_{xx}(f)G_{yy}(f)} $$
    • 의미
      • 선형 시스템에서 Input과 output 간의 power transfer 추정에 사용되어 왔음. 
      • Ergodic 신호에 대해서라면, Input과 output 간의 인과관계 추정도 가능함.
      • 그러나, 두 신호의 관계가 선형적이지 않을 경우의 coherence 값은 erroneous 하게 됨.
      • 또한, Input/output 의 causal 관계 해석에 있어 혼동될 여지가 있을 수 있음을 주의할 필요.
      • 다른 한편, 어느 주파수 대역에서 두 신호가 가장 선형적인 관계가 되는 지 찾아볼 수도 있음.
      • 수식으로 살펴보자면, coherence는 각 신호의 spectrum을 이용한 "normalized" cross spectrum으로 볼 수 있음.

    Random processes

    • Random process > Wide-sense Stationary > Stationary > Ergodic
    • 주요 개념
      • Random process (= stochastic process)
        • 무한히 많은 random variables의 집합; 일반적으로는 random variables을 시간 함수로 확장한 것을 의미함(확률 변수가 시간적으로 전개되는 과정).
      • WSS Random process
        • 어느 시점에 구하던지, 평균(1차 평균)과 자기 상관함수(2차 평균)이 일정한 경우
      • Stationary process
        • 시간에 따라 통계적 특성이 변하지 않는 random process; N차 통계에 대해 모두 시간 축의 이동에 무관할 경우 Strictly Stationary.
      • Ergodic process
        • 어떤 함수에 대해서도 앙상블 평균(시간을 고정시켜놓고 무한 개의 샘플함수로 계산한 것)이 시간 평균(임의의 샘플 함수를 선택해서 무한대의 시간에서의 구한 경우)과 같은 경우의 random process
    • 참고 블로그

    Tuesday, June 20, 2017

    MySQL on Ubuntu 16.04

    우분투 16.04에 MySQL 최신버전 설치하기

    • 참고 사이트: https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04
    • 설치 방법:
    $ sudo apt-get update
    $ sudo apt-get install mysql-server
    $ sudo mysql_secure_installation

    • 설치 확인(MySQL은 설치되면 자동으로 시작된다.)
      • 방법1: 
    $ systemctl status mysql.service
      • 방법2:
    $ /etc/init.d/mysql status
    $ mysql -uroot -p -e'show databases'

    • 삭제방법
    (optional) $ sudo apt-get remove dbconfig-mysql
    $ sudo apt-get purge mysql*
    $ sudo apt-get autoremove
    $ sudo apt-get autoclean
    • lightweight GUI client
      • emma @ Ubuntu Software center
        • cf. HeidiSQL(Windows), Sequel Pro(MAC)

    Tuesday, June 13, 2017

    Variational Inference 개념

    VAE 논문을 읽다가 해당 개념을 찾아보게 되었다.
    • 목적: 
      • to approximate an intractable probability distribution, $p$, with a tractable(다루기 쉬운) one, $q$, in a way that makes them as ‘close’ as possible.
        • 복잡한 분포(distribution)을 조금 더 간단한 형태의 분포로 근사하여 쉽게 풀어보자는 것.
      • observation data가 주어져 있을 때 hypothesis에 대한 latent variable을 찾아야 하는 통계적 추론 문제(statistical inference problem)를 최적화 문제(optimization problem)로 re-write할 수 있다는 의미가 있음.
        • DL과의 연계성 측면: 대량 데이터의 다차원 공간에 대해 (경사 하강법 등 이용해서) 최적화 문제를 잘 풀 수 있다.
    • 이름의 어원: 
      • posterior(사후 확률 분포)를 가장 잘 설명하는 특정 분포를 찾아나가는(calculus of variations) 과정.
    • 참고: Quora Answer (by S. Wang, 2015 Mar.)
      • {세미나 시간에 질문자가 던진 꽤 어려운 질문이 있을 때, 발표자가 해당 질문을 손쉽게 conveniently reframe함으로써, 원래의 어려운 질문을 직접 대답하는 대신 reformulated question에 정확한 답을 주는 상황}을 떠올려 보자.
    • 참고: Variational Methods 소개(by E. Jang, 2016 Aug.)
      • 수식 표기가 정확하고, 개념적으로 친절하게 설명되어 있음
      • 고양이 이미지 분류 예시를 통해 posterior, likelihood 설명함.
    • 참고자료: 확률에 대한 개념 요약
      • 기계학습에 확률 $p(x)$을 도입하기 위해서는 실수 벡터를 입력으로 받아서 실수값을 출력하는 '함수'로 간주하면 조금 더 이해가 편할 것으로 생각됨; 따라서 distribution 또한 어떠한 파라미터를 가진 확률 함수 $p(x;\theta)$로 볼 수 있을 듯. 
    통계/수학 문제에서 posterior를 직접 계산하기 어려운 경우가 많다. (because the normalization constant is intractable.) 즉, $X$가 observation 집합, $Z$가 latent variable 집합을 나타낸다고 하면, posterior $P(Z|X)$를 구하고 싶지만, 다음 식의 분모(denominator) 부분을 직접 계산하기 어려울 때가 많다.
    $$P(Z|X)=\frac{P(Z,X)}{\int_{Z}P(Z,X)}$$
    • 접근 방안 1: MCMC를 이용해서 샘플링을 하는 방식; 만약 샘플링을 해야하는 parameter 개수가 많아질 경우, convergence가 매우 느려진다(slow to converge).
      • Markov chain Monte Carlo
    • 접근 방안 2: true posterior $P(Z|X)$를 approximate함으로써 손쉽게 계산한다. 이때, $V$를 approximate variational distribution의 parameter라고 하면 다음의 식으로 표현된다.
      • Bayesian model의 posterior distribution에 variational inference를 적용하는 것을 variational Bayes (VB)라고 부르기도 한단다.
        • a family of techniques for approximating intractable integrals arising in Bayesian inference and machine learning
    $$P(Z|X)\approx Q(Z|V)=\prod_{i}Q(Z_{i}|V_{i})$$
    • 여기에서, (실제로 latent variables $Z$는 $X$와 independent하지 않을 수도 있지만,) 'mean field' approximation(평균 장 어림법, 평균 장 점근법)을 전제한다면(to restrict the family of variational distributions to a distribution that factorizes over each variable in $Z$), 문제를 더욱 쉽게 계산할 수 있다. 
      • $Z$가 서로 겹치지 않는(independent) 부분 집합 ${Z_1, \dots, Z_M}$으로 구성되어 있을 때, 전체 $Q(Z)$ 또한 각 부분집합의 $Q(Z_i)$으로 factorization 된다는 가정
    $$Q(Z|V)=\prod_{i=1}^{M}Q(Z_i|V_i)$$
    이제, Kullback Leibler (KL) divergence를 이용해서, $Q(Z|V)$가 최대한 $P(Z|X)$에 가까워지는 $V_{i}$를 계산할 수 있다.

    $$\begin{eqnarray*}
    V^{*} &=& arg\min_V D_{KL}(Q(Z|V)||P(Z|X)) \\
    &=& arg \min_V \sum Q(Z|V)log\frac{Q(Z|V)}{P(Z|X)}
    \end{eqnarray*} $$

    따라서, estimation 문제가 최소값을 찾아야하는 optimization 문제로 바뀌었고, $V^{*}$를 찾게되면, $Q(Z|V^{*})$를 posterior에 대한 best guess로 사용하도록 한다.
    $$ \begin{eqnarray*}
    D_{KL}(Q||P) &\equiv& \int Q(Z)log\frac{Q(Z)}{P(Z|X)} = \mathbb{E}_Q(log\frac{Q(Z)}{P(Z|X)})\\
    &=& \int Q(Z)log\frac{Q(Z)}{P(Z,X)} +\int Q(Z)log(P(X)) \\
    &=& \int Q(Z)log\frac{Q(Z)}{P(Z,X)} + log(P(X))
    \end{eqnarray*}$$
    • $log(P(X))$를 중심으로 decompose하면 다음과 같다.
    $$\begin{eqnarray*}
    log (P(X)) &=& log\frac{P(Z,X)}{P(Z|X)} \\
    &=& log\frac{Q(Z)}{P(Z|X)}+log\frac{P(Z,X)}{Q(Z)}
    \end{eqnarray*}$$

    $$\mathbb{E}_Q(log (P(X))) = \mathbb{E}_Q(log\frac{Q(Z)}{P(Z|X)}+log\frac{P(Z,X)}{Q(Z)})$$
    • $log(P(X))$는 Q(Z)에 대해서 constant 하므로 다음과 같이 표현된다. 또한, $D_{KL}$은 nonnegative이므로, 두번째 항이 $log(P(X))$의 lower bound 또는 ELBO (evidence lower bound) $\mathcal{L}$라고 불린다. 그리고, 첫번째 항을 최소화하기 위해서는 결국 두번째 항을 최대화할 필요가 있다.
    $$\begin{eqnarray*}
    log (P(X)) &=& D_{KL}(Q||P) + \mathbb{E}_Q(log\frac{P(Z,X)}{Q(Z)}) \\
    &=& D_{KL}(Q||P) + \mathcal{L}
    \end{eqnarray*}$$

    • 이제, ELBO $\mathcal{L}$은 다음과 같이 전개된다.

    $$\begin{eqnarray*}
    \mathcal{L} &=& \mathbb{E}_Q ( \log{P(Z,X)} -\log{Q(Z)}) ) \\
    &=& \mathbb{E}_Q ( \log{P(X|Z)} + \log{P(Z)} -\log{Q(Z)}) ) \\
    &=& \mathbb{E}_Q ( \log{P(X|Z)} + \log{\frac{P(Z)}{Q(Z)}} ) \\
    &=& \mathbb{E}_Q ( \log{P(X|Z)} ) + \int Q(Z)log\frac{P(Z)}{Q(Z)}
    \end{eqnarray*}$$

    Tuesday, March 14, 2017

    apt remove vs purge (to delete a Ubuntu package)

    In order to remove and re-install a package

    • $ sudo apt remove --purge {package}
      • or $ sudo apt purge {package}
    • $ sudo apt clean
    • $ sudo apt install {package}

    Difference betweeb remove and purge

    • Reference
      • http://askubuntu.com/questions/231562/what-is-the-difference-between-apt-get-purge-and-apt-get-remove
    • remove: Packages installed are removed (Does NOT include configuration files)
    • purge:  Identical to remove except that any configuration files are deleted too.
      • However, any configuration files inside the user's home folder(/home) will not be touched. Only the files under /etc will be deleted by using purge

    Removing ppa

    • Reference
      • https://websetnet.com/ko/remove-ppa-ubuntu-linux/
    • $ sudo apt-add-repository --remove ppa:{ppa information}

    Sunday, April 19, 2015

    Node.js 다루기

    $ sudo apt-get update
    $ sudo apt-get install nodejs npm

    만약 node라는 명령어를 인식하지 못한다면, 다음 파일 수정해서 PATH 설정
    >> /etc/environment

    oracle jdk 설치
    eclipse J2EE 설치
    eclipse 플러그인: Aptana Studio 3 plugin 설치

    대표적 npm 확장 모듈
    - nodemon: 노드 실행 파일 변경시 노드 애플리케이션을 재시작. node 대신 nodemon으로 실행하면 된다.
    - forever: 노드 실행 프로세스 유지. 잘못된 요청이나 실행 도중 오류 때문에 중지되더라도 재시작됨
    - expresso: TDD 지원 프레임워크
    - express: (경량화) 웹 개발 프레임워크. "express [프로젝트 디렉토리]"로 프로젝트 생성. 다음과 같은 명령어로 의존모듈 설치 가능
    >> $ cd [프로젝트 디렉토리] && (sudo) npm install
    - Jade: 뷰 템플릿 엔진. indenting을 통해 계층 구조 표현.
    - Socket.IO: 실시간 웹 앱 개발
    >> sudo npm install socket.io -g
    - commander: 노드 명령줄 도구 개발
    - Vows: BDD 지원 프레임워크
    - node-inspector: 디버깅 지원 도구. node-jscoverage 포함(코드 커버리지 확장 모듈 포함)
    - everyauth: 다양한 인증 서비스 지원
    - 압축관련: node-zip, UglifyJS
    - 로그와 성능 분석: log.io, Nodetime

    * nohub: 리눅스에서 백그라운드 실행시키는 명령. hang-up signal이 발생해도 스크립트 동작이 멈추지 않음
    >> nohub node ./server.js &

    JxCore : js 패키징/배포/실행

    $ sudo npm install [모듈명] (-g)
    $ npm list (-g)
    $ npm update [모듈명]
    $ npm uninstall [모듈명]

    npm registry 사이트: npmjs.org

    데이터 다루기
    - NoSQL 다루기: mongoose, mongolian
    - SQL 다루기: node-mysql
    - redis 다루기: redis (hiredis: 비동기 빠른 모듈)

    * 오픈소스 자바스크립트 코드/텍스트 에디터 프로젝트
    - ACE: ace.ajax.org
    - CodeMirror: codemirror.net

    Windows 10 High DPI 에서 Java application의 Font 조절

    Reference:  How do I run Java apps upscaled on a high-DPI display?  @superuser.com Summarize 1) Find java.exe you installed.  2) Righ...