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) | コンセプト

2012年10月18日

ビジネスとは

ビジネス(事業)とは何でしょうか?お金を儲けることがビジネスでしょうか?お金儲け=ビジネスだとすると、以下のようなものはビジネスでしょうか?

  • 競馬で万馬券を当てて儲かった
  • たまたま、高級外車の中古車をとても安く仕入れることができたので、これを売って儲けた
  • 賄賂を渡して、便宜をはかってもらい、利益率の高い受注に成功し、会社が儲かった

私の「ビジネス」の定義では、これらはビジネスではありません。私はビジネスを以下のように定義しています。

ビジネスとは、継続して反復可能な社会貢献である

つまり、「継続して反復可能である」ことと「社会貢献である」ことの二つの条件を満たすもの、これが私のビジネスの定義です。「社会貢献」の定義は人によって異なるので、議論しにくいのですが、「継続して反復可能である」かどうかは簡単に判定できます。ギャンブルで継続的に儲け続けることは不可能ですし、犯罪を継続すればいつか必ず捕まります。したがって、これらはビジネスではありません。また、たまたま1台だけ中古車を安く仕入れることができても、それを安定的に反復する見通しが無ければ、これもビジネスとは言えません。

黒字は必要条件

継続して反復可能であるためには、ビジネスは黒字でなければなりません。赤字の事業を続ければ、いつか資金は底をつき、いやでも止めざるをえなくなります。一般的に、黒字はビジネスの十分条件である(つまり、儲けることがビジネスである)ととらえられがちです。しかし儲けを出すことがすべてなら、ギャンブルも犯罪もりっぱなビジネスになってしまいます。黒字はビジネスの必要条件に過ぎず、これに加えて、継続して反復可能な仕組みを持ってはじめて、「それはビジネスである」と私は思います。

では、一般にビジネスとは呼ばれていない社会システムについてはどうでしょうか。公共事業やNPO活動について、反復可能な仕組みを持っていればそれはビジネスであると私は考えています。収入源は売上以外のもの、税金や補助金、寄付金でもかまいません。一例を挙げれば、寄付金を募って発展途上国に図書館を建てるような活動を継続しておこなっているNPO団体、これは立派なビジネスです。逆に「社会貢献」という正義を振りかざし、赤字を垂れ流して(損失を将来に先送りして)活動を続けている事業は、ビジネスでないばかりか、継続可能の仮面を被って未来の資産を食いつぶす反社会的な活動といっても過言ではないと思います。

プロキューブのビジネス

11年前にプロキューブを起業したとき、私はビジネスをこのように定義することで、自分が何をやりたいかをすっきり整理することができました。

11年間、山超え谷超えやってきた感がありますが、目標とするところは今も変わってはいません。今後もお客様のために、社員のために、もっともっと安定したビジネスを実現して社会に貢献していきたいと考えています。

posted by プロキューブ at 14:12| Comment(0) | コンセプト

2012年06月29日

生産性について

ソフトウェアの生産性については、プログラマ個人に大きく依存することは、昔からよく知られていることです。いろいろなツール・言語・フレームワーク・プロジェクト管理手法などでソフトウェア生産性は多少変わるかもしれませんが、それらによる影響がせいぜい数十パーセントであるのに対して、プログラマひとりひとりの生産性の差は10倍以上あると言われています。このコラムでは、プログラマ個人の生産性の差について、私の考察を述べます。

頭を使う仕事

よく、「私はプログラマです」と言うと、「頭を使う仕事ですよね」と言われますが、まさにその通りであると思います。プログラマがコーディングやデバッグを行うときには、コンピュータの中で起こることを頭の中でシミュレートし、結果を推論する必要があります。ソフトウェアの生産性の高低差は、このシミュレートと推論の速度の差によって生じる、と考えています。この能力は難しい数学の問題を考えるときにも要求される能力であり、実は理系のほうがプログラマに向いている傾向があるのは、コンピュータの仕組みなどのプログラマに必要な知識を持っているからではなく、シミュレートと推論の訓練ができているからではないかと思います。

生産性と知識の相関関係

資格試験に出題されるようなIT関係の知識を身につけることはプロのプログラマとして必要最低条件ですが、プログラマの生産性と知識の量には、実はあまり相関関係はありません。生産性をあげようと、プログラマ本人が懸命に勉強したり、会社がプログラマに勉強させようとさまざまな講習を受けさせたりしても、なかなか生産性はあがりません。プログラマにとって、自分の仕事の価値(価格/単位生産量)を上げるために、時代の流れに沿った勉強は常に必要ですが、本当の意味での生産性(生産量/単位時間)と知識量には相関関係はない、と考えておいたほうが良いでしょう。

