2021年02月04日

エコなシステム

要件定義の正しさ

今回はシステムの要件定義において、ある要件を実現することが正しいかどうかとはどうやって決まるかについて考えてみたいと思います。
私は、その要件のコストパフォーマンスがプラスである場合にのみその要件を実装することが正しいと考えます。つまり、要件から生じる顧客の利益がそれを実現するのにかかるコストよりも大きい場合にのみその要件を実現するべきであり、これを真の要件と定義します。
ところが、実際には真の要件ではないものが要件定義に紛れ込み、結果としてエコでないシステムが頻繁に構築されているように思われます。個々の要件について利益とコストを見積もることを怠ったためにそのようなことが起こるわけですが、要件の利益とコストを見積もることは難易度が高く、正確性を極めようとすると時間もかかるため、ある程度仕方がない面もあります。
また、利益とコストを比較するためにはそれぞれ金額に換算する必要があり、そう簡単にできることではありません。
しかし、難しいからと言ってやらなければ、暗いところでなくした鍵を明るいところで探すパターンになってしまいます。

要件がもたらす利益

要件を実現すると、顧客に利益がもたらされるわけですが、必ずしも目に見える効果がすぐに出るわけではありません。たとえば、システムで拡張性や可搬性が高いアーキテクチャを採用しても、システムに変更が行われるまでその性質のメリットを得ることはできません。また、可用性が高い、操作性が良い、スマホからでも使えるなどの性質もその要件の効果を金額換算するのが難しいでしょう。
重要なことはこれらの目に見えない利益も含めて評価することです。

要件の実現にかかるコスト

要件を実現するのにかかるコストについて、構築作業費のようなものであれば計算しやすいのですが、隠れたコストとなるものが多数あり、それに注意する必要があります。たとえば、セキュリティを強化する機能を導入したためにエンドユーザの負担が増えたという場合はには、その負担増加分を導入コストに算入すべきです。

要件の海

要件定義をITのコンサルタントにお願いすると、世の中で言われている様々な要件を列挙してくれます。バグはないほうがいい。実績があるほうがいい。先進的なアーキテクチャを採用している方がいい。脆弱性がないほうがいい。といった方針に基づいて抽象的で情報量の少ない要件が大量に提示されることになります。それぞれについて、顧客に必要であるか、ベンダが実装可能かの検討が必要ですが、もっとも重要なのは真の要件であるかどうかです。

これらの大量の要件を整理するためのベン図を書いてみました。

エコなシステム.png

気をつけなければいけないのは、真の要件でない要件が出やすい要注意領域です。
顧客側では技術的な難易度が判定できない状態で様々な要件を入れてしまい、コストが思ったより高いものが入ってしまうことが起こりがちです。
ベンダ側ではセカンドシステム症候群とも呼ばれるもので、第二バージョンを開発するとなると、顧客側の利益がどのくらいあるかを考えずに、豊富な機能で勝負しようとしてしまう傾向があることです。
極端なケースでは、バグ修正でさえお客様の利益にならず、新の要件とは言えない場合もあります。
特に日本のIT企業は非機能要件に必要以上にお金をかけたシステムを作りがちなので、真の要件だけを実装してエコなシステムを構築するよう心がける必要があります。
また、ベンダ側と顧客側の両方で必要であると思った要件でも、真の要件でないものもあります。バズワードや流行にのっていれてみても実際の利益がそれほど大きくない場合(ex. RPA)やセキュリティ要件のように誰も否定できず裸の王様の服のようにみんなから肯定されて入ってしまうものなどがあります。まあ、このようなものは前述の要注意領域にくらべれば問題は少ないと思います。

まとめ
プロキューブはソフトウェア製品ベンダですので、セカンドシステム症候群で自己満足で勝手に要件を追加しないように気をつけております。特にセキュリティや可用性などの非機能要件についてコスト対効果を無視して開発費をつぎ込むことは、最終的に製品の競争力を下げるだけでなくお客様のお金を無駄遣いする意味があり、 lose-lose となるため、避ける必要があると考えております。
posted by プロキューブ at 15:11| Comment(0) | コンセプト

2020年02月23日

脳を理解することができるか


人間は人間の脳を理解することができるか

