hooked on mechatronics

いつまで経っても初心者

解の集合として捉え、基底を取る

「正解がない」のではなく、「解が一つではない」 ― パレート最適という捉え方

※本記事は、最適化理論の考え方から着想を得て、日常や仕事の思考に応用してみる連載の第2回です。Claude Fable 5と一緒に書きました。第1回では、意思決定の前に不確実性の存在を認識し、その幅(不確実集合)を推定することの大切さについて書きました。

はじめに

「学生時代は正解のある問題を解くが、社会に出ると正解のない問題を解くことになる」。よく聞く言葉ですし、実感としても大きく間違ってはいないと思います。

ただ、この「正解がない」という表現は、少し雑ではないでしょうか。雑なだけならよいのですが、この言葉は思考を止める方向に働きがちです。正解がないなら、考えても仕方がない。正解がないなら、どの答えも同じくらい正しい(あるいは正しくない)。そう受け取られた瞬間に、問題解決は前に進まなくなります。

そこで、こう捉え直してみます。社会の問題に正解が「ない」のではなく、解が「唯一ではない」。最適化理論の言葉で言えば、評価軸が一つの単一目的最適化ではなく、複数の軸が衝突する多目的最適化になっていて、解は一点ではなくパレート最適解の集合として存在している――という捉え方です。この記事では、なぜこの捉え方のほうが問題解決に向いているのかを書いてみます。

学校の問題と社会の問題は、何が違うのか

学校のテストには正解が一つあります。これは、評価の軸が一つに固定されているからです。数学の答案は「数学的に正しいか」という単一の目的で評価され、その目的のもとでは最適解が一意に定まります。

一方、社会の問題では評価の軸が複数あり、しかもそれらが互いに衝突します。製品開発なら品質とコストと納期。組織運営なら短期の成果と長期の育成。個人のキャリアなら収入とやりがいと時間。どれか一つの軸を良くしようとすると、別の軸が悪くなる。この構造を、最適化理論では多目的最適化と呼びます。

多目的最適化では、すべての軸で同時に一番になる解は、普通は存在しません。その代わりに、「どれかの軸を犠牲にしない限り、他の軸をこれ以上改善できない」という解が複数現れます。これがパレート最適解であり、その集まりがパレート最適解の集合(パレートフロント)です。

つまり、「正解がない」の正体は、解が存在しないことではなく、単一の軸では序列をつけられない解の集合が残ることなのです。

なぜこの捉え方が問題解決に向いているのか

「正解がない」と「解が集合として存在する」。同じ状況の言い換えのようでいて、この二つは思考の進み方をまったく変えます。後者の捉え方に立つと、問題解決は次のような手順に分解できるようになります。

解の集合を、曖昧ながらも把握する

「正解がない」と捉えている限り、解の空間はただの霧です。「パレート最適解の集合がある」と捉えると、まずその集合の姿を掴みにいこう、という構えが生まれます。

厳密に描く必要はありません。たとえば、ある軸を最優先した場合の極端な解と、別の軸を最優先した場合の極端な解を思い浮かべ、その間にどんな選択肢が並んでいそうかを想像する。それだけでも、解の地形はぼんやり見えてきます。同時に、この段階で「明確に悪い解」も見分けられるようになります。何も犠牲にせずにどこかを改善できる余地が残っている解(劣解)は、価値判断を持ち出すまでもなく改善すべき解です。「正解がない」からといって、どの解も同じ価値なわけではないのです。

集合に適した基底(評価軸)を設定する

解集合の姿がぼんやり見えてきたら、その広がりをうまく記述できる軸を選びます。線形代数の言葉を借りれば、対象に適した基底を取る、というイメージです。

この問題の解たちは、何と何のトレードオフの上に並んでいるのか。品質とコストなのか、スピードと関係者の納得感なのか、自由度と安定性なのか。ここを言語化できた時点で、「なんとなく難しい問題」は「特定のトレードオフ構造を持つ問題」に変わります。逆に、軸の設定を誤ると、本当は対立していないものを対立させて悩んだり、肝心の対立を見落としたりします。解集合の把握と基底の設定を行き来しながら、その問題に合った軸を探ることになります。

各基底について観察・考察する

