
0から始めるコンピューターサイエンス#0
Chat GPTなどの生成AIが手軽に利用できるようになっています。11月20日から3日間幕張メッセで行われる情報技術関係の展覧会、NexTech Week 2024【秋】に参加予定ですが、そこでもやはり現在みられる生成AIを利用した製品・サービスへの関心の高さを反映して、圧倒的な数の会社が出展しており、併せて行われるカンファレンス(講演)のプログラムもやはり生成AIにどう向き合うかについての内容が最も充実していることを感じさせるものになっています。
noteを活用されている方々はコンピュータを使うことに関して私ごときよりも長けていることは間違いないでしょう。
私は、色々な内容のことを投稿していますので、「こいつは一体何者?」と思われる方々がおられるかもしれません。
色々なことを学び考えることが好きで、いろいろな大学や大学院で学んできて、今は5つくらいのプロジェクトを動かしている者だと申し上げておきます。一番効果的な学び方は、自分が理解した(理解したかも)と思うことを他の人に説明することです。これは教育に携わる方の多くが指摘されていることでもあります。
私は、人工知能に関連する研究をずっとウオッチしてきました。現在騒ぎになっている生成AIについてもそれを支えるニューラルネットワークとか自然言語処理といったことについては、1回目の学生時代からずっと関わってきており、理論的な研究についてはその当時からかなりのことが行われていて、コンピュータのスペックさえその実装が可能なレベルに追い付いてきたら一気に花を咲かせるであろうということは予見していました。
そういうわけなので、AI技術が一般の人たちが容易に使えるようになって社会全体がザワついている状況について、少し不思議な感じを抱いています。
さて、ちょっと話題がそれましたが、コンピュータの利用スキルについて弱者である私が、あえてコンピューターサイエンスについて語ることにします。生成AIとはいったい何であり、何が期待でき、何が期待できないか、そして何に注意して付き合っていく必要があるのかについての私の理解をご説明していきます。
まずは、そもそもデジタルコンピュータとはなんなのかということから論じ起こしていきますので、PCスキルはあるけれど、実際にはなにをやっているのかわからない(ので知りたい)という方にも有益だと思います。
類似の投稿をしたりしますが、この情報は、きっちりと書いてまいりますので、あえて有料とさせていただきます。初回である#0につきましては低額かつ返金可能という設定にしておきますので、#1以降を購読されるかどうかは、お読みになってお決め下さい。
#0 コンピュータとは何者か?
0.1 コンピュータの歴史
定年後に嘱託で高校に教えに来ていた英語の大御所の先生に、「英文和訳ではカタカナ英語を用いてはいけない!」と下命され、コンピュータのことを「電子計算機」とか「電子頭脳」と訳すことを強いられたことがありました。私が高校が嫌いになったきっかけとなった先生とは別の先生で、若かりし頃「マッカーサーの通訳をしていた」という真偽不明のことを仰せになる方でもありました。老人力というのでしょうか、どんなことを仰っても反発を感じることはなく、「御意!」と答えさせるものをお持ちの方でした。もし現在ご存命であられたとしたら、IT関係の横文字が乱れ飛んでいる現状をどのように解釈されるのかと思ったりします。「電子交信網」とか「全世界蜘蛛巣」とかいうことばを捻り出されるのかなと思ったりします。
しかし「電子計算機」という訳語は実は本質を突いているように思います。
コンピュータがしていることは、実は「計算」に他ならないからです。
計算を機械にさせようという試みは、今から4000年以上も前から行われています。それはアバカス(算盤)というもので、バビロニア人が使っていたようです。必要は発明の母、という言葉が示す通り、かなりの計算を必要とする天文学や測量などで計算したりその結果を保存したりすることに対する需要がその進歩を支えていたようです。
中学入試の算数のコテコテの計算問題に対するウザイ感は、個人的なものではなく、大昔から人類普遍の感覚として共有しているものだといえるでしょう。
しかし、こうした「デバイス」は、計算はあくまでも人間がそれらを用いて行う計算器というものでした。計算器そのものが計算をするわけではなかったということです。
機械が計算を行うものとしては、1643年にパスカルが試作した機械式加算機がそのはしりだと思います。これは本当に「機械仕掛け」で計算を行うものだったようです。
大掛かりな機械仕掛けの計算機として、一つ挙げたいのは多元連立方程式を解くものとして1940代半ばに東京帝国大学(当時)で製作された「9元連立方程式求解機」ですね。これは、1936年にアメリカ人のウィルバーが完成させたものと同一視されているようです。
ただ、これらのものは鉄のテープ(!?)の長さで方程式を表し、未知数は棒の角度と対応するといった具合なので、動かしてみて結果を観測しなければならないといった感じのものでした。それにしても精度は極めて高かったとのことです。これらは、長さや角度といった連続した数量を扱うので「アナログ」計算機(アナログコンピュータ)とよばれます。アナログ計算機には微分解析機などもあり、その理論をデジタルコンピュータに取り込んだものがコンピュータグラフィックスに応用されているとのことです。
しかし、日本で大掛かりなアナログコンピュータが製作されたのとほぼ同時期の1946年に、アメリカで初のデジタルコンピュータといわれるENIACが製作されました。
アナログは連続した値を扱うという意味でしたが、デジタルというのは飛び飛びの値(離散値といいます)を扱うという意味です。例えば、実際の音声は連続したデータですが、デジタル化されるとそれが離散したデータとなります。そのことについては、稿を改めて書くことにします。
現在広く使われているコンピュータは、Macにせよスマホにせよ、「デジタルコンピュータ」です。
これは、言ってしまえば、スイッチのオン(1)とオフ(0)ですべてのものを表し、非常に多くのスイッチを使って数を表し、指令(プログラム)にしたがってそれらを保存したり操作したりします。スイッチのオン・オフと親和性が高いのは2進法です。
0.2 デジタルコンピュータの言葉
手を出して下さい。片手で数字をいくつまで数えることができますか?
「5!」
と思われた方は「カタギ」のまっとうな常識人です(笑)。
おそらく中学入試で頭が酸っぱくなっている方は、高らかに、
「31!」
とお答えになるでしょう(本当はもっとあるのですが・・・)。
「え?何その数字?」
と思われる方もあるでしょう。
とりとめがなくなりそうなのでまとめますが、とりあえず「31」を正解としておきます。
どういうことかと言いますと、5本の指の曲げ伸ばしによって、数えるということでして、曲げた状態を0、伸ばした状態を1で、順番はここでは(小指,薬指,中指,人差し指,親指)と表記することとします。例えば、人差し指だけを伸ばし、後の指は曲げている場合には、
( 0, 0, 0, 1, 0)
のように表現します。すると、
( 0, 0, 0, 0, 0 )、( 0, 0, 0, 0, 1 )、・・・、( 1, 1, 1, 1, 1)
という32(2の5乗ですね!)通りのパターンが考えれらます。
最初の ( 0, 0, 0, 0, 0) を0とし、( 0, 0, 0, 0, 1 ) が1、( 0, 0, 0, 1, 0 ) が2、(0, 0, 0, 1, 1 ) が3という風に数えていき、0から数え始めるため最後の ( 1, 1, 1, 1, 1 )は 31 を表すことになります。一本指を立てるパターンの中には悪いイメージを与えるものがあったり、過日お亡くなりになった楳図かずおさんの『まことちゃん」の『グワッシ』のパターンになったりしますので、人前で試されえるのは避けていただいた方が良いかと思います。また、不器用な方は指をお使いにならず、上のような表現で紙の上でお考え下さい。
このように数を表す方法には2進法という名前がついております。
翻って私たちが通常使う数の表し方は10進法です。
これは、例えば10進法で11111と表された数は、式で表すと、
10000×1 + 1000×1 + 100×1 + 10×1 + 1×1
ということです。10000は10の4乗、1000は10の3乗、100は10の2乗、10は10の1乗、1は10の0乗(10であれ、5であれ、2であれ、0乗は1と定義されています)ということになっているということをまずは頭に置いて下さい。
これに対して、2進法で、11111と表された数は、式で表すと、
16×1 + 8×1 + 4×1 + 2×1 + 1×1 (= 31←10進法に直っています)
31を表します。これは上で説明したことと一致していますね。ここで、16とか8という数が登場していますが、これらは2の4乗、2の3乗、2の2乗、2の1乗、2の0乗となります。
このように各位の数を何倍するのかという話は、他の例えば3進法でも同じです(3の何とか乗を考えることになります)。
そのような一般化ができますが、1と0で表せるというのが、スイッチのオン・オフと対応するので2進法とデジタルコンピュータは親和性が高いということになります。
1つのスイッチのオン・オフを「1ビット(1 bit、1bと表します)」と言います。先ほどの片手でのカウントでは 5b ということですね。
デジタルコンピュータでは、8bを一つのカタマリとみなし、これを「1バイト(1 Byte、1Bと表します)」といいます。
先ほどコンピュータがあつかうのは1と0という話で、「そんなことはない。普通に大きな数で計算しているし、コンピュータスクリーンには1と0以外の数も表示できるではないか?」と思われた方がいらっしゃると思います。実はその裏では
かつては窓もなく塵などが紛れ込まないような対応策を講じ、冷房をガンガン効かせたビルで、それでも問題が頻発するような環境下に膨大な数の真空管(過剰な単純化を恐れずにいえばスイッチ)を並べて計算させていました。
このようなコンピュータの計算能力は、お手もとのスマホのそれの足許にも及びません。ある識者によると、アポロを月まで運ぶのに使われたコンピュータのパワーは、初代ファミコンのパワーを下回るほどだということです(真偽は定かではありません)。