SlideShare a Scribd company logo
1 of 8
Download to read offline
マニュアルとコードを読み, RcppSMCを使用したSMCの方法を以下にまとめた.
マニュアルメモ自体は本ノートの下部を参照.


観測値はglobalな観測値クラスの配列に詰めておくものとする(global変数).
粒子の初期化関数や重み計算関数などでglobal変数として使用する例がRcppSMCで与えられている(そこでは変数y).
以下のmyfilter.cppを例にして使用方法をまとめておく.
myfilter.cpp の抜粋




1. samplerを生成
粒子数と履歴保持について設定する. 履歴に依存するフィルタでなければSMC_HISTORY_NONEとする.
それ以外は下のマニュアルメモ参照.

2. movesetを生成
粒子の初期化関数と粒子遷移関数, MCMC関数の設定を行う. それぞれ別途作成しておく.
- 粒子の初期化関数は粒子を返す
moveset.DoInitで使用される.




- 粒子遷移関数は指定した時刻のデータで粒子を遷移させる
提案分布に該当する. Bootstrap filterではシステムモデルとなる.

NOTE

粒子の重みは規格化されていない対数尤度として保持されておりparticle.GetLogWeight()で取得出来る.
これはlogweightを取得するゲッターである. logweightを更新するロジックもこの遷移関数に記述する.
マニュアルやコードを見ると, AddToLogWeight()が使われており,
1時点前の重みが対数尤度として表されており, それに対して新たな対数尤度を加算するというロジックとなる.
元々の重みに対して1ステップのフィルタリング分の重みをかけることで, 粒子の重みを更新することになる.
リサンプリングを行わない場合は重みが小さいものが残ってしまい, インポータンスサンプリングの観点からは
良くないが, 解析的にはおかしなことをしているわけではない.

moveset.DoMoveで使用される.




numberは遷移ルールの個数. 単純な場合は1.

- MCMC関数はDoMove後のMCMCサンプリング用

3. samplerにリサンプリングパラメータを設定
マニュアルメモも参照のこと.

4. samplerにmovesetを設定
文字通り.

5. samplerの初期化
時刻変数(samplerのメンバ)T=0
粒子の初期化: movesetのDoInit経由で指定した粒子の初期化関数による初期粒子セットを生成する.
履歴保持データ
Initialize




6. samplerの繰り返し処理と指標計算(sampler.Integrate)
sampler.h




IterateEss()を呼んでいる;
6.1 履歴保存
省略.
6.2 粒子遷移




movesetのDoMoveで遷移する.
例では
6.3 重みの規格化
※ここで重みの規格化が行われている.
6.4 ESSの計算とリサンプリング
文字通り.
6.5 MCMCステップ




6.6 時刻Tを1つ増やす
文字通り.
6.7 ESSを返す
文字通り.

7. Output量の計算
被積分関数を定義しておき, sampler.Integrateで計算する.




SMCTC: Sequential Monte Carlo template Class
http://www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/johansen/smctc

マニュアルメモ
http://www.jstatsoft.org/v30/i06/paper

4. The SMCTC Library




4.1. Library and program structure
smc::sampler : ライブラリのアルゴリズム全体に対応するもの
smc::particle : 個別の粒子の値と重みを保持するもの
smc::history : 前回のiterationの後のsamplerの状態を表すもの
smc::historyelement : 前回のsamplerの状態を保持するためにhistoryによって用いられるもの
smc::historyflags : samplerの履歴に関する簡単な情報を保持するためのもの. 現状ではリサンプリングを行ったかどうかを保持することに用
いられている.
smc::moveset : 粒子の初期化, 提案分布, 追加的なMCMCによる変化を扱う
smc:rng : GSL random number facilitiesに対するラッパー. 現状では一部の機能のみ対応. 直接GSLの機能を利用することも可能.
smc:gslrnginfo : GSL 乱数生成機に関する情報を扱う
smc::exception : 例外処理に用いるもの