軸が定まれば、検討は軸ごとに分解できます。この軸は最低限どこまで確保する必要があるのか。この軸とあの軸のトレードオフは、実際どれくらい急なのか。少し譲るだけで他の軸が大きく改善する「うまみのある領域」はどこか。

こうして各軸を個別に観察し、考察していくと、最初は曖昧だったパレート最適解の集合の輪郭が、少しずつ確かなものになっていきます。漠然と全体を睨んで唸るのではなく、軸ごとに調べて集合の解像度を上げていく。この分解可能性こそが、「解が集合として存在する」と捉えることの実務的な利点だと思います。

そして、ここまで進めてはじめて、本当の意味での「正解のなさ」が登場します。パレートフロント上のどの一点を選ぶかは、軸の重み付け、すなわち価値判断の問題であり、論理だけでは決まりません。しかしそれは、霧の中で途方に暮れて選ぶことではなく、構造化された集合の中から、明示された価値観に基づいて選ぶことです。同じ「選ぶ」でも、質がまったく違います。

副産物:意見の対立も整理できる

この捉え方には、議論の見通しを良くするという副産物もあります。仕事上の意見の対立の多くは、事実認識の対立ではなく、軸の重み付けの違い――つまり、同じパレートフロント上の別の点を指しているだけ――です。

「相手が間違っている」のではなく「相手は別の軸を重く見ている」のだと分かれば、議論は「どちらが正しいか」から「どの軸をどれだけ重視すべきか、それはなぜか」へと移せます。前者は水掛け論になりがちですが、後者は前提をすり合わせる建設的な議論になります。

おわりに

「社会には正解がない」という言葉を、「解がパレート最適解の集合になっている」と読み替える。そうするだけで、やるべきことが具体的になります。解の集合を曖昧ながらも把握する。その集合に適した基底(評価軸)を設定する。各基底について観察し、考察して、集合の解像度を上げる。そのうえで、価値判断として一点を選ぶ。

正解のなさは、思考を止める理由ではなく、解が集合であることの言い換えにすぎません。集合として捉えれば、正解のない問題にも、論理的に取り組むための足場を作ることができるのだと思います。

次回は、「目的関数」という概念を借りて、そもそも何を最適化すべきなのか、という話を書く予定です。

不確かさの幅を見積もり、決定する

「不確実性下の意思決定」の前に大切なこと ― 不確実性を認識し、その幅を推定する

※本記事は、最適化理論の考え方から着想を得て、日常や仕事の思考に応用してみる連載の第1回です。Claude Fable 5と一緒に書きました。

はじめに

不確実性下の意思決定についての本がよく出ています。ただ、それらの多くは「不確実な状況で、どう決めるか」という決め方の話に重心があります。

私が本当に大切だと思っているのは、その手前です。つまり、不確実性下でうまく決めること自体が大切なのではなく、そもそも不確実性が存在すると認識し、その範囲を推定したうえで意思決定に臨むことが大切だ、という話です。

決め方の巧拙は、その前のプロセスの質で大部分が決まってしまいます。この記事では、「決める前」の二つのプロセス――不確実性の存在の認識と、不確実性の範囲(不確実集合)の推定――について、なぜそれが大切なのか、そしてどうすればできるのか(コツ)を書いてみます。

最適化理論は、不確実性をどう扱っているか

本題に入る前に、この連載の下敷きである最適化理論の話を少しさせてください。

最適化とは、与えられた条件のもとで目的を最も良くする答えを、数学的に探すことです。たとえば「需要を満たしつつ総コストが最小になる生産計画」や「移動時間が最短になる配送ルート」を求める、といった具合です。このとき通常の最適化では、需要や所要時間といった前提のパラメータを「既知の一点」として扱います。需要は1万個、この区間の所要時間は30分、と決め打ちして解くわけです。

ところが、現実のパラメータは一点には定まりません。そして厄介なことに、ギリギリまで最適化された解ほど、前提のズレに対して脆いという性質があります。需要1万個ちょうどに合わせて余裕なく組まれた生産計画は、実際の需要が9千個なら在庫の山を、1万1千個なら欠品を生みます。余裕を削ぎ落とすことこそが最適化なので、最適解は、前提が少し狂っただけで大きく崩れるのです。

