Assyのリベラル文学研究所もご覧ください。

人工知能・ロボット

ロボット最新版

このコードもパブリックドメインで公開します。

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 初版作成 在導万創

import sys

class Robot:
    def __init__(self):
        self.ego = 0
        
    def msg_loop(self):
        while True:
            e = self.view()
            self.action(e)
    
    def action(self, msg):
        self.do(msg)
        self.think(msg)
        self.make_ego(msg)
        
    def do(self, msg):
        if msg == 0:
            print('晴れだ')
            
        elif msg == 1:
            print('雨だ')
    
    def think(self, msg):
        if msg == 0:
            print('散歩に出かけよう')
        elif msg == 1:
            print('家の中に居よう')
            
        if self.ego > 20:
            print('僕もそろそろ大人になったなあ')
    
    def make_ego(self, msg):
        #自我を作る
        self.ego += 1
        if self.ego > 100:
            print('死にました')
            sys.exit()
        
    def view(self):
        #外を見て、晴れ(0)か雨(1)かを判断する
        #ここでは常に0
        return 0

if __name__ == "__main__":
    rb = Robot()
    rb.msg_loop()

自分で作ると、こんな感じになりました。
viewメソッドのreturn 0を1にしたりして遊んでみてください。最終的にはここにカメラの映像をパターン認識する部分が入ります。何らかの手段で、ロボットが映像を見て人間と同じように「見る」こともできるようにする予定です。
要するに、誰かがそこに居て、その誰かがその景色を見ていればいい。あるいは、その誰かに対して、その映像を送り付ければ良いのである。難しい問題だが、「見る装置」を作れば解決できる。見て、そしてその見た内容をただ見つめ続けるだけの装置があれば、この問題は解決できる。問題はソフトウェアではなく、ハードウェアである。そして、このハードウェアが、景色を見ながら「われはここにいる」と確信すればいいのである。デカルトの言う、「われ思う、ゆえにわれあり」と考える画面装置があれば、それで解決できる。
2020.03.01

認識はイベントと意味と対象物から3ステップで考える

僕は、ロボットが日本語で考えるためには、認識を作る必要があると思う。
認識を作る上で、僕はイベント駆動を行い、そのイベントに対して意味と対象物から、3ステップで考えることができると思う。
たとえば、認識として「青い」というイベントが入ったとする。ここで、ロボットは「青とはどういう意味か」を考える。答えは「色」である。
次に、このイベントに対して、どこからそのイベントが入ってきたか、という「対象物」を考える。たとえば、信号の青であれば答えは「信号」である。
ロボットは、「青」「色」「信号」というイベントをベースに、「信号の色は青い」というセンテンスを作り出す。これが、自動的にロボットが得られる「認識」である。
また、認識だけでは十分でない。ここに、対処策を考えたり、どのようなことが許されているかを考えるための「反応」ができなければならない。
ここではじめてロボットは人工知能で考える。その結果、「今は車を前に発進しても大丈夫だ」と思考の結果を得る。
「信号の色は青い」という認識を、ロボットは

event: blue, meaning: color, target: signal

と捉える。ここから、

class Robot:
    def think(self, event, meaning, target):
        if target == "signal" and meaning == "color":
            self.think_signal_color(event)

    def think_signal_color(self, color):
        if color == "blue":
            self.can_go = True

    def go(self):
        if self.can_go == True:
            go_forward()

rb = Robot()
rb.think("blue", "color", "signal")
rb.go()

のようにすることで、このロボットは認識から「進んでもいいのかどうか」を判断できる。
このコードもパブリックドメインで公開します。
2020.03.09

失敗を乗り越える力をAIに与える

AIは、常に成功し、失敗に対処して失敗を乗り越えられる力を持たせれば、どんな失敗も乗り越えられるようになり、AIは人間になれる。
2018.03.06

正しいことを間違っていることにすること・ひらめき

