เป็นไปได้หรือไม่ที่จะสอนเครื่องจักรถึงวิธีการตั้งโปรแกรมเองตามข้อกำหนดที่กำหนดไว้? [ปิด]


12

เพื่อนของฉันที่ไม่มีความรู้ด้านการเขียนโปรแกรมถามคำถามนี้กับฉันและฉันคิดว่ามันน่าสนใจ

ฉันคิดว่ามันเป็นไปไม่ได้เพราะมันต้องการปัญญาประดิษฐ์ขั้นสูงที่สามารถวิเคราะห์เนื้อหาของปัญหาคิดเกี่ยวกับวิธีแก้ปัญหาและเขียนโปรแกรม แค่คิดเกี่ยวกับเครื่องจักรที่สามารถตั้งโปรแกรมเครื่องคิดเลขง่ายๆได้

แต่บางทีฉันผิดและฉันอยากจะรู้ว่าคุณคิดอย่างไรเกี่ยวกับเรื่องนี้และหากคุณตระหนักถึงบทความ / งานวิจัยเกี่ยวกับเรื่องหรือถ้ามันมีอยู่แล้วหรือถ้ามีความเป็นไปได้ในการเลือกสเปคและได้รับ เครื่องเพื่อตนเองโปรแกรมนี้ "spec?"


4
กำหนดการเขียนโปรแกรม ฉันสามารถสร้างโปรแกรมที่จะทำให้โปรแกรมอื่น ๆ แต่มันจะเรียนรู้จริงเหรอ?
Pieter B

ใช่คำถามไม่ได้เกี่ยวกับการสร้างรหัส แต่เกี่ยวกับการเขียนโปรแกรมจริงที่เราทำในฐานะนักพัฒนา
florian

ขึ้นอยู่กับว่าโปรแกรมคืออะไร โปรแกรมที่มีตรรกะทางธุรกิจขั้นตอนจำนวนมากจะเป็นเรื่องยาก (และเป็นไปได้น้อยกว่า) มากกว่าสิ่งที่ใช้งานได้และใช้คณิตศาสตร์เป็นหลัก (นั่นเป็นสัญชาตญาณแล้ว แต่ฉันไม่มีวิธีใด ๆ ที่จะสำรองข้อมูลนั้นโชคไม่ดี)
lunchmeat317

@ Florian: เราเป็นเครื่องจักรที่เรียนรู้วิธีการเขียนโปรแกรม (สมมติว่ามนุษย์ต่างดาว / พระเจ้าสร้างเรา :-)) แน่นอนว่าเรายังไม่ได้รับความสามารถในการเขียนโปรแกรมลำดับดีเอ็นเอ ฯลฯ ดังนั้นหากคุณสร้างเครื่องที่ต้องเรียนรู้วิธีการเขียนโปรแกรมในที่สุดคุณต้องตั้งโปรแกรมให้ "วิวัฒนาการ" และเรียนรู้วิธีการเขียนโปรแกรมเอง
Nav

2
@maple_shaft: ฉันทำให้คำถามมีวัตถุประสงค์มากขึ้นโดยนำไปใช้กับคำตอบที่มีอยู่และสงสัยว่ามันสามารถเปิดใหม่ในรูปแบบปัจจุบันได้หรือไม่
Tom Au

คำตอบ:


15

โจเอลตอบคำถามนี้ไม่กี่ปีก่อน ความหมายที่แท้จริงของ "สอนเครื่องจักรวิธีการโปรแกรมด้วยตัวเอง" คือ "สอนเครื่องวิธีการใช้สเป็คและสร้างโปรแกรมที่สอดคล้องกับสเป็คนั้น" และด้วยความในใจ:

ปัญหานี่เป็นพื้นฐานที่สำคัญมาก ในการพิสูจน์ทางกลไกว่าโปรแกรมนั้นสอดคล้องกับข้อมูลจำเพาะบางตัวข้อมูลจำเพาะนั้นจำเป็นต้องมีรายละเอียดมาก ในความเป็นจริงสเป็คต้องกำหนดทุกอย่างเกี่ยวกับโปรแกรมมิฉะนั้นจะไม่มีสิ่งใดสามารถพิสูจน์ได้โดยอัตโนมัติและโดยกลไก ตอนนี้ถ้าสเป็คจะกำหนดทุกอย่างเกี่ยวกับวิธีการทำงานของโปรแกรมแล้วแท้จริงและดูเถิดมันมีข้อมูลทั้งหมดที่จำเป็นในการสร้างโปรแกรม! และตอนนี้บางคนก็ออกไปในที่มืดมิดซึ่งพวกเขาเริ่มคิดถึงการรวบรวมรายละเอียดโดยอัตโนมัติลงในโปรแกรมและพวกเขาเริ่มคิดว่าพวกเขาเพิ่งคิดค้นวิธีในการเขียนโปรแกรมคอมพิวเตอร์โดยไม่ต้องเขียนโปรแกรม

ตอนนี้นี่คือวิศวกรรมซอฟต์แวร์ที่เทียบเท่ากับเครื่องเคลื่อนไหวแบบไม่ จำกัด เป็นหนึ่งในสิ่งเหล่านั้นที่ crackpots พยายามทำต่อไปไม่ว่าคุณจะบอกพวกเขาว่ามันไม่ทำงาน หากข้อมูลจำเพาะระบุได้อย่างแม่นยำว่าโปรแกรมจะทำอะไรโดยมีรายละเอียดเพียงพอที่จะใช้ในการสร้างโปรแกรมเองสิ่งนี้จะทำให้เกิดคำถาม: คุณจะเขียนข้อมูลจำเพาะได้อย่างไร ข้อมูลจำเพาะที่สมบูรณ์นั้นเป็นเรื่องยากที่จะเขียนเหมือนกับโปรแกรมคอมพิวเตอร์พื้นฐานเพราะรายละเอียดจำนวนมากต้องได้รับการตอบจากนักเขียนข้อมูลจำเพาะในฐานะโปรแกรมเมอร์ หากต้องการใช้คำศัพท์จากทฤษฎีสารสนเทศ: ข้อมูลจำเพาะนั้นต้องการเอนโทรปีของแชนนอนเพียงเล็กน้อยเท่าที่โปรแกรมคอมพิวเตอร์จะมี เอนโทรปีของแต่ละบิตเป็นการตัดสินใจของนักเขียนสเปคหรือโปรแกรมเมอร์

ดังนั้นสิ่งที่สำคัญที่สุดคือถ้ามีวิธีเชิงกลที่จะพิสูจน์สิ่งต่าง ๆ เกี่ยวกับความถูกต้องของโปรแกรมทั้งหมดที่คุณสามารถพิสูจน์ได้คือว่าโปรแกรมนั้นเหมือนกับโปรแกรมอื่น ๆ ที่ต้องมีปริมาณเอนโทรปีเท่ากัน เป็นโปรแกรมแรกมิฉะนั้นพฤติกรรมบางอย่างจะไม่ได้กำหนดและไม่ได้รับการพิสูจน์ ดังนั้นตอนนี้การเขียนสเป็คก็ยากพอ ๆ กับการเขียนโปรแกรมและสิ่งที่คุณได้ทำไปนั้นก็คือปัญหาหนึ่งจากที่นี่ไปที่นั่นตรงนั้นและไม่ทำอะไรเลย

วิธีเดียวที่จะหลีกเลี่ยงสิ่งนี้ได้ก็คือการผลิตคอมพิวเตอร์ที่ฉลาดจริง ๆ และมีสัญชาตญาณเพียงพอที่จะเติมเต็มช่องว่างที่คุณและฉันทำโดยอัตโนมัติตลอดเวลาเมื่อผลิตซอฟต์แวร์ ... ซึ่งในกรณีนี้คุณ จบลงด้วยคอมพิวเตอร์ที่เขียนโปรแกรมเกี่ยวกับตัวเองรวมทั้งเป็นนักพัฒนามนุษย์ ;)


7
ฉันสามารถเขียนข้อมูลจำเพาะที่สมบูรณ์สำหรับอัลกอริทึมการเรียงลำดับได้ง่ายกว่าที่ฉันจะได้มากับการเรียงลำดับการเรียงลำดับการจัดเรียงอย่างรวดเร็วหรือการจัดเรียงกลุ่มข้อมูล แต่คุณอ้างว่ามันง่ายที่จะแปลงอันที่หนึ่งเป็นที่สอง
raptortech97

โจเอล ... พอพูดแล้ว! ;-) ฉันเข้าใจว่าเพื่อที่จะทำเช่นนั้นเราจะต้องมีสเป็คในภาษาที่กำหนด แต่ฉันไม่มั่นใจโดยสิ้นเชิงเกี่ยวกับการโต้แย้งว่าข้อมูลจำเพาะควรมีรายละเอียดมาก เราในฐานะนักพัฒนามีความสามารถในการพัฒนาโปรแกรมโดยไม่ต้องมีรายละเอียดที่ชัดเจนมาก เราไม่สามารถพัฒนาปัญญาประดิษฐ์ที่สามารถตัดสินใจแบบ "สุ่ม" บางอย่างเกี่ยวกับการออกแบบโปรแกรมได้หรือไม่?
florian