この問題への一つの答えが、ロバスト最適化と呼ばれる分野です。発想はこうです。真の値は分からない。しかし、「真の値はおそらくこの範囲のどこかにある」という集合――不確実集合――なら設定できる。そして、その集合内のどの値が実現しても破綻しない解を探す。つまり、不確実性を「ないもの」として扱うことをやめ、その範囲を明示的に定義したうえで、解に織り込むのです。

重要なのは、ロバスト最適化の質が、不確実集合の設定の質にかかっているという点です。集合を広く取りすぎれば、ありえない事態にまで備えた、過度に保守的な解しか得られません。狭く取りすぎれば、決め打ちと同じ脆さが残ります。不確実性の存在を認めること、そしてその範囲を適切に見積もること。この二つが、良い解を得るための前提条件になっているわけです。

そして、この構造は、私たち自身の意思決定とまったく同じだと思うのです。

なぜ「決める前」が大切なのか

理由はシンプルで、どれほど優れた意思決定の手法も、入力が歪んでいれば正しく機能しないからです。

私たちが判断の材料にしているのは、現実そのものではなく、自分の認識です。そして、自分の認識よりも実際の姿は異なっているし、自分が知っている内容よりも世の中は広いし、自分が思っていることがすべてではありません。この三つのズレを無視して意思決定をするとどうなるか。不確実性は「存在しないもの」として扱われ、自分の見立てという一点にすべてを賭けることになります。需要を決め打ちした生産計画と同じで、見立てが少し外れただけで、判断全体が崩れかねません。

実際、振り返ってみると、判断の失敗の多くは「決め方」の失敗ではありません。選択肢の比較を間違えたのではなく、そもそも考慮すべき要素が視界に入っていなかった、想定の幅が狭すぎた――つまり、不確実性の認識と推定の段階でつまずいているケースがほとんどではないでしょうか。

ただし、認識するだけでは足りません。「世の中は不確実だ」「何が起こるかわからない」と言うだけなら、思考停止と紙一重です。大切なのは、そのわからなさが「どの程度なのか」を見積もること――ロバスト最適化の言葉で言えば、不確実集合を推定することです。この幅が推定できてはじめて、不確実性は意思決定に反映できる形になります。

逆に言えば、認識と推定さえきちんとできていれば、意思決定そのものは驚くほど素直になります。決め方の技法が生きるのは、この土台があってこそです。

不確実性の存在を認識するコツ

とはいえ、「自分の認識がズレているかもしれない」と自然に思える人は多くありません。ズレは、本人から見えないからこそズレなのです。だからこそ、意識的な仕掛けが要ります。

判断の前提を書き出す

自分の判断は、必ず何らかの前提の上に乗っています。「顧客はこれを求めているはず」「この市場は伸びるはず」「あの人はこう動くはず」。まずこれらを言語化して書き出してみると、自分の結論がいかに多くの「はず」に支えられているかが見えます。書き出された前提の一つひとつが、不確実要素の候補です。

「間違っているとしたら、どこか」と自問する

「自分は正しいか?」と問うと、人は正しい理由を探し始めます(確証バイアス)。問いを逆にして、「もし自分の見立てが間違っているとしたら、どこが間違っている可能性が高いか?」と自問すると、視界の外にあったものが出てきやすくなります。物事が失敗した未来を先に想定し、そこから原因を挙げていく「プレモータム(死亡前検死)」も、同じ発想の手法です。

確信の強さを、疑うためのシグナルにする

「絶対こうだ」と感じるときほど、注意が必要です。強い確信は、十分に検討した結果というより、反証となる情報が視界に入っていないことの表れであることが少なくありません。確信の強さそのものを、「今、自分は何かを見落としていないか」と立ち止まるトリガーにしてしまうのがおすすめです。

立場の違う人の視点を借りる

自分一人の視界には限界があります。利害や専門、経験の異なる人がこの状況をどう見るかを想像する、あるいは実際に聞いてみる。自分がまったく気にしていなかった論点が出てきたら、それは「知らないことすら知らなかった」領域が視界に入った瞬間です。

不確実性の範囲を推定するコツ

不確実な要素の存在に気づけたら、次はその幅を見積もります。ここでのポイントは、未来を当てにいくことではなく、「真の姿がこの範囲の外にある可能性は低い」と言える幅を作ることです。

点ではなく幅で見積もる