SMCTCを用いたSequential Monte Carloで実行される手続きの概要.
- 初期化
smc::sampler が利用可能になる前に, samplerが行うこととSMCアルゴリズムのパラメータを指定する必要がある.
- 繰り返し
smc::sampler が生成された後は完了もしくは結果が得られるまで繰り返す
- 出力
samplerそのものと粒子セットに基づく何らかの期待値を出力する

4.2. Creating, configuring and running a sampler: smc::sampler
まずは新しいsamplerオブジェクトを作成する. 粒子数を指定する必要がある(粒子数は固定).
smc::samplerのコンストラクタの引数は基本的には2つ. 粒子数と, samplerの履歴(各繰り返しにおいて生成される粒子セット)保持メモリ容
量を指定する値(SMC_HISTORY_RAM or SMC_HISTORY_NONE)である. NONEの方を指定すると直近に生成された粒子セットのみを保
持する.
 smc::samplerはテンプレートクラスなので型を指定する必要がある. ここでの型はクラスもしくはC++のデータ型のことであり, 状態空間の
点を表すものである.
状態空間が1次元の実数全体, 1000粒子, 履歴保持なしのsamplerをコンストラクトするなら,
smc::sampler<double> Sampler(1000, SMC_HISTORY_NONE);
同様に, 状態空間がn次元の実数全体, 1000粒子, 履歴有りなら
smc::sampler<std::vector<double> > Sampler(1000, SMC_HISTORY_RAM);
とする.

提案分布と重み(Proposals and importance weights)
粒子の遷移と重み付けを担う関数はsmc::movesetを経由してsmc::samplerに引き渡す.
movesetはsamplerに対してSetMoveSetメンバ関数で提供される. このmovesetは事前に初期化されていなければならない.
Section 4.3参照.

リサンプリング(Resampling)
幾つかのリサンプリング方法が指定できる. 常にリサンプリングする, しない, ESSが指定された閾値を下回るときリサンプリングするのいず
れかである. SetResampleParams(ResampleType, double)によって設定する. ResampleTypeはenumerationであり, 次の表から選ぶ.




2つめのdoubleの値が負の場合はリサンプリングしない.
[0,1]の間の場合は, ESSの全粒子数に対する割合がその値を下回るときに,
1より大きい場合は, ESSがその値より小さい場合に, リサンプリングする. 全粒子数より大きい値を設定すれば, 常にリサンプリングすること
になる.

MCMCによる散らし(MCMC Diversification)
リサンプリングの後にMCMCによる遷移が適用出来る. 適切に設定されたmovesetをsamplerに渡すことで自動的に実行可能である. Section
5.2 参照.

アルゴリズムの実行(Running the algorithm)
粒子セットの初期化を実行するsmc::samplerのInitialize(). これは履歴を消去し, 全粒子に一度ずつmovesetに設定された関数を実行することで
初期化する.
 初期化が済めば繰り返し処理を行う. Iterate()とIterateUntil(int)の2通りがある.

出力(Output)
粒子セットに基づく経験測度に関する積分が実行可能である. 粒子セットの位置と重みも取得できる.
- Simple integration
double integrand(const T& , void *)
where T denotes the type of the smc::sampler template class in use.

