目次
05-01 ハロルド・コーエンの誕生日(1928)
05-01 BASIC言語 初稼働日(1964)
今日は、ハロルド・コーエンの誕生日(1928)
この人よりも、この人が作ったプログラムの方が有名でしょう。
アーロン。コンピューター画家として知られ、「創造的な」人工知能だと言われます。
もっとも、コーエンはアーロンに創造性があるなんて、ちっとも認めてません。
見た人が勝手にそういっているだけ。
コーエン自身も画家なのですが、何が人間の創造性を左右しているのか、その限界を見極めようとしたところに彼の独自性がありました。
アンディ・ウォーホルやロイ・リキテンスタインは、およそ「芸術としての創造性」なんて感じられない、広告ポスターや漫画雑誌を主題とした作品を、芸術作品として作っていました。
ピエト・モンドリアンはもっと前の時代の人ですが、キャンバスをただ直線で区切って色を塗っただけで、創造性を感じさせました。
コーエンも、おそらくはここら辺の作品に影響を受けているのでしょう。
「無作為に描かれた線」による作品群を作り、有名になります。
無作為…って、芸術の大切なテーマの一つなのですが、その無作為をどう作り出すかが問題。
彼は、紙をくしゃくしゃに丸め、それを再び伸ばし、しわの上に線を引いていきました。
他のしわと交わる交点では、あらかじめ決めたルールに従い、線が進む方向が決まります。
とにかく、ルールだけがあり、後は一切が偶然。
コーエンの意思はルール決定においてのみ入っており、芸術作品には意思が入り込まない。
それを「創造性」と呼べるかどうか…これが彼の作品のテーマでした。
当初は線画だけでしたが、後にはこれを拡張し、色を塗ったりもしています。
もちろん、色を塗る際もあらかじめ決めたルールに従って塗っているだけです。
彼は、このルールを決める作業を「初めてのプログラムだった」と語っています。
あらかじめ、起こり得る現象に対して、網羅的に対応できるルールを決めておく。
そして、偶然を元にルールを適用し、完成作品を見る。
彼は、さらに作品が「彼の考える、良いもの」になるようにルールに手を加えます。
この繰り返しで、作品自体は偶然性に支配されながらも、彼が思うような絵が描かれるようにルールを整えるのです。
この作業は、当然のように「機械化」の方向に進みます。
1971年、データ・ジェネラル社の後援を受けて、彼はコンピューターに絵を描かせるプログラムを展示します。
…プログラム自体には、1~2年かかったそうです。コーエン自身がプログラムを行いました。
この時の絵は、非常に単純な抽象画です。しわくちゃの紙をなぞる代わりに、ランダムを元に線を引いていきます。
当時のコンピューターにはまだ高精細なディスプレイはありませんから、ペンを持ったロボット自動車…LOGO の「タートル」に相当するものが絵を描きます。
#タートルは「かわいすぎて、みんなが絵ではなく、タートルの動きに注目してしまう」という理由で、後にプロッタプリンタに変更されます。
さらに翌年には、こうして描かれた絵の展示会を行います。
多くの絵が飾られ、その中には、絵を描くマシン自体の展示もありました。
マシンは少しづつ絵を描き進め、会期の終わりごろには見事な抽象画が完成しました。
この「機械」も含め、コーエンの芸術作品なのです。
絵を描く機械を見た人々は…この機械に「知性」を感じました。
左側でしばらく絵を描いていたかと思うと、急に右の方にペンを動かし、そちらでも何かを描き始めます。
これを見た人たちは「左に何かを描いたから、右にも描き入れて全体バランスを取っているのだろう」と話をします。
でも、コーエンによれば「単に、描くスペースが無くなったので中断して、別のところにスペースを見つけただけ」なのだそうです。
コーエンは、何も考えずに動くだけの機械を見る人々が、「機械が考えている」と想像する現象を、興味深く感じました。
そして、プログラムによって絵を描く機械に、大きな魅力を感じ始めます。
彼は、「プログラムが、絵を描くよりも楽しくなってきた」のだそうです。
1973年、コーエンは、妻と旅行中に、洞窟の岩肌に描かれた、原始時代の壁画を見ます。
これは、彼にインスピレーションを与えました。
そして、彼はアーロンを作りはじめます。
非常に単純な、原始時代の洞窟壁画のような絵を描く、コンピュータープログラムです。
アーロンは、とにかく「閉鎖空間」を描こうとします。ゆがんだ楕円だったり、ジャガイモのような形だったり。
描いている最中に他の絵とぶつかりそうであれば、線を曲げて、絵が重ならないようにします。
そして、時にはこの閉鎖空間から線を伸ばします。
その線は足のようにもみえ、まるで原始人が狩猟対象の動物を描いた、洞窟壁画のようでした。
この、「動物らしく見えるもの」からスタートして、コーエンはアーロンに様々な規則を教え始めます。
同じ閉鎖空間でも、描き方によっては雲にも、太陽にも見えます。
そして、次の大きな段階へ。
コーエンは、アーロンに、動物に「骨格」があることを教えました。
棒を繋げるような形で、胴体と4本の脚、首と頭、尾が繋がっていることを教えたのです。
この時点では、アーロンが知っているのは、棒状に体が繋がっていることだけでした。
棒同士は、接続箇所の角度を変えられます。でも、この角度も「可動範囲」があり、あり得ない形状にはなりません。
アーロンは棒を描くのではなく、その周りに適切に「肉付け」された形状を描きます。
ただ、この肉付けの際のパラメーターは、アーロンがランダムに生成します。
これにより、「洞窟壁画らしさ」が増しました。
コーエンはさらに、人間の形状を、木の形状を、部屋の構造を教え、遠近法や、重なった際の印面処理などをアーロンに教えます。
形状も、当初は2Dで表現していましたが、3D形状を透視変換して2Dに出来ることを教えました。
そこまで行くと、ただの3Dモデルを動かして、レンダリングするだけのプログラムになりそうです。
しかし、アーロンは3Dモデルを動かし、それを参考にして、その形状を「デッサン」するように線を描くのです。
参考にしかしていないので、なんとなく人間の形になったとしても、やはり線はいびつで、ただの3Dレンダリングとは異なります。
なにか、芸術としての肖像画の側面を持っているのです。
アーロンは創造性を持っているのか?
コーエンは、この問いにきっぱりと「持っていない」と答えています。
アーロンが創造的に見えるのは、アーロンが描いているところを見る我々が、アーロンに人間的な何かを感じてしまうためです。
実際には、その内部ではランダムを生成し続けているだけで、何も考えてはいません。
ただ、アーロンはコーエンの考える「芸術性」を教え込まれています。
アーロンが創造的ではなくとも、コーエンは創造的で、アーロンはコーエンを真似しているのです。
以前は、人工知能の研究者で、コーエンの支援も行っているレイ・カーツワイルが、アーロンの「Windows 移植版」を有償で配布していました。
しかし、今探したところ、配布は辞めてしまったようです。
ずっと Windows 95 用のままだったからね。64bit 時代になって動かなくなったのかも。
そんな、アーロンの描いた作品は、芸術作品として認められ、高値で取引されています。
これももちろん、アーロンを道具としてコーエンが描いた作品、としての価値があるためです。
実のところ、アーロンが描いた絵は沢山あって、販売されているのは「コーエンが認めた」作品だけです。
この時点で、高値で取引される理由はちゃんとあるんですけどね。
先に書いたソフトを入手したとしても、それで描かれた絵が全部高価な価値がある、というわけではないのです。
機械は知性を持ちうるか否か?
これは17世紀から続く、哲学の大きなテーマです。
時代的に「機械」がコンピューターに変わり、チューリングがチューリングテストを提唱したことで、「人工知能」は「対話可能であること」が重視されるようになりました。
しかし、コーエンはそれとはまた違った方法で、アーロンという「画家の人工知能」を作り上げました。
多くの人が、アーロンが絵を描いているのを見て「考えている」と感じるようです。
対話は行っていませんが、多くの人が知性を感じれば、それは知性があるにほかならない。
コーエンは、アーロンは「多くの人に考えていると感じさせることで、チューリングテストには合格している」と言っています。
事実、2000年ごろには、米国人工知能教会の会長も「現時点での最高水準の人工知能」のひとつとしてアーロンを挙げています。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は、BASIC の生まれた日(1964)。
厳密に言えば、ちょっと違うかな。
いわゆる「BASIC」としてなじまれた環境が、最初に動くようになった日と言うべきか。
1964年の早いうちに、ダートマス大学で、BASIC という「言語処理系」は完成していたのだそうです。
パンチカードにプログラムを打ち込み、バッチ処理でコンパイルを行い、コンパイル済みのバイナリを実行できる環境として。
この点では、FORTRAN とそれほど変わりませんね。
でも、BASIC の目標点はそこではなかった。
この、バッチ処理コンパイル版の BASIC を元として、「対話処理」が組み込まれ、はじめて稼働したのが今日、5月1日とされているのです。
対話型というのはどういうことか?
パンチカードにプログラムを打ち込むのではなくて、テレタイプライターでタイプすると、即座に動作するのです。
PRINT 2 + 2
と打ち込むと、その瞬間に「PRINT 2 + 2」をコンパイルし、完成したバイナリを即座に実行します。
結果、「4」とタイプライターに出力されます。
この時点では、まだ BASIC 言語の処理部分はコンパイラのままでした。
入力が数字から始まる場合…つまり
10 PRINT 2 + 2
という形式である場合、一連のプログラムの、行番号「10」番目の断片だと見做し、内部メモリに格納します。
どのような順序でプログラムを入力しても、内部では行番号順に並び替えられます。
同じ行番号を上書きすれば前のものは消去されますし、行番号だけ入れれば、その行自体が削除されます。
そして、RUN という命令が実行されると、即座にプログラム全体がコンパイルされ、動き始めます。
80年代の BASIC を使った人にも、BASIC に行番号は必須だと思っている人が多いのだけど、そんなことは無いです。
行番号は、あくまでも「編集に」必要なだけ。
もちろん、GOTO などで行番号使いますよ。
だけど、これだってラベルが使える BASIC 環境だってあった。
行番号でジャンプする FORTRAN でも、とび先以外の行には行番号を付けなくていい。
行番号がなくたって何とかなる。
でも、BASIC が作られた当時はテレタイプで、ディスプレイはありません。カーソルを動かすことはできないのです。
その環境でプログラムをしようと思ったら、編集する位置をすぐに指定できる方法が必要。
行番号は、主にそのためのものです。
#FORTRAN はパンチカードなので、正しく並べることを前提に、行番号が不要だっただけ。
でも、この行番号による編集が、BASIC を大成功に導いたように思います。
行番号があれば、それを内部メモリに格納する。
行番号が無ければ、直接実行する。
この単純な規則で、意識せずにモードを使い分けられます。
ちょっと実験したいときは直接命令を動かしてみて、動作を確認してからプログラムに組み込む。
BASIC は元々「プログラムの学習用」でしたから、こうした、コンピューターになじめる環境全体を作り出すことが重要だったのです。
ダートマス大学で BASIC はどんどん改良されます。
ダートマス BASIC は、行列を扱う計算も出来ました。
この当時は、ダートマス BASIC を元に、別実装された BASIC でも行列計算が当たり前についています。
1970年代には、低価格で大ヒットした PDP-8 にも BASIC が作られていますし、PDP-11 ではグラフィックが扱えるものや、命令を非常に増やしたものなど、多数の BASIC が作られています。
そして、コンピューターの時間貸しサービスでよく使われた PDP-10 にも、BASIC はありました。
これらのマニュアルを読む限りでは、内部的にはダートマス BASIC と同じように「即時コンパイル」だったようです。
コマンドによって、コンパイル結果をファイルに書き出したりもできました。
BASIC で作っていても、コンパイル結果は BASIC 環境無しに動かすことができます。
PDP-10 で BASIC を学んだ人と言えば…後にマイクロソフトを設立する、ビル・ゲイツもその一人でした。
彼は中学校にあった PDP-10 の時間貸し端末を使って BASIC を遊び倒し…一人で、1年間分の「時間貸し」の料金をあっという間に使い果たし、怒られています。
仕方がないので、時間貸しサービスを「ハッキング」して無料で使って、サービス提供会社にまた怒られ、接続を無料にする条件として、その会社でソフトのバグを見つけるアルバイトを始めます。
#その会社では、PDP-10 を DEC から購入した時に「バグが見つかり続けている間は支払いを猶予する」という条件を貰っていたのだそうです。
ゲイツたちが各種ソフトのバグを探してくれれば金を払わないで済む、というメリットがありました。
この頃、ビル・ゲイツは BASIC 自体を自分でも作ってみているのだそうです。
そして、それが Altair 8800 発売時に、作ってもいないのに「BASIC を作った」とハッタリをかました自信へと繋がります。
Altair 8800 は…実際には入手困難だったので、互換機の IMSAI 8080 などは、多くの人にとって「初めて触るコンピューター」でした。
しかし、これらのコンピューターは2進数でプログラムを組むようになっていて、非常に使いにくいものでした。
ゲイツは Altair の製造元である MITS 社に BASIC を提供しながら、「マイクロソフト」名義の会社を設立して、同じ BASIC を IMSAI などにも販売しました。
マイクロソフトが作った BASIC は、コンパイラではなく、インタプリタでした。
命令をひとつづつ解釈し、その命令を動作させるためのサブルーチンにジャンプします。
コンパイラと違って動作が遅いのですが、マイクロソフト BASIC の場合は、プログラム格納時点で命令解釈を半分終わらせることで、高速に動作するようにしてありました。
#字句解析までは終わらせ、単語単位で「中間コード」に変換しています。
マイクロソフトの BASIC では、行列演算の機能が削除されていました。
それ以降…家庭用パソコン向けの BASIC では、みんな Altair 8800 の BASIC に倣ったようで、行列演算機能は基本的にないものとして扱われました。
一方で、マイクロソフトの BASIC では、「?」は PRINT と同じ中間コードに変換されるようになっていました。
このため PRINT 2 + 2 の代わりに ? 2 + 2 と書くことができます。
これが…地味に便利です。
ちょっとした計算をしたいときに、? の1文字だけで、後は計算式を入れれば結果を教えてくれるのですから。
現状では ? は Altair 8800 用の BASIC に存在したのは確認されていますが、マイクロソフト以前にあったのかどうかは不明です。
(PDP の BASIC には存在していません)
現在でも、BASIC には根強い人気があり、マイクロソフトも Visual BASIC を作り続けていますし、プチコンや IchigoJAM のような環境もあります。
僕自身は今では BASIC を使いたいとはあまり思わないのですが、初心者や、サンデープログラマ向けとしては今でも良い環境だと思ってます。
構造化なんて、職業プログラマの発想で、最初は難しすぎてついてけないよ。
最初は BASIC で初めて、必要なら後で「卒業」すればいい。
もちろん、卒業しないで万年初心者だってかまわないと思います。
仕事では使えないかもしれないけど、十分楽しい言語。
まぁ、「後で卒業すればいい」という意味では、BASIC にもこだわらないのだけどね。
子供には Scratch 薦めてます。
#Scratch も、コマンド単位でダイレクト実行できたりする「対話環境」で、BASIC と考え方が非常に似ています。
もちろん、初心者向けに何が重要かを研究したうえで作っているのだろうけどね。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |