システム思考とSTAMP

世の中のいろいろなモノやコトを「システム」として考えることと、その道具の一つであるSTAMP/STPAについて。

システム安全と機械学習の類似性 - モノづくりの本質的難しさ?

前回の記事で、「安全は創発性であり、創発性は要素の知識からは演繹されえない」、「演繹できないような問題に対するエンジニアリングは難しい」ということを書いた。

それを書きながら、AI(機械学習)のことを連想した。

 

機械学習の品質確認の難しさ

機械学習を「帰納的プログラミング」、従来のプログラム開発を「演繹的プログラミング」とする対比がよくされる。

機械学習工学に向けて」(丸山宏, 日本ソフトウェア科学会第34回大会)では、摂氏を華氏に変換するプログラムを例にとり、以下のような分かりやすい対比を示している。

 

  • 演繹的プログラミング: "F = 1.8 x C + 32" という変換式(先験的知識)に基づくモデルから、段階的に詳細化し実装を得る。(※ Fは華氏温度、Cは摂氏温度)
  • 帰納的プログラミング:摂氏と華氏の2つの温度計を用意し、それらの値を同時に読み取ることで「訓練用データセット」を得る。それを対象として機械学習アルゴリズムを適用し、モデルを得る。そのモデルを用いて摂氏を華氏に変換する。

 

作られたソフトウェアが「正しいかどうか」を確認するには、「正しさの基準」が必要になる。

もう少し慎重な言い方をすると、「『正しさの基準とされるもの』があれば、正しいことの確認がやりやすい」ということが言える。

演繹的なプログラミングであれば、上記の例の "F = 1.8 x C + 32" という式のような先験的知識があり、それが正しさの基準となり、品質確認の拠り所となる。

例えば、テストを行う際に、この式を用いてテストオラクルを作ることができる。または、「正しさの基準」から段階的に詳細化することでプログラム実装する、そのプロセスの妥当性(詳細化の正確さ)を評価することで、実装されたプログラムの正しさを評価することができる。

ソフトウェア工学」は、高品質なソフトウェアを効率的に開発する方法論として確立されてきたものであり、工学(Engineering)として科学的なアプローチを目指す。したがって、上記のような、正しさの基準に基づく論理性、客観性が成立することは非常に都合が良い。

 

しかし、機械学習は演繹的ではない。"F = 1.8 x C + 32" のような正しさの基準がない。

逆に言えば、この式のように、入出力の関係性が明確で固定的である場合は、演繹的なプログラミングが可能なので、機械学習を使う必要がない。

したがって、機械学習を適用する場面では、多くの場合、以下のことが言えるであろう。

  • 入出力の関係性が明確に分からない
  • 入出力の関係性が時間とともに変化する

 

1つ目の「入出力の関係性が明確に分からない」とは、「入力に対してどのような出力が期待されるか」の因果関係の定式化は難しい、ということである。

2つ目の「入出力の関係性が時間とともに変化する」とは、ある時点では正しいと思われる入出力の因果関係が成立していても、時間経過とともにその因果関係が正しくなくなる場合がある、ということである。

 

このような性質を持つ「機械学習」の品質保証は、厄介だ。

機械学習の性質を踏まえた、機械学習用のソフトウェア工学が必要であるとの認識が高まり、「機械学習工学」に関する取り組みが熱心に行われている。

 

 

機械学習の品質とシステム安全の類似性

ところで、上に書いた「機械学習の品質保証」を、「演繹的に解決できない問題を対象とした品質保証」という風に抽象化すると、「システム安全の評価を如何に行うか」という課題との類似性を感じる。

 

上に書いた「入出力の関係性が不明確」という性質について、「入出力の関係性」を「システムの構成要素とシステム安全の関係性」と置き換えると、共通性が見えてくる。「システムの構成要素がこうだから、システム全体の性質(安全性)はこうなる」という因果関係の定式化は難しいということだ。

同様に、「入出力の関係性が流動的」という点も、システム安全においても言える。システムが稼働する環境は常に変化しているので、ある時点で安全を確認しても、時間経過とともにそれが通用するとは限らない。機械学習では、運用中に精度の変化を監視しながら、モデルの再学習の検討を行うべきであるとされている(MLOpsの考え方)。システム安全でも同様に、「SafetyOps」のような考え方が必要かもしれない。

 

前回の記事に、システム安全のための「エンジニアリング」は難しいと書いたが、機械学習のための「エンジニアリング」も同様に難しく、その底には共通性があるように思われる。

 

「飛んだ」発想 - モノづくりの本質的な難しさ

このように、システム安全と機械学習の類似性を考えていると、つい、極端な考えを膨らませてしまう。

「上に書いたようなことは、モノづくり全般にいえるのではないか?

 

モノづくり」とは何か。ちょっと調べてみると、オーソライズされた定義が確立されているわけではなさそうだが、単に「ものを作ること」だけではなく、

それによって人間が幸せになることを期待して、ものを作ること

と言えるのではないかと思う。

人間が日々行う、大小取り混ぜたあらゆる活動は、すべて、「幸せになることを期待して行う」と言えるのではないか。それは、「人間はなぜモノづくりをするのか」の究極的な理由にもつながると思う。

 

モノづくりをそういうものだと考えたとき、では、幸せ」とは何か?

客観的な定義は難しいし(多分に主観的なもの)、こうであれば幸せだ、という因果関係を定式化することは不可能であり、時間的な変化もある。

モノづくりの品質とは、「それによって幸せになれるかどうか」だとすると、それを「科学的に」確保したり評価したりすることは、とてつもなく難しいことに思える。

 