生産性を上げる方法

上で述べたように、プログラマの生産性を上げるためには、シミュレートと推論の能力を鍛える必要があります。では、どうすればこれらの能力を鍛えることができるでしょうか。私は、日頃からの仕事の取り組み方が重要であると考えています。生産性を向上させる仕事の取り組み方、それは、「執念」、「あてずっぽう」、「考えるための習慣」の三つの要素からなります。

執念

プログラムのデバッグや数学の問題は、時間をかけて考えるだけで問題が解決できる場合があります。ある程度の時間を費やしても解けなければ、「この問題は解けない」と人は判断するわけですが、そう結論するに至るまでにかける時間には、大きな個人差があるのではないでしょうか。たとえば、数学の入試問題に受験生が挑戦する場合、一つの問題に挑戦して「解けない!」とあきらめるまでの時間は、平均10分くらいではないかと私は思っています。理系の数学の入試問題の中には、1問あたり30分以上の時間を費やして解くように作られているものがあります。このような問題は、まず、それだけ長い時間ひとつの問題を考え続けられる能力がないと、絶対に解くことはできません。数学の問題が「解けない」受験生の中には、「執念が足りない」ことが原因の人たちがたくさんいるのではないかと思っています。これに対して数学者は、何日でも(執念深い人は何年でも)一つの問題を考え続けることができます。あきらめた瞬間、解ける可能性はゼロになるでしょう。

プログラマの場合もあきらめずに考え続ける習慣が必要です。そのことによって、脳が徐々に推論やシミュレートの作業に慣れてゆき、それが生産性の向上をもたらします。そして、考え抜いた末に問題を解決できたという喜びが、次へのモチベーションとなり、このループを繰り返すことで、あきらめずに考える人ができあがってゆくのだと思います。

「頭を使う仕事」をしている人とは、一つの問題を3日くらい考え続けることができるような執念を持っている人だと私は思っています。

あてずっぽう

前節で「プログラムのデバッグや数学の問題は、時間をかけて考えるだけで問題が解決できる場合があります」と書きましたが、プログラムのデバッグの場合、推論しなくても他の手段で情報を入手できる場合があります。たとえば、デバッガで実行して、変数の値を見たり、トレースを見たりすることで、推論せずに情報が得られるような場合があります。また、そもそもバグっているプログラムを相手にしているので、そのほうが確実な場合もあります。

しかし、推論で同じ情報が導出できる場合には、手を動かしていろいろ情報を得るよりも推論で導出するほうが早いのではないでしょうか。ここで言う推論は、論理的な推論だけでなく、「モジュールAは世界的にメジャーなオープンソースで実績もあるので、そこに今回のような発生条件が緩いバグがあるはずがない」といった経験則的な「あてずっぽう」も含まれます。

私の個人的な感覚ですが、生産性の低い人に多く見られる傾向として、正確に情報をつかもうとして、推論よりも調査が先行するタイプが多いように思います。インターネットを検索したり、ログを見たり、デバッガを動かしたりする「調査」が先行し、脳で推論するのを最後の手段にしてしまうと、高い生産性はのぞめません。

弊社では、「手を動かす前に頭を働かせよ」というのをプログラマへの指針としています。推論を十分に行い、情報不足で行き詰った後に調査に入ることにより、調査の範囲が絞り込まれ、素早く解決することができます。どこまで推論して、どこから調査に切り替えるかのバランスが大事なわけですが、推論を重視することにより、短時間で問題解決ができると考えます。

考えるための習慣

上記の他にも、頭を使って仕事するために以下のような工夫が必要であると思います。

  • 甘いものを食べる
  • うろうろ歩き回って、脳に血液を送る(足は第二の心臓と言われています)
  • 眠い時は15分程度の仮眠をとる(仮眠がうまくいかない場合、コーヒーを飲んでからすぐに寝るという方法もあります)
  • 眠気を防止するために、夜更かしをせず、規則正しい生活をする

投資効果

さて、問題解決のために採る手段を決める時、もう一つ重要な要素があります。それは投資効果です。デバッガでのデバッグや、ログファイルの検索をおこなっても、後に残るものはありません。しかし、頭を使って問題解決をするという習慣や能力を身につけることは、スキルとして個人の資産となります。このスキルは問題の種類を限定せず、広範囲に応用でき、さらに、簡単にはまねできない価値の高いものとなります。

プロキューブでは、社員一人一人が「頭を使って」仕事をする真のプログラマであることを目指して、日々の仕事に取り組んでいます。

posted by プロキューブ at 17:16| Comment(0) | コンセプト