우리는 변형 추론, CNN (Convolutional Neural Networks)의 변형을 가진 베이지안 컨볼 루션 신경망을 소개합니다. 우리는 제안 된 변형 추론 방법이 논문에 설명 된 여러 데이터 세트 (MNIST, CIFAR10, CIFAR100)에서 동일한 아키텍처에서 빈번한 추론과 동등한 성능을 달성하는 방법을 보여줍니다.


이 저장소에는 두 가지 유형의 Bayesian Lauer 구현이 포함되어 있습니다.
BBB (Bayes By Backprop) :
이 논문을 기반으로합니다. 이 층은 모든 가중치를 개별적으로 샘플링 한 다음 입력과 결합하여 활성화에서 샘플을 계산합니다.
BBB_LRT (로컬 리파 러트 화 속임수로 백 프롭에 의한 베이지) :
이 층은이 백서의 로컬 리 파라 메트레이션 트릭과 백 프로 베이를 결합합니다. 이 트릭을 사용하면 활성화에 대한 분포에서 직접 샘플링 할 수 있습니다.
사용자 정의 베이지안 네트워크를 만들려면 torch.nn.Module 대신 율법 대신 layers.misc.ModuleWrapper 상속 받고 토치 대신 주어진 레이어 ( BBB 또는 BBB_LRT )에서 Torch.nn.Module 대신 BBBLinear 및 BBBConv2d 사용하십시오 torch.nn.Linear 및 torch.nn.Conv2d . 또한 forward 방법을 정의 할 필요가 없습니다. ModuleWrapper 에 의해 자동으로 처리됩니다.
예를 들어:
class Net ( nn . Module ):
def __init__ ( self ):
super (). __init__ ()
self . conv = nn . Conv2d ( 3 , 16 , 5 , strides = 2 )
self . bn = nn . BatchNorm2d ( 16 )
self . relu = nn . ReLU ()
self . fc = nn . Linear ( 800 , 10 )
def forward ( self , x ):
x = self . conv ( x )
x = self . bn ( x )
x = self . relu ( x )
x = x . view ( - 1 , 800 )
x = self . fc ( x )
return x위의 네트워크는 다음과 같이 베이지안으로 변환 할 수 있습니다.
class Net ( ModuleWrapper ):
def __init__ ( self ):
super (). __init__ ()
self . conv = BBBConv2d ( 3 , 16 , 5 , strides = 2 )
self . bn = nn . BatchNorm2d ( 16 )
self . relu = nn . ReLU ()
self . flatten = FlattenLayer ( 800 )
self . fc = BBBLinear ( 800 , 10 )BBBLinear 블록 전에 FlattenLayer 추가하십시오.forward 방법은 튜플 AS (logits, kl) 를 반환합니다.priors 레이어에 대한 인수로 전달 될 수 있습니다. 기본값은 다음과 같습니다. priors = {
'prior_mu' : 0 ,
'prior_sigma' : 0.1 ,
'posterior_mu_initial' : ( 0 , 0.1 ), # (mean, std) normal_
'posterior_rho_initial' : ( - 3 , 0.1 ), # (mean, std) normal_
}현재 다음 데이터 세트와 모델이 지원됩니다.
python main_bayesian.py
config_bayesian.py 에서 하이퍼 파라미터를 설정하십시오 python main_frequentist.py
config_frequentist.py 에서 하이퍼 파라미터를 설정하십시오 layers/ : ModuleWrapper , FlattenLayer , BBBLinear 및 BBBConv2d 포함합니다.
models/BayesianModels/ : 표준 베이지안 모델 (BBBLENET, BBBALEXNET, BBB3CONV3FC)이 포함되어 있습니다.
models/NonBayesianModels/ : 표준 비 베이어 모델 (Lenet, Alexnet)이 포함되어 있습니다.
checkpoints/ : Checkpoint 디렉토리 : 모델은 여기에 저장됩니다.
tests/ : 레이어 및 모델의 기본 유닛 테스트 케이스.
main_bayesian.py : 베이지안 모델을 훈련시키고 평가합니다.
config_bayesian.py : main_bayesian 파일의 하이퍼 파라미터.
main_frequentist.py : 비 베이 세안 (빈번한) 모델을 훈련시키고 평가합니다.
config_frequentist.py : main_frequentist 파일의 하이퍼 파라미터.
불확실성에는 두 가지 유형이 있습니다 : Aleatoric 과 Epistemic .
Aleatoric 불확실성은 데이터의 변화에 대한 척도이며, 전염병 불확실성은 모델에 의해 야기된다.
여기서는 uncertainty_estimation.py 에 두 가지 방법이 제공되며, 이는 'softmax' & 'normalized' 이며이 논문의 식 4 와이 백서의 방정식 15를 기반으로합니다.
또한 uncertainty_estimation.py MNIST 및 notMNIST 데이터 세트의 베이지안 신경망의 불확실성을 비교하는 데 사용될 수 있습니다. 다음과 같은 인수를 제공 할 수 있습니다.
net_type : lenet , alexnet 또는 3conv3fc . 기본값은 lenet 입니다.weights_path : 주어진 net_type 의 가중치. 기본값은 'checkpoints/MNIST/bayesian/model_lenet.pt' 입니다.not_mnist_dir : notMNIST 데이터 세트의 디렉토리. 기본값은 'data' 입니다.num_batches : 불확실성을 계산 해야하는 배치 수.참고 :
layer_type 및 activation_type uncertainty_etimation.py 가중치와 일치하려면 config_bayesian.py 에서 설정해야합니다.이 작업을 사용하는 경우 다음을 인용하십시오.
@article{shridhar2019comprehensive,
title={A comprehensive guide to bayesian convolutional neural network with variational inference},
author={Shridhar, Kumar and Laumann, Felix and Liwicki, Marcus},
journal={arXiv preprint arXiv:1901.02731},
year={2019}
}
@article{shridhar2018uncertainty,
title={Uncertainty estimations by softplus normalization in bayesian convolutional neural networks with variational inference},
author={Shridhar, Kumar and Laumann, Felix and Liwicki, Marcus},
journal={arXiv preprint arXiv:1806.05978},
year={2018}
}
}