しかし、何らかの科学的な(属人性が低く、再現性の高い)方法がないと、分業化や大量生産が難しいので、科学的なアプローチ(エンジニアリング)が考えられてきた。

ソフトウェア開発で言えば、「こんなことができたら嬉しい(幸せだ)」という要求・願望に対して、その実現に必要な「要件」を客観的な表現で定める。それを「正しさの基準」として、ソフトウエアを設計し実装する。このようなやり方を前提として「ソフトウェアエンジニアリング」を確立してきた、といえる。

しかし、問題は、「こんなことができたら幸せだ」という願望と、定義した要件が合っているかである。

冒頭の例のような、「華氏温度を摂氏温度に自動変換できたら嬉しい」という願望であれば、それを満たす「要件」は比較的ダイレクトである。そこに齟齬は生じにくい。

ソフトウェア産業の発展初期の時代には、「OA化」という言葉があった。OAはオフィス・オートメーションであり、従来手作業で行っていた事務処理を「電子化(ソフトウェア化)」するというニーズがたくさんあった。従来、手作業で行っていたことなので、「どういう場合に、どうなれば嬉しいか」という「正しさの基準(幸せの定義)」が明確であった

したがって、「電子化(ソフトウェア化)」が目的であるようなソフトウェア開発では、エンジニアリング(科学的なアプローチ)も比較的考えやすかったと言えるのではないか。

 

しかし、時代は変わり、ソフトウェアに期待される役割も変わってきている。ソフトウェアがなければ実現不可能であるようなビジネスやサービスを作りたい、というニーズが増えている。既存のものの「ソフトウェア化」ではなく、新しいビジネスの「付加価値創造」イコール「ソフトウェア」といってもよいようなニーズが出てきている。そこでは「正しさの基準」が明確ではなく、したがって「要件」もすぐには決まらない

「こんなことができたら嬉しい」という主観的な「幸せ」を模索しながら、それを満たすソフトウェアを模索するような感じになる。

このような目的で作られるソフトウェアの品質を、どのように評価・確保すればよいのだろうか?

 

こう考えてくると、「ソフトウェア化」を想定した品質保証の方法論(演繹的プログラミングを想定した従来のソフトウェア工学)は、むしろ、特殊な状況を前提としたものだったというべきなのではないか、と思えてくる。時が過ぎ、本来のモノづくり(=今ない価値を創造して幸せになるためのモノづくり)に即したソフトウェアづくりがされるようになってきた。機械学習の登場は、その具現化を後押しした。機械学習の品質保証が今課題になっているのは、象徴的な現れである。そう、思えてくる。

 

作ろうとするシステムの複雑性が増し、従来の「安全工学」では不足となり、STAMPのような考え方が提案された。同様に、ソフトウェアに期待される役割が「〇〇のソフトウェア化」から、「新しい価値の創造」に変わり、従来の「ソフトウェア工学」の不足感が見えてきた。両者の流れには、共通性を感じてしまう。

 

あえて究極的に言ってしまうと、次のように感じる。

「モノづくりの品質保証」というのは、本質的には、科学的な(属人性が低く再現性が高い)やり方が難しいのではないか?

その難しさに対して、これまで、工学的な方法論が適用できる落としどころを確立し、なんとか対応してきたということではないか?

今の時代、「こんなことができたら嬉しい」という人間の願望レベルは高まり、それを満たすような「モノづくり」の複雑さも高まり、従来考え出された「工学」では不足になってきている。「モノづくりの本質的な難しさ」が、いよいよ顕在化してきた、といえるのではないか。

これは、人類に突き付けられた大きな課題なのではないだろうか。「程度問題」ではなく、「解決すべき問題の質が変わった」ということ、少なくとも、「既存の工学では対応しきれない時代になった」ことの認識はすべきではないか。(既存の工学の延長線的応用で、なんとか対応しようとする方向に努力を傾けるよりも。)

 

これは、既存の工学に携わり、発展に貢献されてきた方々に対しては失礼な物言いになるかもしれない。しかし、物事の流れをぼんやりと眺めていると、上記のように感じられてくる。

システム安全の分野における STAMPの考え方の登場は、上記のような課題への対処の一例として位置づけられるのではないか、と思える。そして、STAMPの考え方の底にあるものは、様々な同様の課題に応用できるのではないか、と思える。

 

 

"Engineering a Safer World" について

STAMPの基礎から応用までをカバーし、STAMPのバイブル的存在とも言える  "Engineering a Safer World" 。そのタイトルは、じっくり眺めると、奥深いものがあるように感じられてくる。

著者のNancy Leveson教授に聞いたわけではなく、あくまでも個人的な、勝手な想像と解釈であるが、思うことを記してみる。

 

"World" について

この本では、一貫して「システムの安全」について述べている。したがって、"Engineering a Safer System" というタイトルでもよさそうに思える。むしろ、その方が内容を直接的に表しているかもしれない。 "System" ではなく "World" としたことに、何か意味はあるのだろうか。

"Engineering a Safer World" には、次のように書かれた箇所がある。

While system engineering was developed originally for technical systems, the approach is just as important and applicable to social systems or the social components of systems that are usually not thought of as “engineered.”

システムエンジニアリングは、もともとは技術的なシステムのためのものであったが、通常 "engineered" なものとは考えられていない社会システムや社会の構成要素にも適用できる」と言っている。単に"System"というと技術的なシステムと捉えられることが多い、という認識に基づき、「STAMPは、技術的なシステムだけを対象としているのではない」ということを強調するために "System" ではなく "World" という言葉を使ったのではないだろうか。

また、次のように書かれた箇所もある。

