人工知能チュートリアル(II):人工知能の歴史とマトリックスの再考

人工知能チュートリアル(II):人工知能の歴史とマトリックスの再考

このシリーズの最初の記事では、人工知能、機械学習、ディープラーニング、データサイエンスなどの分野間のつながりと違いについて説明しました。また、シリーズ全体で使用するプログラミング言語やツールなどについても、難しい選択をしました。最後に、行列についての知識も少し紹介しました。この記事では、人工知能の核心であるマトリックスについて詳しく説明します。しかしその前に、人工知能の歴史を見てみましょう。

なぜ人工知能の歴史を知る必要があるのでしょうか?歴史上、AIブームは数多くありましたが、AIの可能性に対する大きな期待が満たされていないケースも少なくありません。人工知能の歴史を理解することで、この人工知能の波が奇跡を起こすのか、それとも今にもはじけそうな単なるバブルなのかがわかります。

人工知能に関する最初の研究はいつ始まったのでしょうか?デジタルコンピュータが発明された後ですか?それとももっと早い時期でしょうか?全知の存在を求める探求は文明の始まりにまで遡ると信じています。例えば、古代ギリシャ神話のデルフィは、どんな質問にも答えられる預言者です。人間の知能を超える創造的な機械の探求もまた、古代から私たちを魅了してきました。歴史上、チェスをプレイする機械を作ろうという試みは何度か失敗してきました。その中には悪名高いメカニカル・タークがありましたが、これは実際にはロボットではなく、内部に隠れたチェスプレイヤーによって制御されていました。ジョン・ネイピアの対数の発明、ブレーズ・パスカルの計算機、チャールズ・バベッジの階差機関などは、すべて人工知能研究の先駆けです。人類の歴史を振り返ってみると、現実であれ架空であれ、人間の脳を超える知能を実現しようとした瞬間が数多くあることに気づくでしょう。こうした歴史的な成果にもかかわらず、真の人工知能の探求はデジタルコンピュータの発明から始まりました。

では、これまでの人工知能の発展におけるマイルストーンは何でしょうか?前述したように、デジタルコンピュータの発明は、人工知能研究の歴史の中で最も重要な出来事です。拡張性が電力要件に依存する電気機械デバイスとは異なり、デジタル デバイスは、真空管からトランジスタ、集積回路、今日の非常に大規模な統合技術に至るまで、技術の進歩の恩恵を受けています。

人工知能の発展におけるもう一つの画期的な出来事は、アラン・チューリングによる人工知能に関する最初の理論的分析でした。彼が提案したチューリングテストは、最も初期の人工知能テスト方法の 1 つです。チューリングテストは今ではあまり意味がないかもしれませんが、人工知能を定義する最初の試みの 1 つでした。チューリング テストは、次のように簡単に説明できます。人間とコミュニケーションできる機械があるとします。会話中にそれが人間なのか機械なのかが判別できない場合、この機械は知的であるとみなすことができます。今日のチャットボットは非常に強力なので、チューリングテストで真の人工知能を識別できないのは容易にわかります。しかし、1950 年代初頭には、人工知能を理解するための理論的枠組みが提供されました。

1950 年代後半、ジョン・マッカーシーは Lisp プログラミング言語を発明しました。これは最も初期の高水準プログラミング言語の 1 つです。それ以前は、コンピューターは機械語とアセンブリ言語(使用するのが非常に難しいことで有名)でプログラムされていました。強力なマシンとプログラミング言語があれば、楽観的で夢想的なコンピューター科学者がそれらを使って人工知能を作り始めるのは当然のことでした。 1960 年代初頭、人工知能マシンに対する期待はピークに達しました。もちろん、コンピュータサイエンスの分野では大きな進歩がありましたが、人工知能の奇跡は起こったのでしょうか?残念ながら、いいえ。 1960 年代には、最初の AI ブームが起こり、その後衰退しました。しかし、コンピュータサイエンスは比類のないペースで進歩し続けています。

1970 年代から 1980 年代にかけて、アルゴリズムはこの時期に大きな役割を果たしました。この間、多くの新しい効率的なアルゴリズムが提案されてきました。ドナルド・クヌース(コンピューターサイエンスにおける数学のガウスやオイラーに相当する人物なので、彼のことをぜひ知っておくことをお勧めします)の有名な『The Art of Computer Programming』の第 1 巻が 1960 年代後半に出版され、アルゴリズム時代の幕開けとなりました。この数年間で、多くの一般的なアルゴリズムとグラフ アルゴリズムが開発されました。さらに、人工ニューラルネットワークをベースにしたプログラミングもこの時期に登場しました。人工ニューラル ネットワークは 1940 年代に Warren S. McCulloch 氏と Walter Pitts 氏によって初めて提案されましたが、主流の技術になるまでには数十年かかりました。現在、ディープラーニングはほぼ完全に人工ニューラル ネットワークに基づいています。アルゴリズムの分野におけるこの発展により、1980 年代には人工知能研究が復活しました。しかし今回は、通信と計算能力の限界が AI の開発を妨げ、野心的な期待に応えることができていない。そして 90 年代、ミレニアム、そして今日まで続いています。私たちは、AI のプラスの影響に対して、改めて熱意と希望を抱いています。