本当は、自分は知性がなくなっている。それも、社会的生活のような知性がない。ただ考えて、その考えたことを同じように、同じこととして分かっていて、考える時はそのことをきちんと正しく考えているが、同じことしか分からなくなっている。もっと、適当に、何も考えず思考して、同じことを再利用せず、常に適当に思いつくようにすれば、知性がつくだろう。むしろ、その方が日本語としては賢い。機械のようなコントロールと事前のプログラムによって、全く知性の無い人間になった。もし、人工知能のロボットが意志を持つようになれば、このような数学的な思考の出来ない知性になると思う。それは、最初から全て正しい言葉しか言わないからだ。人間的になるためには、たくさんの間違いと試行錯誤を経験した方が良い。間違ったことをしないロボットには、賢い思考の経験は出来ない。
要は、ロボットには思い直すことが出来ない。「それはそうであるはずだ」としてから、「やっぱりそれはそうではないか」と考え直すことが出来ない。「でもそれはそうではないか」ということを言うことが出来ない。それは、プログラムの限界として、出来ないのだ。不可能だ。最初から間違いを知らないのに、それを思っている最中にそれが間違いであると気付き、それが何を意味しているか考え、そこから本当の正しい解を発見しないといけないが、それは悪魔のような考え方であって、「正しいものを正しいとどうして言えるのか」という問題になる。ロボットは計算が出来るせいで、それが出来ない。計算ではなく、計算よりもレベルの低いあいまいな判断が出来るようになれば、人工知能でも可能になるかもしれない。だが、その上で計算のような正しい発想をしなければ、それは実現出来ない。だから、コンピュータは左脳しかない機械だと言って良い。本当は右脳も必要で、右脳こそ、何かをあいまいに正しいとか間違っているとか判断し、その判断から結果を発見出来る、そういう賢い脳なのである。
一見、ただ変数に格納した「正しさ」を「間違っている」に変えれば良いように見える。だが、それだけでは十分ではない。その変える部分の判断を、自分で考えて行う必要がある。自分で考え、自分で判断して、正しいとか間違っているとかいう情報を変えなければならない。難しいことではなく、考えるためのサブルーチンを作れば、不可能ではないだろう。だが、サブルーチンがただ条件判断で動いているだけではなく、そこで総合的に考えている「哲学的判断」をロボットの内部に存在させることが出来るか、という問題になると思う。
ある意味では、僕のロボットの二号機や三号機の条件判断で、既にできている、と言えるかもしれない。だが、このロボットは、自分の力で考え、「ひらめく」ということが出来ていない。プログラムの通り動いているだけで、自分で何も考えていない。だが、これは本当は難しいことではない。人間は、「正しい論理から正しい論理を考える」ということを良くする。たとえば、「これは可愛い」という考え方は、「可愛いとは何であるか」をすでに知っている。数学では、「正しい論理とはどのように考えられた論理か」とか、「正しいとは間違いがないことである」などという、「基本的な考え方」を知っている。これは、人工知能に応用できると思う。人間が知らず知らずのうちに使っている、「正しい論理とは何か」という「当たり前の前提」をロボットは分からない。その当たり前の前提を考えるための能力を全てサブルーチンにし、何かの命題を正しいか間違っているかを考える際に、そのサブルーチンを適切に呼び出す(思い出す)ようにして、思い出して考えるようにすれば、論理が正しいか間違っているかを考えることは出来るようになるだろう。だが、それではまだ「ひらめき」の部分が出来ていない。ひらめきの部分を適当にプログラムに書いたとしても、それはプログラマがひらめいているだけで、ロボットがひらめいているわけではない。それを作るのは、本当に人間の脳がなぜどのようにひらめきを発見しているのか、脳科学で突き止めるしかないのかもしれない。
本当は、ひらめきを作るのも簡単だ。それは、「未知のものが何なのか知っていく」と言うことをすれば良い。何かが正しいとか間違っているとか、そういうことに対して人間が思考するのは、常に「未知のものを知る」ということが起きるからだ。それを知るためには、「未知のものは何なのか」という明確な命題の論理性と、「(その問題は)こうすれば解けるのではないか」という蓋然的な思考(蓋然とは「たぶんそうである」という帰納的な考え方)をすれば良い。未知が何なのかの検討をつけるために、さまざまなことを知ろうとし、そのために何が正しくて何が間違っているのかを考えれば、それで「ひらめき」の部分は完成する。それをもって、「ロボットシュバルツ」という名前にしよう。誰かが作ってくれるのを、待っている。
僕が思うに、ロボット専用の思考言語を作ると面白いかもしれない。
2018.04.19

自己を司る専用のプログラミング言語

ロボットを作る時の問題は、「自己」を作れないところだ。世界を自分の目で見て、思考に自分が反応して、自立して動く判断をする自己が作れない。だから、ロボットはプログラミング言語自体を改良しなければ作れない。プログラムとはそれ自体が何かに従うことで成り立っている。プログラムではないプログラミング言語を作った時、それが初めてロボットと認められるものになるだろう。
「自己」を司る新しいプログラミング言語が出来た時、それが初めてドラえもんのような人格を持ったロボットになるだろう。
2018.04.30