At the same time, the complexity of our systems and the world in which they operate has also increased enormously.

「私たちの(作る)システム、および、それが稼働する世界の複雑さも著しく増大している。」と言っている。我々が作る技術的なシステムだけを見ていたのでは、安全は得られない。そのシステムとそれが動く環境(世界)との相互関係も含めて見なければ安全は得られない、ということであろう。

本書でも、技術的なシステムだけでなく、それを開発する組織や利用者、関連する法律やルールなども含めた全体を「システム」としてSTAMPの分析対象とした例が示されている。

書名において敢えて "World" という言葉を選択したのならば、この世界全体を「システム」として捉えるべきだ、という意味が込められているのではないだろうか。

 

"Safer" について

"Safe" ではなく、"Safer" としていることには、何か意味があるのだろうか?

以前の記事にも書いたように、完璧に安全が保証されたシステムを作ることはできない。「より安全な」システムを作ろうとすることしか、できないのではないか。

作ったシステムが稼働する環境(環境を含めた全体もシステムである)には、無限の可能性・状況があり、時間の経過とともに変化もする。その全てを想定し切ることはできない。今日安全でも、明日安全である保証はない。常に、「より安全」を求め続けることしかできないし、システムの提供者にはそうする責任がある。そういう意味が、"Safer" には込められているのではないだろうか。

 

"Engineering" について

エンジニアリングとは何だろうか?

「科学を実用化し、人間の生活に役立てることを目的とする技術」という説明がある。(参考:エンジニアリングとは (waseda-applchem.jp)

Wikipediaでは、「基礎科学を工業生産に応用する学問」と書かれている。

いずれにしても、「科学的」なアプローチであると理解できる。

 

では、「科学的」とは何だろうか?

ググってみる。例えば、

“科学的”であるということ | 京都大学理学研究科・理学部 (kyoto-u.ac.jp)

によると、次の2つの性質が重要であるとされている。

  • 再現性があること:ある事柄について考えたり調べたりする時、その方法が同じならば、いつ・どこで・誰であったとしても、同じ答えや結果にたどり着くことがあること
  • 因果関係が明確であること:原因と結果の関係がきちんとあること

 

ここで、以前の記事に書いたことを振り返ってみる。

「安全は創発性」であり、「創発性は、要素の振舞いについての完全な知識があっても、演繹されえない」のである。

「演繹されえない」ということは、一般的なルールを作ることができない(難しい)ということであろう。そのようなタイプの問題に対して、再現性がある(誰でも同じようにできる)方法論を構築するのは無理難題に思える。

美しい工芸品は、「その道、何十年」の匠の技によって作られる。「このようにやれば、誰でも匠と同じように美しい工芸品を作れる」という方法論(一般的なルール)は存在しないはずだ。

安全は創発性であり、演繹されえないのであれば、安全も、本質的には「匠の技によってなされる」類のものに思える。

しかし、人間の健康や社会・経済を維持するための基盤は、「匠の技」に頼る方法で作るわけにいかないだろう。客観的に妥当性を説明でき、合意を得られるような方法が必要なのだ。

Nancy Levesonが、あえて"Engineering"という言葉(他動詞)を付けたのは、そのような無理難題に挑戦する(その必要があるのだ)という強い意思と覚悟の表明なのではないか。

 

"Engineering a Safer World" の書名に込められた(と思われる)意味

以上のように考えてみると、このタイトルには、「より安全な世界を追求する永続的な活動」のための方法論を「エンジニアリング」として作り上げるという、壮大な挑戦への強い思いと覚悟が込められているのではないか、と思えてくる。

 

なお、これは完全に個人的な、勝手な想像と解釈であり、実際のことは分からない。(思い過ごしの部分がかなりあるような気もする。)

しかし、このように思いを巡らせるのも楽しい。

 

 

システムの「階層」について

システム理論では、「創発」と「階層」が重要な概念とされる。

"Engineering a Safer World" では、創発と階層に関して、次のような説明がある。

 

(引用①)

A general model of complex systems can be expressed in terms of a hierarchy of levels of organization, each more complex than the one below, where a level is characterized by having emergent properties. Emergent properties do not exist at lower levels; they are meaningless in the language appropriate to those levels. 

「階層のレベルは、創発性(emergent properties)によって特徴づけられる。」

創発性は、下位の階層(lower levels)には存在しない。創発性は、下位階層の記述に適した言語では無意味(meaningless)である。」

 

(引用②)

The operation of the processes at the lower levels of the hierarchy result in a higher level of complexity—that of the whole apple itself—that has emergent properties, one of them being the apple’s shape.

「下位階層でのプロセス間の作用が、上位階層における複雑性をもたらし、その複雑性が創発性を持つのである。」

 

また、「コントロール」とも関わる。

 

(引用③)

An example of regulatory or control action is the imposition of constraints upon the activity at one level of a hierarchy, which define the “laws of behavior” at that level. Those laws of behavior yield activity meaningful at a higher level.

「規制またはコントロールアクションの一例は、ある階層レベルの動作に制約を与えることである。」

「その制約により、その階層レベルにおける『振舞いの法則』が定められ、それが上位階層での意味のある振舞いを生み出す。」

 

(引用④)

The upper level is a source of an alternative (simpler) description of the lower level in terms of specific functions that are emergent as a result of the imposition of constraints.

「下位階層に制約が課せられる結果として、上位階層に特定の機能が創発される。」

 

この、「階層」と「創発性」、そして「コントロール(制約)」の関係は、なかなかスッと体感的に理解することが難しい。

しかし、STAMPはシステム理論に基づくものであり、制御構造図はこのような「階層」、「創発性」、「コントロール」を表すもののはずである。逆に言うと、これらの概念を理解しないと、適切な制御構造図を描けないのだろうと思う。

 

制御構造図の具体例を使って、これらの概念の理解を試みた結果を以下にメモしておく。

 

制御構造図の具体例で階層、創発性、コントロールを考えてみる

階層、創発性、コントロールに関する個人的な理解を、具体例を使って示す。

例題として、STPA Handbook に載っている航空機の自動ブレーキシステムの制御構造図を使う。

航空機自動ブレーキシステムのCS図
STPA Handbook より引用)

 