この投稿は私が2020年2月19日から4日間にわたって「京都大学ELP主催 短期集中講座 『脳と心』 脳科学の新潮流」を受講し、その結果自分なりに悟った内容を記載するものです。ただし、これは講義の内容(もっというと脳科学)を解説するものではなく、受講した結果私が思いついたことを勝手に述べているものであることをご了承ください。

脳模型による思考実験

私の脳に対する理解を説明するために、一つの思考実験を行います。全知全能の神が存在し、その神が私の脳の模型を作ったと仮定します。その模型には私の脳のニューロンとそのシナプスが忠実に再現されています。その模型には特別な機能があり、模型の中の一つのニューロンを触ったときに、対応する概念(言語/ボキャブラリー)が存在する場合は、その模型がその内容を喋ってくれます。たとえば、

- しょうゆ顔の顔を見たときに発火するニューロンです
- 焼き鳥を思い出すときに発火するニューロンです
- 昨夜焼き鳥を食べたことを記憶しているニューロンです

のような感じです。しかし、対応する概念が無い場合は、その番号だけを答えてくれます。

- 無意識の312,354,323,213番ニューロンです。
- 無意識の331,163,096,300番ニューロンです。
- 無意識の80,187,327,537番ニューロンです。

というような感じです。ここで、前者を「意識ニューロン」、後者を「無意識ニューロン」と呼ぶとします。

では、この模型のニューロンを無作為に触って、意識ニューロンにあたる確率はどのくらいでしょうか?
母数であるニューロンの数の方はわかっていて、約1000億個と言われています。
これに対して、意識ニューロンの数はどのくらいでしょうか?人間の語彙数が10000程度であるところから類推して、せいぜいその2乗である1億個程度ではないかと思われます。この類推の根拠はないのですが、日常会話の内容から考えると、直感的にはもっと少ないのではないかと思います。
ただし、ニューロンは冗長化されており、一つの概念が同じ意味を持つ複数のニューロンで実装されているので、その冗長化の係数として10を想定し、10億個であるとしておきます。
つまり、楽観的に見積もっても、模型のニューロンを無作為に触って意識ニューロンにあたる確率は1% ということになります。

概念の共有のための拡張

さて、上記で「対応する概念がある場合/無い場合」と書きましたがこれは脳の模型の本人が触ることを仮定しています。
他人が触る場合を仮定すると、本人は意識にある概念であるが、触った人の方には対応する概念がない場合が考えられます。そこで、機能を拡張して、脳模型の本人の意識にはあっても触った人には概念がない場合、模型はその概念の番号を答えてくれることにします。

- 未知の概念1252番のニューロンです
- 未知の概念43222番のニューロンです

というような感じです。他人の脳模型で未知の概念に出会うケースとして

- 模型の脳が自分の知らない知識を持っている
- 模型の脳が個人固有の概念を持っている

などが考えられます。この模型では、複数の人間が同じ概念を持っている場合はそれらの人は同じニューロンを持っているということになります。
人によって言葉の割り当て方が微妙に違っていて一つのニューロンに違う言葉が割り当てられている場合や一つの言葉に対するニューロンが人によって異なる場合もあるかもしれません。
しかし、模型を生み出しているのが全知全能の神なのでそこは上手くやってくれることにしておきます。

いずれにせよ、これらを考慮してもやはり、無意識ニューロンのほうが圧倒的に数が多く、相変わらず、脳のニューロンのほとんどは無意識ニューロンであると言えるでしょう。

脳を理解するとは

脳を理解するというのは、この無意識ニューロンにラベルをつけることであると言えるのではないでしょうか。もし、すべての無意識ニューロンに意味のあるラベルをつけることができれば、脳に対する入力から最終的な出力が出るまでのニューロンの発火パターンを推測し、ルール化することができるように思われます。
実際に認知心理学者や脳科学者が行っているのはこの無意識ニューロンに対するラベル付けの作業であると言えるのではないでしょうか。
しかし、前述の楽観的な見積でも99%が無意識ニューロンであり、多少ラベルをつけることに成功したとしても脳に対する理解をすすめることは難しいと感じます。

シンギュラリティは来るか

