定義された仕様に合わせてプログラムする方法をマシンに教えることは想像できますか?[閉まっている]


12

プログラミングの知識のない友人がこの質問をしてくれたので、面白いと思いました。

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

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


4
プログラミングを定義します。他のプログラムを作成するプログラムを作成できました。しかし、それは本当に学びますか?
ピーターB 14年

はい、問題はコード生成ではなく、開発者としての実際のプログラミングに関するものです。
フロリアン14年

それはプログラムが何であるかに依存します。多くの手続き型ビジネスロジックを持つプログラムは、機能的で純粋な数学ベースのプログラムよりもはるかに困難です(そして実行不可能です)。(それはとにかく直感ですが、残念ながらそれをバックアップする方法はありません。)
lunchmeat317 14年

@florian:私たち自身はプログラミングの方法を学んだマシンです(エイリアン/神が私たちを作成したと仮定して:-))。もちろん、DNAシーケンスなどをプログラムする機能はまだ取得していません。そのため、最終的にプログラミングの方法を学習する必要があるマシンを作成する場合、「進化」するようにプログラミングし、最終的にそれ自体がプログラムされた方法を学習する必要があります。
ナビゲーション14年

2
@maple_shaft:既存の回答に合わせて質問をより客観的にし、現在の形式で再開できるかどうか疑問に思っていました。
トム・金

回答:


15

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

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

現在、これは永久モーションマシンに相当するソフトウェアエンジニアリングです。あなたがどれだけ彼らにそれが決して機能しないと言ったとしても、それはクラックポットがし続けようとしているものの1つです。仕様がプログラムの動作を正確に定義し、プログラム自体を生成するために使用できる十分な詳細がある場合、これは単に質問を請います:仕様をどのように記述しますか?そのような完全な仕様は、プログラマと同じくらい多くの詳細に仕様書作成者が答えなければならないので、基礎となるコンピュータープログラムと同じくらい書くのが難しいです。情報理論の用語を使用するには、コンピュータープログラム自体が持つのと同じ数のシャノンエントロピーがスペックに必要です。エントロピーの各ビットは、仕様作成者またはプログラマーによって決定されます。

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

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


7
ソートアルゴリズムの完全な仕様は、挿入ソート、クイックソート、またはバケットソートを考え出すよりもはるかに簡単に記述できます。それでも、最初のものを2番目のものに簡単に変換できると主張しています。
raptortech97 14年

ジョエル...十分だ!;-)そのためには、特定の言語の仕様が必要であることを理解しています。しかし、私は仕様が非常に詳細であるべきだという議論について完全に確信しているわけではありません。開発者として、私たちは非常に詳細な仕様がなくてもプログラムを開発できます。プログラムの設計について「ランダムな」決定を行うことができる人工知能を開発することはできませんか?
フロリアン14年

6
@florianそれでは、人間のプログラマーが実行する仕様解釈タスクをプログラムに実行させたいですか?そして、それは「強力なAI」の古くからの問題になります。これは、多くの知的な人々が何十年も研究してきたもので、それを示す進歩はありません。AIが形而上学的にさえ可能であるかどうか、遠い将来は実際的には不可能であるかどうかについて、熱烈な哲学的議論があります。

私は(友人が私に尋ねたように)自分にそれが可能であるかどうかを尋ねていたのは本当に望んでいない。AIは実際には存在せず、単に「ランダムな」プログラムされた選択に帰着することを完全に理解しています。
フロリアン14年

2
@ raptortech97:いいえ、できません。この質問の意味では「完全」ではありません。仕様を実行可能プログラムに機械的に変換できるほど完全にするためには、基本的にプログラミング言語で作成する必要があります。そうしないと、仕様の動作が未定義になるか、MSWordドキュメントでコードを記述しているだけになります。
whatsisname

4

