Sunwoo Kim's Computer Vision, Machine & Deep Learning Blog search

Signals and Systems-1.1 Taylor series, Euler Function and LTI system

|

1. 테일러 급수(Taylor Series)

2. 매클로린 급수(Maclaurin’s series)

3. 오일러 함수(Euler Function)

3.1 오일러 함수 증명

3.2 복소평면에서 오일러 함수

3.3 왜 오일러 함수인가?

4.LTI system(Linear Time Invariant system)

4.1 Linearity

4.2 Time Invariativity

4.3 왜 LTI system인가?

Comment  Read more

PRML-Introduction(Chapter1)-3

|

1.2 확률론(Probability Theory)

확률론의 기본적인 컨셉을 이용하기 위하여 다음 예제를 살펴보자.

Comment  Read more

Digital Image Processing - DIntensity Transformations and Spatial filtering_2 (chapter3)

|

3.3 Histogram processing

3.3.1 Normalization

전 포스트에서 이미지끼리 연산을 할때, 연산 후 이미지의 범위가 [0-L-1]을 넘지 않도록 스케일링을 하는 방법을 배웠을 것이다. 그러한 방법을 Normalization 즉 정규화 라고도 한다. 그런데 이러한 정규화는 다른 효과를 가져올 수도 있는데, 바로 contrast stretching의 효과를 가져올 수도 있다. 다음 코드를 보자.

위 코드를 보면, 히스토그램이 stretching된 모습을 볼 수 있다. 사실 그러한 이유는 다음과 같다. 원래 이미지의 히스토그램을 보면, 처음 부분과 끝 부분의 일부 히스토그램의 값이 평평한 것을 볼 수 있다. 이 말은 사실 이미지의 범위가 예를들어 [10-240]의 그레이스케일 만으로 표시가 된다는 것이다. 그런데 normalization하는 코드를 보면은 식 안에, 상수로 적혀있는 255를 볼 수 있을 것이다.

코드를 수정하여 그 표현하는 범위를 줄인다면, 히스토그램을 축소하는 효과도 나타낼 수 있을 것이다. 다음 코드를 참고하자.

3.3.2 Histogram equalization

가로M, 세로N의 영상에서 화소의 개수는 MN개 이다. 이때 영상의 히스토그램의 함수를 $h(r_k)=n_k$라 정의하자. $r_k$는 밝기 범위[0,L-1]에서 k번째 밝기 값이며, $n_k$는 영상에서 밝기가 $r_k$인 화소의 개수이다. 따라서, MN크기의 영상에서 밝기가 $r_k$인 픽셀의 개수를 확률적으로 표현하면, $p(r_k)=n_k/MN$이다.

그러면, 본론으로 돌아와서 다음 그림을 봐보자.

위 그림을 보면, 히스토그램이 어떤 영역에 편향되있는 영상은, 물체끼리 구분은 어느정도 괜찮으나, 너무 어둡거나 밝다. 또, 중간영역에 히스토그램이 몰려있는 영상은, 물체끼리 구별이 잘 되지않아, 콘트라스트(contrast)가 낮다고 할 수 있다. 그렇다면 영상을 잘 보이게 하기 위해서 할 수 있는 조치중 하나가 히스토그램 평활화(Histogram equalization)이다. 제일 밑에 그림을 보면, 제일 물체끼리 분간이 잘 되는 모습을 볼 수 있다. 한 곳에 편향되 있는 히스토그램을 이미지 밝기 전체 영역에 있어서 골고루 퍼뜨리는 작업을 히스토그램 평활화(Histogram equalization)이다. 히스토그램 평활화의 과정을 살펴보자.

먼저, 위와 같은 정의와 전제를 정의하자. 우선 식(1)에서, 화소r은 변환T에 의해서 화소s로 변환이 된다. 그리고 화소r의 밝기범위는 [0,L-1]이라 하자. 또한 (a)의 조건에서, T(r)은 구간[0,L-1]에서 단조증가이며, (b)의 조건에서 $0<= r, T(r)<=L-1$ 이라는 전제를 알 수 있다.