あらゆる見積もりを、一点ではなくレンジで持つ癖をつけます。「初年度売上1億円」ではなく、「悲観なら3,000万円、楽観なら2億円」。そして幅だけでなく、「何が起こると下限に近づき、何が起こると上限に近づくのか」という要因もセットで言語化します。要因の説明がつかない幅は、ただの気分です。

外部の視点・ベースレートを使う

自分の内側だけで幅を決めると、たいてい狭くなります。類似の事例では実際にどうだったか。同種の新規事業の何割が初年度計画を達成したか、同規模のプロジェクトは平均どれだけ遅延したか。外から見た統計的な実績(ベースレート)を幅の初期値に置き、そこから自分のケース特有の事情で調整する、という順番にすると、楽観への偏りをかなり防げます。

自分の「外れ方の癖」を較正する

過去の自分の見積もりと実績を突き合わせてみると、外れ方には癖があることがわかります。工数はいつも1.5倍かかる、売上見込みは強気に出がち、など。この癖を知っていれば、次の見積もりの幅を機械的に補正できます。予測を記録しておくこと自体が、将来の推定精度への投資になります。

前提ごとに「崩れたら幅がどう動くか」を見る

認識のステップで書き出した前提を一つずつ取り上げ、「これが崩れたら、結果はどこまで振れるか」を確認します。少し崩れただけで結果が大きく動く前提があれば、そこが不確実性の主因であり、幅を大きく取るべき場所です。すべてを精緻にやる必要はなく、「効く前提」を見つけることが目的です。

幅の外側に、余白を残す

ら知らない」領域は幅の中に入れられません。だから、推定した幅を意図的に少し広めに取る、時間や資金にバッファを残す、といった余白で備えます。完璧な推 どれだけ丁寧に推定しても、「知らないことす定は不可能である、という認識それ自体を、推定に織り込むということです。

おわりに

不確実性下の意思決定というテーマで本当に効くのは、決断の場面の技法ではなく、その前の地味なプロセスだと私は思っています。

自分の認識と現実はズレていて、世の中は自分の知っている範囲より広く、自分の考えがすべてではない――まず、それを認める。そのうえで、「わからない」で止まらずに、わからなさの幅を推定する。ここまでできていれば、意思決定は、推定した幅に対して素直に答えを出すだけの工程になります。

決め方を磨く前に、見えていないものの存在を認め、その広がりを測ること。遠回りに見えて、これが一番の近道だと思うのです。

次回は、多目的最適化の「パレート最適」という概念を借りて、「正解のない問題」との向き合い方について書く予定です。

ChatGPTに数式をレンダリングしてもらうためのプロンプト

ChatGPTと数式を使う会話をするときに、上手く数式をレンダリングしてもらうためのプロンプトです。
「ChatGPTをカスタマイズする」に設定してもうまく反映されないので、my GPTを作成して使用しています。

Could you please use the specific LaTeX math mode delimiters for your response?
LaTex math mode specific delimiters as following

inline math mode : `\(` and `\)`
display math mode: insert linebreak after opening `$$`, `\[` and before closing `$$`, `\]`

community.openai.com

アルゴリズムを効率化したい研究者のためのチートシート

はじめに

いかなる人間よりも幅広い知識を持つ o1 pro に、
「計算量の削減やアルゴリズムの効率化を図る際に注目すべき構造と性質」を挙げてもらったので、
チートシートとして掲載します。

以下に概要を示し、その後に詳細を載せています。