この例題では、滑走路上で、航空機を適切に減速させ、安全に停止させるための自動ブレーキシステムを分析対象としている。

 

まず、システム全体レベルの視点で見る。

「航空機が安全に停止する」というのは、システム全体に創発される性質である。パイロット(フライトクルー)は、システム全体(航空機)に対し、そのような性質を創発させる責務がある。

パイロットは、その責務を果たすために、一つ下の階層であるBSCU(ブレーキシステム制御ユニット)に対し、自動ブレーキモードに設定した上で、安全な距離で停止するように減速率を設定する。これは、BSCUの振舞いに一定の制約を与えることになる。(上記「引用③」)

制約を与えたBSCUの振舞いによって、安全な距離で停止するという性質が創発されることを期待する。(上記「引用②」、「引用④」)

 

次に、BSCUの階層レベルの視点で見る。

BSCUは、指定された減速率を達成するようにホイールの回転を減速させる責務がある。BSCUは、指定された減速率で減速させることが「安全」かどうかは関知しないだろう。この階層では、安全という性質は存在しないと言える。(上記「引用①」)

BSCUは、その責務を果たすために、一つ下の階層である「ホイールブレーキ」に対して、油圧のバルブを開けたり閉じたりする。これは、ホイールブレーキの振舞いに一定の制約を与えることになる。

制約を与えたホイールブレーキの振舞いによって、一定の減速率という性質が創発されることを期待する。

 

次に、ホイールブレーキの階層レベルの視点で見る。

ホイールブレーキは、与えられた油圧を、ホイールに対して摩擦材を押し付ける力に変え、摩擦力を生じさせることで、ホイールの回転を減速させる責務がある。ホイールブレーキは、上位から与えられる油圧の変動が、一定の減速率につながることを関知しないだろう。「ホイールの回転の減速率」という概念は、この階層では存在しない(meaningless)ということだ。

 

このように考えると、以下のように整理できるのではないか。

  • 「航空機の安全」という性質はシステム全体レベル(トップ階層)の性質であり、パイロットがそれを認識している。
  • パイロットは、安全責務を果たすために一つ下の階層のBSCUをコントロールし、BSCUは自分の責務を果たすために一つ下の階層のホイールブレーキをコントロールする。
  • 「一つ下の階層」は、ランダムに勝手気ままに振る舞うのではなく、上からのコントロールによって一定の制約を受けて振る舞う。
  • その制約を受けた振舞いによって、一つ上の階層で意味のある性質がもたらされる(それが創発性である)。しかし、下位階層は、その創発性は関知しない(自分の振舞いが、上位階層でどういう意味をもたらすのかを知らずに振る舞っている)。

 

上位階層は、その階層で必要とする創発性を得るために、下位階層をコントロールする。トップレベルの創発性が、(今関心のある)システムの安全性である。

このような階層間のコントロールの様子を図にしたものが、制御構造図になるのではないか。

 

システムの「階層」が自明に存在して、その階層間のコントロールを考える、ということではなく、「今関心のあるシステムの創発性は何か。その創発性はどこから生じるのか」を考えることによって、一つ下の階層が見えてくる(それを繰り返して制御構造図を得る)、ということではないだろうか。

Nancy Levesonの資料で度々出てくる以下の図は、そのような意味ではないだろうか。

 

以上の整理は、あくまでも個人的に理解を試みた結果であり、表現や内容がシステム理論として適切かどうかは分からない。

 

コーヒーブレイク

コーヒーを淹れた。

「美味しいコーヒー」を飲みたい。

お湯を適温に沸かし、コーヒーの豆を適当な粗さに挽き、ペーパーフィルターの上からドリッパーに入れ、その上からお湯を注ぐ。全てのコーヒー豆の粒にお湯を行き渡らせ、時々撹拌するようにお湯を注ぐ。それによって、コーヒー豆の香り、コク、味がお湯に溶け出し、コーヒーが出来上がる。

ただ、お湯やその中で乱舞しているコーヒー豆の立場になって考えてみると、自分たちがなぜこんなことをしているのか、その結果として「コーヒー」という飲み物が出来上がるとは、知る由もないだろう。自分たちは、単にお湯であり、豆として生まれてきただけなのだ。お湯やコーヒー豆の階層では、「美味しいコーヒー」などと言われても意味不明(meaningless)であろう。

「私」が、お湯やコーヒー豆をコントロールして、「美味しいコーヒー」を創発しているのだ。ただ、どういうやり方がベストかは分からない。試行錯誤を続けている。

(豆だけの知識でも、お湯だけの知識でもだめで、それらのどういう相互作用でコーヒーの味が決まるかを知らなければ、美味しいコーヒーを淹れられない。要素を個々に見るのではなく、全体を見る必要がある。システム安全は美味しいコーヒーにつながる。)

 

 

STAMP/STPAの誤解しやすいところ