確かに、我々はやる 、この すべて の時間を(問題の非常に限られたサブセットのため)。さらに1つまたは2つのステップを実行し、Siriのようなものをこれらのコードジェネレーター(またはWolfram Alphaのような)の入力に結び付けて、コードを作成して問題を解決することを想像するのはかなり簡単です。最も基本的なことを行うための何かがすでにどこかに存在することを期待します。

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


リンクをありがとう。YaccとXamarinは純粋に決定論的なコードジェネレーターですが。彼らは一からものを作成しません。
フロリアン14年

@florian-何もゼロから作成するものはありません。常にいくつかの入力があり、それらはほとんどよりもうるさいです。
テラスティン14年

1
@Telastyn:パーサージェネレーターの入力/出力を人間の心の入力/出力と比較するのは、「うるさい」というのはせいぜい不誠実です。
whatsisname

2

@Mason Wheelerの答えが鍵となる考えだと思います。こんなふうになります:

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

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

同様に、プログラミングの分野では、おそらくコンピテンシーのセットが増えてくるでしょう。Prologは、ユーザーが問題を設定し、コンピューターが答えを解決する一連のコンピューターの問題に対処しました。誰かがおそらくコンピューターが満たすことができる単純なプログラミング問題のクラスなどを見つけるでしょう。それから誰かがそれを構築して、ある問題空間内で「オンデマンドのカスタマイズ」を生成します。そしてそれは行く。

質問は、AIが一定量のエントロピーを習得するのにどれくらい時間がかかる、そして何個のコンピューティングリソースが必要か、に変わると思います。コンピューターが人間の最高の脳によって習得されたエントロピーを習得できなかったことは想像できないと思います-脳には魔法はありません-しかし、問題は、あなたが必要とするコアの数と、そこに到達するのに何世紀かかりますか?

しかし...コンピューターは私の仕事をすることができますか?考えられない!


Jeopardyはちょっとした特殊なケースであると言ってもいいと思います。つまり、事実は事実を想起して関連付けることです。最高の専門家でさえも、彼らが圧力の下で知らない、または思い出すことができないという一般的な知識のナゲットもあります。一方、百科事典(ウィキペディア、ブリタニカ百科事典など)を分析できるコンピューターでは、百科事典が他のどの百科事典よりもエキゾチックであるという事実はありません。
CVn 14年

1

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

はい、そうです。私たちがコンピューターで達成することは何でも、プログラムを与えて実行します。それが反対の場合、何も達成できません。それでも、ある時点で、人々はチェスをするコンピューターは明らかにインテリジェントだと思っていました。今、彼らはできます、そして、私たちは正確にどのように知っています、そして、我々はそれが理性的であると思いません。潜水艦はまだ泳げません。

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

何十年も前から、パーサージェネレーターがありました。あなたは彼らに言語の説明を与え、それは処理され、結果はその言語のパーサーのコードになります。私たちはそれがどのように行われたかを正確に知っていますが、それはコンピュータプログラミングそのものではありませんか?

2番目-間違いを犯したことを通知するエディター(構文エラー、存在しない変数など)。それ自体は何もプログラムしませんが、あなたが何か間違ったことをしたことを教えてくれます。それは表面上のみです。

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

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

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

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

しかし、以前の実行の結果に基づいて自分自身を書き換えたり、独自のコード内の古いルーチンや非効率的なルーチンを認識できるプログラムは考えられません。いつかそれができると思うし、それは最新のコンパイラの一部の機能に過ぎないので、特別なことは何もないと考えます...


0

プログラムを作成するには、人間の脳の驚くべき複雑さをすべて必要とするため、現在ではなく、予見可能な将来でもありません。その場合でも、それらの脳は適切に行うために高度に訓練する必要があり、それでもすべての人がタスクを実行できるわけではありませんが、十分な時間で誰でもプログラムできるように訓練できると主張することができます。

単純なエミュレートされたタスクの話ではないという質問の言い回しから取った。

あなたは記事を求めました、そして、インテリジェンスの開発に関するこのScience Blogs記事は多くの方法でその質問に答えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.