計算量を減らしたいときに押さえておきたい 20 のポイント

  1. スパース性 (Sparsity)

    • 多くの要素が0やほぼ0なら,演算・メモリを大幅カット
  2. 直交性(Orthogonality)

  3. 低ランク性 (Low-Rank Structure)

    • 冗長な成分をまとめて次元圧縮(行列因数分解やPCA など)
  4. 凸性・単調性 (Convexity / Monotonicity)

  5. ランダム化 (Randomization / Stochastic Methods)

  6. 多重解像度・階層構造 (Multi-Scale / Hierarchical)

    • 大域と局所を分けるマルチグリッドやウェーブレットで高速化
  7. 対称性・不変量 (Symmetry / Invariance)

    • 回転・並進などの対称性を見つければ,冗長計算を削減
  8. 局所性・ブロック構造 (Locality / Block Structure)

    • 大規模システムを弱結合な部分に分けると並列化・高速化が容易
  9. 並列化・分散化 (Parallel / Distributed)

    • ハードウェアリソースを最大活用し,大規模演算を一気に高速化
  10. PDE特有の構造 (Structure of PDEs / Operators)

  11. グラフ構造 (Graph-Based Structure)

    • ノードとエッジの関係を利用し,疎グラフやネットワーク問題を軽量化
  12. 多様体構造 (Manifold / Geometric Structure)

    • 高次元データに隠れた幾何を見抜けば,曲がった空間での最適化も効率UP
  13. テンソル構造 (Tensor Structure)

    • 多次元配列を低ランク分解(CP/Tucker/TT分解)して次元とメモリを削減
  14. マルコフ性・状態空間 (Markov / State-Space)

    • 履歴を省略し,「今の状態」から効率的に将来を推定・制御
  15. 自己相似性・フラクタル (Self-Similarity / Fractal)

    • 縮小コピーの繰り返しパターンを利用して圧縮や多重スケール解析
  16. 部分モジュラ性 (Submodularity)

    • 離散最適化で近似保証付き貪欲法が使える場合,大規模でも高速近似
  17. 整数性・離散構造 (Integrality / Discrete)

    • 0-1変数や組合せ問題の枝刈り・カット生成による効率的ソルバ
  18. 混合精度・量子化 (Mixed-Precision / Quantization)

    • 必要十分なビットだけ使い,メモリ帯域と演算負荷を削減
  19. 前処理・反復解法 (Preconditioning & Iterative Methods)

  20. 計算グラフ構造 (Computation Graph)

    • 自動微分や演算の再配置などで,複雑なモデルも効率良く実行

詳細

1. スパース性(Sparsity)

ポイント

  • データや行列・テンソルなどの多くの成分が0(もしくはほぼ0)となる構造を活用する.
  • 大規模次元でも必要な演算・メモリを大幅に削減でき,計算を高速化できる.

主な利用分野・応用例

2. 直交性(Orthogonality)

ポイント

  • ベクトルや行列が直交(内積が0)であることで,相互干渉を減らし,安定した計算や解釈が可能になる.
  • 信号処理・画像処理における変換基底としてはもちろん,機械学習や数値最適化の高速化にも寄与.

主な利用分野・応用例

3. 低ランク性(Low-Rank Structure)

ポイント

  • 行列・テンソルなどの実質的な次元(ランク)が小さい場合,多くの要素が冗長である.
  • SVD・NMFなどの分解を使った次元圧縮やデータ再構成で,計算・メモリを削減できる.

主な利用分野・応用例

  • 機械学習データマイニング
    • 行列因数分解(レコメンドシステム),潜在変数モデル,NMF
    • PCA(潜在次元への射影)
  • 信号処理・画像処理
    • 低ランク行列補完(欠損データの再構成,背景差分:Robust PCA)
  • 数値線形代数・最適化
    • 大規模行列の近似(ランダムSVD, CUR分解),モデリングの次元削減
  • 物理シミュレーション・計算科学
    • 境界要素法(BEM)などでの階層行列(H-matrix)近似
  • 統計・確率モデル

4. 凸性(Convexity)・単調性(Monotonicity)

ポイント

  • 目的関数や制約が凸であれば,勾配降下法や内点法といった効率的かつ安定的なアルゴリズムを適用可能.
  • モノトン作用素やリプシッツ連続などの性質があると,収束性・精度保証がしやすい.

主な利用分野・応用例

5. ランダム化(Randomization / Stochastic Methods)

ポイント

  • 確率的サンプリングを取り入れることで,計算負荷を分散・削減し,近似解を高速に得られる.
  • 大規模データを扱う機械学習などで必須となっているほか,数値解法や物理シミュレーションのモンテカルロ法としても活用.

主な利用分野・応用例

6. 多重解像度・階層構造(Multi-Scale / Hierarchical Methods)

ポイント

  • 空間的・時間的・周波数領域などでスケールを段階的(マルチレベル)に見ることで,局所的詳細と大域的概要を分けて扱える.
  • 画像処理のウェーブレットから,数値解析のマルチグリッド法まで幅広く応用され,収束性や圧縮率が向上.

