Data Science

Whitening Data

by Minwoo 2019. 9. 14.

Whitening은 기본적으로 들어오는 input의 feature들을 uncorrelated 하게 만들어주고, 각각의 variance를 1로 만들어주는 작업이다.

'whiten' data: to normalize each dimension by it's respective standard deviation.

 

 

-----------------------------------------------------Batch Normalization-------------------------------------------------------

문제는 whitening을 하기 위해서는 covariance matrix의 계산과 inverse의 계산이 필요하기 때문에 계산량이 많을 뿐더러, 설상가상으로 whitening을 하면 일부 parameter 들의 영향이 무시된다는 것이다. 예를 들어 input u를 받아 x=u+b라는 output을 내놓고 적절한 bias b를 학습하려는 네트워크에서 x에 E[x]를 빼주는 작업을 한다고 생각해보자. 그럴 경우 E[x]를 빼는 과정에서 b의 값이 같이 빠지고, 결국 output에서 b의 영향은 없어지고 만다. 단순히 E[x]를 빼는 것이 아니라 표준편차로 나눠주는 등의 scaling 과정까지 들어갈 경우 이러한 경향은 더욱 악화될 것이고, 논문에서는 이를 실험적으로 확인했다고 한다.

이와 같은 whitening의 단점을 보완하고, internal covariance shift는 줄이기 위해 논문에서는 다음과 같은 접근을 취했다.

  • 각각의 feature들이 이미 uncorrelated 되어있다고 가정하고, feature 각각에 대해서만 scalar 형태로 mean과 variance를 구하고 각각 normalize 한다.
  • 단순히 mean과 variance를 0, 1로 고정시키는 것은 오히려 Activation function의 nonlinearity를 없앨 수 있다. 예를 들어 sigmoid activation의 입력이 평균 0, 분산 1이라면 출력 부분은 곡선보다는 직선 형태에 가까울 것이다. 또한, feature가 uncorrelated 되어있다는 가정에 의해 네트워크가 표현할 수 있는 것이 제한될 수 있다. 이 점들을 보완하기 위해, normalize된 값들에 scale factor (gamma)와 shift factor (beta)를 더해주고 이 변수들을 back-prop 과정에서 같이 train 시켜준다.
  • training data 전체에 대해 mean과 variance를 구하는 것이 아니라, mini-batch 단위로 접근하여 계산한다. 현재 택한 mini-batch 안에서만 mean과 variance를 구해서, 이 값을 이용해서 normalize 한다.

-----------------------------------------------------Batch Normalization-------------------------------------------------------

 

 

If your different dimensions use different units (or have wildy different variances), then these differences can greatly impact the clustering.

This is because KMeans is isotropic: it treats different in each direction as equally important. So, if the units or variance are very different, this is equivalent to weighting certain features / dimensions as more or less important.

To correct for this it is common, and sometimes necessary to 'whiten' data: to normalize each dimension by it's respective standard deviation.

 

Signature: whiten(obs, check_finite=True)

 

Docstring: Normalize a group of observations on a per feature basis. Before running k-means, it is beneficial to rescale each feature dimension of the observation set with whitening. Each feature is divided by its standard deviation across all observations to give it unit variance.

 

Parameters ---------- obs : ndarray Each row of the array is an observation. The columns are the features seen during each observation. >>> # f0 f1 f2 >>> obs = [[ 1., 1., 1.], #o0 ... [ 2., 2., 2.], #o1 ... [ 3., 3., 3.], #o2 ... [ 4., 4., 4.]] #o3

 

check_finite : bool, optional Whether to check that the input matrices contain only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination) if the inputs do contain infinities or

NaNs.

 

Default: True Returns ------- result : ndarray Contains the values in `obs` scaled by the standard deviation of each column. Examples -------- >>> from scipy.cluster.vq import whiten >>> features = np.array([[1.9, 2.3, 1.7], ... [1.5, 2.5, 2.2], ... [0.8, 0.6, 1.7,]]) >>> whiten(features) array([[ 4.17944278, 2.69811351, 7.21248917], [ 3.29956009, 2.93273208, 9.33380951], [ 1.75976538, 0.7038557 , 7.21248917]])

 

 

 