STAMP/STPAについて、初めて聞く人に説明するとき、UCAを識別する際に用いる4つのガイドワードのところで「なるほど」「面白い」という反応をされることが多いように思う。確かに分かりやすく、面白い部分ではあるが、ガイドワードの部分だけにあまり目を奪われると、STAMPの本質を見逃す恐れがあるのではないかと思う。STAMPを誤解する落とし穴になり得るとさえ言えそうな気がする。

 

「大きいものは分割して扱うのがよい」という常識

対象が大きい場合、小分割して対応するのは賢いやり方である、というのは、常識として定着していると思われる。

例えば、公園の草むしりをする場合、ブロックに分割し、各ブロックの草むしりを順番に行っていくやり方や、各ブロックに作業者を割り当てるやり方をよく行う。各ブロックの作業は独立に行われ、全ブロックの作業が完了すれば、公園全体の草むしりが完了する。

このように、「大きいものを分割して扱う」やり方がうまく行くケースは多い。

しかし、そのやり方ではうまく行かない場合もある。複雑なシステムを扱う場合は注意が必要となる。

 

複雑性とランダム性によるシステムのクラス分け

"Engineering a Safer World" (Nancy Leveson著) では、システム理論の説明の箇所で、「ランダム性の度合い」と「複雑性の度合い」の観点で、システムを3つのクラスに分ける考え方を示している。

  1. organized simplicity:ランダム性も、複雑性も、いずれも低いクラス
  2. unorganized complexity:ランダム性が高いクラス
  3. organized complexity:複雑性が高いが、ランダム性は高くないクラス

 

このうち、1.は、「大きなものを分割して対応するやり方」(分割統治法)が使えるクラスである。各要素の振舞いにランダム性がなく、要素間の相互作用が十分に単純な場合である。草むしりの例でいえば、あるブロックの雑草を取る行為と別のブロックの雑草を取る行為の間には相互作用がないので、各ブロックの作業を独立して行っていけば問題なく全体の作業が完了する。

2.は、統計的な手法が使えるクラスである。各要素の振舞いのランダム性が十分に高いので、要素数が膨大で複雑であったとしても、全体を統計的なやり方で扱っても問題ない。統計熱力学はその一例になる。

3.は、それらのどちらの手法も適さないクラスである。要素間の相互作用が単純ではないので、「独立して扱っても問題ないように分割すること」が難しい。(草むしりの例でいえば、あるブロックの雑草を取ると別のブロックに雑草が生える、といった複雑な法則がある場合とか(?)。)また、要素の振舞いに十分なランダム性がないため、統計的な手法も適用できない。

そして、システム理論は、3.のクラスのシステムを扱うために必要である、とされている。

 

システム理論・システム思考の特徴

システム理論は、対象物に対し、それを構成する部分の一つ一つの挙動の寄せ集めで全体を説明できるという考え方(要素還元論)では限界があるとの立場に立つ。全体を要素に分割し、要素を個別に見るのではなく、全体を同時に見ることに重点を置く。(システムダイナミクスは、この考え方(システム理論)に基づいて考え出された方法論の一つである。)

システム思考は、システム理論に基づく実践的な応用と捉えることができるが、例えば000064383.pdf (ipa.go.jp)では「システム思考とは、システムを全体俯瞰的に捉えることである」と説明されている。

 

STAMP/STPAの誤解しやすいところ

システム理論に基づくSTAMP/STPAでは、したがって、システムを要素に分割して個々に見ていくのではなく、「全体を俯瞰的に見る」ことが重要である。

しかしながら、UCAの識別では、「コントロールアクションを一つずつ取り上げ、それに4つのガイドワードを順番に当てはめて識別していく」というやり方をする。

これは、やるべきことが明確で分かりやすいし、組合せ数が有限なので順番にやっていけばいつか終わるという安心感もある。

しかし、このやり方は、「大きいものを部分に分割して個別に考えていく」という、システム理論と真逆のやり方に見える。UCAは、STAMP/STPAの特徴的な概念として目立つだけに、UCAを識別する部分をもって「STAMP/STPAって、そういうことなのか」と、誤解してしまう恐れがあるのではないかと思う。

 

STAMP/STPAの真の趣旨は、「制御構造図をもとに、システムの要素間のコントロールの関係性を全体俯瞰的に見る」ことである。初期のSTAMPでは、4つのガイドワードは存在しなかったとのことである。

重要なのは、STAMP/STPAの最後のステップ、ハザードを引き起こすシナリオを考える部分である。このステップでは、システム全体を俯瞰的に見て、要素間の相互作用によって生じる創発性を考える。

UCAは、それを考える「きっかけ」とか「取っ掛かり」として捉えるべきである。制御構造図をじっと眺めて闇雲に考えるのでは、網羅性が分からなくなるし、複数人で議論しながら考える場合に着眼点が違っていると会話がしずらい。そういった問題に対処するためにUCAという概念が考えられたのではないかと思う。

 

「コントロール」について

STAMP/STPAで、control structure diagram (制御構造図)を描く際、どのような control action を描けば良いかに悩むことが多い。control action は、STAMP/STPAの手順において重要なので、センスの悪い control action を描いてしまうと、分析の効率や質に影響する。分析対象のシステムをじっと睨んで、control action を浮かび上がらせるような作業になる。

コントロールとは何か

「コントロール」という言葉は比較的、日常でも使われる。「ピッチャーがボールをコントロールする」とか、「体重をコントロールする」などと言う。

「コントロール」とは何であろうか?

"Engineering a Safer World" (Nany Leveson著)では、システム理論に関する解説の箇所で、次のように書かれている。(第3章から一部抜粋して和訳)

  • コントロールは、常に制約を課す。
  • ある階層における制約が、上位階層において意味のある性質(創発性)を生み出す。