主な利用分野・応用例

  • 機械学習データマイニング
  • 信号処理・画像処理
    • ウェーブレット変換によるノイズ除去・圧縮
    • マルチスケール表現(画像ピラミッド,スケール空間解析)
  • 数値線形代数・最適化
    • マルチグリッド法 (PDEソルバ),階層行列 (H-matrix) を用いた高速化
  • 物理シミュレーション・計算力学
    • マルチスケールモデリング(原子スケール~連続体まで),局所細分化で演算リソースを節約

7. 対称性・不変量(Symmetry / Invariance)

ポイント

  • 問題やデータに存在する「回転対称」「並進対称」「反転対称」「群構造」などを活用することで,冗長なパラメータや計算を省略できる.
  • 特定の対称性を考慮したアルゴリズム設計により,計算量だけでなくモデルの汎化性能や安定性を高めることが可能.

主な利用分野・応用例

  • 機械学習
    • 等変ニューラルネットワーク (Equivariant Neural Network):3次元分子構造やグラフ構造に対する群対称性を反映.
    • Group Convolution:回転・並進などの対称性をネットワークに組み込む.
  • 数値線形代数・計算力学
    • ブロック対角化:系の対称性を利用して大規模行列をブロック構造に簡約化.
    • 対称行列ソルバ共役勾配法(CG)など,対称正定行列を仮定した効率的解法.
  • 物理シミュレーション
    • 周期境界条件:並進対称を仮定してシミュレーション領域を縮小.
    • 群論解析:結晶構造や分子軌道計算で行列のランク・次元を削減.

8. 局所性・ブロック構造(Locality / Block Structure)

ポイント

  • 大規模問題を,互いに弱い結合しか持たない局所ブロックやサブシステムに分割して扱う.
  • スパース性とも関連が深く,並列計算や分散計算との相性が良い.「部分空間」ごとに独立に最適化・解法を適用できることが多い.

主な利用分野・応用例

  • 機械学習・最適化
    • ブロック座標降下法 (Block Coordinate Descent):パラメータをブロック単位で更新し,並列化・スケーラビリティを向上.
    • 局所特徴抽出:画像・テキスト・時系列などで,局所パッチ単位に特徴を学習.
  • 数値線形代数・PDEソルバ
    • ドメイン分割法 (Domain Decomposition):領域を分割して個々のサブドメインを並列に解き,境界条件で連結.
    • ブロック前処理:疎行列でもブロックサイズごとに効果的な前処理を適用し,高速収束を実現.
  • ネットワーク解析・グラフアルゴリズム
    • コミュニティ検出:大規模グラフを局所的なコミュニティに分割して解析を容易に.
    • 局所探索アルゴリズム:大域探索を回避し,必要最小限の近傍情報のみで計算.

9. 並列化・分散化(Parallelism / Distributed Computation)

ポイント

  • 大規模データや大規模モデルを扱う際,複数ノードやGPUなどに処理を分割することで,計算時間を飛躍的に短縮可能.
  • アルゴリズムそのものをハードウェア構成に合わせて設計・最適化する点も重要.

主な利用分野・応用例

  • 機械学習・データ解析
    • 分散学習 (Distributed ML)クラスタGPUファームでミニバッチを並列に計算.
    • Federated Learning:各端末で学習し,モデルパラメータを集約する形で分散化.
  • 数値シミュレーション・HPC(ハイパフォーマンスコンピューティング)
    • MPI(Message Passing Interface):大規模PDEソルバや流体シミュレーションを数千~数万のコアで並列実行.
    • GPU並列:行列演算やFFTをCUDA, OpenCL, OpenMPなどで最適化.
  • ビッグデータ処理
    • MapReduce, Spark:巨大データセットを複数ノードに分割してマップ/リデュース処理.
    • グラフ計算フレームワーク:Pregel, GraphXなど,大規模グラフ解析を分散環境で実行.

10. PDE特有の構造・作用素特性(Structure of PDEs / Operators)

ポイント

  • 物理現象などを記述する偏微分方程式楕円型・放物型・双曲型など)の特性や境界条件を利用すると,効率的な解法が開発可能.
  • 作用素固有値分布や可逆性の性質などが明確であると,高速ソルバや安定した近似手法を設計しやすい.