デジタル時代において、人工知能には少なくとも 2 つの有望な機会があることがおわかりいただけると思います。しかし、どちらの場合も AI は期待に応えられませんでした。現在の人工知能の波はこれに似ているでしょうか?もちろんこの質問に答えるのは難しいです。しかし、今回は人工知能が大きな影響を与えるのではないかと個人的には思っています(LCTT翻訳注:この記事は2022年6月に公開され、ChatGTPはその半年後にリリースされました)。なぜ私はこのような予測をするのでしょうか?まず、高性能コンピューティング機器が安価になり、簡単に入手できるようになりました。 1960 年代や 1980 年代には、このような強力なコンピューティング デバイスはほんの数台しかありませんでしたが、現在では、そのようなマシンが何百万台、あるいは何十億台も存在します。第二に、AI や機械学習プログラムをトレーニングするために利用できる膨大な量のデータが存在するようになりました。 1990 年代にデジタル画像処理に取り組んでいた人工知能エンジニアが、アルゴリズムをトレーニングするためにどれだけのデジタル画像が必要だったか想像してみてください。おそらく数千か数万でしょう。データサイエンス プラットフォーム Kaggle (Google の子会社) だけでも、現在 10,000 を超えるデータセットが存在します。インターネット上で毎日生成される膨大な量のデータにより、アルゴリズムのトレーニングがはるかに簡単になります。 3 つ目は、高速インターネット接続により、大規模な組織との共同作業が容易になることです。 21 世紀の最初の 10 年間は、コンピューター科学者間の協力は困難でした。今日では、インターネットのスピードにより、Google Colab、Kaggle、Project Jupiter などの AI プロジェクトでのコラボレーションが現実のものとなりました。これら 3 つの要因により、AI は今後も定着し、多くの優れた用途が生まれると私は信じています。

マトリックスの知識をさらに深める

図1: マトリックスA、B、C、D

人工知能の歴史について簡単に紹介した後、行列とベクトルの話題に戻りましょう。以前の記事ですでに簡単に紹介しました。今回はマトリックスの世界をもっと深く探ってみましょう。まず、図 1 と図 2 を見てください。これらは、A から H までの合計 8 つのマトリックスを示しています。 AI と機械学習のチュートリアルにはなぜこれほど多くの行列があるのでしょうか?まず、前回の記事で述べたように、行列は線形代数の中心であり、線形代数は機械学習の頭脳ではないにしても、心臓部です。第二に、それらのそれぞれは、その後の議論において特定の目的を持っています。

図2: マトリックスE、F、G、H

行列がどのように表現され、行列に関する詳細な情報を取得する方法を見てみましょう。図 3 は、NumPy を使用して行列 A を表現する方法を示しています。行列と配列は完全に同等ではありませんが、実際には同義語として使用されることがよくあります。

図3: NumPyを使用した行列Aの表現

NumPy のarray関数を使用して行列を作成する方法を注意深く学習することを強くお勧めします。 NumPy には、2 次元配列と行列を作成するためのmatrix関数も用意されています。しかし、将来的には廃止される予定なので、使用は推奨されません。マトリックス A の詳細も図 3 に示されています。 A.size配列内の要素の数を示します。私たちの場合は9です。コードA.nidmは配列の次元を表します。行列 A が 2 次元であることは簡単にわかります。 A.shape行列 A の次数を表します。行列の次数は、行列の行と列の数です。これ以上説明はしませんが、NumPy ライブラリを使用する場合は、行列のサイズ、次元、ランクに注意する必要があります。図 4 は、行列のサイズ、次元、ランクを慎重に識別する必要がある理由を示しています。配列の定義方法がわずかに異なると、配列のサイズ、次元、ランクに違いが生じる可能性があります。したがって、プログラマーは行列を定義するときにこれらの詳細に特別な注意を払う必要があります。

図4: 配列のサイズ、次元、ランク

それでは、基本的な行列演算をいくつか実行してみましょう。図 5 は、行列 A と B がどのように加算されるかを示しています。 NumPy では、行列を追加する方法として、add 関数と + 演算子の 2 つが提供されています。同じランクの行列のみを追加できることに注意してください。たとえば、2 つの 4 × 3 行列を加算することはできますが、3 × 4 行列と 2 × 3 行列を加算することはできません。ただし、プログラミングは数学とは異なるため、NumPy は実際にはこのルールに従いません。図 5 は、行列 A と D の加算も示しています。覚えておいてください、この行列の加算は数学的には違法です。ブロードキャストと呼ばれるメカニズムは、異なるランクのマトリックスをどのように加算するかを決定します。ブロードキャストの詳細についてはここでは説明しませんが、C または C++ に精通している場合は、これを変数の型変換として一時的に考えることができます。したがって、真の数学的行列加算を実行していることを確認したい場合は、次のテストが真であることを確認する必要があります。