創発性」自体は、良いとか悪いという価値観を含まない。単にシステム全体の性質である。日常使う言葉としての「コントロール」は、ふつう、何か良い結果を得るためのものであるが、システム理論での「コントロール」は価値観を含まないニュートラルなものであるようだ。

しかし、STAMP/STPAは「安全」を得るためのものである。したがって、良い・悪いの価値観が前提にある。

それを踏まえ、上記の "Engineering a Safer World" の説明に基づいて考えると、「『コントロール』とは、システム全体の性質がある目的に沿うものとなるように何らかの制約を与えるもの」 と言えそうだ。

言い方を変えれば、「それがなければ、システムの要素は勝手気ままな(予測できないランダムな)挙動を見せ、システムの目的の達成が難しくなる」という「それ」を見つければ、システムにおける「コントロール」が見えてくるのではないだろうか。

ピッチャーがボールに対して適切なベクトルの力を加えることがなければ「ボールがストライクゾーンを通過する」という性質は得られにくく、食事や運動の量を適切に変動させることがなければ「体重の増減が一定の範囲に収まる」という性質を得ることが難しい、ということだ。

control structure の検討におけるコントロールアクションの見つけ方

STAMP/STPAで分析するシステムにおいて、分析目的に沿うcontrol actionとして何があるのか?それは、パッと目で見えにくいものである場合もあり、常に容易に見つかるとは限らない。

上に書いたことを踏まえれば、次のような順番で考えると良いのではないだろうか。

  • 今、関心のある「システムの性質(創発性)」は何か?(すなわち、システムが「ハザード状態」になることを防ぐような性質とは何か?)
  • その性質(創発性)に対して、「『それ』がないと、要素が勝手にランダムな挙動を示し、その性質(創発性)を得ることが難しくなる」という『それ』は何か?

つまり、「何がシステム全体の創発性に寄与しているか」の本質を見出すことが重要である。

これは、それほど簡単なことではない。日頃から、身近なものを題材として「システムの本質を見出す」訓練をすると良いのではないかと思う。

システムの”コントロール”を見つける練習

例えば、なんでもよいが、ちょうど目の前にある「椅子」を題材にしてみる。椅子も「システム」である。

この「椅子システム」の目的は、例えば、「座面に人が座り、その体重を安定的に支えること」という見方ができる。

この目的を満たすようなシステム全体の性質は、どのようなコントロールによって得られているのだろうか?

まず、座面は、人の体重を受ける。

次に、座面は、その体重を4本の脚に伝える。4本の脚が、座面から伝えられた体重を床に伝え、床がそれを支えることで、「椅子システム」の目的が達成される。つまり、4本の脚は、そのように働くことが求められる。単に4本の脚を立て、その上に座面をそっと乗せただけでは、それは一見「椅子」に見えるかもしれないが、目的は果たせない。

したがって、4本の脚は、単に「頑丈な素材の長い棒」であるだけではだめで、上記のようにして目的を達成できるような「制約」が存在する必要がある。具体的には、座面と脚は、釘やボルトなどによって、力が横方向に逃げないように結び付けられ、座面が受けた体重が脚を経由して床に伝達されるように「制約」される必要があるわけである。

「座面」は、このようにして「4本の脚」に「制約」を課しており、それが「椅子の目的たる性質を創発するためのコントロール」であると言えるのではないだろうか。

 

身近にある、ほぼすべてのものは「システム」と見ることができる。身近なものを「お題」として、「そのシステムを成立させている本質は何か」を考えてみると面白い。

日頃「当たり前」と見過ごしてきたことが、実は当たり前ではないことに気づき、それが現実のものとなっていることへの感謝の気持ちも湧いてくるかもしれない(?)

 

STAMPの価値・意義・面白さ(2)

STAMPの面白さについての個人的な理解の整理。 前回の続き。

 

システムの安全性は「創発性」である

Nancy Levesonは、著書 "Engineering a Safer World" の中で、「信頼性はコンポーネントの特性であるのに対し、安全性はシステムの創発性(emergent property)である」と述べている。このことが、安全性の確保が難しい理由であり、STAMP/STPAの価値がある理由である。(逆に言うと、創発性の概念を理解せずにSTAMP/STPAを使っても、本来意図された効果は得られにくい。)

 

創発性とは何か?

創発性は、システム理論における重要な概念である。

Wikipediaでは、次のような説明がある。

創発(そうはつ、英語:emergence)とは、部分の性質の単純な総和にとどまらない性質が、全体として現れることである。局所的な複数の相互作用が複雑に組織化することで、個別の要素の振る舞いからは予測できないようなシステムが構成される。

 

組織論などにおいて、アリストテレスの言葉としてよく引用される「全体は部分の総和に勝る」も同じことを言っている。

つまり、そんなに難しい話ではなく、日常的な、自然な考えである。

 

もう少し厳密な議論は、"「創発性」について”, 松本俊吉, 科学基礎論研究 28(2), 2001 に詳しい。創発論に関して、次のような記述がある。

 

創発的理論とは、

全体に特徴的な振る舞いは,その構成要素がバラバラにあるとき,あるいはそれらが他の結合状態にあるときの,それら要素の振舞いについての最も完全な知識 most complete knowledgeが与えられたとしても,またこの全体におけるそれら要素の比率や配置についての最も完全な知識が与えられたとしても,たとえ理論上でさえ,そこからは演繹されえない。(Broad,p.59)

 

ここで、重要なのは「創発性は)要素の振舞いについての完全な知識があっても、演繹されえない」という点であろう。

