การออกแบบโปรแกรม Phenotropic


15

ฉันเพิ่งเจอความคิดที่ Jaron Lanier เรียกว่า "การเขียนโปรแกรมฟีโนโทรปิก"

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

คำอธิบายสองบรรทัดอยู่ที่นี่:

จากข้อมูลของ Jaron ความแตกต่างที่แท้จริงระหว่างความคิดในปัจจุบันของซอฟต์แวร์ซึ่งก็คือการปฏิบัติตามโปรโตคอลและความคิด [เขากำลังพูดถึงการจดจำรูปแบบเกี่ยวข้องกับข้อผิดพลาดที่เราสร้างขึ้น 'และถ้าเราไม่สวม หาวิธีคิดและสร้างซอฟต์แวร์ที่แตกต่างออกไปเราจะไม่เขียนโปรแกรมที่มีขนาดใหญ่กว่าโค้ดประมาณ 10 ล้านบรรทัดไม่ว่าตัวประมวลผลของเราจะรวดเร็วแค่ไหนก็ตาม

คำอธิบายอีกเล็กน้อยคือที่นี่ และคำอธิบายได้อีกต่อไปเป็นที่นี่

ดังนั้นคำถามเมื่อมองผ่านความหมายของหุ่นยนต์นเรศวรที่เห็นได้ชัดว่าผู้คนมักจะเลือกวิธีการที่จะออกแบบและเขียน "โปรแกรม phenotropic จริง ๆ " ได้อย่างไร


1
ไม่มีความผิด แต่บทความที่คุณเชื่อมโยงนั้นคลุมเครือและไร้เดียงสา คุณช่วยให้ชัดเจนขึ้นเกี่ยวกับสิ่งที่คุณเข้าใจได้phenotropic programไหม.
Simon Bergot

อ่านต่อไปเรื่อย ๆ มันอธิบายในรายละเอียดเต็มไปด้วยเลือด
ADV

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

1
@Simon: คำถามที่ถามโดยทั่วไปคือสิ่งเดียวกันดังนั้นฉันไม่ทราบว่าคำขอของคุณเป็นไปได้โดยไม่ต้อง OP จริง ๆ ตอบคำถามตัวเอง
Robert Harvey

1
หัวข้อที่เกี่ยวข้อง (พิจารณาผู้เขียนข้อความ): mail-archive.com/fonc@vpri.org/msg03808.html
Thiago Silva

คำตอบ:


23

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

คำว่า:

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

ความคิดส่วนใหญ่มาจากชีววิทยา ดวงตาของคุณเชื่อมต่อกับโลกไม่ใช่ผ่านฟังก์ชั่นเหมือนSee(byte[] coneData)แต่ผ่านพื้นผิวที่เรียกว่าเรตินา มันไม่ใช่ความแตกต่างเล็กน้อย คอมพิวเตอร์จะต้องสแกนไบต์ทั้งหมดทีละตัวในconeDataขณะที่สมองของคุณประมวลผลอินพุตทั้งหมดพร้อมกัน

ป้อนคำอธิบายรูปภาพที่นี่

Lanier อ้างว่าอินเทอร์เฟซหลังนั้นทนต่อความผิดพลาดได้มากกว่าซึ่งเป็น (บิตที่เลื่อนเพียงอันเดียวconeDataสามารถทำลายระบบทั้งหมด) เขาอ้างว่ามันช่วยให้การจับคู่รูปแบบและโฮสต์ของความสามารถอื่น ๆ ที่ปกติเป็นเรื่องยากสำหรับคอมพิวเตอร์ซึ่งมันทำ

กลไก "phenotropic" ที่เป็นแก่นสารในระบบคอมพิวเตอร์จะเป็นเครือข่ายประสาทเทียม (ANN) ใช้ "พื้นผิว" เป็นอินพุตแทนที่จะใช้อินเตอร์เฟสที่กำหนดไว้ มีเทคนิคอื่น ๆ เพื่อให้ได้การวัดการจดจำรูปแบบ แต่โครงข่ายประสาทเทียมนั้นเป็นวิธีที่สอดคล้องกับชีววิทยามากที่สุด การทำให้ ANN นั้นง่าย การทำให้มันทำงานที่คุณต้องการให้ทำงานได้อย่างน่าเชื่อถือนั้นเป็นเรื่องยากด้วยเหตุผลหลายประการ:

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

หากคุณยินดีที่จะแยกส่วนกับชีววิทยาคุณสามารถแจกจ่ายแบบจำลองทางชีวภาพ (ซึ่งพยายามจำลองการทำงานของเซลล์ประสาทชีวภาพจริง) และสร้างเครือข่ายที่มีลักษณะคล้ายกันมากกับ "เซลล์ประสาท" ที่แท้จริงของระบบคอมพิวเตอร์ดิจิทัล (ตรรกะ ประตู) เครือข่ายเหล่านี้เรียกว่า Adaptive Logic Networks (ALN) วิธีที่พวกเขาทำงานคือการสร้างชุดของฟังก์ชั่นเชิงเส้นที่ประมาณเส้นโค้ง กระบวนการมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

... โดยที่แกน X แสดงถึงอินพุตบางส่วนไปยัง ALN และแกน Y หมายถึงเอาต์พุตบางตัว ตอนนี้ลองนึกภาพจำนวนฟังก์ชันเชิงเส้นที่ขยายเพิ่มตามต้องการเพื่อปรับปรุงความแม่นยำและจินตนาการว่ากระบวนการที่เกิดขึ้นในมิติที่ไม่มีกฎเกณฑ์ดำเนินการกับประตูตรรกะแบบ AND และ OR ทั้งหมดและคุณมีความรู้สึกว่า ALN เป็นอย่างไร

ALN มีคุณสมบัติบางอย่างที่น่าสนใจมาก:

  1. พวกเขาฝึกอบรมได้ค่อนข้างง่าย
  2. พวกมันสามารถคาดเดาได้มากเช่นการเปลี่ยนแปลงเล็กน้อยของอินพุทไม่ก่อให้เกิดการแกว่งของเอาต์พุต
  3. พวกมันเร็วฟ้าผ่าเพราะมันถูกสร้างขึ้นในรูปของต้นไม้ตรรกะและทำงานเหมือนกับการค้นหาแบบไบนารี่
  4. สถาปัตยกรรมภายในของพวกเขาวิวัฒนาการตามธรรมชาติจากชุดฝึกอบรม

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

อ่านเพิ่มเติม
บทนำเกี่ยวกับเครือข่ายลอจิกแบบปรับได้พร้อมแอปพลิเคชันเพื่อตรวจสอบการประเมินความเสี่ยง
"Object Oriented" vs "Message Oriented" โดย Alan Kay


1
แก้ไขให้ถูกต้องหากฉันผิด แต่อินพุต "พื้นผิว" ฟังดูเหมือนคอลเล็กชั่น - ส่วนประกอบอิสระ (หรือส่วนใหญ่เป็นอิสระ) ในตัวอย่างตามันอาจมีหน้าตาแบบนี้See(List<Cone> cones)(ที่ซึ่งแต่ละคนConeแยกจากกัน) ใช่ไหม?
FrustratedWithFormsDesigner

1
@Frustrated คุณเห็นได้ชัดว่าสามารถจำลองพื้นผิวด้วยอาร์เรย์ไบต์ แต่กลับไปที่คำจำกัดความของ Lanier ซึ่งแทนที่การส่งผ่านข้อความและการเรียกใช้ฟังก์ชันด้วยความรู้ความเข้าใจและการจดจำรูปแบบ มันผูกอยู่กับปัญหาความยืดหยุ่นที่อธิบายไว้ที่นี่ ความทนทานต่อความผิดพลาดยังเป็นส่วนหนึ่งของสมการ คิดว่า "การเชื่อมต่อที่ชาญฉลาดขึ้น"
Robert Harvey

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

2
@Dunk: ... แต่มันก็ยังถูกกฎหมายในการสร้างและขายรถยนต์สำหรับคนขับรถของมนุษย์ซึ่งจัดการเพื่อหลีกเลี่ยงอุบัติเหตุส่วนใหญ่
Doc Brown

2
@ Dunk จุดไม่ใช่การแสดงตนของข้อบกพร่อง - มิฉะนั้นเราจะไปเส้นทางคณิตศาสตร์คลาสสิกเพื่อพิสูจน์ทุกอย่าง ประเด็นคือ 1: ขอบเขตของความล้มเหลวส่งผลกระทบต่อ (จักรวาลไม่ได้ผิดพลาดถ้าฉันผิดกระต่ายสำหรับกอริลลา - ในความเป็นจริงฉันยังคงทำงานเป็นมนุษย์หลังจากนั้นสมองของฉันและลูกชาย) 2 : หน่วยงานทางกายภาพ / ชีวภาพของห้องพักต้องฟื้นตัวให้ข้อเสนอแนะและทางเลือกในการสอบสวนที่ "ทำให้ทุกอย่างเป็นไปได้แม้ในทางที่ไม่ดี"; และ 3: ความคิดที่ว่าคุณลักษณะเหล่านั้นน่าสนใจสำหรับเราที่จะต้องการพวกเขาในระบบประดิษฐ์ของเรา
Thiago Silva

1

ฉันคิดว่าเรากำลังอยู่ในขั้นเริ่มต้นของหนึ่งในขั้นตอนที่จะต้องดำเนินการเพื่อไปที่นั่นและรวบรวมข้อมูลจำนวนมากในรูปแบบที่สามารถวิเคราะห์ได้ อินเทอร์เน็ต, การค้นหาของ Google, Fitbit (ทุกขั้นตอนที่คุณทำทุกที่ที่คุณทำฉันจะเฝ้าดูคุณ), FourSquare, ที่ตั้งทางภูมิศาสตร์ของสมาร์ทโฟน, โพสต์ Facebook และข้อมูลคำถาม SO ทั้งหมดจะถูกรวบรวม เราไม่ได้อยู่ใกล้กับปริมาณข้อมูลทางประสาทสัมผัสที่คนทั่วไปกำลังรวบรวมตลอดเวลา แต่เราเข้าใกล้

เริ่มจัดหมวดหมู่ภาพนกนับล้านและรับข้อเสนอแนะจากคนที่บอกคุณว่าไม่ใช่นกและคุณสามารถเริ่มสร้างอัลกอริทึมได้ จากนั้นจะมีการแสดงผลแบบฝอย (ฉันจะเรียกมันว่าแบบจำลอง แต่มันแม่นยำเกินไปสำหรับสิ่งที่เรากำลังพยายามเขียนโค้ด)

class Birdish

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

บางสิ่งที่ง่ายเหมือนการตั้งนาฬิกาปลุกสามารถทำได้โดยการสังเกต / วิเคราะห์เล็กน้อยในนิสัยปัจจุบันของฉัน เราเลิกใช้การตั้งค่าตัวจับเวลา VCR ก่อนที่เทคโนโลยีจะถูกแทนที่ด้วยระบบดิจิตอล และนั่นจะเกิดขึ้นเร็วถ้าเราสามารถเชื่อมต่อ TV Guide กับ VCR ได้? ฉันได้ดูรายการทีวีเดียวกัน 4 สัปดาห์ติดต่อกัน แต่รายการที่ 5 ฉันไม่ได้เปิดทีวีด้วยซ้ำ เห็นได้ชัดว่าฉันต้องการมันบันทึก คุณไม่สามารถบอกได้ว่าฉันอยู่ดึกที่ทำงานเขียนโพสต์นี้และด้วยการเดินทางทั่วไปของฉันจะไม่ทำให้บ้านทันเวลา? คุณได้รับข้อมูลทำคณิตศาสตร์

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


1

นี่คือชุดสไลด์สำหรับการกำหนดโปรแกรมน่าจะเป็นภาษาใน Scala

นี่เป็นตัวอย่างการใช้งานที่เหมาะสมเป็นครั้งแรกสำหรับส่วนประกอบหลักบางอย่างในระบบที่ Jaron Lanier เสนอ


มันดูดีมาก บางทีฉันอาจจะแทงที่ออกแบบห้องสมุดสำหรับ Java ที่ทำเช่นเดียวกัน
ADV

@adv เราจะค้นหามันได้อย่างไรถ้าคุณทำ
ใหม่ Alexandria

1
ฉันจะโพสต์ลิงก์ไปยัง repo GitHub เมื่อฉันได้รับรอบในการสร้างมัน
ADV

-1

ความคิดที่ฉันมีเมื่อเร็ว ๆ นี้:

หากคุณใช้ความคิดระดับสูงเช่นบางที Monad ของ Haskell เพื่อตัดการเรียกขั้นตอนระยะไกลไปยังระบบอื่น คุณส่งการร้องขอไปยังเซิร์ฟเวอร์ แต่ไม่มีอะไรกลับมา (เซิร์ฟเวอร์เสีย) หรือสัญญากลับมาอีกครั้ง (เซิร์ฟเวอร์ไม่ว่าง) และโปรแกรมของคุณยังคงทำงานต่อโดยไม่มีค่าเหล่านั้นหรือสัญญา นั่นเป็นลักษณะที่ Lanier มองหาการยอมรับความผิด

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


คำถามนี้ถามคำถามนี้อย่างไร
ริ้น

ถ้าฉันเข้าใจอย่างถูกต้องการเขียนโปรแกรม Phenotropic เป็นวิธีการโปรแกรมขนาดใหญ่ (มักจะเป็นคอมพิวเตอร์หลายเครื่อง) ระบบที่แข็งแกร่ง ปัญหาคืออุปมาอุปมัยทางชีวภาพทั้งหมดทำให้มันคลุมเครือและยากที่จะแปลเป็นเงื่อนไขการเขียนโปรแกรมในทางปฏิบัติ ที่นี่ฉันแนะนำว่าการสร้างโปรแกรมบางอย่างที่ไม่คลุมเครือ (เช่น Monads, Promises ฯลฯ ) อาจเป็นวิธีที่จะทำให้ความคิดเหล่านั้นของ Lanier เป็นรูปธรรมและเป็นไปได้ในทางปฏิบัติ)
interstar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.