見出し画像

【考察】アルゴリズムと人間との関係性

アルゴリズムという言葉、普段何の気なしに用いているが、端的にいうと「計算手順」のことである。

どういう手順を踏んで、どのような計算が行われるのか。基本的にアルゴリズムはブラックボックス化されており、われわれはその全貌を伺い知ることなく、ありとあらゆるデバイスを使用している。


私はプログラマーの端くれであるため、業務で「自動で〇〇できない?」と依頼されたりするが、ここにユーザーとプログラマ―との温度差がある。

まず、「自動」。「自動的な」を意味する英単語:automaticは、(機械的な動作における)自動の意である。勝手に動くものが「自動」なのではない。制御不能なものは、とてもではないが「使用(利用)」することはできない。

自動の対義語は「手動」。読んで字のごとく、手作業(人間の手)によって行われるものを、(機械的に)自動で処理することが、一般的な「自動化」の意であろう。


たとえば、1~10の数字を入力する。手動であれば、順番に入力すればよい。

1 2 3 4 5 6 7 8 9 10

これを、(機械的に)自動で実行させるために、プログラム(アルゴリズム)が必要となる。Visual Basic的なコードだと、たとえば以下な感じ。

Dim Str

for i = 1 to 10
 Str = Str & i & " "
next

WScript.Echo(Str)

テキストエディタにコードを書き、.vbs形式で保存し実行すると、以下のような結果が得られる。

画像1

1~10まで入力するのであれば、わざわざコードを書かずとも、直接入力した方が早いであろう。しかし、これが1~1000までであったり、100回続けて入力しないといけない、といったように、手動では非効率(非人道的)な作業をコンピュータに「自動」で実行させる。コンピュータにも、得手不得手があるのだ。

しかし、プログラマーの立場から言わせてもらえれば、全くもって「自動」でもなんでもなく、コードを書いているのはほかでもない、プログラマー自身なのである。意訳すると、(機械的に)自動で動作する(ようにコードを書く)こと=「自動化」なのである。

あらゆるデバイスやサービスにおいて「自動」で動作すると思われているものは、正常に挙動するようにプログラミングした人物が必ず存在しているのだ。


では、AIであれば自動で動作しているのでは?と思われるかもしれないが、マシン・ラーニング(機械学習)やディープ・ラーニング(深層学習)もまた、誰かがアルゴリズム化した処理にすぎない。

思うに、自動=自律的なものを想像しており、自動=勝手にやってくれる、という思いがあるからなのではなかろうか。自動化と自律化は似て非なるものである。


一般的にAIとは、自らが考え、自動(=勝手に)で処理を実行してくれるもの、という認識かもしれないが、人間のような挙動をしている訳ではない。上記記事内にもあるように、

機械自らが手順や判断基準を見つけ出し、人間が介在することなく実行する「自律化(Autonomy)」を実現しようとしています。

とあるが、「機械自らが手順や判断基準を見つけ出だす」ためにはアルゴリズムが必要なのであり、現時点においてはそのアルゴリズムはやはり誰かしらの手によってプログラミングされているのだ。


人間的な自我を持ったヒューマロイドが存在する日は、もしかしたらそう遠くはないのかもしれない。しかし、機械が自ら判断し、行動するためのアルゴリズムは、誰かによって設計、プログラム化されているはずである。

ただし、われわれはその「誰か」を意識することはなく、そしてその人物を特定することは限りなく不可能に等しい。しかし、そのシステムを構築した本人だけは知っている。それは「私が作った」のだと。


ユーザビリティーが向上すればするほど、その内部システムはよりブラックボックス化し、人々はその本質(なにが行われているのか)を意識しなくなっていく。

それまでの独人性な作業が、自動化によって誰でも使用できるようになる。自動化の目的はここにある。しかし、自動化の弊害も同時に発生することになる。

ひとつは、操作することに従事してしまうことである。設定をして実行すれば結果が出力されるが、業務ではどのような処理を行っているのか、作業実施者も理解しておくことが本来であれば必要なはずである。

もうひとつは、自動化の更新や整備、および修正に伴うソースの管理である。もし作成した人物がいなくなったとき、自動化された環境は残された人によって手におえるものであるのか。

さらには、出力された結果に対して、人間(ユーザー)が良いか悪いか、正しいか正しくないか、を判断する必要がある。ただし、プログラム化されたもの、製品として販売されているものは正しく挙動する、というのは幻想であり、そもそもなにをもって正しいと判断するのかが、人間側には問われているのだ。


こうしたプログラム化されているものが想像していたものと異なる挙動をしたとき、そのプロダクトがミスしている、と一般的には思われているであろうが、必ずしもすべてがプログラムによる人為的ミス(バグ)とは言い切れない。

それは、ある使用方法において特定の挙動をするようアルゴリズム化されているのであって、それをあえて誤用するのはある種ユーザー側の責任である。誤用した結果、想像を凌駕する結果を招いたとしても、プロダクト的には正常終了した結果を返しているだけにすぎない。

「プロダクトが勝手に挙動した」ように仕向けたのが、ユーザーであるため、こうして得られた結果は「恣意的に」作り出された、すなわちユーザーによって作られたイメージであるといえるのではなかろうか。つまり、制作という行為はたとえ主体がアルゴリズムであったとしても、プロダクトが自律的に行っているものではなく、現時点ではユーザーである人間が主導権を握っているような気がしてならない。


現在のコンピュータシステムの生みの親といえば、アメリカの数学者ジョン・フォン・ノイマン(John von Neumann, 1903-1957)であるが、上記記事のように、プログラミング言語の起源としては、ノイマンよりもさらに前にさかのぼる。


なんでもかんでも、そう簡単に自動化できるのではないのですよ。。みえないところで設計・デバッグ・検証など、実際に手を動かしている人がいることを、われわれは気付くことすらない。現時点においては、「自動化」は「手動」によって成り立っているのだ。やがて、その手動で行っていた部分も、機械によって自己生成されるようになるのかもしれない。そのとき、制作された作品は制作者に帰属するのか、それともシステムを構築した企業などがイニシアチブを握るのか。


システムの根幹を担いつつも、一切表立ってスポットはあたらないプログラマー。でも、それでいいと思っている。表に引っ張り出されることがあるとき、それはバグっているときに他ならないのだから・・・。


よろしければサポートお願いします!今後の制作活動費として利用させていただきます。