パラメータ設定
本ツールは可視化のため 2D に固定。LHS 自体は任意の次元 d に拡張可能です。
シードを更新
リセット
乱数は LCG で決定論的に生成されます。同じシードと N なら毎回同じサンプルが得られます。
サンプル散布図(左: LHS/右: 単純 MC)
背景の格子線は LHS の N×N セル分割。LHS は各行・各列に1点ずつ(層化)、単純 MC は層化なし。
理論・主要公式
ラテン超立方サンプリングでは、各次元 $d$ について $\{0,1,\dots,N-1\}$ の独立な順列 $\pi_d$ を作り、$i$ 番目のサンプルの $d$ 次元目を次式で与えます($u_{i,d}\sim U(0,1)$):
$$x_{i,d} = \frac{\pi_d(i) + u_{i,d}}{N}$$
関数 $f$ の積分はサンプル平均で推定します:
$$\hat{I} = \frac{1}{N}\sum_{i=1}^{N} f(\mathbf{x}_i)$$
滑らかな関数では LHS の推定分散は単純 MC の $1/N$ より速く減少し、誤差は実用上小さくなります:
$$\mathrm{Var}(\hat{I}_\text{LHS}) \le \mathrm{Var}(\hat{I}_\text{MC})$$
テスト関数 $f_1(x,y)=\sin(\pi x)\sin(\pi y)$ の真値は $4/\pi^2 \approx 0.4053$。本ツールではこの値を基準に LHS と MC の誤差を比較しています。
ラテン超立方サンプリング(LHS)とは
🙋
CAE で「LHS」っていう言葉をよく聞くんですけど、普通のモンテカルロと何が違うんですか?乱数で点を打つのは同じですよね?
🎓
大事な質問だね。同じ「ランダムに点を打つ」のでも、置き方のルールが違うんだ。LHS は各次元を $N$ 個の等間隔セルに分けて、「各行・各列に必ず1点だけ置く」という縛りをかけるんだよ。上のシミュレーターの左側を見て、横方向の格子の各列、縦方向の各行にちょうど1個ずつ青い点が並んでいるのが分かるかな?単純 MC(右側のオレンジ)は何の縛りもなく独立に打つから、偶然空っぽの帯ができたり、点が固まったりする。
🙋
なるほど!「各行と各列に1個ずつ」って、数独みたいなルールなんですね。それでなんで積分が正確になるんですか?
🎓
いいたとえだね。サンプルが空間を「均一に」覆うから、関数の値を平均するときの偏りが小さくなるんだ。たとえば右上の値が大きい関数があるとして、単純 MC で偶然そこにサンプルが入らないと推定値は過小評価される。LHS はどの行・どの列にも必ず1点あるから、そういう「空き」が原理的に出にくい。シミュレーターで N=20 くらいに下げてシードを何回か振ってみて。LHS の推定値(青)はわりと真値 0.4053 の近くに留まるのに、MC(オレンジ)は0.3〜0.5の間を大きく振れるはずだ。
🙋
「誤差比」のカードが「2.5×」とか「5×」とか出てますね。これは LHS の方が単純 MC より誤差が小さいって意味ですか?
🎓
そうそう、|MC誤差|÷|LHS誤差| だから、1より大きいなら LHS の勝ちだ。実務で大事なのは、これが「同じサンプル数」での話だってこと。たとえば 100 ケースの CFD を回すコストを払うなら、その 100 ケースを LHS で配置するだけで、結果から得られる平均値や応答曲面の精度が単純 MC より明らかに良くなる。追加コストはゼロで、サンプリングの仕方を変えるだけだ。
🙋
関数を「高周波」(2)に変えると、誤差比が1付近になってあまり差がなくなりますね。これって何でですか?
🎓
鋭い観察だ。LHS が効くのは「滑らかな関数」のときだけなんだ。$\sin(20\pi x)\sin(20\pi y)$ みたいに細かく振動する関数だと、1つのセルの中で関数が何周もしてしまうから、層化の効果がほぼ消えてしまう。CAE 用語で言うと「相関のない高周波ノイズ」には LHS は無力。実務では応答が滑らかであることを期待して使うか、応答曲面で滑らかな代理モデルを噛ませてから LHS で扱うのが定石だよ。
よくある質問
LHS と「準乱数(Sobol 列など)」はどう違いますか?
どちらも単純モンテカルロより均一に空間を覆う「分散低減サンプリング」ですが、設計思想が異なります。LHS は各次元の周辺分布を必ず均一にする層化サンプリングで、サンプル数 N を事前に決めてから一括生成します。Sobol 列などの準乱数(低食い違い列)は逐次的に追加できる代わりに、次元間の相関構造を制御しにくい場合があります。CAE の設計探索では事前に試行回数を決める LHS が、シミュレーション数値積分では Sobol 列が好まれる傾向があります。
高次元(d=20 など)でも LHS は有効ですか?
「各次元の周辺分布が均一になる」という性質は次元数に関係なく成り立ちます。しかし高次元では空間そのものが指数的に大きくなる(次元の呪い)ため、N が小さいと2次元投影で見ると依然として穴だらけになります。高次元 LHS をさらに改善するために、最大最小距離を最大化する Maximin LHS や、相関係数を最小化する最適化 LHS(MILHS)が実務でよく使われます。
サンプル数を後から追加できますか?
基本の LHS は N を決め打ちで一括生成するため、後から1点だけ追加すると「各行・各列に1点」の性質が崩れます。追加が必要な場合は、サンプル数を $N \to kN$ に増やす Nested LHS や、Refinable LHS と呼ばれる構成法が使われます。実装が複雑なので、可能なら最初から十分大きな N で生成するのが簡単です。
LHS は必ず単純 MC より良い結果になりますか?
期待値の意味では「対象関数が各次元について単調または滑らかなとき」LHS の分散は単純 MC 以下になることが理論的に保証されています(McKay 1979)。しかし高周波関数や、サンプル数 N が極端に小さい場合は両者の差が縮みます。本シミュレーターの「高周波」関数(モード 2)で誤差比が1付近に張り付くのは、まさにその例です。
実世界での応用
応答曲面・代理モデルの学習データ作成: 1ケースの FEM/CFD 解析に数時間かかるような状況では、設計変数空間に何百ケースも投じる余裕はありません。LHS で 30〜100 ケース程度を均一配置し、その結果から多項式回帰やクリギング、ニューラルネットワークなどの代理モデルを学習させて、設計探索や最適化を高速化する用途は CAE 分野の標準的なフローです。
不確かさ定量化(UQ)と信頼性解析: 材料定数・板厚・荷重などのばらつきが製品性能に与える影響を、確率分布の入力から評価する確率論的解析でも LHS が使われます。Monte Carlo Filtering や Saltelli の感度解析法と組み合わせると、限られた試行回数で各入力変数の重要度をランク付けできます。
実験計画法(DOE): 計算機実験だけでなく、化学プロセスや製造ラインの実機実験でも、要因の組み合わせを均一に覆う必要がある場面では LHS が活用されます。直交表ベースの古典的 DOE と異なり連続変数を扱いやすく、要因数が多くサンプル数を絞りたいケースに向いています。
機械学習のハイパーパラメータ探索: 学習率・正則化係数・隠れ層サイズなどのハイパーパラメータ空間を効率的に探索する方法として、ランダムサーチの改良版に LHS が使われることがあります。グリッドサーチより少ない試行で広い空間をカバーでき、ベイズ最適化の初期点配置にも好まれます。
よくある誤解と注意点
最も多い誤解は、「LHS にすればサンプル数を減らしても精度が落ちない」と過信する ことです。LHS が改善するのは推定値の分散であって、関数の局所構造そのものを補完するわけではありません。たとえば応答が急峻なピークを持つ場合、N=20 の LHS でそのピークの位置を正確に当てるのは依然として困難です。シミュレーターでガウス山関数(モード 0)と N=20 を組み合わせると、LHS でも真値からそれなりにズレが出ます。「均一にはなる」が「ピーク検出は別問題」だと覚えておきましょう。
次に、「各次元の周辺分布が一様」と「サンプル全体が一様」は別物 だという点。LHS は周辺分布を保証するだけで、2次元の射影で見ると依然として偏りが残ることがあります。シードを何度か変えて比較すると、たまに点が斜めに並んで「対角偏り」が起こるのが見えるはずです。これを避けるには Maximin LHS や Optimized LHS のような最大最小距離基準を入れた改良版を使います。本ツールは標準 LHS なので、運次第でこういう偏りも観察できます。
最後に、テスト関数によって LHS の優位性が大きく変わる ことに注意してください。本ツールのモード 1($\sin(\pi x)\sin(\pi y)$)は LHS が得意とする滑らかな低周波関数で、誤差比は数倍〜十倍に達することもあります。モード 2 の高周波関数では効果がほぼ消え、ときに MC の方が偶然良い値を出すこともあります。実務では事前にテスト関数で挙動を見るか、複数シードで分散を評価するのが安全です。LHS は万能ではなく「滑らかな関数のための加速器」と位置づけるのが正しい使い方です。