主な利用分野・応用例

  • 物理シミュレーション・計算力学
    • 有限要素法 (FEM):PDEの種類に合わせた要素選択・基底関数で疎行列を形成しやすい.
    • 境界要素法 (BEM):領域全体でなく境界に未知数を集約.さらに階層行列(H-matrix)などと組み合わせ高速化.
  • 数値解析・最適制御
    • 作用素分割法:拡散項と移流項を分離するなど,計算を複数の簡単なステップに分割.
    • スペクトル法:直交多項式(Fourier, Chebyshevなど)基底で高精度解.
  • 逆問題・データ同化
    • カルマンフィルタ・アンサンブルカルマンフィルタ:流体シミュレーションや気象予測で観測誤差と状態を統合.
    • PDEの固有モード解析を活用して未知パラメータを推定.

11. グラフ構造(Graph-Based Structure)

ポイント

  • データや問題をグラフとして表現すると,頂点と辺の構造や局所的近傍,コミュニティなどを活用して効率的なアルゴリズムを設計できる.
  • スパース性(疎グラフ)との相性が良く,ネットワーク解析やグラフニューラルネットワークなどで急速に発展.

主な利用分野・応用例

12. 多様体構造(Manifold / Geometric Structure)

ポイント

  • 高次元データが実質的に低次元の多様体上に分布している場合や,ロボットの関節角度空間などが非線形幾何構造をもつ場合,その幾何学的性質を利用できる.
  • ユークリッド空間上とは異なる測地距離や曲率の概念が重要となり,最適化や学習アルゴリズムの設計にも影響する.

主な利用分野・応用例

  • 機械学習・次元削減
  • ロボティクス・制御
    • 可操作域の多様体構造:ロボットの関節角度空間を多様体として扱い,動作計画を効率化.
    • 姿勢推定・SLAM:回転群 SO(3) や剛体変換群 SE(3) 上の最適化.
  • コンピュータグラフィックス・形状解析

13. テンソル構造(Tensor Structure)

ポイント

  • 多次元配列(テンソル)を扱う問題では,行列よりもはるかに大きなデータサイズになる一方,ランク構造疎構造を組み合わせて低次元表現を得られる場合が多い。
  • CP分解、Tucker分解、Tensor-Train分解などを活用し,パラメータ数を劇的に削減したり,学習・推論を効率化できる。

主な利用分野・応用例

  • 機械学習・深層学習
    • CNNの重みテンソルを低ランク分解して高速化・モデル圧縮
    • テンソル補完によるマルチウェイデータ解析(推薦システムなど)
  • 信号処理
    • マルチチャネル信号や動画(空間×時間×チャネル)をテンソルとして扱い,ノイズ除去・欠損補完に活用
  • 計算科学

14. マルコフ性(Markov Property)・状態空間構造

ポイント

  • 「現在の状態がわかれば将来の状態の確率分布が決まる」というマルコフ特性を活かすと,時系列解析や動的最適化を効率的に行える。
  • Hidden Markov Model (HMM) や状態空間モデルでは,前向き後ろ向きアルゴリズムやカルマンフィルタを用いた効率的推定が可能。

主な利用分野・応用例

  • 時系列解析・統計的推定
    • HMMや拡張カルマンフィルタ(EKF)によるシーケンシャルな推定
    • パーティクルフィルタ(離散的 or 連続的状態空間)
  • 機械学習強化学習
    • Markov Decision Process (MDP) に基づく最適方策学習
    • 部分観測下(POMDP)のプランニングアルゴリズム
  • 制御理論・ロボティクス
    • 線形ガウス系ではカルマンフィルタとLQ制御でリアルタイム推定制御が実現可能

15. 自己相似性・フラクタル構造(Self-Similarity / Fractal Structure)

ポイント

  • データや現象のなかに拡大・縮小しても同様のパターンが繰り返されるという自己相似性がある場合,多重解像度や階層構造と似た観点で大幅なデータ圧縮や近似が可能。
  • 物理的な自然現象(海岸線、山脈、乱流など)や一部の画像・信号では自己相似の仮定が有効に働く。

