web-dev-qa-db-ja.com

定義された仕様に合わせてプログラムする方法を機械に教えることは想像できるでしょうか?

プログラミングの知識のない私の友人が私にこの質問をしました。

問題のテキストを分析し、解決策を考えてプログラムすることができる本当に高度な人工知能が必要になるため、それは不可能だと思います。単純な計算機をプログラムできるマシンについて考えるだけでは、かなり進んだように思えます。

しかし、私は間違っているかもしれません。あなたはそれについてどう思いますか、そしてあなたが主題に関する記事/研究を知っているかどうか、それがすでに存在するかどうか、または仕様を選択して取得する可能性があるかどうかを知りたいのです。この「仕様」に自己プログラミングするマシン

12
florian

ジョエルは実際に 数年前にこれに答えました 。 「それ自体でプログラムする方法をマシンに教える」の実際の意味は、「スペックを取得してそのスペックに対応するプログラムを作成する方法をマシンに教える」ことです。それを念頭に置いて:

ここでの問題は非常に根本的なものです。プログラムが特定の仕様に対応していることを機械的に証明するには、仕様自体を非常に詳細にする必要があります。実際、仕様ではプログラムに関するすべてを定義する必要があります。そうでない場合、自動的かつ機械的に証明できるものはありません。さて、仕様がプログラムの動作についてすべてを定義している場合、見れば、プログラムを生成するために必要なすべての情報が含まれています!そして今、特定のオタクは、仕様をプログラムに自動的にコンパイルすることを考え始める非常に暗い場所に出向き、プログラミングなしでコンピューターをプログラミングする方法を発明したと考え始めます。

さて、これは永久運動機械に相当するソフトウェア工学です。これは、クラックポットが実行できないことをいかに伝えても、クラックポットが実行しようとしていることの1つです。仕様がプログラムの動作を正確に定義し、プログラム自体を生成するために使用できる十分な詳細がある場合、これは疑問を投げかけます:仕様をどのように記述しますか?そのような完全な仕様は、プログラマーと同じくらい多くの詳細を仕様作成者が回答しなければならないので、基礎となるコンピュータープログラムと同じくらい書くのが難しいです。情報理論の用語を使用するには、仕様には、コンピュータプログラム自体と同じ数のシャノンエントロピーが必要です。エントロピーの各ビットは、仕様作成者またはプログラマーが下した決定です。

つまり、プログラムの正確性について実際に機械的な方法で証明する方法が実際にあった場合、そのプログラムが同じ量のエントロピーを含む必要がある他のプログラムと同一であるかどうかを証明することができるということです。最初のプログラムとして、それ以外の場合、いくつかの動作は未定義になるため、証明されません。したがって、仕様の作成はプログラムの作成と同じくらい難しいものであり、これまで行ってきたすべての問題がここからあちらに移され、何も達成されませんでした。

これを回避する唯一の方法は、ソフトウェアを作成するときに、あなたと私が常に自動的に行うすべての空白埋めを実行するのに十分な直感を備えた実際の知性のあるコンピュータを作成することです...人間の開発者だけでなく、それ自体をプログラムするコンピュータもあるでしょう。 ;)

15
Mason Wheeler

確かに、私たちは dothisallthetime (問題の非常に限定されたサブセットの場合) )。 想像する別のステップを踏んで、Siriのようなものをこれらのコードジェネレータの入力に結び付けることは、かなり簡単です(またはWolfram Alphaのようなもの)これは今度はコードを書いてあなたの問題を解決します。私は何かがすでに存在していることを期待しますどこかに最も基本的なことをする。

ビジネス用の複雑なソフトウェアを作成する際の問題は、コードを作成するプログラムを作成することではなく、要件を取得するプログラムを作成することです。

4
Telastyn

@メイソン・ウィーラーの答えが鍵となる考えを保持していると思います。こんなふうになります:

三目並べのシャノンエントロピーは本当に小さいです。したがって、三目並べを「解決済み」または「確定的」なゲームと呼びます。小学校を卒業したら、あまり面白くありません。あなたがプレイできるすべての可能なゲームのエントロピーを考えれば、チェッカーはより高いエントロピーを持っています。しかし、チェッカーも「解決済み」または「決定論的」なゲームです。最初に移動する場合は、勝つか引き分けでなければなりません。チェスははるかに高いエントロピーを持っていますが、2006年以降、最高のコンピュータープレイヤーを倒した人間はいません。つまり、ある意味では、コンピューターは人間ができない方法でチェスを習得しています。 Big Blueはウィキペディアを分析し、人間のプレイヤーに対してJeopardyをプレイし、彼らをしっかりと打ちました。