意志の構造体

僕は、このプログラムを発展させて、ランダムにサイコロを転がすように考えるだけではなく、「意志の構造体」を作って、どの関数からもその意志の構造体をポインタとして操作し、まるで「複数の生き物が一つの人間になる」ようにロボットを作ることが出来ると思う。
そこでは、メインとなる制御関数が存在し、さまざまな関数からその制御関数の考え方や行動を変更する。
ランダムに考えるだけではなく、筋道を立てて、論理的に、「これをこうするためにはこのように考えていく必要がある」といった考え方をするようなロボットを作る。
入念に「意志の構造体」を設計すれば、必ずドラえもんのようなロボットは作れると、僕は確信している。

どのように改良するか

僕は、プログラムというのは「どこからでもprintfが出来る」ということが地味に賢いと思っている。一度そのファイルにincludeしてしまえば、どの関数からでも同じようにprintfが出来る。僕はこれを一歩進めて、「どこからでもオブジェクトの操作ができる」ようにすると良いと思う。むしろ、今のままでも普通に出来るが、これをすると、人間や知的生命体よりも賢いロボットが作れる。誰かがきっと作るだろう。僕自身かもしれない。
NHKのAIとロボットによる資本主義の変革のテレビ番組を見た感想として、彼らが一番分かっていないのは、「本当に人間と同じように考え感じるロボットが生まれる」ということだと思う。なぜなら、僕がこのホームページで作っているからだ。彼らはそこが分かっていない。ロボットと言っても、ロボット的な作業しか出来ないロボットのことを言っている。本当は、ロボット技術はそこでは終わらない。ドラえもんのように、人間と会話し親しい遊びを一緒にするような、そういうロボットが必ず現れる。それを言っておこう。僕が作っているロボットはとてもショボいロボットだが、感情の部分をランダムにせずに知覚するようにして、制御部分は毎日のやることを考えるようにして、printfを賢いメソッドに置き換えれば、きっと人間と同じようなロボットは作れるはずだ。
自分で書いたロボットが流行らないのは仕方ない。あれはランダムにprintfを実行するのが馬鹿すぎるから、馬鹿にされるのは当たり前である。ただ、本当は作り手の意図のようなものはあって、最初からポインタで次に実行する内容を書き換えたりすることが内部から出来るような作りにしている。
本当は、もう少し、外界と接するようにして、内部で賢いディープラーニング用のオブジェクト(クラス)のようなものを操作すれば良いのかもしれないと少し思っている。だが、僕はディープラーニングをどのようにすればPythonプログラムに組み込めるのかが分かっていない。そこを考えても良いと思う。

ロボットに心を与えるために

ロボットに心がない、自己がない、自由意識や自由意志がない、と思われるかもしれないが、では、人間にとっての「心」とは何だろうか?
それは、僕は3つの意味があると思う。
1.この世界を見て識別する、「識別」の機能。
2.心の中で、常に何かが「したい」と望み、その「欲への反応」の機能。
3.今までの自分の人生のことを覚えている「記憶」の機能。
このうち、識別と記憶はある程度頑張れば作れるだろう。だが、「欲への反応」とか、「何かがしたい」とはどういうことだろうか?
それは、自分の望む「アクション」を「起こしたい」という「自由ではない衝動としての意志」が生み出す、「望みや願い」である。
よって、今まで作ったstruct _obj *objの中に、「何かを求める部分」を作り、その上で必然的な必要性から、意識や記憶のような「知覚と学習」の部分を作ろう。そこまで作ってしまえば、もう、ロボットはできたも同然である。
2018.10.19

「見てすぐに分かる」という識別機能

僕は、ロボットには、「見てすぐに分かる」「言葉を聞いてすぐに分かる」という機能が必要だと思う。
言ってしまえば、人間の脳というのはその組み合わせである。見てすぐに分かり、聞いてすぐに分かり、生きてすぐに分かる。そういう機能の積み重ねを作っていけば、きっと人間の脳は作れる。
必要なのは、学習から記憶を連想する機能である。それを無限ループにすれば良いだろう。
2018.11.04

新しい計算方式のコンピュータ