ブログでシンギュラリティにふれるのは二回目ですが、私は上記の思考実験の結果、今回もシンギュラリティ来ないと判断しました。意識ニューロンに比べて無意識ニューロンのほうが圧倒的に多いにも関わらず、我々は意識ニューロンのことしか考えられていないように思われるからです。
人類はいまだにモランベックのパラドックスから抜けることができておらず、無意識ニューロンの洪水に溺れたまま浮上することができそうにありません。
ディープラーニングは新しい計算手法であり、それを使って革新的な新しいアプリケーションを開発することは可能ですが、そのことと脳を理解することとは関係ありません。
もし、ディープラーニングで脳と似た動きをするものを開発できたとしても、その重み付けの行列式の数値が無意識ニューロンと同様に理解不能なものであれば、仕組みを理解できないシステムとなり、なににも応用できないものと思われます。
posted by プロキューブ at 17:32| Comment(0) | コンセプト

2015年12月29日

シンギュラリティは越えられない

2045年問題いわゆるシンギュラリティについて、私はシンギュラリティは越えられないと考えています。つまり、人工知能が人類を超越する日はこないと思っています。

人工知能とは何か?
映画「イミテーションゲーム」は、数学者チューリングの生涯を扱ったものですが、そのテーマは人間のように計算する機械(=イミテーション)と本物の人間の知能との差は何か?というものだと思います。
チューリングは第二次世界大戦中に人間には解けない暗号を解読する機械を開発しました。もし、シンギュラリティを機械が人間の計算能力を超える特異点であると定義するなら、チューリングが暗号解読機を開発した時点で、特異点を超えたのではないでしょうか。実際にそのインパクトは強烈なものだったと思いますが、不幸にも、その成果が暗号という秘密にしなければならないものだったために、その瞬間には、歴史的な転換点として取り上げられることがありませんでした。
チューリングの暗号解読機の開発がシンギュラリティでないとすると、シンギュラリティとは何でしょうか?単純に記憶能力、計算能力が人間の脳の能力を超えることではなく、「人間のように考えることができて、その能力が人間を超える」ということではないでしょうか。
チューリングは「人工知能とは、外部から見て人間らしく見える計算機械である(=その実装方法を指すものではない)」としていました。この人工知能の定義には、昔から反論があります。主に認知心理学者からの反論で、人工知能は外部から見て人間らしく見えるということではなく、人間は論理的な思考を行っており、その思考をシミュレートする能力を持つものでなければならないとするものです。
列記してみましょう。
A. チューリング的人工知能:人間のように計算する機械(人間に近ければ近いほど優秀な人工知能であるとする立場)
B. 認知学的人工知能:人間の脳と同じように論理的に思考する機械(ハードウェアの性能に応じて、計算能力、記憶能力を上げることが可能であるとする立場)
同じことを言っているように思われるかもしれませんが、B. のほうは人間が論理的に思考していることを前提としている点に注意してください。人工知能を B.で定義するならば、シンギュラリティを超えることは可能でしょう。しかし、私は「人間が論理的に思考している」という前提が成り立たないと考えています。また、チューリングもそう考えていたのではないかと思います。

人間は論理的に思考しているか?
囲碁を打つソフトウェアは、2006年にモンテカルロ法が取り入れられて、それ以前より格段に強くなりました。それ以前は、mini-max探索+αβ枝刈りで最善手を探索し、ソフトウェアの強さは特定の局面の優勢度合いを評価する評価関数の良し悪しに依存していました。しかし、モンテカルロ法では、囲碁の特定の局面から残った手を乱数を発生して打ち、結果の勝ち負けの数で優勢度合いを判断するため、評価関数が不要になりました。そして、格段に強くなったわけです。
実は人間も同じように(あたかも乱数で発生するかのように)思考の過程で間違ったことをたくさん考えているのではないでしょうか。たとえば、大学受験で試験時間150分とかの数学のテストを受験する場合を考えてみましょう。問題は5問くらいしか出題されず、1問に与えられた時間は30分くらいあります。もし、受験生がその問題の解法を知っていれば、5分あれば答案を作成できるでしょう。しかし、問題を出す側も工夫してそう簡単には解けない問題を出しています。そして、受験生は、あーでもない、こーでもないと考えるわけです。もし、その思考過程を覗くことができれば、受験生は30分のうち25分くらい間違ったことを考えているのが見えるでしょう。与えられた時間のほとんどを間違ったトンチンカンなアイデアにもとづいたシミュレートに費やしてるわけです。
私は人工知能が人間に近づくためには、人間と同じように間違ったことを考える仕組みを備える必要があると考えています。