これは何を言っているかというと、例えば、創発性の一例として、高速道路上で発生する自然渋滞の現象がある。自然渋滞が起きるメカニズムは、走行車両の密度がある程度高い場合に、上り坂などで先行車の速度が若干落ちると、後続車がブレーキを踏み、それによってその後続車との車間距離が詰まるのでその後続車もブレーキを踏み、ということが連鎖して起きるとされている。(参考:自然渋滞の発生 - MASコミュニティ - 構造計画研究所 (kke.co.jp)

自然渋滞という現象が確認された後であれば、このような原因分析を行うことが可能である。しかし、上で言っている「創発性は、要素の振舞いについての完全な知識があっても、演繹されえない」ということは、「高速道路上の自動車の振舞いについて完全な知識があっても、(自然渋滞という現象を知る前に)自然渋滞という現象を演繹的に予測することはできない」ということを言っている。

今仮に、「高速道路」というシステムにおいて「自然渋滞」を事故とすると、自然渋滞が発生するということは、「(システム設計時には想定できなかった)想定外の事故が起きてしまった」ということになる。(現実には、自然渋滞は致命的な損失をもたらさないので、社会的には許容されていると考えられる。)

 

このことは、前回の記事に書いた「『信頼性が高ければ安全である』は成立しない」につながる。システムを構成する要素の個々について、それらの動作が設計通りとなるようにどんなに完璧に「正しく」作ったとしても、それらの要素を組み合わせたシステム全体に現れる性質、創発性」を予測しきることはできないため、どうしても想定外の事象は起きてしまうのである。

 

創発性である「システム安全」をどのようにして確保すればよいのか

上記のように論じてくると、人間の能力の限界というものを感じざるを得ない。安全なシステム作りは不可能である、と言われているようなものである。

しかし、人間の幸せ、生活の利便性を向上するために、「ものづくり」は太古の時代から脈々と行われてきており、現在もそれは続いている。なんとかして、安全なシステムを作ることが求められている。

そんな人類の挑戦に、助け舟となるのが STAMP/STPA である。

 

前提として、「完璧に安全が保証されたシステムを作ることはできない」。これは、残念ながら覆すことはできない。

しかし、人間の能力を最大限に注ぎ込み、ベストエフォートを尽くしてシステムづくりを行うことは可能である。また、「どのようにベストエフォートを尽くしたのか」が明確になっていれば、もし、想定外の事故が起きたときに、「どこが足りなかったのか」も明確になり、次のシステムづくりに生かせる。

また、「創発性は、個々の要素から演繹的に予測できない」、つまり、数式から導くようなやり方で危険事象を予測することはできないが、人間の想像力を駆使して「気づく」ことは可能である。

このようなことを可能とする工夫がSTAMP/STPAには含まれている。

STAMP/STPAのどの特徴がそれに寄与しているかは、前回の記事に書いた通りである。

 

創発性の面白さ、STAMPの面白さ

システムの創発性は、危険事象、すなわち人間にとって望ましくない性質とは限らない。そもそも、人間にとって望ましいかどうかは人間の主観であり、システムからすれば関知しないことである。

言うまでもなく、システムの創発性には、「人間にとって望ましい性質」もある。システムづくりとは、「望ましいシステム創発性が生じるように、要素間の関係性を設計すること」という言い方もできる。

昨今のキーワードである「DX(デジタル・トランスフォーメーション)」は、デジタル化によってそれまで繋がっていなかったものを繋ぎ、新たな関係性を生じさせることで価値を創出することである。これも、システムの創発性を生じさせていることになる。

「狙って創発性を生じさせる」ことができれば、面白いシステムづくりができる。

STAMP/STPAは、システムの創発性として「危険な事象」に気づくためのツールであるが、「危険な事象」と「望ましい事象」は創発性の観点からは区別がない。したがって、STAMP/STPAの応用で、「望ましい創発性」に気づくことも可能である。

 

ここまでのまとめ

ここまで書いたことをまとめると、次のようになる。

  • 安全は、システムの創発性である。
  • 創発性は、要素の振舞いについての完全な知識があっても、演繹的に予測することはできない。
  • このことが、システム安全を保証することはできないことにつながる。
  • しかし、その難しい挑戦に対して、ベストエフォートを尽くすための道具としてSTAMP/STPAが位置づけられる。
  • 創発性は、危険事象(望ましくない性質)だけではなく、望ましい性質もあり、それらの区別はない。したがって、システムづくりにおいて「望ましい性質を分析する」目的にSTAMPの考え方を応用することも可能である。

 

望ましい性質の分析にSTAMPを応用する例は、別の記事にまとめる予定。

 

STAMPの価値・意義・面白さ(1)

STAMP/STPA(※)の価値、意義、面白さについての個人的な理解。

※STAMP/STPA:MITのNancy Leveson教授が考案し、提唱しているシステムの安全性分析手法。参考資料(IPAサイト)

 

信頼性と安全性の違い

STAMP/STPAを理解するには、まず、「信頼性」と「安全性」の違いの理解が重要と思われる。

Nancy Levesonは、著書"Engineering a Safer World"や講演などで、「信頼性と安全性は、混同されがちであるが、違うものである」と繰り返し述べている。

どのように違うのか。例えば、JISを参照すると、次のように定義されている。

信頼性:機能単位が、要求された機能を与えられた条件のもとで与えられた期間実行する能力。(JIS X 0014)

安全性:システムが、規定された条件のもとで、人の生命、健康、財産又はその環境を危険にさらす状態に移行しない期待度合い。(JIS X 0134)

 

「信頼性」は、「要求された機能」に関心があり、機能が要求された通りに実行されることを指している。一方「安全性」は、「人の生命、健康、財産又はその環境」に関心があり、それらが危険な状態にならない度合いを指している。

関心の対象が異なるので、「信頼性が高いが、安全性は低い」とか「信頼性は低いが、安全性は高い」ということがあり得る。例えば、次のような例が考えられる。

  1. 「前方に人がいる状況で、自動車のアクセルを踏むと加速し、人に衝突する」
    ⇒「アクセルを踏むと加速する」という要求された機能が実行されているので信頼性は高いが、人が危険な状態になるため安全性は低い
  2. 「駐車場から出るため、自動車のアクセルを踏んでも全く動かない」
    ⇒「アクセルを踏んだら加速する」という要求された機能が実行されないので信頼性は低いが、危険な状態にはなっていないので、安全である

 

1.のケースから分かる通り、「信頼性が高ければ安全である」は成立しない。1.のケースでも、前方に人がいる状況ではなく、高速道路を走行中の状況であれば危険ではない。逆に2.のケースは、駐車場にいる状況だから危険ではないが、高速道路を走行中の状況であれば非常に危険である。

このように、システムの安全性は、システムが稼働する周囲の状況との組み合わせで考える必要がある。

 

信頼性と安全性の確認のしかた

上記のJISの定義に沿えば、信頼性は「要求された機能」が実行されることである。要求される機能、すなわち「機能要件」は、基本的に定式化可能で有限なものと考えられる。そうでなければ、機能の実装作業を誰かに委託する、契約する、ということが成り立たなくなってしまう。

したがって、実装された機能が、定式化された有限な「機能要件」をカバーすることを確認すればよいことになる。もちろん、「有限」とはいっても、現実には膨大な組合せ数の事象を確認する必要がある場合も多く、その確認は簡単ではない。しかし、形式手法のような数学を利用した方法や、事象の連続性に基づいたテスト技法など、納得性の高い確認を行うための手段が存在する。

一方、安全性は、「規定された条件のもとで、人の生命、健康、財産又はその環境を危険にさらす状態に移行しない期待度合い」である。「規定された条件のもとで」といっても、現実世界の全てを規定することは不可能だ。「規定された条件」つまり想定する条件の他に、何らかの状況が加わり、その作用によって事故が起きる場合も多い。

人命に関わるような事故が起きたとき、「その状況は想定外でした」といっても、「じゃあしょうがないですね」とはなりにくいのが現実である。システムを開発、提供する側は、「あらゆる状況」を想定しないと、真に安全なシステムを提供することはできないということになる。

上で、「システムの安全性は、システムが稼働する周囲の状況との組み合わせで考える必要がある」と書いた。しかし、システムの周囲の状況は、無限の可能性(状態空間)がある。

敢えて極端な言い方で対比をすると、「信頼性の確認は『有限』の事象を確認すること(それでも大変!)」であるのに対し、「安全性の確認は『無限』の事象を確認する必要がある」といえるのではないか。

 

無限の事象の確認をどうやって行うか

無限の事象の確認は、「無理」だ。しかし、無理だからといって最初から諦めることは許されない。システムの開発者、提供者は、「システムの安全性について、できる限りの努力を注いで確認した」ということを説明することが求められる。

その場合、「いろいろと思いついた危険事象に対して、対策を施しました」といっても納得性は低い。できるだけ網羅的で客観的な説明が必要になる。

 

STAMP/STPAは、システムの安全性をいかに確保したかについて、できるだけ網羅的で客観的な説明を可能とするためのツールとして位置づけられる。

 

具体的には、STAMP/STPAの以下のような特徴がそれに寄与していると考えられる。

  • 複数の異なる分野の専門家による分析:無限の事象を考えるには、結局、人間の「想像力」が必要となる。想像力を高めるには、一人で考えるよりも、複数の人と会話しながら考える方が脳が活性化されるため、好ましい。それも、異なる発想をする人が複数集まって会話する場合の方が、広い範囲に想像が行き渡りやすい。
  • 制御構造図:システムのハザードを防ぐことに関係する「要素間の制御関係」をモデル化し、可視化した図である。上記の「複数の専門家による分析」を行う際に、「対象のシステムをどのように見るか」を共有した上で議論ができるため、効率的で効果の高い分析が期待できる。
  • UCAの識別:制御構造図上の「コントロールアクション」を1つずつ取り上げ、それに4つのガイドワードを順番に当てはめてUCA(Unsafe Control Action)を識別する。ハザードにつながる無限の事象を、思いつくままに、やみくもに挙げていったのでは「今どこまで考えたのか?まだ考えていないケースはどこか?」が分からなくなる。第三者の納得も得られにくい。UCAは、「システム全体で着眼すべきポイントを俯瞰的に洗い出したもの」とみなすことができる。UCAに沿ってハザードシナリオを考えていくことによって、網羅性や客観性への配慮を示すことができる。
  • 定型化された分析手順と成果物:分析を行う各工程の作業内容と成果物が定められており、それらの成果物によって、分析を行った過程を第三者が理解することができる。

 

ここまでのまとめ

STAMP/STPAの意義、必要性について、ここまで書いたことをまとめると次のようになる。

  • システムの安全性の確保は、システムが稼働する状況について無限の事象を考える必要があるため、非常に難しい。
  • システムの開発・提供者は、システム安全性の確保をいかにして行ったか(=無限の事象をどのように確認したか)について、第三者が納得できるように説明することが求められる。
  • STAMP/STPAは、システム安全性の確保をできるだけ網羅的・客観的に行うための工夫が施された手法であり、第三者への説明責任を果たすために役立つ。

 


STAMP/STPAの面白さは他にもあるが、長くなるので、続きは次回に。