ここ数年は毎年、夏になると東洋大学でUI/UXとAIについて一日だけ講義している。
東洋大学の学生は、真面目だ、という印象が強い。
それはコロナ禍で特に強まった。

昨日は少し早くついてしまったので、学食やカフェを覗いてみたが、びっくりするくらい静かだった。
もちろん、感染予防の観点からそういう習慣が身についているのだろうが、それにしても、自分が学生の頃を考えると、少し心配になるほど静かだった。
もしかすると、あの静けさの中で、実はLINEやらで激しく歓談しているのかもしれないが、総じて、静かだなあ、と感じるのだった。

僕はテクノロジーの進歩を理解するためには、過去から未来へ向かって補助線を引いてから話すのが好きなので、だいたい原始時代から話しが始まる。
原始時代はこうで、農耕民族が現れた時代はこうで、近代はこうで、コンピュータはこのように発生し、発展してきて、人工知能が出てきて、最後はどこへ行くのかという未来につなげていくというやりかただ。

僕の講義を一度でも聞いたことがあれば、だいたいこの流れに沿っているとわかるだろう。

僕がいつも過去の話から講義を始めるのは、過去についての捉え方が、現状の捉え方に大きな影響を及ぼし、現状の捉え方から未来を予測するために、過去から現在までの流れの助走を必要とするからである。

今年も、対面半分、リモート半分という形式の講義になった。きっとコロナ禍ではこれが定番の形式なのだろう。
普段は聴衆の顔をみながら講義するのだが、全員がマスクをしているので表情が読み取れない。

したがって、講義のどのポイントで学生が反応しているのかがわからず、全体的にメリハリの少ない講義になってしまうのはやや残念だが、学生たちがしっかりと内容を聞いていたことが、毎回、その日の夜に送られてくるレポートで明らかになる。

むしろコロナ以前の講義よりも、コロナ以後の講義の方が、レポートの内容は充実している印象だ。
直接的な表現やフィードバックができないからこそ、むしろ間接的なレポートの提出というところによりエネルギーが割かれるのだろうか。

例年、AIのめざましい進化について説明していたが、今年は方向性を少し変えて、量子テクノロジーとAIの組み合わせによるUI/UXへの応用という方向性を加えてみた。

量子センシングを使えば、これまでfMRIのような巨大な装置でしかなしえなかったような、脳内活動のリアルタイムな把握ができるようになる。しかも解像度はfMRIよりずっと高い。

これは脳科学にも、そのほかの領域にも非常に大きなインスピレーションを与えるだろう。もちろん、外科的な手術をともなわない脳直結インターフェース(BMI;Brain-Machine Interface)も実現可能になる。

量子テクノロジーの実現には、量子力学はもちろんだが、量子化学や、特に量子生物学が重要なプレイヤーになってくる。
量子力学だけで考えていると、量子的現象は絶対零度付近の極低音下でしかおきなかったが、量子生物学では量子的な現象はむしろわれわれ生物が過ごしやすい温度で活発に起きることがわかってきている。このあたりが常温での量子テクノロジーを実現する鍵になってくるだろう。

そしてほとんどの量子テクノロジーをコントロールする位置にくるのが量子コンピュータと量子プログセミングというパラダイムになるが、今の量子プログラミングはまだかなり原始的な段階にあり、言ってみれば、1960年代から1970年代にトランジスタを組み合わせてやっとこ論理回路を設計し、半加算器をつくり、電卓の原型のようなところまで辿り着いたような状態だ。

量子現象という、いわば「この世界を構成するマシン語」を直接扱わなければならず、まず「この量子世界というハードウェア」を理解するところからスタートする。

最近、Microsoftが支援するOpenAIのGPT-3、およびその応用としてGitHub上のソースコードを全て学習させたGithub Copilotが、人間の書いたコードや、あろうことか秘密にしなければならないはずのアクセスキーなどを盗み読んで他の人に見えるようにしたりといった問題が報告された。