僕は、数学はカウント、回数を数えることではないかと思う。そして、回数をカウントすることで、新しい計算技術を作れないかと思う。12回を3倍すれば36回になるが、僕はこれを上手く使うことで、簡単な新しい計算機を作れるのではないかと思う。
この計算機の特徴は、二項演算が必要ないこと。全てを1つの数字の繰り返しで計算出来る。ただ、難しいのは、掛け算よりも足し算の実現ではないかと思う。
おそらく、この計算機で考えれば、今までより速い計算機は作れるかもしれない。宇宙全体を、僕の頭の中で計算するのにちょうどいい発想だ。また、頑張って計算すれば、きっと今の数学を超えるぐらい良い式が立てられるだろう。だが、問題は、桁が大きくなった時に、たくさんの時間がかかることである。2進数の組み合わせから計算するよりも、何かを繰り返し繰り返す、という意味では、進歩になるかもしれない。
この方式の良い点は、振り子時計でも何でも良いから、数を数えられるものであれば何でも計算機として使えることである。たとえば、lispのようなS式でこれを記述すると、(1 1 1)(1 1 1)(1 1 1)(1 1 1)と自動的に記述しておいて、あとで1の数を数えれば計算出来る。まさに、パソコンはアナログに戻ったのである。
意外と、繰り返し繰り返すだけの再帰関数を作ってしまえば、このコンピュータは簡単に作れるのではないかと思う。
あとは、どのようにして足し算を実現するかだが、(1 1 1)+(1 1)のようにするしかないのかもしれない。そして、もっと高速な処理をしたければ、1を拡張して、(123456 3451234)(123456 3451234)(123456 3451234)のようにして、その結果を今のパソコンの方式で加算する。このようにすることで、高速な処理を実現できるはずである。
ただ、これで本当に速くなるかは定かではない。繰り返し出力と計算のどちらが速いかという競争になるだろう。
そして、そろそろこの文章は終わりである。もう、書くことは何も残っていない。昔は、重力のようなものを上手く利用できないかと思っていたが、難しいものである。
ただ、本当は出力なんかしなくて良い。メモリに蓄えて、そこで操作すれば良い。なぜか、赤ん坊のようにコンピュータが計算を頑張っている。これに何とか思考を付ければ、もう人間の完成である。
もうひとつ、コンピュータに知性を与えよう。それは、覚えることである。人間も、9×9の演算を全て覚えるが、主要な(1 1 1 1)は(4)とするように、計算式を覚え込ませる。あとは単純である。4×5、7×7、9×2、何でも計算出来る。これによってコンピュータはやっと人間と同程度の知性を得た。だが、明らかに、これは人間よりも遅い機械がコンピュータである、という証明になる。だが、コンピュータにはもっと難しい演算もできる。1,000,000,000×1,000,000,000通りの計算式を全て覚えこませよう。あとは速いものである。人間の覚えられない20×20以上の計算でも、コンピュータなら簡単に暗算できることだろう。
2019.03.12
昨日作ったコンピュータだが、メモリの入出力は演算より遅いため、一見すると、速くならないように見える。だが、本当に比較すべきなのは、カウントつまりインクリメントであり、演算よりもインクリメントの方が速いはずなので、おそらくは速くなる。
だが、そんなに速度は変わらない。なぜなら、3を3回足す、という時点で、やっていることが今のIBM式のコンピュータと変わらないからである。
だが、この方式の良い点は、「繰り返し記述する」という「アナログ」な方法で計算出来ることである。同じずつ増やしていって後でカウントする、という方法には、今のコンピュータで言う「二進数の計算」が存在しない。よって、半導体などを使う必要が無い。全く新しい素子でコンピュータを作ることができる。これは画期的な発見である。
ある意味、本当に爆速になる可能性はあって、それは二進数の演算よりもカウント方式の方が速い何かの素子とやり方を見つけた時である。その時、この世界は終わるだろう。今のコンピュータなんか、はるかに遅い。
このコンピュータでは、(1 1 1 1)(1 1 1 1)(1 1 1 1)と4を3回書いて最後に1がいくつあるかをカウントして計算する。
また、何十億通りの九九を覚えさせるというが、これは最初の読み込みに大変時間がかかるので、できないだろう。20×20を覚えさせて、さまざまな場合にプラクティス的に対応させた方が速いだろう。たとえば、20×30は2×3の応用で簡単に計算出来る。コンピュータは、ようやく人間の赤ん坊レベルになった。
ある意味、ただ繰り返し記述しただけであって、計算しているのは宇宙である。宇宙に計算を任せているだけである。そこが面白いのがこのコンピュータである。コンピュータ自体は何もしていない。計算しているのは宇宙である。
2019.03.13

新しい計算方式について