Sampler.Integrate(integrand, void *(p));
where p is a pointer to auxiliary information that is passed directly to the integrand function
via its second argument { this may be safely set to NULL if no such information is required
by the function.

例5.1に説明有り.

- Path-sampling integration
http://www.cis.upenn.edu/~taskar/courses/cis700-sp08/papers/gelman-meng.pdf
省略しておく.
- General output
For more general tasks it is possible to access the locations and weights of the particles directly.
Three low-level member functions provide access to the current generation of particles, each
takes a single integer argument corresponding to a particle index.

GetParticleValue(int n)
GetParticleLogWeight(int n)
GetParticleWeight(int n)

n番目の粒子に対する, 値の参照, 規格化されていない対数重み, 規格化されていない重みをそれぞれ返す.

smc::sampler の GetHistory() も使えるが, 詳しくはmanualをみる.

Finally, a human-readable summary of the state of the particle system can be directed to an
output stream using the usual << operator

4.3. Specifying proposals and importance weights: smc::moveset
- Initializing the particles
samplerが保持する粒子の初期化関数
 smc::particle<T> fInitialise(smc::rng *pRng);
 T: samplerの型
particleのコンストラクタ
 smc::particle<T> (value, dLogWeight)

- Moving and weighting the particles
提案分布
 void fMove(long, smc::particle<T> &, smc::rng *)
 samplerが呼ぶ時, 1番目のlongは現在の繰り返し番号に設定される
-- Changing the value
GetValue() and SetValue(T)
GetValuePointer()

-- Updating the weight
GetWeight(): 規格化されていない重み
GetLogWeight()
SetWeight(double)
SetLogWeight(double)
AddToLogWeight(double)
MultiplyWeightBy(double)

※粒子の重み更新において, AddToLogWeightを用いた例がRcppSMCにある.
 意味的にSetLogWeightでないのか? 要確認
 粒子の重みの更新方法について確認する.
 規格化はsampler<space>のiterateEssの中でやっている.


- Mixtures of moves
複数のtransition kernelを用いる.
For example, if the sampler is of type T and fMv1 and fMv2 each correspond to a valid move function then the following
code would produce an array of the appropriate type named pfMoves which contains pointers to these two functions:
void (*pfMoves[])(long, smc::particle<T> &,smc::rng*) = {fMv1, fMv2};
long fSelect(long lTime, const smc::particle<T> & p, smc::rng *pRng)

- Additional MCMC moves
If MCMC moves are required then one should simply produce an additional move function with an almost identical prototype to that used for
proposal moves. The one difference is that normal proposals have a void return type, whilst the MCMC move function should return int. The
function should return zero if a move is rejected and a positive value if it is accepted.

- Creating an smc::moveset object
-- Single-proposal movesets
moveset ( particle<T>(*pfInit)(rng *),
void(*pfNewMoves)(long, particle<T> &, rng *),
int(*pfNewMCMC)(long, particle<T> &, rng *))

optionally, a pointer to an MCMC move function (if one is not required, then the argument
specifying this function should be set to NULL)

-- Mixture-proposal movesets
moveset ( particle<T>(*pfInit)(rng *),
long(*pfMoveSelector)(long, const particle<T> &, rng *),
long nMoves,
void(**pfNewMoves)(long, particle<T> &, rng *),
int(*pfNewMCMC)(long, particle<T> &, rng *))
参照:5.2節

-- Using a moveset
samplerのSetMoveSetで設定する.
4.4. Error handling: smc::exception
const char* szFile;
long lLine;
long lCode;
const char* szMessage;
参照:5.1節

4.5. Random number generation
特に気にしなくて良いはずであるが, 必要ならマニュアルを見る.
GSL_RNG_SEED
GSL_RNG_TYPE
参照:5.1節

5.1節の例では適当なディレクトリでBASH promptにおいて
GSL_RNG_TYPE=ranlux GSL_RNG_SEED=36532673278 ./pf
という設定値を用いている.

5. Examples applications
a simple particle fillter in Section 5.1 and
a more involved SMC sampler which estimates rare event probabilities in Section 5.2.

5.1. A simple particle filter
The almost constant velocity model in the tracking literature.
2次元粒子の運動.
位置のみ不完全だが測定可能(=誤差含む), 速度は測定できない, 測定は離散時間
SMCTC ライブラリの使用方法

More Related Content

What's hot

OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてOpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてFumiya Nozaki
 
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-Fumiya Nozaki
 
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...Deep Learning JP
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)洋史 東平
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-Fumiya Nozaki
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半Tetsuya Morimoto
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
OpenFOAMの壁関数
OpenFOAMの壁関数OpenFOAMの壁関数
OpenFOAMの壁関数Fumiya Nozaki
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門Yuya Unno
 
カーネル VM懇親会LT
カーネル VM懇親会LTカーネル VM懇親会LT
カーネル VM懇親会LTcosmo0920
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 

What's hot (20)

OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてOpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
 
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
 
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
[DL Hacks] Deterministic Variational Inference for RobustBayesian Neural Netw...
 
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
llvm入門
llvm入門llvm入門
llvm入門
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
OpenFOAMの壁関数
OpenFOAMの壁関数OpenFOAMの壁関数
OpenFOAMの壁関数
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
カーネル VM懇親会LT
カーネル VM懇親会LTカーネル VM懇親会LT
カーネル VM懇親会LT
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 

Viewers also liked

La Cumbre de Capital Humano para Servicios Financieros LatAm
La Cumbre de Capital Humano para Servicios Financieros LatAm La Cumbre de Capital Humano para Servicios Financieros LatAm
La Cumbre de Capital Humano para Servicios Financieros LatAm Hanson Wade Ltd
 
Presentación de Arsys en HP Discover 2011
Presentación de Arsys en HP Discover 2011Presentación de Arsys en HP Discover 2011
Presentación de Arsys en HP Discover 2011Arsys
 
1a Cumbre Salud, Vida & Pensiones América Latina 2016
1a Cumbre Salud, Vida & Pensiones América Latina 20161a Cumbre Salud, Vida & Pensiones América Latina 2016
1a Cumbre Salud, Vida & Pensiones América Latina 2016Hanson Wade Ltd
 
Una visión de los Negocios de Software y Servicios Informáticos en Latinoamérica
Una visión de los Negocios de Software y Servicios Informáticos en LatinoaméricaUna visión de los Negocios de Software y Servicios Informáticos en Latinoamérica
Una visión de los Negocios de Software y Servicios Informáticos en LatinoaméricaUNITECH S.A.
 
La epsitemoogía o estudio del conocimiento humano
La epsitemoogía o estudio del conocimiento humanoLa epsitemoogía o estudio del conocimiento humano
La epsitemoogía o estudio del conocimiento humanoEdgar Bravo
 
principios valores familia desde la cosmovision andina
principios valores familia desde la cosmovision andinaprincipios valores familia desde la cosmovision andina
principios valores familia desde la cosmovision andinaAminta Henrich Warmi Khuyay
 
4a Cumbre Insurance Tech América Latina
4a Cumbre Insurance Tech América Latina4a Cumbre Insurance Tech América Latina
4a Cumbre Insurance Tech América LatinaHanson Wade Ltd
 
Histology of endocrine system
Histology of  endocrine systemHistology of  endocrine system
Histology of endocrine systemMBBS IMS MSU
 

Viewers also liked (8)

La Cumbre de Capital Humano para Servicios Financieros LatAm
La Cumbre de Capital Humano para Servicios Financieros LatAm La Cumbre de Capital Humano para Servicios Financieros LatAm
La Cumbre de Capital Humano para Servicios Financieros LatAm
 
Presentación de Arsys en HP Discover 2011
Presentación de Arsys en HP Discover 2011Presentación de Arsys en HP Discover 2011
Presentación de Arsys en HP Discover 2011
 
1a Cumbre Salud, Vida & Pensiones América Latina 2016
1a Cumbre Salud, Vida & Pensiones América Latina 20161a Cumbre Salud, Vida & Pensiones América Latina 2016
1a Cumbre Salud, Vida & Pensiones América Latina 2016
 
Una visión de los Negocios de Software y Servicios Informáticos en Latinoamérica
Una visión de los Negocios de Software y Servicios Informáticos en LatinoaméricaUna visión de los Negocios de Software y Servicios Informáticos en Latinoamérica
Una visión de los Negocios de Software y Servicios Informáticos en Latinoamérica
 
La epsitemoogía o estudio del conocimiento humano
La epsitemoogía o estudio del conocimiento humanoLa epsitemoogía o estudio del conocimiento humano
La epsitemoogía o estudio del conocimiento humano
 
principios valores familia desde la cosmovision andina
principios valores familia desde la cosmovision andinaprincipios valores familia desde la cosmovision andina
principios valores familia desde la cosmovision andina
 
4a Cumbre Insurance Tech América Latina
4a Cumbre Insurance Tech América Latina4a Cumbre Insurance Tech América Latina
4a Cumbre Insurance Tech América Latina
 