次は何ですか?小説、またはシェイクスピアのソネットのエントロピーは何ですか?

同様に、プログラミングの世界では、おそらく出現するのはコンピテンシーのセットの増加です。 Prologは一連のコンピューターの問題に対処し、ユーザーが問題をセットアップしてコンピューターが答えを解決しました。おそらく誰かが、コンピュータが満足できるような単純なプログラミング問題のクラスを見つけるでしょう。その後、誰かがそれを基にして、問題空間内で「オンデマンドのカスタマイズ」を作成します。そしてそうなる。

問題は次のようになると思いますどのくらいの時間 AIが所定の量のエントロピーを習得するのに...といくつ計算リソースが必要ですか? 想像できない人間の最高の脳がマスターするエントロピーをコンピューターがマスターできなかったと思います-脳に魔法はありません-しかし問題は、コアがいくつ必要か、そして何世紀かです。そこにたどりつくのにかかるのでしょうか?

しかし...コンピュータはこれまでmyジョブを実行できますか?考えられない!

2
Rob

人工知能と同様に、これを達成したら、それを実行するプログラムを作成したため、これは答えるのが難しいです。そして、批評家は「まあ、このマシンは実際にはプログラミング自体ではない!あなたが与えたプログラムに正確に従うだけだ!」と言うだろう。

はい、そうです。私たちがコンピュータでこれまでに達成することは何でも、私たちはそれにいくつかのプログラムを与えてそれを実行します。それが反論であるなら、私たちは何も成し遂げることができません。それでも、ある時点で、チェスをするコンピューターは明らかにインテリジェントであると人々は考えました。今や、彼らはそれを行うことができ、私たちはその方法を正確に知っており、それがインテリジェントであるとは考えていません。潜水艦はまだ泳ぐことができません。

したがって、いくつかの例を考えてみましょう。

数十年以来、私たちはparser generatorsを使用しています。あなたは彼らに言語の説明を与え、それが処理され、結果がその言語のパーサーのコードになります。私たちはそれがどのように行われるかを正確に知っていますが、それはコンピュータプログラミング自体ではありませんか?

第二に、あなたが間違いを犯したことを告げるエディター(構文エラー、存在しない変数など)。それ自体は何もプログラムしませんが、何か間違ったことをしたことがわかります。それは表面上だけのものです。

UIコントロールをクリックしてドラッグするだけの言語、およびそれらを実際に機能させるコードは自動的に生成されます。

JITコンパイラ。現在実行中のソフトウェアのホットスポットを認識し、その一部を高度に最適化されたコンパイル済みコードで置き換え、実行中に自分自身を効果的に最適化できるソフトウェア。これは、それがどのように発生するかを正確に理解するまでは、それ自体がマシンプログラミングのように見える例の1つだと思います。

一般的なゲームプレイ。これは興味深い研究分野であり、研究者はゲームのルールの説明を読むことができるプログラムを作成し、プログラムが互いに対戦します。そのため、三目並べプログラムやチェスプログラムの代わりに、三目並べやチェス、またはその場で作成されたいくつかの新しいゲームのルールを読み取り、それらをプレイできるプログラムです。プログラム自体はプログラミングではありませんが、チェスのルールがハードコードされていなくてもチェスをプレイします。これが明らかにがコンピュータ自体に何かを教えると考えられる時期がありました。

一般的な方向に向けて多くの小さなステップを踏みました。

しかし、以前の実行の結果に基づいてrewrite自体であるプログラム、または独自のコードで古いまたは非効率的なルーチンを認識できるプログラムは考えられません。いつか私たちはそれを持っていると思います、そしてそれは最新のコンパイラのいくつかの機能になるだけなので、それはまったく特別なものではないと考えます...

1
RemcoGerlich

プログラムを作成するには人間の脳のすごい複雑さがすべて必要なので、現時点では、また近い将来にはありません。そして、それでも、それらを適切に実行するには高度なトレーニングが必要であり、十分な時間をかけて誰もがプログラムするようにトレーニングできると主張することはできますが、そのすべてがタスクを実行できるわけではありません。

単純なエミュレートされたタスクについて話しているのではないというあなたの質問の言い方から、私はそれを取り入れました。

Developing Intelligence に関する記事とこのScience Blogs記事を求めましたが、さまざまな方法でその質問に答えています。

0
Ian Macintosh