6
@florian ดังนั้นคุณต้องการให้โปรแกรมทำภารกิจการแปลความหมายของโปรแกรมโดยเฉพาะ จากนั้นมันจะกลายเป็นปัญหาเก่าแก่ของ "AI ที่แข็งแกร่ง" ซึ่งคนฉลาดจำนวนมากได้ทำการวิจัยมานานหลายทศวรรษโดยไม่มีความคืบหน้าในการแสดงให้เห็น มีการถกเถียงทางปรัชญาอย่างถ่องแท้ว่า AI นั้นมีความเป็นไปได้ทางอภิปรัชญาหรือเป็นไปได้น้อยมากในอนาคตอันไกลและจากประสบการณ์ของฉัน

ฉันไม่ต้องการมันฉันถามตัวเอง (ตามที่เพื่อนของฉันถามฉัน) ถ้าเป็นไปได้ ฉันเข้าใจดีว่า AI ไม่มีตัวตนจริง ๆ และมันก็ลงเอยกับตัวเลือกโปรแกรม "สุ่ม" บางตัว
florian

2
@ raptortech97: ไม่คุณไม่สามารถทำได้ ไม่สมบูรณ์ในความหมายของคำถามนี้ เพื่อให้สเป็คของคุณสมบูรณ์จนสามารถแปลงเป็นเครื่องจักรที่ปฏิบัติการได้โดยพื้นฐานแล้วมันจะต้องเขียนด้วยภาษาโปรแกรม มิฉะนั้นสเป็คของคุณจะมีพฤติกรรมที่ไม่ได้กำหนดหรือคุณเพียงแค่เขียนรหัสในเอกสาร MSWord
whatsisname

4

แน่นอนว่าเราทำ นี้ ทั้งหมด เวลา (สำหรับย่อย จำกัด มากปัญหา) มันค่อนข้างง่ายที่จะจินตนาการว่าการก้าวไปอีกขั้นหนึ่งหรือสองครั้งแล้วมัดอะไรทำนองนี้กับ Siri ลงในอินพุตของเครื่องกำเนิดรหัส (หรืออย่าง Wolfram Alpha) ซึ่งจะเขียนโค้ดและแก้ปัญหาของคุณ ผมจะคาดหวังบางสิ่งบางอย่างที่มีอยู่แล้วอยู่ที่ไหนสักแห่งที่จะทำมากที่สุดพื้นฐานของสิ่งที่

ปัญหาเกี่ยวกับการเขียนซอฟต์แวร์ที่ซับซ้อนสำหรับธุรกิจไม่ได้ทำให้โปรแกรมเขียนรหัส แต่เป็นการเขียนโปรแกรมเพื่อรับข้อกำหนด


ขอบคุณสำหรับลิงค์ แม้ว่า Yacc & Xamarin จะเป็นเครื่องกำเนิดรหัสที่กำหนดอย่างหมดจด พวกเขาไม่ได้สร้างสิ่งต่าง ๆ ตั้งแต่เริ่มต้น
florian

@florian - ไม่มีอะไรสร้างสิ่งตั้งแต่เริ่มต้น มีการป้อนข้อมูลอยู่เสมอพวกเขาเลือกสรรมากกว่าคนส่วนใหญ่
Telastyn

1
@Telastyn: การเปรียบเทียบอินพุต / เอาต์พุตสำหรับตัวแยกวิเคราะห์กับอินพุต / เอาต์พุตสำหรับจิตใจมนุษย์ว่าเป็น "พิถีพิถันมากขึ้น" นั้นไม่ตรงกับความเป็นจริง
whatsisname

2

ฉันคิดว่าคำตอบของ @Mason Wheeler ถือเป็นแนวคิดหลัก มันจะเป็นเช่นนี้:

เอนโทรปีของแชนนอนของโอเอกซ์นั้นเล็กมาก ดังนั้นเราจึงเรียกว่าโอเอกซ์เกม "แก้ไข" หรือ "กำหนดขึ้น" มันไม่น่าสนใจจริงๆเมื่อคุณได้เข้าเรียนชั้นประถมศึกษาปีที่ผ่านมา ตัวตรวจสอบมีเอนโทรปีที่สูงขึ้นหากคุณพิจารณาเอนโทรปีของเกมที่เป็นไปได้ทั้งหมดที่คุณสามารถเล่นได้ แต่ตัวตรวจสอบก็เป็นเกมที่ "แก้ไข" หรือ "กำหนดขึ้น" หากคุณย้ายก่อนคุณควรชนะหรือเสมอ หมากรุกมีเอนโทรปีที่สูงขึ้นมาก แต่ไม่มีมนุษย์คนใดที่สามารถเอาชนะผู้เล่นคอมพิวเตอร์ที่ดีที่สุดได้ตั้งแต่ปี 2549 ดังนั้นในทางหนึ่งคอมพิวเตอร์ก็สามารถเล่นหมากรุกได้อย่างที่มนุษย์ไม่สามารถทำได้ Big Blue วิเคราะห์วิกิพีเดียแล้วเล่น Jeopardy กับผู้เล่นมนุษย์และเอาชนะพวกเขาอย่างเงียบ ๆ

อะไรต่อไป? เอนโทรปีของนวนิยายคืออะไรหรือซอนเน็ทของชากีเปรี

ในทำนองเดียวกันในพื้นที่การเขียนโปรแกรมสิ่งที่น่าจะเกิดขึ้นก็คือความสามารถที่เพิ่มขึ้น อารัมภบทระบุปัญหาคอมพิวเตอร์ที่คุณตั้งค่าปัญหาและคอมพิวเตอร์ได้แก้ไขคำตอบ บางคนอาจพบปัญหาการเขียนโปรแกรมแบบง่าย ๆ ที่คอมพิวเตอร์สามารถทำได้และอื่น ๆ จากนั้นจะมีคนสร้างมันขึ้นมาเพื่อผลิต "การปรับแต่งตามความต้องการ" ภายในพื้นที่ที่มีปัญหา และมันก็จะไป

ฉันคิดว่าคำถามจะกลายเป็นนานแค่ไหนที่ AI ใช้เวลาในการควบคุมพลังงานจากเอนโทรปี ... และต้องใช้ทรัพยากรคอมพิวเตอร์กี่เครื่อง? ฉันคิดว่ามันเป็นไปไม่ได้ที่คอมพิวเตอร์ไม่สามารถควบคุมเอนโทรปีที่ควบคุมโดยสมองมนุษย์ที่ดีที่สุด - ไม่มีอะไรมหัศจรรย์เกี่ยวกับสมอง - แต่คำถามคือคุณต้องการแกนกี่แกนและต้องใช้เวลากี่ศตวรรษ

แต่ ... คอมพิวเตอร์จะสามารถทำงานของฉันได้หรือไม่ ไม่น่าเชื่อ!


ฉันคิดว่ามันยุติธรรมที่จะพูดว่า Jeopardy เป็นกรณีพิเศษเล็กน้อย: มันทำให้เรานึกถึงและเชื่อมโยงข้อเท็จจริง รับแม้แต่ผู้เชี่ยวชาญที่ดีที่สุดและจะมีนักเก็ตของความรู้สาธารณะที่พวกเขาไม่รู้หรือไม่สามารถเรียกคืนภายใต้ความกดดัน ในทางตรงข้ามกับคอมพิวเตอร์ที่สามารถวิเคราะห์สารานุกรม (เช่น Wikipedia, Encyclopedia Britannica หรืออื่น ๆ ) ไม่มีข้อเท็จจริงที่ระบุไว้ในสารานุกรมว่าแปลกใหม่กว่า (หรือน้อยกว่า)
CVN

1

นี่เป็นคำตอบที่ยากเพราะเช่นเดียวกับปัญญาประดิษฐ์เมื่อเราทำสิ่งนี้สำเร็จแล้วมันจะเป็นเพราะเราจะได้เขียนโปรแกรมที่ทำ และนักวิจารณ์จะพูดว่า "เอาล่ะเครื่องนี้ไม่ได้เขียนโปรแกรมเองจริง ๆ ! มันแค่ติดตามโปรแกรมที่คุณให้!"

ใช่แล้ว สิ่งที่เราจะประสบความสำเร็จกับคอมพิวเตอร์เราจะทำโดยให้บางโปรแกรมและมันจะรัน หากเป็นการโต้แย้งเราก็ทำอะไรไม่ได้เลย ถึงกระนั้นในบางครั้งคนคิดว่าการเล่นหมากรุกด้วยคอมพิวเตอร์จะเห็นได้ชัดว่าฉลาด ตอนนี้พวกเขาทำได้และเรารู้วิธีและเราไม่คิดว่ามันฉลาด เรือดำน้ำยังไม่สามารถว่ายน้ำได้

ดังนั้น - พิจารณาตัวอย่างเล็ก ๆ น้อย ๆ