What is the difference between normalization, standardization, and regularization for data?

 

Normalization and standarization are pretty much the same thing and both relate to the issue of feature scaling. If training an algorithm using different features and some of them are off the scale in their magnitude, then the results might be dominated by them instead of all the features. This is a common problem in SVM, for example. I tend to use "normalization" when I map the features into [-1,1] by dividing (i.e. "normalizing") by the largest values in the sample and "standarization" when I convert to z-score (i.e. standard deviations from the mean value of the sample). But I'm not 100% sure if everybody follows the same convention.

Regularization is a technique to avoid overfitting when training machine learning algorithms. If you have an algorithm with enough free parameters you can interpolate with great detail your sample, but examples coming outside the sample might not follow this detail interpolation as it just captured noise or random irregularities in the sample instead of the true trend. Overfitting is avoided by limiting the absolute value of the parameters in the model. This can be done by adding a term to the cost function that imposes a penalty based on the magnitude of the model parameters. If the magnitude is measured in L1 norm this is called "L1 regularization" (and usually results in sparse models), if it is measured in L2 norm this is called "L2 regularization", and so on.

 

 

Whitening transformation

A whitening transformation or sphering transformation is a linear transformation that transforms a vector of random variables with a known covariance matrix into a set of new variables whose covariance is the identity matrix, meaning that they are uncorrelated and each have variance. The transformation is called "whitening" because it changes the input vector into a white noise vector.

Several other transformations are closely related to whitening:

  1. the decorrelation transform removes only the correlations but leaves variances intact,
  2. the standardization transform sets variances to 1 but leaves correlations intact,
  3. a coloring transformation transforms a vector of white random variables into a random vector with a specified covariance matrix.

 

 

:: PCA 복습 ::

시그마 – 데이터 분포의 주성분 분석을 위해 계산. 아래의 식을 보자하니 “공분산” 계산이다. ( ‘시그마’가 공분산 행렬을 나타내는 기호임 )


주성분은 즉, 시그마(공분산 행렬)의 eigenvector / eigenvalue 임.

  – u1에 대한 x 의 투영. u1이 열벡터이므로, 이 투영의 결과는 u1 즉, eigenvector로 추출된 차원의 값들로만 정의가 됨.

 – eigenvector를 1 column으로 하여 stack한 matrix는 직교행렬 (othorgonal) 이다. 즉, U*U^T = U^T*U = I 를 만족한다!. ( ^T는 transpose )

the percentage of variance retained – 기존 데이터 대비 유지할 ‘비율’

PCA의 기본은 각 Feature의 zero mean 과 unit variance. 즉 Feature Learning전에 Normalization이 필요하다.

natural image로 feature learning을 할 경우는 PCA에서 필요한 mean normalization과  variance normalization 중 mean만 작업하면 된다. (variance는 natural image의 pixel특성상 동일하다. 즉, 색이 가질 확률이 같으니..)

:: Whitening ::

차원감소에 활용되는 PCA와 밀접하게 연관된 전처리 과정은 whitening 또는 Sphering이라고 불리운다. 입력값을 더 쓸모있게 만드는 작업 (make less redundant)임. – 각 Feature간에 (1) 서로 작은 상관관계 correlation를 지니도록, 그리고  (2) 동일한 분산 variance을 가지도록 하는 작업이다.

Whitening – Smoothing – PCA

각 Feature간의 상관관계를 최소화/제거하기 위해서는

 를 계산해 본다. (U 는 eigenvector로 이뤄지며, eigenvector의 특징상 서로 othorgonal하므로 상관관계가 없어진다고 할 수 있다.)