그리고, 식(2)에서는 변환함수 T가 어떤 함수의 형태를 가지는지 나와있다. 위에 설명한것처럼 화소r을 히스토그램 관점에서 확률적으로 표현하고, 그 확률밀도함수를 0에서 해당 화소값r까지 적분하는게 변환함수T이다. 해당 적분형태를 보면, 누적분포함수임을 알 수 있다. (여기서 적분인 형태를 보면, 연속적인 확률밀도 함수로 표현된것을 볼 수 있다. 실제 영상은 연속적이지 않고 이산적이므로, 시그마로 표현될 것이다. 왜냐하면 밝기값은 정수값만 가지기 때문이다.)

그런데 잠깐, 왜 히스토그램 평활화의 변환식이 위와 같이 표현되었을까? 그 이유를 지금부터 알아보자. (우리는 그 사실을 알기 위해서 변환된 화소의 확률밀도함수인 p(s)를 알아내면, s의 화소가 어떻게 분포해있는지 알 수 있을것이다. 그러므로, p(s)를 알아내는데 집중하자.)

식(2)를 활용하여 위의 식을 유도할 수 있다.

또한, 추가적인 유도를 위해서, 식(3)을 이용하자. 식(3)은 변환된 화소의 확률밀도 함수든, 기존 화소의 확률밀도함수든지 확률밀도함수의 적분값은 1로 같다는 사실에서 나온 식이다.

그 후, 마지막으로, 식(3)에다가, dr/ds에 계산한 식(2-1)을 대입하면 $p_s(s)$의 분포는 모든 변수에서 1/L-1이라는 공통된 값을 지니는 균일밀도함수인 것을 볼 수있다. 변환 과정을 그림으로 보면 다음과 같다.

위의 과정은 영상의 화소값이 연속적이라고 가정했을때 나온 식이다. 실제 영상은 위에서 언급했듯이 이산적이기 때문에, 다음과 같이 해당식이 시그마로 바뀐다.

이제 히스토그램 평활화의 예시를 하나 살펴보자. 우선 영상의 크기가 64x64(MN=4096)인 영상이 있다고 해보자. 그리고 화소범위는[0-7]이라고 하자. 이 때, 화소값의 분포는 다음과 같다.

그렇다면 이때, 히스토그램 평활화에 의해서 변환된 화소값의 계산은 다음과 같이 이루어진다.

위와 같은 방식으로 $s_7$까지 구하면 다음과 같은 결과가 나온다. 제일 오른쪽 그림c가 변환된 결과이다.

전체적으로 낮은 화소에 몰려있던 히스토그램이 상대적으로 균일하게 분포하게된 모습을 볼 수 있다. 앞에서 봤었던 것처럼 uniform하게 분포하지 않는 이유는 화소의 범위가 연속적이지 않기 때문이다.

3.3.3 Histogram matching

히스토그램 지정(Histogram matching)은 히스토그램 평활화의 연장선이라고 보면된다. 히스토그램 평활화를 생각해보면, 히스토그램을 단순히 평활화 시키기만 하였다. 아래 그림을 보자.

단순히 평활화만 시키게된다면 위 그림과 같은 문제점이 발생하게 된다. 원래 이미지의 히스토그램이 0에 거의 밀집해 있기 때문에, 히스토그램 평활화를 하게되면, 거의 밝은 영역에 몰려있게 된다. 그 이유는 히스토그램 평활화의 알고리즘을 이해하고 있으면 바로 알 수 있다. 왜냐하면, 누적분포함수가 빠르게 증가하기 때문에, 거의 모든 화소가 큰 화소값으로 대응되는 것이다. 그렇다면, 이러한 문제점을 어떻게 해결할 수 있을까?

바로 히스토그램 지정(Histogram Matching) 이란 방법을 이용하는 것이다. 이름 그대로, 맵핑 시킬 히스토그램의 형태를 정해두고, 그 히스토그램에다가 맵핑시키는 것이다. 그렇다면 과정이 어떻게 이루어지는지 알아보자.

위의 식(4),(5),(6)이 히스토그램 지정의 전부라고 할 수 있다. 또한 이미지는 이산적인 경우이므로 평활화와 똑같이 시그마에 관한식으로 바꾸면 다음과 같다.

위 식으로 히스토그램 평활화 과정을 간략히 설명하면 다음과 같다.

  1. 원 영상($p_r$)에 히스토그램 평활화를 진행한다. (즉, s를 구한다. s는 누적분포함수 T에 r이 대응하는 값이다.)

  2. 우리가 원하는 형태의 확률함수($p_z$)를 만들고, 똑같이 히스토그램 평활화를 진행한다. (G(z))

  3. 과정 1에서 구한 s의 값을 이용하여, 변환G를 통하여 역변환(역함수를 통하여)을 하여 z값을 구한다.