これをうけて、オープンソース団体であるSFC(Software Freedom Conservancy)は、主要なオープンソースソフトウェアをGitHubに公開するのをやめるよう勧告するなど波紋が広がっている。

Copilotが生成するコードは、人間が書いたコードを学習した結果であるから、誰かが書いたコードと似たり寄ったりな記述が出てくる。
これは厳密には現状の著作権法には触れないが、コードを書いた本人が何かの権利を侵害されていると感じたとしても不思議ではない。

量子プログラミングはこれに比べると全く未知の領域で、筆者個人が感じ取るところによると、ニューラルネットに非常に近い。
ニューラルネットも、原理そのものは簡単だが、どのような組み合わせが結局効果的なのかは、人間があれこれ悩むよりも機械自身に試行錯誤させたほうがより良い設計が生まれることはもはや常識となってきた。

特に今年に入って、ニューラルアーキテクチャ探索(NAS;Neural Architecture Search)の研究は活発になってきていて、いずれ近い将来、ニューラルアーキテクチャ探索の手法の探索そのものも、自動化されるようになるだろう。いわばニューラルアーキテクチャ探索探索(NASS;NAS Search)だ。

量子プログラミングのパラダイムは、ニューラルネットに非常に近い。
というのも、量子プログラミングにはループや条件分岐といったものが限定的にしか出てこず、基本的にはフィードフォワードのみによって計算される。

量子プログラミングにとって、入力されたデータは内部で量子もつれに変換され、またはもともと量子もつれとして入力され、さまざまな演算子が非可逆的かつ連鎖的に作用して、最終的にどの量子を観測するかによって答えが求められる。

つまり、入力と出力の組が与えられれば、その過程は自動的に探索できるという、ニューラルアーキテクチャ探索の考え方をそのまま量子プログラミングにあてはめることができる。

ニューラルネット以前の世界では、アルゴリズムとは人間が考えるものだったし、人間にしか考えられないものだった。
ニューラルネット以後の世界は、アルゴリズムの意味合いが少し変わってくる。最初はニューラルネットのアーキテクチャを考えることがアルゴリズムだったが、ニューラルネットのアーキテクチャは機械によって自動探索(NAS)するのが最適とわかった現代では、ニューラルネットへどんなデータを入力してどんなデータを得るか考える、いわば「入出力構造設計(Input/Output Structure Design)」がアルゴリズムの根幹を成すようになった。

今は誰も明確には認めていないが、そもそもニューラルネットの構造が、あるアルゴリズムで高性能と判断されたとしても、実は「偶然うまくいった」に過ぎない。

もちろん、「うまくいく」ように考えられて設計されたはずだが、どんなニューラルネットの設計者も、学習が始まる前に確信をもって「これで必ずうまくいくはずである」と考える人はいない。いたとすれば、既にうまくいくことがわかっている問題を解くときだけである。

それは古代宗教の司祭が雨乞いをするために焚き火をしていたような話しである。
本人たちはうまく行くとおもってやっているが、それはほとんど気休めであった。

量子プログラミングにおいて有効なアルゴリズムがまだほとんど発見されていないのも、量子プログラミングというパラダイムが膨大な前提知識を必要とすることと、そもそも古典的プログラミングのパラダイムとかけ離れ過ぎていてほとんど過去のプログラミング手法が使えないこと、そして結果が常に確率的にしか求められないこと、もちろん量子コンピュータそのものがまだ実用的に動く段階にないことなどが複合的に関係しているだろう。

プログラミング技術というのがどのように発展してきたかを振り返れば明確にイメージできるが、まだ基盤を直接的な配線によってプログラミングしていた(ハードワイヤードロジック)時代は、ほんの半世紀ほど前だ。

アポロ宇宙船に搭載された航法コンピュータ(AGC;Apollo Guidance Computer)はハードワイヤードロジックでプログラミングされていた。
この頃は非常に素朴な計算さえも大規模な回路が必要だった。