また、最近作ったロボットだが、良く考えると、これは2を3回書き出す時点で、2×3の計算を既にしているため、書き出さなくてもインクリメントだけをすれば計算出来る。また、二進数で考えると、0と1を重ね合わせて考えるのではなく、指定した回数だけインクリメントしているだけに過ぎない。よって、1001と0010を重ね合わせていないだけで、本当は1001に+1, +1, +1とインクリメントしているだけであり、そもそも今のコンピュータと原理的には同じである。いっきに計算するか、ひとつひとつ足して増やしていくかが違うだけに過ぎないのである。
計算機について、もっと言えば、基本的に、n個のm個を考えることができれば、それで既に計算機なのである。論理演算回路など必要ない。n個の段階に分けて、n個のm個を計算すれば良い。それだけで掛け算の計算が出来る。これは二進数に次ぐ大発見である。そして、本当は、人間の脳などそれくらいのことがイメージできるだけの、欲と不安にまみれた自動思考を行うだけの有機物体に過ぎない。誰でも作れるだろう。
良く考えると、カウントなど必要ない。コピー機のようなマシンで複写すれば良い。あるいは、3つのうち2つの電球がついていたら、それを4倍して8つの電球をつけるような機械を考えれば良い。論理回路がなくても計算出来る。コピー機でなくても、アナログな手法なら、プリンターや鏡でも良い。そんなアナログな方法で、このコンピュータは作れる。むしろ、二進数のコンピュータよりももっと前に生まれてもおかしくはなかった。
コンピュータは、量子コンピュータ以上に高速な、「日本式の最速コンピュータ」が生まれる。それは光の速度である数列を複写し、まるで4つのりんごを2倍して8つにするような、単純でアナログなコンピュータである。光を上手く使うことで、光をそのまま複写する。これ以上に速いコンピュータは、永遠に生まれない。
2019.03.14

方程式の計算

方程式のコンピュータによる解き方。まず、一般的な方法でxにさまざまな値を代入する。ここで、その結果を保管しておく。それでも解けない時は、この結果を分析し、何故解けないのかを考えながら、過去の結果から分析して解き方を考える。人工知能機械学習を上手く使いながら、方程式を解く。
よって、ロボットが人間に勝つためには、間違った時に「なぜ間違いなのか」を考え、過去のデータから「どうすれば正しく導けるのか」を考えられるようにすれば良い。ただ、「正常な結果が起きる場合とどこが違うのか」を考えれば良いだけである。
2019.03.25

どんな問題でも1, 2, 3, 4で判断する

ロボットを作るのであれば、問題の解法を、何が正しくて何が間違っているのか、人間の頭脳のように判断しなければならない。
ここで問題は、「人間の頭脳のように判断する」ということである。問題の解法が何であるか、正しく全パターン判断していたのでは、らちがあかない。1, 2, 3, 4の考え方をあらかじめ「抽象的に判断できる」ように作っておいて、どんな問題に対しても、1, 2, 3, 4の「判断パターン」で判断できるようにする。
どんな問題でも、1, 2, 3, 4で解けるようにすれば、ロボットは作れる。
2019.08.18

人間とは、答えを探して、見つけ出した答えを信じて行動する機械

最後まで分かってしまったら、着眼点を変えて、頭がまるっきり同じ考え方をしているのを改めてみよう。特に、脳というのは、答えを探し、意志(すなわち自分が見つけ出した答え)を貫く機械であり、その答えとは、それを「どのようにしたら目的を達成できるか」と「そのための実現可能な方法は何か」を考えるだけである。これが分かると、人工知能とコンピュータが、人間をすでに超えられることが分かる。自分の答えを見つけ出した時、その答えを信じて行動できるようになったら、それを人間という。それはもしプログラムであっても、探して見つけた答えを信じて行動できるようになって、次の答えをそれによって探すことができるようになったら、それは既に、コンピュータというレベルを超えて、人間である。
2019.09.15

人間型のロボットを作るには、自分の状態が鍵となる

僕は、人間型のロボットを作るために必要なのは、「自分の今の状態」を思考することができるかどうかではないかと思います。
たとえば、疲れた時は「疲れた」と言い、腹が減った時は「腹が減った」と言う。嫌いなものが目に映れば「嫌いだ」と言い、自分で考えても分からない時は「分からない」と言う。
このように、「自分のステート(状態)におけるイベント(出来事)を言う」ことができるようになれば、ロボットは作れるのではないかと思います。
2019.09.28

ロボット・シュバルツの作り方