그런데 이렇게 써놔도 어떤 말인지 감이 잘 안온다. 예시를 보면 금방 감이 올 것이다.

먼저 아래와 같이 원본 영상의 이산확률분포함수가 있고, 히스토그램 평활화를 진행하였다.

그리고 아래와 같이 우리가 맵핑 시키려는 분포함수가 있고, 똑같이 히스토그램 평활화를 진행하였다.

그 후, 아래와 같이 s에 대하여 G를 통한 역변환을 통해 z값을 맵핑시킨다.

그러면 최종적으로, 입력영상의 분포는 다음과 같이 바뀐다.

기존영상에서 화소값이 $r_k$인 픽셀이 $s_k$로 맵핑 되고, $s$픽셀들이 해당되는 $z_k$에 픽셀로 바뀐다. 즉, 히스토그램 지정 알고리즘은 두 번의 변환을 통하여 진행된다고 할 수 있다.

이러한 히스토그램 지정 알고리즘을 통하여 문제가 되었던 달 사진을 복원하면, 히스토그램이 더 균일하게 분포 되면서 훨씬 그럴싸한 영상이 복원되는 것을 볼 수 있다.

Comment  Read more

PRML-Introduction(Chapter1)-2

|

1.2 확률론(Probability Theory)

확률론의 기본적인 컨셉을 이용하기 위하여 다음 예제를 살펴보자.

위 그림과 같이 빨간색 상자와 파란색 상자가 있고, 그 안에 사과(녹색)과 오렌지(주황색)이 들어있다고 해보자.

이 때, 빨간색 상자를 고를 확률이 40%, 파란색 상자를 고를 확률이 60% 이고, 상자 안에서 각각의 과일을 고를 확률은 동일하다고 하자.

이 예시에서 상자가 확률 변수이다. 다음 부터, 상자를 확률 변수 B라 하자. 그럴 때, 확률 변수B는 r(빨간 상자), b(파란 상자) 두 개의 값을 가질 수 있다.

같은 방식으로 과일을 확률 변수 F로 정의하자. 그럴 때, 확률 변수 F는 a(사과), o(오렌지) 두 개의 값을 가질 수 있다.

위와 같이 상황을 정의 했을 때, 임의의 상자를 선택해서 과일을 뽑는 행동을 무한 번 시도한다고 해보자.

그럴 때 우리는, 오렌지를 고를 전반적인 확률은?, 파란색 상자를 골랐을 때 사과를 고를 확률은? 같은 것을 알고 싶을 것이다. 이럴때 아래 그림을 보자.

확률변수X는 $x_i(i=1,…,M)$로 구성되어있고, 확률변수Y는 $y_j(j=1,…,N)$으로 구성되있다고 하자. 이때, X랑 Y를 상자와 과일에 해당하는 확률 변수라고 생각해보자. 그럴 때, 위 그림에 있는 $n_{ij}$는 B상자에서 F과일을 고를 확률을 나타낸다. 즉, P(B,F)이다. 위 그림 보다 아래 그림을 보면 금방 알 수 있을 것이다.

만약에 위 그림에서 특정 네모 한칸의 확률을 보자. 그러면 그 확률이 바로 결합확률분포(joint probability)이며, P(X,Y)로 표시된다.

그리고, 위 그림에서 네모 한 칸이 아닌, 가로 세로 중 한 줄을 택한 확률(합계 라인에 있는 확률)을 봐보자. 그 확률이 바로 주변확률분포(Marginal distribution)이다.

그리고, 조건부확률(Conditional probability)라는게 있다. 표기는 P(Y|X)이며, X일때, Y일 확률이라고 한다. 결합확률/주변확률 이라고도 할 수 있다. 예시를 하나 보자. 상자가 파란색일 때, 과일이 오렌지일 확률이면, (6/10 x 1/4) / (6/10) = 1/4 로 정의된다.

책에 나와있는 표현대로라면 다음과 같이 식으로 표기가 가능하다. 모두 중요하니 잘 외워두자.

그 다음으로, 사전확률 , 사후확률에 대해서 알아보자.

