#noindex mklink GAN generative_adversarial_network - writing 저기에서는 서로 경쟁하는 두 신경망이 있는데 - [[분류모형,classification_model]] vs '''생성모형,generative_model'''을 경쟁시킨다 생성모델(위조지폐범)은 진짜같은 데이터를 생성하려 한다. 분류모델(경찰)은 진짜와 가짜를 판별하려는 확률을 높이려고 한다. 이런 zero-sum_game 관계 내에서 서로 경쟁적으로 발전해나가는 구조?? chk [[semi-supervised_learning]]의 방법 중 하나가 '''생성모형'''? aka 생성모형학습 generative_model_learning ? <> = 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)$ 를 가깝게 만드는 것 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)$$ 즉 데이터에서 * $x_1,x_2$ 의 [[편향,bias]]이 $b_1,b_2$ 와 일치하고 * $x_1,x_2$ 의 상관관계가([[상관,correlation]]이) $W$ 와 일치할수록 $E(x)$ 값은 낮아지고 패턴의 확률 $P(x)$ 는 커짐. Hopfield는 패턴의 [[기억,memory]]이 에너지가 낮은 동역학적([[동역학,dynamics]]]) [[끌개,attractor]]에 저장된다고 생각함. Hopfield_network에서 좋은 $W$ 값이 정해지는 원리는 뇌과학의 헤비안 hebbian 규칙과 닮음 { 동시에 발화하는 [[뉴런,neuron]]들의 [[시냅스,synapse]] 연결은 강화되고, 그렇지 않는 neuron들의 연결은 퇴화한다는 것 } 이렇게 모형으로 데이터를 저장하게 되면 생기는 세 이점은 1. 데이터의 패턴과 빈도수를 통째로 저장하는 것 보다 세 개의 숫자 $(W,b_1,b_2)$ 를 저장하는 것이 효율적 1. 관찰된 데이터에는 없었던 패턴의 관찰확률을 유추(see [[예측,prediction]] and [[추론,inference]]) 가능 1. 이 확률모형을 이용해서 상대적으로 확률이 높은 패턴을 추출할 수 있음 Hopfield가 사용한 매개변수를 쓰면 모형의 확률 $P(x)$ 와 데이터의 확률 $P_0(x)$ 가 가깝게 됨. 이제 더 가깝게 만들어 보려고 함. 1985년.[* David H. Ackley, Geoffrey E. Hinton, and Terrence J. Sejnowski, "A learning algorithm for Boltzmann machines", Cognitive Science, 9(1): 147-169 (1985).] ([[볼츠만_기계,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$ 인 경우에 전체 패턴이 백만 개 정도이며 이걸 계산해야 매개변수 겨우 한 번 갱신.. 매우 비효율적. == 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 알고리즘으로 해결. == 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이 개발. = bmks = 확률편미분방정식과 인공지능 – 고등과학원 HORIZON https://horizon.kias.re.kr/25133/ [[확률편미분방정식]] (rel [[확률미분방정식,stochastic_differential_equation,SDE]] [[편미분방정식,partial_differential_equation,PDE]]) ---- [[WpEn:Generative_model]] https://developers.google.com/machine-learning/glossary?hl=ko#generative-model Google:generative.model Up: [[기계학습,machine_learning]]? [[생성,generation]] [[모형,model]]