主な利用分野・応用例

  • 画像処理・CG
    • フラクタル圧縮(画像を自己相似ブロックで近似)
    • プロシージャル生成(木・地形・雲など)で計算コストを削減
  • 数値解析・物理シミュレーション
    • 乱流解析での多重スケール・自己相似理論
    • マルチフラクタ解析(財務時系列や地震波などの現象モデリング
  • パターン認識
    • 自己相似特徴量によるテクスチャ解析や欠陥検出

16. 部分モジュラ性(Submodularity)

ポイント

  • 離散集合上の関数が「部分モジュラ」性をもつとき,ナップサックのような組合せ最適化問題でも貪欲法(Greedy)が近似解の品質保証をもって高速に解ける。
  • カバレッジ最大化や多様性最大化などで部分モジュラ関数として定式化できると,巨大規模でも実用的な近似解が得られる。

主な利用分野・応用例

  • 機械学習データマイニング
    • センサ配置の最適化(情報利得関数が部分モジュラ性をもつ場合)
    • データサマライズや代表点選択(多様性指標が部分モジュラ関数)
  • ネットワーク解析
    • ウイルス拡散防止や広告伝播のためのノード選択(インフルエンス最大化)
    • グラフカット問題(部分モジュラ関数として定式化される場合)
  • 組合せ最適化

17. 整数性・離散構造(Discrete / Integrality Structure)

ポイント

  • 変数が連続でなく「0-1」などの離散変数をとる場合,線形/凸最適化で扱いづらいが,一方で整数性を満たす解がポリトープの頂点に存在する等の性質を活用すると,枝刈り法やカット生成による高速解法が期待できる。
  • 組合せ最適化問題(巡回セールスマンや割当問題など)に特化したソルバが大規模でも実用的な解を与える場合も多い。

主な利用分野・応用例

  • オペレーションズリサーチ (OR)
    • 整数線形計画 (ILP), 混合整数線形計画 (MILP)
    • ブランチ&バウンド法,カット平面法などの高速化
  • サプライチェーン・スケジューリング
    • 配車計画,生産計画などの実務問題で大規模整数最適化が活躍
  • 組合せ問題の近似アルゴリズム

18. 混合精度・量子化(Mixed-Precision / Quantization)

ポイント

  • 倍精度(64ビット)を常に使わず,演算時に半精度(16ビット)8ビット整数などを組み合わせることで,大幅なメモリ帯域削減や演算回数の削減が可能。
  • 特に機械学習の訓練や推論では,重みや勾配を適度に量子化しても性能劣化が少ない場合が多く,高速化が見込める。

主な利用分野・応用例

  • 深層学習
    • FP16やBF16による混合精度訓練(GPU/TPUでの専用命令サポート)
    • 8ビット以下への量子化推論(エッジデバイスへの実装)
  • 数値線形代数
    • 多倍長演算を要する特殊状況以外では,一部ステップを低精度化しても収束への影響が限定的な場合
  • 組み込み機器・ロボティクス
    • 演算性能やメモリに制限がある環境での効率的実装

19. 前処理(Preconditioning)と反復解法

ポイント

  • 連立方程式最適化問題を高速に解くには,問題の条件数を下げる前処理が重要。
  • 単純なヤコビ前処理から,高度なマルチグリッドやドメイン分割法との組み合わせまで,多様な手法が存在。

主な利用分野・応用例

  • 数値線形代数・PDEソルバ
    • CG法やGMRES法などの反復法で前処理行列を導入し,収束を加速
    • 大規模有限要素法(FEM)解析や流体シミュレーションで必須
  • 最適化
    • 勾配降下法や共役勾配法のステップ長を安定化させるためのスケーリング
    • ADMMやNewton法でのハッシアン近似に対する前処理
  • 機械学習
    • 特徴スケーリングや白色化(Whitening)は,前処理の一種として学習の収束を早める

20. 計算グラフ構造(Computation Graph)

ポイント

主な利用分野・応用例

MATLABの最適化関数(fmincon)の高速化Tips

はじめに

この記事は MATLAB/Simulink Advent Calendar 2023 のシリーズ2の 3 日目の記事です .

はじめまして,hook(@hookedonmas)といいます.某機械メーカーで自動化に関する研究開発をしている社会人一年目です. どうぞよろしくお願いします. 今回は,2年前に書いて下書きとして眠っていたものを,せっかくの機会なので掘り出してきました.

続きを読む

付録の数式番号を「アルファベット + 数式番号」にする

付録の数式番号を「アルファベット + 数式番号」にする方法

\begin{付録}前後に

\renewcommand{\theequation}{A\arabic{equation}}
\setcounter{equation}{0}

を付け足すだけ.

参考

tessy.org