covariance – 공분산이 의미 있기 위해서는 데이터가 ‘Zero Mean’을 가지는 것을 가정한다.. (아니더라도 위의 알고리즘이 유효하지 않은 것은 아니다.) 공분산 행렬이라 함은 데이터의 좌표 성분들 사이의 공분산 값을 원소로 하는 행렬로서 데이터의 i번째 좌표 성분과 j번째 좌표 성분의 공분산 값을 행렬의 i행 j열 원소값으로 하는 행렬이다. (참고: http://darkpgmr.tistory.com/110)

공분산 행렬의 Diagonal Value가 ‘EigenValue’.. Eigenvalue 끼리는 서로 직교하니.. uncorrelated가 보장된다.

일정한 분산을 갖기 위해서

 과 같이 eigenvalue의 루트값으로 나눠 준다.

PCA Whitened – 차원감소 + 동일한 분산 (uncorrelated + unit variance)

:: ZCA Whitening ::

R이 orthogonal matrix의 경우 다음의 공식을 만족한다 R*R^T = R^T*R = I  (R이 rotation/reflection matrix 일때..)

 (U는 PCA의 eigenvector를 의미함)

ZCA whitening
Zero-phase Component Analysis를 의미한다. ZCA의 특징은 ZCA를 적용하면 입력 데이터의 n차원을 유지하며 차원 감소는 일어나지 않는다. rotation/reflection은 입력 데이터에 가장 가깝게 발생하며 기준은 Least Squared 계산에 의거한다.

ZCA와 PCA Whitening 차이 : http://goo.gl/V2usUc
Whitening Transformation의 경우 유일하지는 않다. 직교행렬(orthogonal matrix) R로 곱하여 Rotation이 수행되어도 여전히 whitened로 남게 된다. (참고 페이지 다시 읽고 내부의 식 정리하기..)

공분산 행렬 C는.. eigenvector 하나를 1 column으로 갖는 행렬 E와 eigenvalue를 dialgonal에 갖는 D로 표현하다면 C = E * D * E^T. 일반적으로 말하는 PCA는 Wpca = D^(-1/2) * E^T 이다. W=RWpca 에서 R 이 othogonal을 보장한다면 W 또한 Whitening Transformation이 된다. 그리하여 Wzca = E * Wpca = E * D^(-1/2) * E^T 즉, C^(-1/2) 가 된다.

:: Regularization ::

eigenvalue가 0에 가까울 경우, 정규화를 위한 scaling step (eigenvalue의 root로 데이터 값을 나누는 과정)에서 데이터 왜곡이 일어 날 수 있다. 그래서 구현단계에서는 eigenvalue에 작은 상수값인 epsilon을 더하여 계산한다.


x값이 [-1,1]일 경우 epsilon은 10^-5가 적당하다.

이미지의 경우, 이러한 epsilon이 스무딩(smoothing) 즉, low pass filter의 역할을 수행한다. 이를 통해 Feature Learning 이 수월해진다고 하는데 => 영상의 공간영역 처리에 있어서 ‘저주파’성분은 주변영역과 색의 차이가 적은 부분을 말하고, ‘고주파’는 색의 차이가 큰 부분은 말한다. 즉, 저역필터는 윤곽 부분을 제거하기 때문에 좀 더 부드러운 느낌 + 흐릿한 영상이 된다. 즉 Blurring! (일부 이미지 프로세싱에서는 이런 저역 필터를 거친 후 원본과 차이를 보면 고주파 영역 즉, 윤곽을 잡아낼 수 있다.)

사람의 눈이 이미지를 받아들이는 것을 생각해본다면, 픽셀 하나하나 처리하기는 만무하다. 전체를 받아드린 후 De-Correlation 작업을 통해 근접한 픽셀과의 상관성을 제거해야한다. (예를 들면 on center, off surround 또는 off center , or surround와 같은 저역필터?!)

 

source: 

https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/

https://withkairos.wordpress.com/2015/06/13/ufldl-tutorial-8-whitening/

댓글