ตั้งแต่ทศวรรษที่ผ่านมาเราได้มีกำเนิด parser คุณให้คำอธิบายภาษาพวกเขาประมวลผลและผลลัพธ์คือรหัสสำหรับโปรแกรมแยกวิเคราะห์สำหรับภาษานั้น เรารู้ดีว่ามันเสร็จสิ้นแล้ว แต่นั่นไม่ใช่การเขียนโปรแกรมคอมพิวเตอร์

ที่สอง - บรรณาธิการที่บอกคุณว่าคุณทำผิดพลาด (ข้อผิดพลาดทางไวยากรณ์, ตัวแปรที่ไม่มีอยู่ ฯลฯ ) มันไม่ได้เขียนโปรแกรมอะไรเลย แต่สามารถบอกคุณได้ว่าคุณทำอะไรผิด เป็นอย่างมากบนพื้นผิวเท่านั้น

ภาษาที่คุณสามารถคลิกและลากการควบคุม UI และรหัสที่จะทำให้การทำงานนั้นถูกสร้างขึ้นโดยอัตโนมัติ

คอมไพเลอร์ของ JIT ซอฟต์แวร์ที่สามารถรับรู้ฮอตสปอตในซอฟต์แวร์ที่รันอยู่ในปัจจุบันและแทนที่บางส่วนด้วยรหัสที่คอมไพล์อย่างเหมาะสมที่สุดได้อย่างมีประสิทธิภาพเพิ่มประสิทธิภาพตัวเองในขณะที่มันทำงาน ฉันคิดว่านี่เป็นตัวอย่างของสิ่งที่ดูเหมือนว่าจะเป็นการเขียนโปรแกรมด้วยตัวเองจนกระทั่งคุณรู้แน่ชัดว่ามันเกิดขึ้นได้อย่างไร

การเล่นเกมทั่วไป นี่เป็นสาขาที่น่าสนใจของการวิจัยซึ่งนักวิจัยเขียนโปรแกรมที่สามารถอ่านคำอธิบายของกฎของเกมที่โปรแกรมนั้นเล่นกัน ดังนั้นแทนที่จะเป็นโปรแกรม tic-tac-toe หรือโปรแกรมหมากรุกสิ่งเหล่านี้เป็นโปรแกรมที่อ่านกฎของ tic-tac-toe หรือหมากรุกหรือเกมใหม่บางเกมสร้างขึ้นที่จุดและจากนั้นสามารถเล่นได้ โปรแกรมไม่ได้เขียนโปรแกรมตัวเอง แต่เล่นหมากรุกโดยไม่ต้องใช้กฎของการเล่นหมากรุก มีบางครั้งที่สิ่งนี้จะถูกพิจารณาอย่างชัดเจนว่าคอมพิวเตอร์สอนอะไรบางอย่าง

เราได้ทำตามขั้นตอนเล็ก ๆ จำนวนมากในทิศทางทั่วไป

แต่ฉันไม่สามารถนึกถึงโปรแกรมใด ๆ ที่เขียนตัวเองใหม่ตามผลลัพธ์ของการรันก่อนหน้าหรือที่สามารถจดจำรูทีนล้าสมัยหรือไม่มีประสิทธิภาพในโค้ดของตนเอง ฉันคิดว่าวันหนึ่งเราจะมีสิ่งนั้นและเราจะพิจารณาว่ามันไม่มีอะไรพิเศษเลยเพราะมันจะเป็นเพียงคุณสมบัติของคอมไพเลอร์ล่าสุด ...


0

ไม่ใช่ในปัจจุบันและไม่ได้อยู่ในอนาคตอันใกล้เพราะคุณต้องการความซับซ้อนที่น่าทึ่งของสมองมนุษย์เพื่อสร้างโปรแกรม และแม้กระทั่งสมองเหล่านั้นก็จำเป็นต้องได้รับการฝึกฝนอย่างดีเพื่อที่จะทำอย่างถูกต้องและถึงกระนั้นก็ไม่ใช่ทุกคนที่สามารถทำงานนี้ได้แม้ว่าใคร ๆ ก็สามารถเถียงได้ว่ามีเวลาเพียงพอที่คุณจะฝึกให้ใคร ๆ

ฉันเอามาจากวิธีที่คุณใช้คำถามของคุณว่าคุณไม่ได้พูดถึงงานที่เลียนแบบง่าย ๆ

คุณถามถึงบทความและบทความบล็อกวิทยาศาสตร์เรื่องการพัฒนาความเฉลียวฉลาดตอบคำถามนั้นได้หลายวิธี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.