光の速度は越えられない
コンピュータには、記憶能力があります。その記憶量という意味では、すでに人間を上回っているのではないでしょうか。たとえば、Wikipedia 上に書かれていることをすべて暗記できる人間はいません(いや、クイズ王とかなら可能かもしれませんが)。コンピュータの性能はムーアの法則にしたがって、年々向上しており、最近では安いパソコンを買っても1TBくらいのディスクが入っています。
しかし、その記憶にアクセスするためにかかる時間はどうでしょうか?コンピュータの内部ではモジュール間で通信を行っており、その通信速度は光の速度を超えることはできません。つまり、コンピュータの性能はモジュール間の距離に依存しているわけです。CPUがコンピュータの記憶にアクセスする際、レジスタへのアクセス速度を 1秒とすると、キャッシュは4秒、メモリは6分、ディスクは1年 くらいの比率で遠くなればなるほど遅くなります。距離に依存しているので、集積度を上げればアクセスにかかる時間は縮まりますが、限界があるでしょう。また、2次元の基盤上に配置されるコンピュータの素子が、人間の脳内で3次元で張り巡らされている神経細胞に比べて集積度が高いかどうかも怪しいと思われます。
ハードウェアの性能が多少向上しても、上で述べたように思考に必要な記憶を思考回路の近くに配置しなければ性能が確保できません。コンピュータではキャッシュと呼ばれるメモリをCPUの近くに配置する技法で、その性能を確保しています。そのキャッシュに何を記憶するかについては、LRU(Least Resent Use)法と呼ばれる方法で実装されており、短く言うと、よく使うものを近くに置いておくということになります。逆にあまり使わないものは忘れるという方法になるわけです。
私は、人工知能でもこの忘れるという能力が重要であると考えています。つまり、人間らしく賢い知能をつくるためには、人間らしく上手に忘れる能力が必要です。そうでなければ、有限の高速な記憶素子に有効なものだけを保持することはできません。

シンギュラリティは越えられるか?
もう一度戻りますが、すでにコンピュータは計算能力でも記憶能力でも人間を超えています。では、シンギュラリティとは何を超えるのでしょうか。私は、人工知能の定義を A. チューリング的にとらえても、 B. 認知心理学的にとらえても、シンギュラリティは越えられないと考えています。
まず、B. 認知心理学的に考えた場合、認知心理学が、人間が論理的に思考していることを前提としているために、前述の間違える能力、忘れる能力を考慮しておらず、人間の思考に近づくことに失敗していると思われます。そういう意味では囲碁のモンテカルロ法は画期的であったと思われますが、その方向の研究が2045年までに急に進むとは考えにくいです。つまり、ハードウェアの技術進歩でシンギュラリティを超えると予測しているのならば、それは不可能であり、もし、シンギュラリティを目指すのであれば、今の認知心理学を破棄し、人間らしさとは何かについてもう一度研究し直す必要があると思われます。
しかし、この人間らしい人工知能は必要でしょうか?映画トランスセンデンスはシンギュラリティを扱ったものですが、この映画の結末を「シンギュラリティを超えた知的生命体は人間ではない」→「人類ではないものが人類を支配したり滅ぼしたりする」→「それは人類の敵であった」というように解釈しています。
人間と同じように間違ったり忘れたりすることができる人工知能が、人間よりたくさん記憶したり計算したりするとすると、それは人工知能と呼べるでしょうか?人間の天才がきちがいと区別がつかないのと同じで、もし、優れた人工知能の開発することに成功したとしても、誰もその知能が正しいかどうかを判定できないのであれば、社会的に存在価値がありませんし、それを人工知能と呼ぶのは難しいでしょう。
チューリング的に人工知能の完成度を「人間らしさ」を尺度とするならば、人間より人間らしくなることはないので、シンギュラリティはありえません。
私は人間らしい知能の開発の可能性を否定しているわけではありません。人間らしさを尺度とする以上、漸近しても人間を超えることはないでしょうということです。つまり、徐々に人間らしくなることはあっても、急に革命的に何かを超える日が来ることは無いと考えています。
posted by プロキューブ at 12:30| Comment(0) | コンセプト