A Practical Guide to Training Restricted Boltzmann Machines
지식이 부족하여 질적으로 마음에 잘 들지 않네요. 지지부진하고...
최근 신상의 변화가 있어 당분간 평소처럼 올리기가 힘들 것 같아 일단 해놓은 것 까지만 올려놓고자 합니다. 남은 부분은 거의 파인튜닝에 가까운 이야기입니다.
이번 것은 올리기가 너무도 부끄럽네요. 고수가 되어 다시 잡고 척척 읽어낼 날이 왔으면 좋겠습니다.
https://www.cs.toronto.edu/~hinton/absps/guideTR.pdf
1 Introduction
Restricted Boltzmann machines (RBMs)은 많은 데이터 타입들에서 생성적 모델(generative model)로 사용되어왔습니다. 그 중 가장 중요하게 사용되었던 것은 단연 deep belief nets일 것입니다. RBms는 보통 contrastive divergence를 사용하여 학습합니다. 하지만 이를 사용하려면 메타 파라미터들을 어떻게 설정해야 하는지에 대한 경험이 필수적으로 필요합니다. 메타 파라미터들은 학습률(learning rate), 모멘텀(momentum), 가중치(weight cost), sparsity target, 가중치의 초기값, 은닉 유닛의 수와 미니 배치의 크기 등을 포함합니다. 또한 각 유닛의 타입이나 그 상태를 확률적으로 할 것인지 결정적으로 갱신할 것인지, 각 트레이닝 케이스마다 얼마나 자주 업데이트를 해야하는지, 데이터 벡터에서 상태 업데이트를 시작할 것인지 등도 결정하여야 합니다. 또한 학습 상태를 모니터링하다가 언제 학습을 종료할 것인지를 알 수 있다면 그것 또한 유용할 것입니다.
많은 연구들에서 위와 같은 사항들을 명시하고 있기는 하지만, 왜 그렇게 사용하고 있는지, 어떤 변화가 있는 것인지를 이야기 하지 않고 있습니다 더군다나 새로운 응용에서는 어떻게 사용해야하는지 가이드 또한 없는 것이 사실입니다.
2 An overview of Restricted Boltmann Machines and Contrastive Divergence
바이너리 벡터로 표현된 트레이닝 셋이 있다고 생각하여 봅시다. 트레이닝 셋은 2개의 층으로 된 RBM으로 모델링될 수 있습니다. 이는 관측 데이터의 상태를 표현하는 가시 유닛과, 특징 검출기(feature detector)에 해당하는 은닉 유닛으로 구성되며 이들은 서로 같은 가중치를 같도록 연결되어있습니다. 이들간 연결 $(v, h)$는 에너지를 가집니다.
$$E(v, h) = - \sum a_i v_i - \sum b_j h_j - \sum v_i h_j w_{ij}$$
$v_i, h_j$는 각 유닛의 상태를, $a_i, b_j$는 그들의 바이어스(bias)를, $w_{ij}$는 둘을 연결한 가중치를 나타냅니다. 그리고 이렇게 구성된 망(network)은 모든 가능한 상태에 대한 확률을 부여합니다.
$$p(v, h) = \frac{1}{Z} e^{-E(v, h)}$$
$$Z = \sum_{v,h} e^{-E(v, h)}$$
가시 벡터 $v$만에 대한 확률을 계산하려고 한다면 모든 은닉 유닛을 모두 더한 값을 계산하면 됩니다.
$$p(v) = \frac{1}{Z} \sum_h e^{-E(v, h)}$$
따라서 에너지가 낮아지는 구성일 때 높은 확률을 갖게 되며, 각 가중치에 대한 트레이닝 벡터의 로그 확률(log probability)은 다음과 같이 간단하게 표현됩니다.
$$\frac{\partial p(v)}{\partial w_{ij}} = \langle v_i h_j \rangle_{data} - \langle v_i h_j \rangle_{model}$$
여기서 브라켓으로 표현한 것은 각각 data, model로 정의되는 분포의 기대값(expectation)입니다. 이것은 확률적 경사 상승법(stochastic steepest ascent)법을 이끌어 냅니다.
$$\Delta w_{ij} = \epsilon (\langle v_i h_j \rangle_{data} - \langle v_i h_j \rangle_{model})$$
여기서 $ \epsilon$은 학습률입니다.
일단 $\langle v_i h_j \rangle_{data}$를 계산하는 것은 꽤 쉽습니다.
무작위로 선택된 트레이닝 이미지 $ v $에 대해서 각 은닉 유닛의 이진 상태 $h_j$가 1이 될 확률은 $p(h_j = 1 | v) = \sigma (b_j + \sum_i v_i w_{ij})$ 입니다.
$\sigma (x)$는 로지스틱 시그모이드 함수(logistic sigmoid function)로 $1/(1+ \exp (-x)) $입니다.
또한 마찬가지로 은닉 벡터가 주어졌을 때 가시 유닛의 확률은 $p(v_i = 1 | h) = \sigma (a_i + \sum_j h_j w_{ij})$ 입니다.
하지만 $\langle v_i h_j \rangle_{model}$의 계산은 어려운 편입니다. 이는 가시 유닛의 무작위 상태에서 교차 깁스 샘플링(alternating Gibbs sampling)을 오랜 시간동안 수행하는 것으로 이루어집니다. 교차 깁스 샘플링의 한번 수행하면 모든 가시 유닛이 한번에 갱신되고 그 후 모든 은닉 유닛 또한 한번에 갱신됩니다.
이보다 더 빠른 방법이 Hinton에 의해 제안되었습니다. 이는 트레이닝 벡터로 가시 유닛의 값을 설정합니다. 다음 은닉 유닛의 상태를 계산한 다음, 다시 가시 유닛의 상태를 재구성(reconstruction)합니다. 이렇게 하였을 때 가중치의 변화는 다음과 같이 계산됩니다.
$$\Delta w_{ij} = \epsilon (\langle v_i h_j \rangle_{data} - \langle v_i h_j \rangle_{recon})$$
이 방법은 로그 확률의 그래디언트를 대충 추정하여 사용하더라도 잘 작동하였으며, Constrative Divergene의 목적 함수에 가깝게 추정하는 것으로 나타났습니다.
RBMs는 일반적으로 교차 깁스 샘플링에 더 많은 단계를 사용하여 두번째 항을 얻음으로써 더 나은 모델을 얻을 수 있습니다. 이는 교차 깁스 샘플링을 몇 단계 더 수행하느냐에 따라 CD-n으로 불립니다.
3 How to collect statistics when using Contrastive Divergence
여기서는 일단 가시 유닛과 은닉 유닛이 모두 이진 상태를 갖는다고 가정하고 시작하겠습니다. 또한 학습의 목적은 트레이닝 벡터를 생성하는 좋은 생성적 모델을 만드는 것이라고 합시다. Deep Belief Nets를 학습하기 위해 RBMs를 사용할 경우, 그 후에 backpropagation으로 파인튜닝을 하여야 합니다. 하지만 여기서는 이를 생략하도록 하겟습니다.
3.1 Updating the hidden states
CD-1 방법을 사용한다고 하였을 때, 은닉 유닛을 활성화할 확률은 로지스틱 함수에 의해 계산됩니다.
$$p(h_j = 1) = \sigma ( b_j + \sum_i v_i w_{ij})$$
그리고 균등 분포에 의한 랜덤 값보다 확률 값이 클 경우 활성화 된 것으로 간주합니다. 여기서 확률 값 그 자체보다 이진 값을 사용하는 것은 매우 중요합니다. 확률 값을 사용해버리면 실 수를 이용하여 각 유닛들이 통신하게 되고, 이는 은닉 유닛이 최대 1비트의 정보만을 가진다는 정보 병목(information bottleneck) 규칙을 깨는 것입니다. 정보 병목은 강한 레귤라이저로 작용합니다.
하지만 은닉 유닛의 마지막 갱신에서는 상태가 선택되는 것에 걸린 종속이 더이상 없으므로 확률 값을 사용하도록 합니다. CD-n일 경우 최종 갱신에서만 확률 값을 사용합니다.
3.2 Updating the visible states
가시 유닛 또한 이진 값이라고 가정한다면, 재구성 시 이들의 상태를 갱신하는 올바른 방법은 탑다운 입력에 대한 확률 값을 사용하는 방법입니다.
$$p(v_i = 1) = \sigma ( a_i + \sum_j h_j w_{ij})$$
하지만 여기서는 이진 값 대힌 확률 값을 쓰는 것이 일반적입니다. 은닉 유닛에서와는 달리 거의 문제가 되지 않으며 오히려 샘플링 노이즈를 줄여 빠른 학습이 가능하게 되는 효과가 있습니다.
3.3 Collecting the statistics needed for learning
가시 유닛이 실수 값의 확률 을 갖는다고 한다면, positive 통계를 얻기 위한 두가지 방법이 있습니다.
$$\langle p_i, h_j \rangle_{data} \text{ or } \langle p_i p_j \rangle_{data}$$
$h_j$를 사용하는 편이 RBM의 원래 모델에 가깝다고 할 수 있으나, $p_j$를 사용하는 것이 보통 샘플링 노이즈가 적어 빠른 학습이 가능합니다.
3.4 A recipe for getting the learning signal for CD-1
은닉 유닛이 데이터에 의해 유도된다면 확률적 이진 상태(stochastic binary states)를 사용해야 합니다. 만약 재구성에 의해서 유도된다면, 샘플링이 아닌 확률 값을 사용해야 합니다.
가시 유닛이 로지스틱 함수를 사용한다면 데이터와 재구성 시 모두 실수 값 확률을 사용합니다.
학습 가중치나 바이어스를 위한 개개 통계를 얻고자 할 때에는 확률 값을 사용하고, 가중치가 시메트리(symmetry)하지 않도록 랜덤 초기 값을 설정합니다.
4 The size of a mini-batch
단일 트레이닝 케이스에 대하여 그래디언트를 계산하여 가중치를 갱신하는 방법도 가능하지만 10 ~ 100 케이스의 매니 배치(mini-batch)를 사용하는 것이 더욱 효율적입니다. 행렬간 곱셈을 사용하기 때문에 GPU나 매트랩 등을 사용하기도 좋습니다.
미니 배치의 크기가 변할 때 학습률이 변하는 것을 방지하기 위해 계산된 전체 그래디언트를 미니배치의 크기로 나누어주도록 합니다.
한가지 조심해야할 것은 확률적 경사 하강법을 사용할 때 미니 배치 크기를 너무 크게 잡는 것입니다. 크기를 너무 크게 잡으면 추정된 그래디언트의 신뢰도가 높아지지만 안정된 학습률의 얻기가 힘이 듭니다.
4.1 A recipe for dividing the training set into mini-batches
데이터셋이 적은 수의, 각 클래스들이 비슷한 수준의 수를 갖는다면 이상적인 미니 배치의 수는 클래스들의 갯수와 같습니다. 각 미니배치들은 각 클래스마다 하나의 샘플을 가지는 것이 샘플링 에러를 줄일 수 있습니다. 그 외의 상황에서는 트레이닝 샘플의 순서를 섞은 뒤에 10개 정도의 미니 배치 크기를 설정합니다.
5 Monitoring the progress of learning
실제 데이터와 재구성된 데이터의 제곱 에러를 계산하는 것이 쉽게 때문에 이를 학습 과정에서 출력하여 사용하도록 합니다. 재구성 에러는 학습 초반에 급격하게 줄어들다가 점점 천천히 감소하는 방향으로 될 것입니다. 하지만 추정된 그래디언트의 노이즈나 높은 모멘텀을 이유로 재구성 에러가 약간씩 출령일 수도 있습니다.
하지만 이 재구성 에러는 사실 학습 진행을 파악하는데 좋은 지표는 아닙니다. 특히 n이 큰 CD-n 학습의 최적화 정도를 추정하는 함수가 아닙니다. 또한 이것은 2개의 수치를 혼란스럽게 만듭니다. 하나는 트레이닝 데이터의 경험적 분포(empirical distribution)과 RBM의 평형 분포(equilibrium distribution)의 차이이고, 나머지 하나는 교차 깁스 마코프 체인의 믹싱 레이트입니다. 만약 믹싱 레이트가 매우 적으면 데이터와 모델의 분포가 매우 다르더라도 재구성 에러가 작아지게 됩니다.
5.1 A recipe for using the reconstruction error
사용은 하되 맹신하지는 말아야 합니다. 정말 학습 진행 정도를 알고 싶다면 15장에서 설명할 멀티 히스토그램을 사용해야합니다. 또한 Annealed Important Sampling을 이용하여 데이터를 추정해보거나, 레이블드 데이터를 사용하고 있다면 검증 셋과의 discriminative 성능을 비교해볼 수도 있습니다.
6 Monitoring the overfitting
생성적 모델을 학습할 경우, 모니터링을 하기 위한 확실한 수치는 현재 모델이 갖는 각 데이터에 대한 확률들일 것입니다. 이 확률은 검증 데이터에 대해서 점차 낮아지기 시작하면, 그대가 학습을 멈출 때입니다. 하지만 매우 큰 RBMs일 경우 Z에 대한 계산이 피룡하여 이 확률을 계산하는 것은 쉽지 않은데, 때문에 트레이닝 데이터와 검증 데이터와의 자유 에너지는 비교하는 방법을 사용할 수도 있습니다. 이렇게 할 경우 파티션 Z가 사라지기 때문에 계산이 쉬워집니다. 모델이 오버피닝 되지 않았으면 평균 자유 에너지는 트레이닝 데이터나 검증 데이터가 비슷한 수준이겟지만, 만약 오버피팅이 시작되고 있을 경우에는 검증 데이터의 자유 에너지가 트레이닝 데이터보다 상대적으로 증가하게 됩니다. 그리고 그 둘간의 차이가 오버피팅 정도가 될 것입니다.
6.1 A recipe for monitoring the overfitting
약간의 세대가 지난 후에 트레이닝 데이터의 대표 부분 집합의 평균 자유 에너지를 계산하고 검증 데이터의 평균 자유에너지와 비교합니다. 이후에는 항상 같은 트레이닝 부분 집합을 사용해야 합니다. 둘의 차이가 증가하면 오버피팅되고 있는 것입니다. 하지만 트레이닝 데이터의 확률이 그 차이보다 빠르게 증가하고 있다면 검증 데이터의 확률 또한 증가하고 있는지 확인해야할 것입니다.
7 The learning rate
학습률이 너무 크다면 재구성 에러는 엄청나게 증가할 것이고 가중치 또한 커질 것입니다.
정상적으로 학습되고 있는 도중 학습률을 줄이게 되면 재구성 에러가 크게 줄어들 것입니다. 하지만 이것이 항상 좋은 것은 아닙니다. 장기적으로 느린 학습 시간을 수반하기 때문입니다. 그럼에도 불구하고, 학습의 마무리로 ㅎ갈 수록 학습률을 줄일 필요성이 있습니다. 마지막 최종 단계에 업데이트된 가중치의 평균 값을 사용하는 것도 노이즈를 없애기 위한 대안이 될 수 있습니다.
7.1 A recipe for setting the learning rates for weights and biases
학습률을 설정하는 최고의 방법은 가중치와 갱신될 가중치의 히스토그램을 보는 것입니다. 갱신될 가중치는 가중치의 $10^{-3}$배 정도가 되어야 합니다. 유닛들이 매우 큰 팬인(fan-in)을 구성하고 있다면 갱신 값을 더욱 작아져야 합니다. 반대로 바이어스의 갱신은 커져야 할 것입니다.
8 The initial values of the weights and biases
가중치의 초기화는 보통 평균 0에 표준 편차 0.01을 가진 가우시안으로부터 생성된 랜덤 값을 사용합니다. 만약 큰 랜덤 값을 사용하면 초반 학습이 빨라질 수 있지만 모델의 최종 결과물에 좋지 않은 영향을 끼칠 수 있습니다. 학습에 사용한 수치가 확률적이라면 모든 가중치를 0으로 초기화하여 사용할 수 있습니다.
가시 유닛의 바이어스는 $ \log [p_i / 1 - p_i] $로 사용하는 것이 일반적입니다. $p_i$는 트레이닝 벡터에서 i가 활성화되는 수에 비례하한 값입니다. 이렇게 하지 않으면 학습의 초기 단계에서 가시 유닛을 활성화 하기 위해 은닉 유닛들을 사용해버릴 것입니다.
t의 Sparsity target 확률을 사용할 때에는, 은닉 유닛의 바이어스를 $ \log [ t / (1-t)] $로 사용하는 것이 맞습니다. 혹은 0으로 사용하여도 됩니다. 혹은 sparsity를 만들어내기 위해서 은닉 유닛의 바이어스를 -4의 값으로 대충 설저정하는 방법도 있습니다.
8.1 A recipe for setting the initial values of the wegiths and biases
평균 0, 표준 편차 0.01의 가우시안에서 추출된 랜덤 값들을 사용하면 됩니다. 은닉 유닛의 바이어스는 0으로, 가시 유닛의 바이어스는 $ \log [ p_i / (1-p_i)] $를 사용합니다.
9 Momentum
모멘텀은 학습 속도를 빠르게 할 수 있는 간단한 방법입니다. 특히 목적 함수가 길고 좁은 골짜기 부분을 가지고 있을때 효과가 있습니다. 모멘텀은 큰 공을 표면으로 굴려내려가는 것을 본따서 만들어졌는데, 공이 골짜기를 따라가면서 속력을 갖게 되도록 함으로써 골짜기의 수직 방향으로는 이동이 힘들도록 하는 효고가 있습니다. 그래디언트에 학습률을 직접 곱하는 대신, 모멘텀은 파라미터가 변화할 속도 $v $에 현재 속도를 더하여 파라미터를 변화시키게 됩니다.
공의 원래 속도는 모멘텀 메타 파라미터로 $ \alpha$가 사용되며, 이는 이전의 속도를 얼마나 사용할지를 나타내게 됩니다.
$$\Delta \theta_i(t) = v_i(t) = \alpha v_i(t-1) - \epsilon \frac{dE}{d\theta_i}(t)$$
만약 그래디언트가 일정하면 최종 속도는 $1/(1 - \alpha)$의 비율로 $\epsilon dE / d\theta_i $를 넘어서게 됩니다. 일반적으로 이 메타 파라미터로써 0.9를 사용합니다. 이는 시간적으로 스무딩되는 효과로 골짜기에 수직으로 진동하는 것을 막아주게 됩니다.
모멘텀은 경사 하강법의 방향을 직접 사용하지 않고 Conjugate gradient 과 유사한 방법이지만 좀 더 단순한 방법입니다. 다른 방법들과는 달리 골짜기가 파라미터 축과 정렬되지 않아도 잘 작동하는 편입니다.
학습이 시작할 때 무작위의 초기값들은 아주 큰 그래디언트를 발생시키고 골짜기에 속하지 않는 일반적이므로 0.5와 같은 낮은 모멘텀 값으로 초반 몇 단계는 제한하는 것이 좋은 방법입니다. 이렇게 사용하는 것은 학습이 좀더 안정적으로 동작하도록 만들어줍니다.
9.1 A recipe for using momentum
0.5의 모멘텀으로 시작하여, 재구성 에러의 감소가 안정적으로 이루어진 뒤에는 0.9로 모멘텀을 변경합니다. 만약 모멘텀이 불안정성에 원인이 된다면, 불안정성이 사라질 때까지 학습률을 2로 나누어주는 방법을 사용할 수 있습니다.
10 Weight-decay
Weight-decay는 그래디언트의 추가적인 항을 더함으로써 작동합니다. 추가 항은 큰 가중치를 패널라이즈(penalize)하는 함수의 편미분 값입니다. 가장 단순한 패널티 함수는 L2인데 가중치 제곱의 합에 1/2을 곱하고 이에 계수를 곱한 것으로 이는 weight-cost라고 불리기도 합니다. 이 패널티 항의 편미분 값에 학습률을 곱하는 것에 유의해야 합니다.
RBM에서 weight-decay를 사용하는 이유는 4가지가 있는데, 첫째로 트레이닝 데이터의 오버피팅을 방지하여 더 나은 일반화를 이끌어 내는 것이고, 두번째로 쓸모없는 가중치를 없애 은닉 유닛의 receptive fields를 좀더 부드럽고 해석에 편하도록 만드는 것입니다. 다음으로, 초반 부터 아주 큰 가중치를 갖는 은닉 유닛을 학습으로부터 떼어내고자 함입니다. 또한 교차 깁스 마르코브 체인의 믹싱 레이트를 늘리고자 하는 이유도 있습니다.
다른 형태의 weight-decay 방법으로 L1이 있습니다. 이것은 가중치의 절대값 합의 편미분 값을 사용하는 것입니다. 이것은 많은 가중치들이 0의 값을 갖도록 하고 나머지 일부는 굉장히 큰 가중치를 갖도록 효과가 있습니다. 따라서 학습된 가중치의 해석이 쉽다는 점이 있습니다.
가중치의 크기를 정하는 또 다른 대안은, 각 유닛에 입력되는 가중치들의 절대값 합의 최대 값을 설정하는 것입니다. 가중치가 갱신된 뒤, 각 유닛의 가중치들은 최대 값을 갖도록 스케일을 조절합니다.
10.1 A recipe for using weight-decay
L2 weight-decay를 사용할 때의 계수로 0.01에서 0.00001 사이의 값을 사용합니다. Weight-cost는 보통 바이어스에서는 사용되지 않는데 이들 바이어스는 오버피팅과 관련이 적기 때문입니다.
초기 weight-cost를 0.0001로 시도해보고, Annealed Importance Sampling을 사용한다면, 최적화를 위하여 weight-cost를 2로 나누는 방법을 사용해봅니다.
weight-decay가 꼭 오버피팅을 막기 위한 것은 아니고, 믹싱 레이트를 증가시키는 효과도 있기 때문에 꼭 오버피팅이 문제가 되지 않더라도 학습이 도움이 됩니다.
11 Encouraging sparse hidden activities
아주 가끔(rarely) 활성화되는 은닉 유닛은 그보다 자주 활성화되는 녀석들에 비해 해석이 쉽습니다. 이러한 유닛들을 피쳐로 이용하여 discriminative performance을 향상시킬 수 있습니다.
이진 은닉 유닛의 sparse 정도는 sparsity target을 정의하는 것으로 달성할 수 있습니다. Sparsity target은 전체 유닛 중 활성화되는 유닛의 확률 p를 말합니다. 추가적인 패널티 항은 실제 활성화되는 확률 q를 p에 가깝도록 유도하는 역할을 합니다. q는 각 미니배치의 활성화된 유닛이 가지는 평균 확률의 exponentially decaying average를 사용합니다.
$$q_{new} = \lambda q_{add} + (1 - \lambda) q_{current}$$
여기서 $ q_{current}$는 현재 미니배치에서의 은닉 유닛의 평균 활성화 확률입니다.
패널티는 목표 분포와 실제 분포 사이의 크로스 엔트로피를 사용합니다.
$$\text{Sparsity penalty } \propto -p \log q - (1-p) \log (1-q)$$
11.1 A recipe for sparsity
Sparsity 타깃을 0.01에서 0.1 사이로 설정합니다. q 추정 값의 decay-rate $\lambda$를 0.9에서 0.99 사이로 설정합니다. 은닉 유닛의 평균 활성화 히스토그램과 sparsity-cost는 은닉 유닛의 평균 확률이 target 근처에 오도록 설정합니다. 확률이 target 값 근처에서 뭉쳐있다면 sparsity-cost를 줄여야 합니다.
12 The number of hidden units
결정적 학습(discriminative learning)에서는 레이블을 정의하는 각 비트의 수가 파라미터의 수와 같게 설정이 됩니다. 레이블은 아주 적은 정보를 가지지기 때문에 트레이닝 케이스보다 더 많은 파라미터를 사용하면 오버피팅의 원인이 되어버립니다. 높은 차원 데이터의 생성적 모델을 사용할 경우, 각 비트는 모델에 얼마만큼의 파라미터를 사용할 것인지를 결정하게 됩니다. 이런 경우 레이블을 사용할 때보다 수십, 수백배정도로 많은 수를 필요로 합니다. 따라서 데이터가 1000개의 픽셀의 이미지인 경우, 10000개의 트레이닝 이미지당 백만개의 파라미터 정도가 적당하다고 볼 수 있습니다. 이는 결국 1000개의 전역적으로 연결된 은닉 유닛이 필요하다고 할 수 있습니다. 만약 은닉 유닛이 지역적으로 연결되어있거나 공유된 가중치를 사용하고 있다면 더 많은 수를 사용할 수 있습니다.
12.1 A recipe for choosing the number of hidden units
계산량보다 오버피팅의 방지가 더 중요하다면 각 데이터 벡터를 표현하는데 얼마나 많은 비트가 필요한지를 생각해보아야 합니다. 그리고 거기에 트레이닝 케이스의 수를 곱한 다음 이를 파라미터의 수로 사용합니다. 만약 아주 적은 sparsity target을 사용하고 있다면, 더 많은 은닉 유닛을 사용해야 할 것입니다. 아주 큰 트레이닝 셋이라 트레이닝 케이스가 중복이 많다면 파라미터를 약간 줄이는 것이 도움이 될 수 있습니다.
13 Different types of unit
RBM은 이진 유닛을 사용하도록 개발되었지만 다른 종류의 유닛 또한 사용할 수 있습니다. 다른 종류의 유닛을 쓰는 이유는 이진 가시 유닛을 사용하여 모델링하기 힘든 데이터를 다루고자 함입니다.
13.1 Softmax and multinomial units
이진 유닛에서는 유닛이 활성화되는 확률을 모든 입력 $x$에 대한 logistic sigmoid 함수에 의해 계산합니다.
$$p = \sigma(x) = \frac{1}{1 + e^{-x}} = \frac{e^x}{e^x + e^0}$$
결국 각 유닛의 활성화될 상태는 그 에너지의 negative exponential에 비례한다고 볼 수 있습니다. 따라서 K개의 다른 상태를 생성할 수 있습니다.
$$p_j = \frac{e^{e_j}}{\sum_{i=1}^K{e^{x_i}}}$$
이것은 softmax unit이라고 불립니다. 이는 순서를 가지지 않는 K개의 다른 상태를 표현하고자 할때 딱 맞는 방법입니다. Softmax는 여러 이진 유닛들이 서로 연관되어 있어 그 K개 중 단 한개만 1을 가지고 나머지는 0을 가지는 형태로 볼 수 있습니다. 이런 관점에서 softmax의 각 이진 유닛의 학습 방법은 기존의 이진 유닛을 학습하는 방법과 완전히 동일합니다. 다른 점이라고는 각 상태의 확률이 계산된다는 점과, 샘플이 획득된다는 점입니다.
13.2 Gaussian visible units
이미지의 패치나 Mel-Cepstrum 계수와 같은 데이터를 다룰 때에는 로지스틱 유닛이 썩 좋은 표현법이 아닙니다. 한가지 방법으로 이진 가시 유닛을 가우시안 노이즈에 영향받지 않는 선형 유닛으로 고치는 방법입니다. 에너지 함수는 다음과 같이 변하게 됩니다.
$$E(v, h) = \sum_{i \in \text{vis}} \frac{(v_i - a_i)^2}{2 \sigma_i^2} - \sum_{j \in \text{hid}}b_j h_j - \sum_{i, j} \frac{v_i}{\sigma_i} h_j w_{ij}$$
여기서 $\sigma_i$는 가시유닛 i가 가지는 가우시안 노이즈의 표준 편차입니다.
데이터의 각 콤포넌트를 평균 0을 가지고 분산을 1.0으로 갖도록 노말라이즈 한 뒤 노이즈가 없는(noise free) 재구성 방법을 사용하면 위의 식의 표준편차가 1이 되어 식이 간단해 집니다. 가우시안 가시 유닛의 재구성된 값은 이진 은닉 유닛에 바이어스를 더한 값으로부터 입력된 값과 동일해집니다.
학습률은 이진 가시 유닛을 사용할 때보다 몇지수 낮게 설정하여야 하며 너무 큰 학습률을 사용했을 때 실패한 사례가 있습니다.
13.3 Gaussian visible and hidden units
가시 유닛 뿐 아니라 은닉 유닛까지 가우시안이면, 불안정성 문제가 더욱 심화됩니다. 각각의 활성화된 값들은 그것의 평균에 가깝게 고정이 되어버립니다.
$$E(v, h) = \sum_{i \in \text{vis}}\frac{(v_i - a_i)^2}{2 \sigma_i^2} + \sum_{j \in \text{hid}}\frac{(h_j - b_j)^2}{2 \sigma_j^2} - \sum_{i,j}\frac{v_i}{\sigma_i}\frac{h_j}{\sigma_j}$$
13.4 Binomial units
노이즈를 포함한 0에서 N까지의 정수 값을 갖는 유닛을 얻는 간단한 방법은 N개의 이진 유닛을 구성한 뒤 같은 바이어스와 가중치를 갖도록 하는 것입니다. 이렇게 구성한 유닛은 모두 같은 입력을 받기 때문에 같은 확률 p로 활성화를 하게 될 것이며, 계산 또한 한 번이면 끝날 것입니다. 이것의 기대값은 $Np$이고, 분산은 $Np(1-p)$로 계산됩니다. 알려진 대로 p가 작으면 푸아송(Poisson) 유닛처럼 행동하게 될 것이고, p가 1에 가까워 질 수록 분산은 작아져버릴 것입니다. p가 작은 상태에서 전체 입력이 커짐에 따라 p가 지수적으로 커지게 됩니다. 이러한 성질은 학습을 rectified linear 유닛보다 덜 안정적이게 만들어버립니다.