Histology of endocrine system
Histology of  endocrine systemHistology of  endocrine system
Histology of endocrine system
 

Similar to SMCTC ライブラリの使用方法

PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code readingMasami Hiramatsu
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Appresso Engineering Team
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Seiya Tokui
 
Data assim r
Data assim rData assim r
Data assim rXiangze
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!bitter_fox
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Implementation patterns
Implementation patternsImplementation patterns
Implementation patternsTatsuya Maki
 
El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704RCCSRENKEI
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share久司 中村
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部NVIDIA Japan
 

Similar to SMCTC ライブラリの使用方法 (20)

PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code reading
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Data assim r
Data assim rData assim r
Data assim r
 
ALPSチュートリアル(3) アプリケーション実習
ALPSチュートリアル(3) アプリケーション実習ALPSチュートリアル(3) アプリケーション実習
ALPSチュートリアル(3) アプリケーション実習
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Implementation patterns
Implementation patternsImplementation patterns
Implementation patterns
 
El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

SMCTC ライブラリの使用方法

  • 1. マニュアルとコードを読み, RcppSMCを使用したSMCの方法を以下にまとめた. マニュアルメモ自体は本ノートの下部を参照. 観測値はglobalな観測値クラスの配列に詰めておくものとする(global変数). 粒子の初期化関数や重み計算関数などでglobal変数として使用する例がRcppSMCで与えられている(そこでは変数y). 以下のmyfilter.cppを例にして使用方法をまとめておく. myfilter.cpp の抜粋 1. samplerを生成 粒子数と履歴保持について設定する. 履歴に依存するフィルタでなければSMC_HISTORY_NONEとする. それ以外は下のマニュアルメモ参照. 2. movesetを生成 粒子の初期化関数と粒子遷移関数, MCMC関数の設定を行う. それぞれ別途作成しておく. - 粒子の初期化関数は粒子を返す moveset.DoInitで使用される. - 粒子遷移関数は指定した時刻のデータで粒子を遷移させる 提案分布に該当する. Bootstrap filterではシステムモデルとなる. NOTE 粒子の重みは規格化されていない対数尤度として保持されておりparticle.GetLogWeight()で取得出来る. これはlogweightを取得するゲッターである. logweightを更新するロジックもこの遷移関数に記述する. マニュアルやコードを見ると, AddToLogWeight()が使われており, 1時点前の重みが対数尤度として表されており, それに対して新たな対数尤度を加算するというロジックとなる. 元々の重みに対して1ステップのフィルタリング分の重みをかけることで, 粒子の重みを更新することになる. リサンプリングを行わない場合は重みが小さいものが残ってしまい, インポータンスサンプリングの観点からは 良くないが, 解析的にはおかしなことをしているわけではない. moveset.DoMoveで使用される. numberは遷移ルールの個数. 単純な場合は1. - MCMC関数はDoMove後のMCMCサンプリング用 3. samplerにリサンプリングパラメータを設定
  • 2. マニュアルメモも参照のこと. 4. samplerにmovesetを設定 文字通り. 5. samplerの初期化 時刻変数(samplerのメンバ)T=0 粒子の初期化: movesetのDoInit経由で指定した粒子の初期化関数による初期粒子セットを生成する. 履歴保持データ Initialize 6. samplerの繰り返し処理と指標計算(sampler.Integrate) sampler.h IterateEss()を呼んでいる;
  • 3. 6.1 履歴保存 省略. 6.2 粒子遷移 movesetのDoMoveで遷移する. 例では 6.3 重みの規格化 ※ここで重みの規格化が行われている. 6.4 ESSの計算とリサンプリング 文字通り. 6.5 MCMCステップ 6.6 時刻Tを1つ増やす 文字通り. 6.7 ESSを返す 文字通り. 7. Output量の計算
  • 4. 被積分関数を定義しておき, sampler.Integrateで計算する. SMCTC: Sequential Monte Carlo template Class http://www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/johansen/smctc マニュアルメモ http://www.jstatsoft.org/v30/i06/paper 4. The SMCTC Library 4.1. Library and program structure smc::sampler : ライブラリのアルゴリズム全体に対応するもの smc::particle : 個別の粒子の値と重みを保持するもの smc::history : 前回のiterationの後のsamplerの状態を表すもの smc::historyelement : 前回のsamplerの状態を保持するためにhistoryによって用いられるもの smc::historyflags : samplerの履歴に関する簡単な情報を保持するためのもの. 現状ではリサンプリングを行ったかどうかを保持することに用 いられている. smc::moveset : 粒子の初期化, 提案分布, 追加的なMCMCによる変化を扱う smc:rng : GSL random number facilitiesに対するラッパー. 現状では一部の機能のみ対応. 直接GSLの機能を利用することも可能. smc:gslrnginfo : GSL 乱数生成機に関する情報を扱う smc::exception : 例外処理に用いるもの SMCTCを用いたSequential Monte Carloで実行される手続きの概要. - 初期化 smc::sampler が利用可能になる前に, samplerが行うこととSMCアルゴリズムのパラメータを指定する必要がある. - 繰り返し
  • 5. smc::sampler が生成された後は完了もしくは結果が得られるまで繰り返す - 出力 samplerそのものと粒子セットに基づく何らかの期待値を出力する 4.2. Creating, configuring and running a sampler: smc::sampler まずは新しいsamplerオブジェクトを作成する. 粒子数を指定する必要がある(粒子数は固定). smc::samplerのコンストラクタの引数は基本的には2つ. 粒子数と, samplerの履歴(各繰り返しにおいて生成される粒子セット)保持メモリ容 量を指定する値(SMC_HISTORY_RAM or SMC_HISTORY_NONE)である. NONEの方を指定すると直近に生成された粒子セットのみを保 持する.  smc::samplerはテンプレートクラスなので型を指定する必要がある. ここでの型はクラスもしくはC++のデータ型のことであり, 状態空間の 点を表すものである. 状態空間が1次元の実数全体, 1000粒子, 履歴保持なしのsamplerをコンストラクトするなら, smc::sampler<double> Sampler(1000, SMC_HISTORY_NONE); 同様に, 状態空間がn次元の実数全体, 1000粒子, 履歴有りなら smc::sampler<std::vector<double> > Sampler(1000, SMC_HISTORY_RAM); とする. 提案分布と重み(Proposals and importance weights) 粒子の遷移と重み付けを担う関数はsmc::movesetを経由してsmc::samplerに引き渡す. movesetはsamplerに対してSetMoveSetメンバ関数で提供される. このmovesetは事前に初期化されていなければならない. Section 4.3参照. リサンプリング(Resampling) 幾つかのリサンプリング方法が指定できる. 常にリサンプリングする, しない, ESSが指定された閾値を下回るときリサンプリングするのいず れかである. SetResampleParams(ResampleType, double)によって設定する. ResampleTypeはenumerationであり, 次の表から選ぶ. 2つめのdoubleの値が負の場合はリサンプリングしない. [0,1]の間の場合は, ESSの全粒子数に対する割合がその値を下回るときに, 1より大きい場合は, ESSがその値より小さい場合に, リサンプリングする. 全粒子数より大きい値を設定すれば, 常にリサンプリングすること になる. MCMCによる散らし(MCMC Diversification) リサンプリングの後にMCMCによる遷移が適用出来る. 適切に設定されたmovesetをsamplerに渡すことで自動的に実行可能である. Section 5.2 参照. アルゴリズムの実行(Running the algorithm) 粒子セットの初期化を実行するsmc::samplerのInitialize(). これは履歴を消去し, 全粒子に一度ずつmovesetに設定された関数を実行することで 初期化する.  初期化が済めば繰り返し処理を行う. Iterate()とIterateUntil(int)の2通りがある. 出力(Output) 粒子セットに基づく経験測度に関する積分が実行可能である. 粒子セットの位置と重みも取得できる. - Simple integration double integrand(const T& , void *) where T denotes the type of the smc::sampler template class in use. Sampler.Integrate(integrand, void *(p)); where p is a pointer to auxiliary information that is passed directly to the integrand function via its second argument { this may be safely set to NULL if no such information is required by the function. 例5.1に説明有り. - Path-sampling integration http://www.cis.upenn.edu/~taskar/courses/cis700-sp08/papers/gelman-meng.pdf 省略しておく.
  • 6. - General output For more general tasks it is possible to access the locations and weights of the particles directly. Three low-level member functions provide access to the current generation of particles, each takes a single integer argument corresponding to a particle index. GetParticleValue(int n) GetParticleLogWeight(int n) GetParticleWeight(int n) n番目の粒子に対する, 値の参照, 規格化されていない対数重み, 規格化されていない重みをそれぞれ返す. smc::sampler の GetHistory() も使えるが, 詳しくはmanualをみる. Finally, a human-readable summary of the state of the particle system can be directed to an output stream using the usual << operator 4.3. Specifying proposals and importance weights: smc::moveset - Initializing the particles samplerが保持する粒子の初期化関数 smc::particle<T> fInitialise(smc::rng *pRng); T: samplerの型 particleのコンストラクタ smc::particle<T> (value, dLogWeight) - Moving and weighting the particles 提案分布 void fMove(long, smc::particle<T> &, smc::rng *) samplerが呼ぶ時, 1番目のlongは現在の繰り返し番号に設定される -- Changing the value GetValue() and SetValue(T) GetValuePointer() -- Updating the weight GetWeight(): 規格化されていない重み GetLogWeight() SetWeight(double) SetLogWeight(double) AddToLogWeight(double) MultiplyWeightBy(double) ※粒子の重み更新において, AddToLogWeightを用いた例がRcppSMCにある. 意味的にSetLogWeightでないのか? 要確認 粒子の重みの更新方法について確認する. 規格化はsampler<space>のiterateEssの中でやっている. - Mixtures of moves 複数のtransition kernelを用いる. For example, if the sampler is of type T and fMv1 and fMv2 each correspond to a valid move function then the following code would produce an array of the appropriate type named pfMoves which contains pointers to these two functions: void (*pfMoves[])(long, smc::particle<T> &,smc::rng*) = {fMv1, fMv2}; long fSelect(long lTime, const smc::particle<T> & p, smc::rng *pRng) - Additional MCMC moves If MCMC moves are required then one should simply produce an additional move function with an almost identical prototype to that used for proposal moves. The one difference is that normal proposals have a void return type, whilst the MCMC move function should return int. The function should return zero if a move is rejected and a positive value if it is accepted. - Creating an smc::moveset object -- Single-proposal movesets moveset ( particle<T>(*pfInit)(rng *), void(*pfNewMoves)(long, particle<T> &, rng *), int(*pfNewMCMC)(long, particle<T> &, rng *)) optionally, a pointer to an MCMC move function (if one is not required, then the argument specifying this function should be set to NULL) -- Mixture-proposal movesets moveset ( particle<T>(*pfInit)(rng *), long(*pfMoveSelector)(long, const particle<T> &, rng *), long nMoves, void(**pfNewMoves)(long, particle<T> &, rng *), int(*pfNewMCMC)(long, particle<T> &, rng *)) 参照:5.2節 -- Using a moveset samplerのSetMoveSetで設定する.
  • 7. 4.4. Error handling: smc::exception const char* szFile; long lLine; long lCode; const char* szMessage; 参照:5.1節 4.5. Random number generation 特に気にしなくて良いはずであるが, 必要ならマニュアルを見る. GSL_RNG_SEED GSL_RNG_TYPE 参照:5.1節 5.1節の例では適当なディレクトリでBASH promptにおいて GSL_RNG_TYPE=ranlux GSL_RNG_SEED=36532673278 ./pf という設定値を用いている. 5. Examples applications a simple particle fillter in Section 5.1 and a more involved SMC sampler which estimates rare event probabilities in Section 5.2. 5.1. A simple particle filter The almost constant velocity model in the tracking literature. 2次元粒子の運動. 位置のみ不完全だが測定可能(=誤差含む), 速度は測定できない, 測定は離散時間