人工知能のトピックが消滅していないが、発展し続けていることは非常に楽しいです。 素晴らしいアイデアと興味深いコメントを含む多くの記事がすでにあります。 この多様性をすべて見て、半年前に始まった一連の出版物に戻り、それ以降に生じたいくつかの考えや議論を共有したいと考えました。 これらすべてを1つの大きな記事にまとめようとしました。この記事では、最終製品がどのように機能するかについてのすべての側面を説明し、その実装に関する考慮事項を示します。
この記事は本当に大きなものであることが判明したので、部分的に投稿します。 執筆中のものもあれば、準備ができているものもあります。 これはTKではありませんが、可能な限り建設的になるように心がけています。これはすべて、将来の実装のために考えられているからです。
さて、このメッセージで最後に言いたかったことです。 多くの人にとって、AIの主な機能はその達成不可能性です。 どういうわけか彼らの客観性に依存するために、私はこの定義をさらに避け、単なるプログラムと呼びます。 さらに、これはプログラムに過ぎません。
エントリー
前回 、私たちの創造物は可能な限り人間的であるべきであることに同意しました。 より具体的には、(質的なレベルで)人のように考える必要があります。 明らかに、これを達成するためには、私たちが実際にどう考えるかを理解する必要があります。 次に、システム全体を表現し、プログラミング言語のクラス、構造、関数、その他の構文構造の形で既に実装できるコンポーネントに分割する必要があります。 これは、オブジェクト指向システムの設計における一般的なアプローチです。
そもそも、私たちの国で思考のプロセスがどのように起こっているかを見つけようとします(ここで、トレーニング、意思決定、アイデアの出現などを含めることができます)。 奇妙なことに、この問題を解決するために最初にすべきことは、思考の問題が科学と人類全体の7つの封印の背後にある謎であることを忘れることです。 ご存じのように、時々、いくつかの事実がタスクの解決を妨げるだけです。
よく知られた例-クラスの生徒は2つのグループに分けられ、中程度の複雑さという同じ問題を解決するよう提案されましたが、通常とは異なるアプローチが必要です。 次に、あるグループは「これは非常に難しい課題であり、高校生はそれに対処できなかった」と知らされ、別のグループは、おそらくこの課題は「標準」であり、同じ「標準」問題の集合から取られたと示唆した。 結果としてどのグループがタスクに対処したかについて話す必要はないと思います。
ここに数キロバイトの推論(ここには十分あります)をもたらさず、すぐに正しい方向にあなたの考えを向けるために、私はこれらの形式でいくつかのポイントを概説します。
- 思考のプロセスは、情報を扱うことになります:入力=>フィルタリング=>レコード=>ストレージ=>検索=>出力(反応)。
- 各段階に含まれる関数は、ニューロンに実装されているため、論理的に単純です(高レベルの抽象化で考慮する場合)。 これにより、最終製品はディスク領域をほとんど占有しないと想定できます(メモリに格納された情報を考慮しない場合、数メガバイトのオーダーで、おそらくさらに少ないと思います)。
- システム全体は、相互接続されているため、すべてのコンポーネントが実装されている場合にのみ機能します。 つまり、自律的で自給自足になるように、仮想生物の外観をシミュレートする必要があります。
永続的なメモリ
システム全体の鍵はメモリです。 そしてより正確には、その構造。 ニューラルネットワークのアイデアは紛れもなく魅力的ですが、この方法ではIBMと競合する必要があります。 私たちの生活を楽にし、IBMを競争相手から取り除くために、私たちは情報の単位として、ビットや信号レベルよりも自給自足で理解しやすいものを採用します。 私はこのユニットを一言で呼ぶ方法を言うことさえ難しいと思っています(誰か教えてもらえますか?)。 例のみをリストできます:文字、単語、フレーズ、文、以前の要素の任意のシーケンス。 今のところすべてです。 対応する情報単位とともに、より良い時間まで視覚と聴覚を残します。
最初の公理で強調表示されているすべての関数を論理的に単純にするために、そこから明らかなことをするには、可能な限りそれらのメモリを最適化する必要があります。 これらの同じ機能は、ニューロンで発生するプロセスの一般化に過ぎないことに注意してください。 年齢とともに、これらのプロセスは変化せず、より複雑になりません。 大まかに言えば、3歳の人からの情報の検索がどのアルゴリズムに従って行われたか、同じアルゴリズムに従って30歳の人に行きます。 そして、この間に変わったのは記憶だけです。
したがって、メモリは単なるファイルシステムではなく、一種のプログラミング言語でもあります。 パターンの検出、予測、推論による推論、アイデアの生成などの複雑なプロセス-これらはすべて、作業にメモリからのファイルを使用する外部フォーメーションではありません。 それら自体はすべて、その言語で書かれた一種のプログラムであるメモリの一部です。
この言語は非常に単純です。 前述のように、プログラムは論理ユニット-トークンで構成されます。 これらのユニットは、複雑なネットワークのノードです。 各ノードから、他のユニットノードへのリンクが出発します。 関係は1、2、5、10であり、10を超えることはまれです。
たとえば、1つの簡単な結び目-リンゴという言葉を挙げます。 次のノードへの接続はそこから離れることができます:果物、食用、円形。 さて、より複雑なものは次のとおりです。ワーム、ビタミン、アップル、パイ、ニュートン、スリーピングビューティー、スネークテンプター。 そしてもう1つ:「使用前に洗う」、「美しすぎる場合は、化学なしではできません」。 これらのノードからは、他のノードへの接続もあり、場合によっては、リンゴへのフィードバックもあります。
しかし、そのような構造はまだ適切ではありません。 結局、さまざまなつながりがあります:幾何学的な形、食用、食用、果物のグループ、より複雑-リンゴが現れるさまざまなシーンや状況(これはすでに視覚情報のカテゴリから)、ストーリー、アートワークなどです。具体的には、接続のタイプを示します。
これらのタイプの主なタスクは、接続先のノードのコンテンツを決定することです。 そこに何が保存されているか、どのような形式でどのように使用できるかの定義。
私たちの生活を複雑にしないために、参照する同じネットワークノードで、情報の同じ論理ユニットを持つ接続のタイプを表します。 したがって、最終的な構造は1つの大きなネットワークの形をとり、その各ノードには他のノードへのリンクが含まれます。 さらに、このようなリンクはそれぞれ、もう1つの論理ユニットに接続(表示、関連付け)されます。 定義ノードは特別ではありません。 他のノードへのリンクも保存し、他のすべてのノードと同様にネットワーク全体の一部です。 したがって、例外なく、すべての論理ユニットは同じ方法で配置されます。
そのような構造の非常に重要で有用な特徴は、その要素の離散性です。 まず、メモリは分割できない要素で構成されています。 次に、これらの要素は分離されており、必要に応じて任意の順序で保存できます。 各ノードは、そこからつながるリンクのみを保存するという意味で、互いに独立しています。 ノードは、それを指すリンクについて何も知りません。 そのため、他の人の情報が関連性を失うことを考えずに、簡単に編集できます。
おそらくおなじみの、おそらく少し変わったデザインは、実際にあなたに大きな自由を与え、法律や規則、論理的連鎖、あらゆる種類の推論のモデル、およびメモリ要素から他の有用なものを作ることができます。 これを行う方法については、次のセクションで説明します。
RAM
心理学における永続的な記憶に加えて、短期的な記憶もあります。 意識、潜在意識、その他のコンテンツも区別されます...混乱を引き起こさないために、これらすべてを単一の理解可能なコンポーネント-ランダムアクセスメモリとして提示します。
おそらく誰かが驚くでしょう-そのような異なるコンポーネントをどのように単一のコンポーネントに置き換えることができますか? この質問はこの記事の範囲外です。 私はこれが正当であると言うことができるだけです。 終わりに向かって、それにもかかわらず、理性のモデル(知性-あなたが好むように)で、短期記憶、意識、潜在意識、および心理学者が発する見掛け倒しの類似物を見つけることができることが明らかになります。
しかし、RAMに戻ります。 一方では「操作可能」ですが、もう一方では「記憶」です。 したがって、同じように、つまりネットワークの形で整理することは論理的です。 そして、どういうわけかそれを選択するために、1つのノード「RAM」を作成できます。 これには、それに関連するすべての要素へのリンクが含まれます。
メインメモリと永続メモリの根本的な違いの1つは、その動作部分でのみ、すべての変換が行われることです。いわゆる「思考プロセス」、それに関連するすべてのことです。 永続メモリは直接編集されません。 これはバージョン管理システムと比較できます。読み取り専用メモリの目的の領域のスナップショット(コピー)が作成され、このスナップショットに変更が加えられた後、ノードの更新されたコピーが元のものに置き換わります。
今こそ、RAMで発生する変更と変換を正確に把握するときです。 ノードで構成されているため、ノードでどのような基本的な変換を実行できるかが問題になります。
- 作成 。 実際、これはかなり物議を醸す問題です。 ご存知のように、実際のニューラルネットワークでは、最初は特定の数のノードがありますが、時間とともに減少するだけです。 しかし、私たちのシステムでは、リソースを節約するために、ノードが機能するように作成されます。 これは次の2つの場合に発生します。すべての受信情報が、新しく作成されたノードのミニネットワークに変換され、「思考」の過程で、既存のノードのコピーからさまざまな組み合わせが作成されます(いわゆる想像力)。 これら2つのプロセスの詳細については、「通信」および「思考」のセクションを参照してください。
- 取り外し 。 ここでの考え方は、.NETまたはJavaのガベージコレクションと同じです。 既に独自に機能し、不要なノードは、現在RAMから削除されています。 次に、読み取り専用メモリに書き込まれるか、完全に削除されます。 それはすべて、永続メモリ内の既存のノードに接続されているかどうかに依存します。 そうでない場合、それは役に立たず、それを書き留めても意味がありません
- 検索します。 検索は「記憶」のプロセスで使用されるため、対応するセクションで詳細に検討します。 その意味は、必要なノードを永続メモリから運用メモリに描画することです。 このように見えます-RAMには、接続のタイプを示す呼び出しが到着するノードがあります。 そのような接続が存在する場合、永続メモリから「その端の」要素のコピーがRAMにコピーされます。 呼び出しは別のノードから来ます。 これらの課題のメカニズムについては、「動機付けと感情」のセクションで説明します。 通常、このプロセス全体は、複数のノード間で組織的に行われます。
- バインディング 。 バインディングは主に「学習」のために使用され、個人セクションも授与されています。 つまり、バインディングには少なくとも3つのノードと1つの呼び出しが必要です。 その結果、一方が「親」になり、もう一方が「娘」になり、3番目が接続のタイプになります。 前述したように、これらはすべてRAMで発生します。
理論的には、これら4つの変換で十分です。 これらは、ノードレベルで発生する基本的な操作です。 このような操作から、より複雑な機能が形成されます。これについては、次のセクションで説明します。
小計
では、現時点では何がありますか? メモリとプログラミング言語を比較しても無駄ではありません。 すでに、私たちのプログラムの内部で何が起こるかについての絵が浮上しています。 情報キャリアであるノードは、同時にRAM内で相互作用し、この情報自体を作成および書き換えます-互いに書き換えます。
つまり、私たちの主な目標は、プログラミング言語を作成することです。その特徴の1つは、解釈可能性とその場でプログラムを編集する機能です。 この場合、おそらく「単一プログラミング言語」の定義が適切でしょう。
したがって、すべてはノード自体の開発に帰着します。 それらは、システムのすべての機能が構築されるブリックになります。
今日は以上です。 以下は、次のセクションと部品表のおおよその内容です。
- 永続的なメモリ。
- RAM
- 動機と感情。 (呼び出しメカニズムのレビューと身体の完全性についての何か)
- 思い出。 (検索エンジンの使用に関するかなり詳細な概要)
- コミュニケーション。 (I / Oおよび認識システムの概要)
- トレーニング。 (バインディングメカニズムの使用のかなり詳細な概要)
- 心を垣間見る。 (基本的な変換に基づくより複雑な関数の実装の概要)
さらに、特定の機能やコンポーネントを実際に実装する方法に関する多くのアイデアが蓄積されています。 これらのすべてをどこに置くべきかはまだわかりません-おそらくほとんどの人はコメントで自分の場所を見つけるでしょう。
PS人工知能は哲学や宗教の問題ではありません。 「AIとは?」、「彼は魂を持っていますか?」、「彼は愛することができますか?」そして「彼は世界を奴隷にしますか?」と尋ねると、私たちは問題の解決に近づいていません。 これらの質問はすべて回答がないため、回答できないため、これらの質問とキーボードのキーに戸惑うことは時間の無駄です。
人工知能は、必要なものを確認し、不要なものをすべて廃棄する能力の問題です。