생성모형,generative_model


mklink
GAN generative_adversarial_network - writing
저기에서는 서로 경쟁하는 두 신경망이 있는데 - 분류모형,classification_model vs 생성모형,generative_model을 경쟁시킨다
생성모델(위조지폐범)은 진짜같은 데이터를 생성하려 한다.
분류모델(경찰)은 진짜와 가짜를 판별하려는 확률을 높이려고 한다.
이런 zero-sum_game 관계 내에서 서로 경쟁적으로 발전해나가는 구조?? chk
semi-supervised_learning의 방법 중 하나가 생성모형?
aka 생성모형학습 generative_model_learning ?


1. tmp 1

KIAS Horizon - 머신러닝 시리즈 #2 - 볼츠만머신: 생성모형의 원리
https://horizon.kias.re.kr/18001/
(#1은 퍼셉트론,perceptron에 적음)

// Boltzmann_machine, RBM 에 놓아도 상관 없는 내용임

기억,memory의 원리?
John_Hopfield가 기억의 원리로 홉필드_네트워크,Hopfield_network를 제안. (1982년)

이전글에서는 분류모형을 공부했는데 - 분류모형,classification_model - (분류,classification) - 퍼셉트론,perceptron에 의한.
이번글에서는 생성모형을 공부 - 생성모형 generative model

전자는 입력 $x$ 와 출력 $y$ 사이의 관계 $y=f(x)$ 를 신경망으로 구현하는 것
후자는 데이터 $x$분포,distribution $P(x)$ 를 신경망으로 구현하는 것 (신경망,neural_network)

머신러닝의 유명한 예제인 개/고양이의 이미지 데이터를 바탕으로 두 모형의 목적을 구별해 보면,

분류모형은 개/고양이 이미지 $x$ 에 대한 라벨 $y_{\text{true}}=0/1$ 을 분류하는 학습
생성모형은 동물 이미지 $x$ 들이 가진 특징을 추출해서 데이터에 있는 동물들과 닮은 이미지 $x$ 를 생성하는 학습

분류모형의 목적은 모형이 예측하는 $y=f(x)$ 와 데이터의 라벨 $y_{\text{true}}$ 을 가깝게 만드는 것
생성모형의 목적은 주어진 이미지 $x$ 에 대한 데이터의 분포 $P_0(x)$ 와 모형의 분포 $P(x)$ 를 가깝게 만드는 것

<youtube 영상>

2차원 패턴,pattern
$x=(x_1,x_2)\in\lbrace(-1,-1),(-1,1),(1,-1),(1,1)\rbrace$
가 각각 $\lbrace 3,1,2,4 \rbrace$ 번 (총 10번) 관찰되었다고 가정.
각 패턴의 확률을 $P_0(x)$ 로 정의. ex. $P_0(1,1)=0.4.$

그런데 data를 가만히 보면,
  • $x_1$$x_2$부호,sign가 같은 패턴이
  • $x_1=1$ 인 패턴이
조금 더 많이 관찰됨을 알 수 있음.
이런 규칙을 눈치챘다면 모형,model을 이용해 데이터를 영리하게 저장할 수 있음.

에너지 기반 모형에 경험이 많았던 물리학자 Hopfield는 패턴,pattern의 "에너지,energy"를 이렇게 설계함.
$$E(x)=-Wx_1x_2-b_1x_1-b_2x_2$$
에너지가 낮은 패턴은 더 자주 관찰되는 볼츠만 분포(Boltzmann distribution)(QQQ =maxwell-boltzmann 분포?) 를 가정. (이 가정은 정보이론의 관점에서 매우 자연스러운 것)
$$P(x)=\frac{\exp[-E(x)]}{Z}=\frac{\exp[-E(x)]}{\sum_x \exp[-E(x)]}$$
여기서 $Z=\sum_x \exp[-E(x)]$ 는 모든 패턴에 대해 확률 $P(x)$ 의 합이 1이 되게 만들어 주는 상수. (정규화,normalization?) 이렇게 확률을 정의하면 모든 패턴에 대한 확률값이 자동으로 양수가 됨. 이 에너지 모형 energy_model 의 매개변수 $(W,b_1,b_2)$ 값을 잘 정하면 모형의 확률 $P(x)$ 가 데이터의 확률 $P_0(x)$ 와 비슷해질 것인데, Hopfield는 좋은 매개변수 값을 금세 알아차림:
$$b_1=\sum_x x_1 P_0(x)$$
$$b_2=\sum_x x_2 P_0(x)$$
$$W=\sum_x x_1 x_2 P_0(x)$$
즉 데이터에서
$E(x)$ 값은 낮아지고 패턴의 확률 $P(x)$ 는 커짐.

Hopfield는 패턴의 기억,memory이 에너지가 낮은 동역학적(동역학,dynamics) 끌개,attractor에 저장된다고 생각함.

Hopfield_network에서 좋은 $W$ 값이 정해지는 원리는 뇌과학의 헤비안 hebbian 규칙과 닮음
{ 동시에 발화하는 뉴런,neuron들의 시냅스,synapse 연결은 강화되고, 그렇지 않는 neuron들의 연결은 퇴화한다는 것 }

이렇게 모형으로 데이터를 저장하게 되면 생기는 세 이점은
  1. 데이터의 패턴과 빈도수를 통째로 저장하는 것 보다 세 개의 숫자 $(W,b_1,b_2)$ 를 저장하는 것이 효율적
  2. 관찰된 데이터에는 없었던 패턴의 관찰확률을 유추(see 예측,prediction and 추론,inference) 가능
  3. 이 확률모형을 이용해서 상대적으로 확률이 높은 패턴을 추출할 수 있음

Hopfield가 사용한 매개변수를 쓰면 모형의 확률 $P(x)$ 와 데이터의 확률 $P_0(x)$ 가 가깝게 됨. 이제 더 가깝게 만들어 보려고 함. 1985년.[1] (볼츠만_기계,Boltzmann_machine 얘기.)

에너지 모형은 Hopfield_network와 동일하고 확률은 볼츠만 분포(Boltzmann_distribution)를 따른다. (hence the name)
(더 가깝게 만드는 방법은.. 아마 모형의 분포와 data의 분포 사이의 거리를 더 정교하게 정의하는??? chk)

이들은 모형의 분포 $P(x)$ 와 데이터의 분포 $P_0(x)$ 사이의 거리 (두 분포,distribution 사이의 거리,distance) 로,
$$D_{KL}(P_0 || P) = \sum_x P_0(x) \log \frac{P_0(x)}{P(x)}$$
즉 쿨백-라이블러 거리 Kullback-Leibler divergence (see 상대엔트로피,relative_entropy) 를 선택하였음.

수학적으로 오목함수,concave_function라는 얘기 하고나서 기울기하강,gradient_descent 수식 서술. (기울기,gradient 식 생략)
"해당 기울기는 $x_1,x_2$ 의 상관관계를 데이터의 분포 $P_0(x)$ 에서 구한 기대값과 모형의 분포 $P(x)$ 에서 구한 기대값의 차이가 된다."(sic)
이 경사하강법을 통해 $(W,b_1,b_2)$ 를 update하면 $D(P_0||P)$ 가 줄면서 model의 distribution $P(x)$ 가 data의 distribution $P_0(x)$ 에 점점 가까워지게 됨.

Boltzmann distribution과 KLD로 설계한 Boltzmann machine은 멋진 알고리즘이나, 치명적 문제가.. 데이터 $x=(x_1,x_2,\cdots,x_d)$ 의 차원 $d$ 가 큰 경우, $\sum_x$ 로 합해야 할 패턴의 가지수가 너무 많아서 위 식으로 기울기를 계산하는 것이 실질적으로 불가. $d=20$ 인 경우에 전체 패턴이 백만 개 정도이며 이걸 계산해야 매개변수 겨우 한 번 갱신.. 매우 비효율적.

1.1. RBM

그리하여 1986년 Paul Smolensky 가 제안한 - 제한된 볼츠만머신Restricted Boltzmann Machine, RBM - 은 데이터 표현 변수 $x$ 와 더불어 이진값을 가지는 숨은 변수 $h$ 를 포함하고 있다.

BM은 모든 $x_i$ 들이 서로 연결. but,
RBM은 $x_i$ 들끼리는 연결이 없고, $h_j$ 들끼리도 연결이 없다. 오직 $x_i$$h_j$ 사이의 연결만이 허용됨.
https://i.imgur.com/vkkYsbKh.png
(조정효 제공)
RBM에서 패턴의 에너지식은 생략. 여기서 문제해결을 위해 변수 h에 대해 '하찮게 만듦 - marginalization' 을 씀... 이것도 연산횟수가 많은 문제... 결국 Hinton의 CD contrastive_divergence 알고리즘으로 해결.

1.2. Contrastive Divergence 알고리즘

이것은 $x_i$ 들끼리 그리고 $h_j$ 들끼리 연결 없이 독립(독립성,independence)이라는 것 (을 가정하여??? - 아니 RBM의 특성상 원래 그런듯??? chk) - $h$ 에 대한 조건부 확률을 $h_j$ 들 각각의 조건부 확률의 곱으로 쪼개서(factorizable) 쓸 수 있게 해줌 - (see 조건부확률,conditional_probability) - 수식으로는
$$P(h|x)=\prod_j P(h_j|x)$$
여기서 $P(h_j|x)$ 는 데이터 $x$ 가 주어졌을 때 $h_j=0$ 이 될지 $h_j=1$ 이 될지 결정하는 확률임. 제한된 볼츠만머신의 에너지와 확률 규칙을 써서 계산을 조금 하면 이 조건부확률을 계산 가능.
$$P(h_j=1|x)=\frac{1}{1+\exp(-s_j)}=f(s_j)$$
이 식에서 $s_j=\sum_i W_{ij} x_i + b_j$ 는 데이터 $x$ 가 일종의 순전파(?)를 통해서 $h_j$ 에 도착한 신호,signal로 해석할 수 있음.

RBM에서는 숨은 노드 $h_j$ 의 값이 0 또는 1이고, $h_j$기대값,expected_value
$$\mathbb{E}[h_j]=0\cdot P(h_j=0|x)+1\cdot P(h_j=1|x) \Longrightarrow f(s_j)$$
즉 RBM에서 $x$ 가 순전파된 기대값 $\mathbb{E}[h_j]$ 가 (지난 연재에서 본) 퍼셉트론,perceptron에서 숨은 뉴런의 활성함수(활성화함수,activation_function) $f(s_j)$ 와 일치함. RBM에선 $x,h$대칭성,symmetry적 구조를 가짐. 그래서 역전파,backpropagation에 해당하는 조건부확률 $P(x_i|h)$ 도 정의 가능.

순전파확률 $P(h_j|x)$
역전파확률 $P(x_i|h)$ 를 이용해서 표본추출(샘플링,sampling)할 수 있다. 이렇게 순전파와 역전파를 통해 얻는 표본 $x,h$ 는 에너지 $E(x,h)$ 를 낮출 수 있는 서로의 짝꿍을 선호한다. (? chk)

데이터에서 첫 표본을 하나 선택해서 $x(1)$ 이라 하자.
순전파를 통해 $h_j(1)$ 들을 하나씩 얻고 이들로 이루어진 $h(1)=(h_1(1),h_2(1),\cdots)$ 을 결정.
이번에는 $h(1)$ 을 역전파시켜서 $x(1)$ 을 <새로> 결정.
(이제 위첨자를 써서 $x(1)$ 을 원래 표본 $x^0(1)$ 과 생성한 새 표본 $x^1(1)$ 로 구별)
순전파와 역전파를 $n$ 번 반복하면 다음 순서대로 값을 얻게 됨:
$$ x^0(1) \to h^0(1) \to x^1(1) \to h^1(1) \to x^2(1) \to h^2(1) \to \cdots \to x^n(1) \to h^n(1)$$

CD알고리즘의 핵심 아이디어는: $x_i,h_j$ 의 상관관계(see 상관,correlation)를 표본추출(see 샘플링,sampling)을 통해 어림(근사,approximation)할 수 있다는 것.
즉, $\sum_{x,h}$ 라는 수많은 가지 수의 합을 계산하는 대신
$M$ 개의 표본,sample에서 얻은 통계량,statistic을 이용하는 전략임.

$$\sum_{x,h}x_ih_j P(h|x) P_0(x) \approx \frac1M \sum_{m=1}^{M} x_i^0(m) h_j^0(m)$$
$$\sum_{x,h}x_ih_j P(x,h) \approx \frac1M \sum_{m=1}^{M} x_i^n(m) h_j^n(m)$$

첫번째 식에서 data의 분포 $P(h|x)P_0(x)$ 를 따르는 sample은 data sample $x_i^0$ 과 짝을 이루는 $h_j^0$ 로 이루어진 $(x_i^0,h_j^0)$ 으로 어림할 수 있고,
두번째 식에서 model의 분포 $P(x,h)$ 를 따르는 sample은 순전파와 역전파를 $n$ 번 반복했을 때의 짝꿍 $(x_i^n,h_j^n)$ 으로 어림할 수 있음.

( $n\to\infty$ 인 경우, $(x_i^n,h_j^n)$ 은 정확히 $P(x,h)$ 를 따르는 sample이 됨. )
(`짝꿍'의 영어표현이 궁금)

이를 $\text{CD}_n$ 알고리즘이라 함. 놀라운것은 $n=1$$\text{CD}_1$ 로도 꽤 좋은 approximation이 가능.

의의: 차원이 커져도 RBM 학습이 가능해졌다.

최근에는 변분추론variational_inference에 기반한 변분오토인코더Variational Autoencoder, VAE 분류모형을 기발하게 응용한 적대적생성망generative_adversarial_network, GAN이 개발.

----
  • [1] David H. Ackley, Geoffrey E. Hinton, and Terrence J. Sejnowski, "A learning algorithm for Boltzmann machines", Cognitive Science, 9(1): 147-169 (1985).