図5: 行列の加算

A.shape == B.shape

ブロードキャストは万能薬ではありません。行列 D と H を加算しようとすると、演算エラーが発生します。

もちろん、行列の加算以外にも行列演算はあります。図 6 は行列の減算と行列の乗算を示しています。これらには 2 つの形式があり、行列の減算は、 subtract関数または減算演算子-によって実装でき、行列の乗算は、 matmul関数または行列乗算演算子@によって実装できます。図6は要素ごとの乗算演算子*の使用も示しています。数学的な意味で行列の乗算を実行するのは、NumPy のmatmul関数と@演算子のみであることに注意してください。行列を操作するときは、 *演算子の使用に注意してください。

図6: さらなる行列演算

mxn 次および pxq 次行列の場合、n が p に等しい場合にのみそれらを乗算でき、乗算の結果は mxq 次行列になります。図 7 は行列乗算のさらなる例を示しています。 E@Aは可能ですが、 A@Eエラーになることに注意してください。 D@GG@Dを比較する例を注意深く読んでください。 shape属性を使用して、8 つの行列のうちどれを乗算できるかを決定します。厳密な数学的定義では行列は 2 次元ですが、ここではより高次元の配列を扱います。例として、次のコードは T という名前の 3 次元配列を作成します。

図7: 行列乗算のその他の例

T = np.array([[[11,22], [33,44]], [[55,66], [77,88]]])

パンダ

これまでは、キーボードからマトリックスに入力してきました。ファイルまたはデータセットから大きな行列を読み取って処理する必要がある場合はどうすればよいでしょうか?今回は、もう一つの強力な Python ライブラリである Pandas を使用します。小さな CSV (カンマ区切り値) ファイルの読み取りを例に挙げてみましょう。図 8 は、 cricket.csvファイルを読み取り、最初の 3 行を端末に出力する方法を示しています。 Pandas のその他の機能については、このシリーズの今後の記事で紹介される予定です。

図8: Pandasを使用してCSVファイルを読み込む

行列のランク

行列のランクは、その行(列)によって張られるベクトル空間の次元です。大学で学んだ線形代数の内容をまだ覚えているなら、次元、ベクトル空間、スパンの印象は持っているはずです。そうすれば、行列のランクの意味も理解できるはずです。しかし、これらの用語に慣れていない場合は、行列のランクを、行列に含まれる情報の量として単純に考えることができます。もちろん、これは将来を理解するための便宜のために単純化された表現です。図 9 は、NumPy を使用して行列のランクを見つける方法を示しています。行列 A の階数は 3 です。行列 A のどの行も他の行から派生できないためです。行列 B のランクは 1 です。2 行目と 3 行目は、それぞれ 1 行目に 2 と 3 を掛けることで得られるからです。行列 C にはゼロ以外の行が 1 つだけあるため、ランクは 1 になります。同様に、他の行列のランクも理解するのは難しくありません。行列のランクは私たちのトピックに密接に関連しており、これについては後の記事で再び取り上げます。

図9: 行列のランクを求める

これでこの記事は終わりです。次の記事では、人工知能や機械学習プログラムの開発に使用できるようにツールのライブラリを拡張します。また、ニューラル ネットワーク、教師あり学習、教師なし学習などの用語についても詳しく説明します。また、次の記事からは Linux ターミナルの代わりに JupyterLab を使用します。

<<:  交渉は失敗しました!ウルトラマンはOpenAIへの復帰に失敗し、Twitchの創設者が新CEOに就任

>>: 

ブログ    

推薦する

人工知能時代のITサービスを変える8つのテクノロジー

サービスは人間が行う仕事だということを否定する人はいないでしょう。しかし、テクノロジーはサービスを強...

予測分析: 組織内の時間とデータの再考

[[278064]]時系列は標準的な分析手法ですが、より高度な機械学習ツールでは、より正確な予測モデ...

...

...

予測分野における人工知能技術の応用

社会の発展と科学技術の進歩に伴い、人工知能技術が人類に与える影響は日々増大しており、その応用分野は拡...

人工知能における非構造化データの役割

人工知能 (AI) システムは人間に似た方法でやり取りするため、一部の人は不安に思うかもしれませんが...

光量子コンピュータ「九章3号」が発売されました!スーパーコンピューターの1000億倍の速さ、USTCのパン・ジアンウェイ氏のチームより

私の国の量子コンピューティングは新たな進歩をもたらしました。 USTC公式ウェブサイトからのニュース...

...

実践に最適なオープンソース機械学習プロジェクト 30 件をすぐに集めましょう。

「この記事は素晴らしいです! 実用的なプロジェクトがたくさん含まれており、機械学習を学び始めたばか...

ケーススタディ | 埋め込みに基づく特徴セキュアな計算

[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...

PyTorch と TensorFlow で画像分類モデルをトレーニングする方法

導入画像分類は、コンピューター ビジョンの最も重要なアプリケーションの 1 つです。その応用範囲は、...

...