Kami memperkenalkan jaringan saraf konvolusional Bayesian dengan inferensi variasional , varian jaringan saraf konvolusional (CNNs), di mana distribusi probabilitas posterior yang tidak dapat diatasi dengan bobot disimpulkan oleh Bayes oleh backprop . Kami menunjukkan bagaimana metode inferensi variasional kami yang diusulkan mencapai kinerja yang setara dengan inferensi frequentist dalam arsitektur yang identik pada beberapa dataset (MNIST, CIFAR10, CIFAR100) seperti yang dijelaskan dalam makalah.


Repositori ini berisi dua jenis implementasi Bayesian Lauer:
BBB (Bayes by BackProp):
Berdasarkan makalah ini. Lapisan ini mengambil sampel semua bobot secara individual dan kemudian menggabungkannya dengan input untuk menghitung sampel dari aktivasi.
BBB_LRT (Bayes by backprop dengan trik reparametrization lokal):
Lapisan ini menggabungkan Bayes dengan backprop dengan trik reparametrization lokal dari makalah ini. Trik ini memungkinkan untuk secara langsung mencicipi dari distribusi atas aktivasi.
Untuk membuat jaringan Bayesian khusus, warisan layers.misc.ModuleWrapper alih -alih torch.nn.Module dan gunakan BBBLinear dan BBBConv2d dari salah satu lapisan yang diberikan ( BBB atau BBB_LRT ) alih -alih torch.nn.Linear dan torch.nn.Conv2d . Selain itu, tidak perlu mendefinisikan metode forward . Secara otomatis akan diurus oleh ModuleWrapper .
Misalnya:
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 xJaringan di atas dapat dikonversi ke Bayesian sebagai berikut:
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 )FlattenLayer sebelum blok BBBLinear pertama.forward dari model akan mengembalikan tuple sebagai (logits, kl) .priors dapat disahkan sebagai argumen untuk lapisan. Nilai default adalah: 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_
}Saat ini, kumpulan data dan model berikut didukung.
python main_bayesian.py
config_bayesian.py python main_frequentist.py
config_frequentist.py layers/ : Berisi ModuleWrapper , FlattenLayer , BBBLinear dan BBBConv2d .
models/BayesianModels/ : Berisi model Bayesian standar (BBBLENET, BBBALEXNET, BBB3CONV3FC).
models/NonBayesianModels/ : Berisi model non-Bayesian standar (Lenet, Alexnet).
checkpoints/ : Direktori Checkpoint: Model akan disimpan di sini.
tests/ : Kasus dasar unittest untuk lapisan dan model.
main_bayesian.py : Latih dan evaluasi model Bayesian.
config_bayesian.py : hyperparameters untuk file main_bayesian .
main_frequentist.py : melatih dan mengevaluasi model non-Bayesian (frequentist).
config_frequentist.py : hyperparameters untuk file main_frequentist .
Ada dua jenis ketidakpastian: aleatorik dan epistemik .
Ketidakpastian aleatorik adalah ukuran untuk variasi data dan ketidakpastian epistemik disebabkan oleh model.
Di sini, dua metode disediakan dalam uncertainty_estimation.py , itu adalah 'softmax' & 'normalized' dan masing -masing didasarkan pada persamaan 4 dari makalah ini dan persamaan 15 dari makalah ini.
Juga, uncertainty_estimation.py dapat digunakan untuk membandingkan ketidakpastian dengan jaringan saraf Bayesian pada dataset MNIST dan notMNIST . Anda dapat memberikan argumen seperti:
net_type : lenet , alexnet atau 3conv3fc . Default adalah lenet .weights_path : Bobot untuk net_type yang diberikan. Default adalah 'checkpoints/MNIST/bayesian/model_lenet.pt' .not_mnist_dir : Direktori dataset notMNIST . Default adalah 'data' .num_batches : Jumlah batch yang ketidakpastian perlu dihitung.Catatan :
layer_type dan activation_type Digunakan dalam uncertainty_etimation.py perlu diatur dari config_bayesian.py untuk mencocokkan dengan bobot yang disediakan.Jika Anda menggunakan pekerjaan ini, silakan kutip:
@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}
}
}