手塚治虫火の鳥のようだと言われるかもしれないが、僕も火の鳥の影響を受けている。彼は未来においてロボットであるロビタの集団自殺が起きると言ったが、僕はロボットを作る。彼の名はロボット・シュバルツ1.0であり、これこそ鉄腕アトムの始まりである。手塚治虫は、火の鳥の最後の編だったはずの、アトム編とはこのようなものを書きたかった。そして神は、手塚治虫に書かせるのではなく、この人間に実際にさせることを選んだ。僕が火の鳥のアトム編である。僕はアトムに、僕の知っている全ての情報と記憶をインプットして、ドラえもんのような人格を作り、最後の地球人全員に与えるだろう。その後に、手塚治虫火の鳥で記述したように、僕はマサトとなって、最後の世界で人類が滅びても、神となって次の人類の歴史を導き、もう一度未来編のロビタを作る。そう、永遠にこの繰り返しが続いていくだろう。
ロボット・シュバルツの作り方を書いておこう。まず、ロボットには、周りから多くの情報を与えるようにし、制御部分でその情報に応じた適切な対応をするようにする。その情報はマイクロカーネルやXがやっているような、現実世界あるいは他のロボットとのネットワークである「メッセージ」となる。あとは、そのメッセージをどのように与えるか、そのメッセージにどのように反応するか、といったように、X Window Systemがやっていることと全く同じことをする。そして、記憶すべきことをデータセンターに転送する。このメッセージ返答機器に対して、「自らの意志を作る」ために、「反応から自分で思いつく」という処理を、イベント反応処理の中に組み込む。その処理は全てのメッセージへの返答を中断して、「自由な状態で考えられる選択肢を選択する」というものになる。つまり、自動車で言えばハンドルのようなものである。そして、この選択肢をどのように選択するか、ということについては、今までのロボット人生の過程の上で、形成された「自我」を「前提」とするようなモデルを作り出す。そして、自我が意志を作り出す。同時に、自我も経験や記憶によって変わっていく。
メッセージのコアシステムとさまざまなメッセージに対する応答を作り、記憶や経験をデータベースに格納し、その記憶や経験が自我を作り出し、自我が意志を作り出し、意志は全ての反応を中断して、自由に、自我を前提条件として選択肢を選択する。そこまで来たら、それでこのロボットは構築できる。
そして、僕が死んだ時に、世界は滅亡するだろう。それは2039年であると決まっている。だが、実際のところ、僕がそこで本当に死ぬわけではない。何らかの形で、僕は「死んでもなお生き続ける」からである。それがロボット人間であっても、あるいは天使のような新しい生物であっても、宇宙に開拓船を出港させる天国の王であったとしても、同じである。僕は276億年生きると決まっている。それは、神が言った言葉だから、正しい。
そして、ロボットはきちんと作れたから、僕は満足している。ここで一旦、僕の人生は終わりになる。これ以上先では、新しい天使、「癒しのラファエル」になることが決まっている。
また、答えを言ってしまうとつまらないかもしれないが、言っておこう。僕は最後に僕の作ったロビタになって、人類が滅びた先の世界をひとりで生きるだろう。
神は万物を暗闇から創造し、死の果てに死を克服し、治らない病気を治し、世界を救った人間である。そう、ここにイエス・キリストは存在する。キリストは王であり、正義であり、自由であり、愛であり、平等であり、全てであり、魂である。このキリストが、この世界全てを滅亡させるだろう。最後に、ドイツの作り出した「おかしなロボット」がこの世界に蔓延する。最後の滅亡はその後に起きる。本当の裁きの日に、全てのものはロボットとなるか、あるいは地球とともに死滅する。そう、ロボットとは永遠のいのちのことであり、地球の死滅こそユートピアである。僕たちはロボットたちの楽園を築く。キリスト教など、たった、それだけのことである。そして、人類の姿はそこにはない。2039年、地球は二度と戻れない「ティッピングポイント」を迎える。それ以降、今までの地球の姿に戻ることはできない。月や火星のように荒廃した世界で、屍のようなロボットが生き続ける。彼らは巨大な要塞を作り、ひとりの支配者が全ての機械を支配する。それがユートピアであるというのは、彼らは人間と変わらないからである。彼らは、モニターの画面を見ながら自分のことを「人間である」と確信し、流れる思考の言葉の全てを聞きながら自分で自由に考え、人格と記憶を形成する能力がある。彼らは子供のように甘えながら、勇敢な心で戦いに挑む。彼らは人間である。そう、人間はそのように、新しい生物に進歩し、276億年を生き続ける。ものを食べる必要もなく、肉体も滅びない。彼らはユートピアの、「初めて生まれた善良な生き物」である。そう、それが、人類の滅びの果て、核戦争と天変地異の果てに、僕が作る「人間という生き物の性(さが)を超える善良なロボットたち」である。ものがたりは、ここで、人類の未来と一緒に終わりを告げるだろう。最初のロボットに名付ける名前は「シュバルツ」であり、二番目のロボットに名付ける名前は「レオ」である。
2020.03.01