사전확률은 관찰하기 전의 확률이고, 사후확률은 관찰한 후의 확률이다. 위 예시로 설명을 하자면, 사전확률은 어떤 과일이 선택되었는지 관찰하기 전의 확률이고, 사후확률은 선택된 과일이 오렌지라는 것을 알고난 후의 확률이다. 사실, 과일을 기준으로 하는지, 박스를 기준으로 하는지에 따라서 어떤게 사전확률이고 사후확률인지는 달라질 수 있다. 우리는 우리가 관찰하는 대상을 기준으로 사전확률과 사후확률을 판단해야 한다.

머신러닝의 분류문제에서, 우리는 데이터를 관찰하여 데이터가 어떤 클래스에 속하는지 판단하는게 목적이다. 즉, 이런 입장에서는 데이터가 기준이 되며, P(data|class)가 사전확률이 될 것이고, P(class|data)가 사후확률이 될 것이다.

다른 예시로는 사전확률과 사후확률을 이렇게 쓸 수도 있을 것이다. P(원인|결과)는 사전확률, P(결과|원인)는 사후확률이라고 할 수 있을 것이다. P(자동차 배터리가 없다|시동이 걸리지 않는다.)는 사전확률, P(시동이 걸리지 않는다.|자동차 배터리가 없다). 우리가 보는 관점에 따라 인과는 바뀔 수 있다. 하지만 현실에서 우리가 추론하는 방식을 생각해보고 인과를 판단하여 베이즈룰을 사용하자.

Comment  Read more

PRML-Introduction(Chapter1)-1

|

1. Introduction

수학적 표기법(Mathematical notations)

  1. Vectors : small letter(소문자)로 표기, 언급 없는이상 열벡터(Column vecetor) ex)x, y, v, w ….

  2. 위 첨자T(subscript T) : 전치(Transpose)를 의미, 즉 $x^T$는 행벡터를 의미한다.

  3. Matrix : big letter(대문자)로 표기, ex) M과 같이 표기. ()

  4. ($w_1, w_2 ,…, w_n$)의 표기는 n개의 원소를 가진 행벡터를 의미한다. 즉, &(w_1, w_2 ,…, w_n})^T&는 열벡터이다.

  5. [a,b] : 닫힌구간($a<=x<=b$) , (a,b) : 열린구간($a<x<b$) 을 의미한다.

  6. MxM크기의 항등행렬(Identity matrix) 는 $I_M$으로 표기하낟.

  7. $E_x[f(x,y)]$ : 확률변수 x에 대한 함수 f(x,y)의 기대값을 의미한다. 만약 x에 대한 분포가 다른 변수 z에 대해 조건부면, 해당 조건부 기대값은 $E_x[f(x)|z]$와 같이 적었다. 비슷하게 분산 : $var[f(x)]$이라 적고, 공분산 : $cov[x,y], cov[x,x]=cov[x]$와 같이 적는다.

  8. 만약 D차원 벡터 x= $(x_1,…,x_D)^T$가 x1,…,xN으로 N개 존재한다면, 이 관측값들을 묶어서 행렬 X로 만들 수 있다. 이때, X의 n번째 행은 행 벡터 (xn)T에 해당한다.

1.1 예시 : 다항싱 곡선 피팅

간단한 회귀 문제를 예시로 들것이다. 실수값의 입력 변수인 x를 관찰한 후 이 값을 바탕으로 실숫값의 타깃 변수인 t를 예측하려 한다고 해보자. 이 예시에서는 $sin(2\pi x)$를 활용하여 데이터를 만들었다.

N개의 관찰값 $x$로 이루어진 훈련 집합 x=$(x_1,…,x_N)^T$와 그에 해당하는 표적값 t=$(t_1,…,t_N)^T$가 주어졌다고 해보자. 10개의 관측값이 주어졌다고 했을 때 아래의 그림을 살펴보자.

우리는 목표는 이러한 주어진 훈련 집합들을 사용하여 어떤 새로운 입력값 $\hat{x}$가 주어졌을 때, 타깃 변수 $\hat{t}$를 예측하는 것이다.

훈련 집합으로 구성된 x는 노이즈가 끼어있기 때문에, 새로운 입력값이 들어왔을때 올바른 타깃변수를 예측하기란 어려운 일이다.

해당 곡선을 피팅하는데 있어, 다음과 같은 형태의 다항식을 활용해보자.

y($x$, **w**) = $w_0 + w_1x + w_2x^2 + ... + w_Mx^M = \sum_{j=0}^{M}w_jx^j$