アセンブリ言語で書かれたプログラムが、機械語に翻訳され、ロープメモリに格納されて宇宙船に搭載された。


CC-BY-SA 3.0(https://en.wikipedia.org/wiki/Core_rope_memory#/media/File:Apollo_guidiance_computer_ferrit_core_memory.jpg)

アセンブリ言語は、非常に原始的な言語で、ごく少数のレジスタと呼ばれる変数と、メモリ操作と単純な足し算ができて、単純なループ処理が表現できるだけだ。

遥かに複雑な数式をアセンブリ言語で表現するには、プログラマーの職人技にも似た技が必要だった。
複雑な数式をもう少し簡単に書けるようにした言語がFORTRANで、これは数式変換(Formula Translation)に由来する。

FORTRANをもう少し簡単にしたものがBASICで、これは子供でもプログラミングできるように簡略化された。
しかし、初期のFORTRANやBASICではプログラミングの制約が大きく、巨大化すればするほどバグを追いかけるのが難しくなっていった。

そこから構造化プログラミングがうまれ、C言語で定着し、さらにプログラミングを簡略化するためにSmallTalkでオブジェクト指向がうまれ、C++として定着し、その後Objective-Cとなって、MacOSやiOSで使われるようになり、JavaやRubyやPythonといった多くの派生系が生まれた。

FORTRANとほぼ同時期に生まれたLISPは、もともとはプログラミング言語ではなく、ラムダ式(ラムダ計算表現)という、計算処理を表現するための表現方法だった。

あるとき、ラムダ式を与えれば自動的に処理できるというアイデアがうまれ、ジョン・マッカーシーが自分自身を計算できるラムダ式を作り出した。LISPのアイデアはSmallTalkに多く引き継がれ、数々の言語に深い影響を与えている。

現在、一般にプログラミング言語と呼ばれているものは、FORTRANとLISPという全く出自の異なる二つの言語の特徴を少しずつ受け継いでいる。

これまで、プログラミング言語で書かれたアルゴリズムは基本的にすべて人間が考え出したもので、その多くは帰納的というよりも演繹的に作り出されている。
しかし、ニューラルネットが実用化されると、演繹的なアルゴリズム開発、つまり人間が時系列に沿って計算手順を考えるようなアルゴリズム開発よりも、人工知能による帰納的な試行錯誤によるアーキテクチャ(アルゴリズム)探索に変化してきている。

同じことは、量子プログラミングの世界でより顕著に起こるだろう。
つまり、量子アーキテクチャ探索(仮にQAS;Quantum Architecture Searchと呼ぼう)を行うのがおそらく最も合理的な量子プログラミングの方法になっていくと想像できる。

これは筆者独自のアイデアではありえないと思い、試しにQuantum Architecture Searchで検索すると、既にいくつか論文が発表(https://arxiv.org/search/?query=Quantum+%22Architecture+Search%22&searchtype=all&abstracts=show&order=-announced_date_first&size=50)されていた。

特に目立つのは、量子プログラミングにおけるニューラルネット、いわゆる量子機械学習において、量子アーキテクチャ探索を行う研究で、量子コンピュータが実用段階に到達すれば、いずれ量子アーキテクチャ探索がものごとを解決する第一優先順位になっていくだろう。

ということは、AIにおける入出力構造設計(Input/Output Structure Design)を真面目に研究しておけば、量子技術の進歩とともに自動的に量子アーキテクチャ探索(QAS)との組み合わせに応用できるということになる。

筆者はもともとアルゴリズムに弱い方ではないがそれを研究するのが好きな方でもないので、AIおよび量子AIをどのように応用できるかというアプリケーション分野のほうがより興味がある。

筆者自身の研究テーマの延長線上に自動的に量子コンピュータが出てくると考えられるので、引き続きこの分野は注視していきたい。