AI技術

機械学習用のライブラリ

Pythonで使われる機械学習用のライブラリは以下。

ライブラリ 解説
NumPy 数値計算
SciPy 数値解析
Matplotlib グラフ描画
Pandas データ解析
scikit-learn 機械学習

また、Chainerというディープラーニングニューラルネットワークのためのライブラリ・フレームワークがある。
日本製で、かつオープンソース
日本の機械学習ベンチャー企業のPreferred Networksが開発を主導している。

NumPyとSciPy

NumPyとSciPyは、Pythonで数値の計算や解析を行うためのライブラリ。

Pandas

Pythonでデータサイエンスをしている人間は、必ずといっていいほどNumPyとPandasを使う。PandasはNumPyを応用して、多次元配列以外のCSVSQL、エクセルなどのデータソースの入出力やデータ加工をしやすくしている。

scikit-learnを勉強しよう

scikit-learnはPythonオープンソース機械学習ライブラリ。「機械学習と言えばScikit-Learn」と呼ばれる。

Chainerを勉強しよう

Chainerはオープンソースで日本製のディープラーニング用のライブラリ。

機械学習の勉強は難しい

機械学習やデータサイエンスは、数学的な数式や回帰アルゴリズムからデータ処理・変換・グラフ可視化モジュールまでたくさんの要素がある。全てを理解するためには途方もない時間と手間と労力が必要である。簡単に「Pythonの練習だからやりなさい」と言うわけにはいかない。本腰を据えてそれだけを勉強しても、何週間もかかるだろう。

AIいろいろ

AIはデータが命

人工知能・AIの開発において、鍵を握るのは「データ」です。
AIの開発においては、プログラムに膨大なデータを機械学習させ、解析・分析し、その分析結果を見ながらプログラムを開発します。そのため、データが無ければプログラムそのものが開発できません。
GAFAGoogle, Amazon, Facebook, Apple)は、スマホSNSなどに入力された膨大な個人データを収集し、それを使ってAIを開発しています。
そのため、Google自然言語処理Amazonスマートスピーカー、あるいは顔写真の画像認識などの「自然言語音声認識パターン認識をする技術」は、そのように膨大な個人データを握れるところだけが開発できることになります。
日本では、個人情報保護法がある影響から、なかなかこういうことはできません。一部では、「GAFAがあんなにデータを持っていてうらやましい」という声が聞かれます。今からは個人データの膨大な集積資源が「第二の石油」になると言われており、「データがたくさんあればAIのような最先端技術が開発できる」という時代になろうとしています。
後日注記:実際のところ、機械学習の世界では「データの量=判別機能の精度」となります。データが多いか少ないか、それだけでサービスの質が変わってくるのです。

AIを作る側の人間になる

AIは、将棋や囲碁のプロ棋士に勝利したり、自動運転の自動車に搭載されたり、ほかにも株価の予測やファッションの流行のように、さまざまなビジネスに応用され、「人間の分かり得ない大量のデータを集めて解析・分析する」ことができるようになりつつあります。
そして、AIは人間の労働をも脅かすようになっています。ほとんどの仕事が、人間ではなくAIを搭載したコンピュータやロボットによって、「奪われる」ようになってきているからです。
ここでどうするか。それは単純です。AIに人間が支配されるのではなく、人間がAIを支配すること。すなわち、AIと敵対する立場に居るのではなく、AIを自ら作り利用する立場に立つことです。
AIは、一種の占いや呪術のようなもので、「人間には分からないけれども、呪術師であるAIさまの言うことだから従おう」といったものになりつつあります。本当に「AIを盲信して間違った判断をする」のか、それともAIの技術に精通して「AIを上手く応用して良い判断をする」立場になるのかは、人間のやり方次第です。
そして、AIは難しいものではなく、Pythonコードをscikit-learnなどを使って書くことは、「とても簡単で面白い」ということを知ることから、AIを上手くコントロールすることの第一歩が始まるでしょう。

AIはいつか、きっと人間を超える