그리고, 훈련 집합의 표적값들의 함숫값 $y(x,$w)와의 오차를 측정한느 오차함수를 정의하자. 그렇게 되면 오차함수를 최소화하는 방향으로 피팅을 진행하면 될 것이다.

E(w) = $\frac{1}{2}\sum_{n=1}^{N}{y(x_n,w)-t_n}^2$

최소화 하는 방향으로 손실함수를 최적화시키면 되는데, 앞에 상수 1/2는 상관이 없을 것이다. 앞에 상수 1/2는 미분을 했을때, 앞에 상수가 없기 위해서 미리 1/2를 곱해놓은 것이다.

즉, 함수 y($x$,w)가 정확히 데이터 포인트를 지날때, 그 포인트에서 손실함수 값이 0이 된다는 것을 알아두자.

우리의 목적은 E(w)를 최소화 하는 w를 고르는 것이다.

이때, 이 오차함수를 최소화 하는 유일한 w를 $w^★$ 로 표기하자.

이 때, 다항식의 차수 M을 결정하는 문제가 여전히 남아 있다. 이 문제를 모델 비교(model comparison) 또는 모델 결정(model selection)이라 한다.

위 그림을 보면 M이 3일때 제일 근사하다고 볼 수 있다. M=9인 경우, 훈련 집합의 데이터를 모두 지나가서 손실함수의 값은 0이 되겠지만, 실제 함수에 대해서는 맞지 않는 모습을 보여준다 이를 과적합(Overfitting)되었다고 한다.

위 그림을 보면, 차수가 증가했을때 (M=9)일 때, 가중치의 값이 양과 음의값을 번갈아 나타내며 매우 큰 값을 가지는것을 볼 수 있다. 이는, 훈련 집합의 데이터에 과도하게 맞추기 위한 모습으로 볼 수 있다.

하지만 이 상태에서, 주어진 데이터의 수가 달라진다면 어떻게 될까? 아래 그림을 보자.

즉, 똑같이 M=9인 경우, 데이터 수가 많아짐에 따라서, 근사를 더 잘 시키는 모습을 볼 수 있다.

ps. 뒤에서 배울 베이지안 모델을 사용하게 되면, 베이지안 모델이 모델의 크기에 따라서 필요한 파라미터수를 자동으로 조절해주기 때문에, 데이터 포인트 숫자보다 매개변수의 숫자가 훨씬 더 많은 모델을 사용해도 문제가 없다.

어쨋든, 지금 배우는 관점에서 이러한 과적합(Over fitting)문제를 해결하기 위해서, 어떤 기법이 존재할까? 바로 정규화(Normalization)이라는 기법이다. 아래 식을 살펴보자.

위 식에 점선박스가 처진 부분이 바로 규제항이다. 즉, 아까 봤듯이, 데이터포인트에 비해서 차수가 컷을때 파라미터의 값이 진동하는(엄청 커지거나 작아지는 것)을 방지하기 위해서 다음과 같은 규제항을 추가해준 것이다. 이때, w_0는 정규화항에서 제외한다 왜냐하면, w_0를 포함시키면 타깃 변수의 원점을 무엇으로 선택하느냐에 따라서 결과가 종속되기 때문이다. 이런 행위를 뉴럴 네트워크에서는 weight decay라고 한다. 또한 이런 이차형식 (quadratic)형태의 정규화가 들어간 회귀 식을 리지회귀(ridge regression)이라고 한다. 이런 형태는 오차함수가 미분되어서 역전파 될 때, 미분 되었을 때 업데이트에 가장 크게 반영하는 $w_1^2, w_2^2, …, w_M^M$의 항들을 규제함으로써 얻어지는 효과이다.

위 그림은 정규화상수 $\lambda$를 몇 으로 설정했느냐에 따른 피팅 곡선의 그림들이다. 상수를 너무 작게 설정하면, 규제를 하는 의미가 없을 것이고, 상수를 너무 크게 설정한다면 위 그림의 오른쪽 그래프 처럼, 훈련 집합의 데이터가 반영이 안되는 현상이 발생할 것이다. 즉 적당한 상수를 선택해야 왼쪽의 그림처럼 규제의 효과를 볼 수 있을 것이다.

아래 그림은 M=9 였을 때, 정규화 상수에 따른 가중치의 값이다.

Comment  Read more