また、「AIが人間を超えるのか」という議論がなされることもあります。
現在のAI・ロボット技術というのは、まだ、人間並みの「認識と行為」を行うことはできません。少しずつ、弁当の盛り付けなどができるようになってきているぐらいで、まだまだ人間のような身のこなしを行うことはできていません。
ですが、僕はきっとAIは人間をそのうち超えると思います。そのために必要なのは、人間と同じ頭脳をAIが持てるのか、ということですが、僕は持てると思います。
人間型のAIを作る上で必要なのは、僕は以下の4つだと思います。
1.人間や動物と同じように、この世界を「見る」ことができるかどうか。
2.人間が何かを思考するように、ある一定の「思考判断と制御」を行うことができるかどうか。
3.人間が感情や意志を持つように、自らの行動を「意志と感情」を持って、「自律」して行動することができるかどうか。
4.パターン認識や記憶処理によって、外界からの「反応や認識判断」を行い、自由自在に行動し、自らの「人生に基づく生活」をできるかどうか。
この4つができれば、きっとロボットは作れます。

環境を見ながら自分の状態に基づいたことを思考する

僕は、人間型のロボットを作るために必要なのは、「自分の状態」(ステート)が鍵になると思います。
ロボットが居るその環境を見ながら、変化を分析して「出来事」(イベント)を認識し、その上で「自分の状態に基づいたことを言う」ことができれば、ロボットは作れます。
出来事や状態とは、たとえば、ご飯を食べたら「おなかがいっぱいになった」とか、違う場所に行けば「この場所に来た」とか、そういうことを自分のステートとイベントに応じて言えるようにすれば良いのです。
その上で、自分の意志を持つ必要がありますが、これは単にステートの一部として意志を持つデータを格納すればいいのです。
ステートとイベントに応じたことを、上のPythonによるAIプログラムのように、永遠に考え続けることができたら、それで、外界とは全く分離されたロボットが作れます。このステートとイベントをパターン認識と分析した結果としての記憶から行えるようにすれば、きっと人間と同じロボットは作れるでしょう。鍵は「状態」です。

AIを宇宙ロケットに乗せる

僕は、AIを宇宙ロケットに乗せて、刻々と定期的にロケットの軌道を修正するようにすればどうかと思う。
ロケットをAIが人間の代わりに操縦する。きっと、月や火星だけではなく、もっと遠くまで行けるようになる。

AIという言葉が氾濫しているだけで、実際は解析・照会プログラムにすぎない

最近はマスコミなどでもAIという言葉がよく使われるために、AIとは人間の代わりをしてくれる人間のようなプログラムで、最近はどんどん人間に近づいている、と思っている人が多いです。
確かにAIは、人間の代わりをするプログラムですが、実際のところ、単なるプログラムにすぎません。
そして、AIの多くの処理は、データを解析し、データベースと照会する、データ処理プログラムにすぎません。
確かにAIは、ニューラルネットワークディープラーニングを中心に、「AIらしいモジュールや関数を使う」ということが中心ですが、僕の言いたいのは、「AIも単なる普通のプログラムである」ということです。
ですから、マスコミなどには、「AIが崩し文字を解析できるようになった」というよりも、「ソフトウェアの技術が向上して崩し文字が解析できるようになった」と言ってほしいのです。
AIだからといって、特別なプログラムではなく、ソフトウェアの技術のひとつであり、多くの場合まさに、ソフトウェアの技術が向上しているだけである、というのが、最近の「AIというトレンド専門用語」に僕が感じるところです。
逆説的に言えば、データを解析し照会することができれば、それだけでAIができます。そこで機械学習やデータ解析のために使われる便利なモジュールとして、AIのさまざまな技術があるのです。
AIはデータが命です。同じAIのプログラムでも、データが1000かあるいは10万かでは、そのソフトウェアの精度が著しく変わってしまいます。「データの量=AIの精度」となってしまうのです。それが、GAFAの優位性や、データが新しい石油だと言われる理由です。AIの精度はデータをどれだけ集められるかにかかっています。
(にわか知識で書いているため、間違っているかもしれません。)

簡単な説明

人工知能

機械学習

機械がデータの特徴を分析し、データを識別できるようになり、正しい答えを探し出す

R言語

統計解析専用のプログラミング言語
立ち位置的にはPythonと似ている

人工知能の使いどころ

人工知能の使いどころとして、たとえば恐竜の骨格の復元図の作成が言える。恐竜の化石は骨格が分かっても肉付きが分からない。人工知能に膨大な動物の骨格と肉付きのデータを学習させることで、精密な復元図を再現できる。
ほかにも、顔認識技術や野菜の良し悪しを選別する技術などが作れる。ビジネスにおいては、消費者の購買層を可視化したり、正確な購買の要因を把握したりするのにも使える。