Archive for October 3rd, 2007

หนังสือที่อยากได้ (Complex Systems) และ amazon.com

Wednesday, October 3rd, 2007

เมื่อวานนี้ Amazon ส่ง e-mail มาโฆษณาหนังสือ … เห็นเล่มนี้แล้วอยากได้มาก



Complex and Adaptive Dynamical Systems: A Primer โดย Claudius Gros มีกำหนดออกวันที่ 1 พย. ปีนี้ น่าจะเป็นของขวัญวันเกิดให้ตัวเองได้ดีเลยนะเนี่ย

มี description (เอามาจาก Amazon):

We are living in an ever more complex world, an epoch where human actions can accordingly acquire far-reaching potentialities. Complex and adaptive dynamical systems are ubiquitous in the world surrounding us and require us to adapt to new realities and the way of dealing with them.

This primer has been developed with the aim of conveying a wide range of “commons-sense” knowledge in the field of quantitative complex system science at an introductory level, providing an entry point to this both fascinating and vitally important subject.

The approach is modular and phenomenology driven. Examples of emerging phenomena of generic importance treated in this book are: - The small world phenomenon in social and scale-free networks; - Phase transitions and self-organized criticality in adaptive systems; - Life at the edge of chaos and coevolutionary avalanches resulting from the unfolding of all living; - The concept of living dynamical systems and emotional diffusive control within cognitive system theory.

Technical course prerequisites are a basic knowledge of ordinary and partial differential equations and of statistics. Each chapter comes with exercises and suggestions for further reading - solutions to the exercises are also provided.

อยากได้ชะมัด .. นี่ถ้ายังอยู่ญี่ปุ่นนี่คงจะสั่งไปแล้วนะเนี่ย..

นี่แหละ power ของการเก็บข้อมูล และการวิเคราะห์พฤติกรรมผู้ใช้ ผมเคยซื้อหนังสือเกี่ยวกับ Chaos Theory, Fractals, Complex Systems theory จาก Amazon ไว้หลายสิบเล่ม (นอกจากหนังสืออื่นๆ นะ ไว้วันหลังจะทำ reading list ให้) ไม่พอนะ ผมอาจจะมีพฤติกรรมการซื้อหนังสือจากสำนักพิมพ์ Springer เยอะด้วย พอเอาข้อมูลนี้มาวิเคราะห์นะ ระบบ computer ที่ Amazon ก็เลยไม่ลังเล (computer มันลังเลเป็นที่ไหน) ในการที่จะส่ง e-mail มาบอกผมว่า มีหนังสือใหม่เล่มนี้นะ สนมั้ย

  • ถ้า Amazon ส่งโฆษณามามั่ว มีหนังสือใหม่อะไรก็ส่งมาหมด ผมก็คงสั่งโปรแกรม e-mail client ของผมให้ filter มันไปเป็น junk แบบถาวร
  • ถ้าส่งมาแบบ 50 mail มีดีซักอัน ผมก็คงจะ filter มันเข้าไปอยู่ใน mailbox ที่ไม่สำคัญ อยากอ่านก็อ่านอยากลบก็ลบ (แต่ไม่ใช่ junk) แล้วปกติก็จะลบมากกว่าอ่าน
  • ถ้ามันส่งมาแบบ 10 mail ผมคิดว่าเข้าท่าซัก 1 เนี่ยสิ ค่อยน่าสนหน่อย

อีกอย่าง ยิ่งผมซื้อเยอะเท่าไหร่ Amazon ก็ยิ่งวิเคราะห์พฤติกรรมการซื้อของผมได้ดีขึ้นเท่านั้น ยิ่งมีคนซื้อของจาก Amazon เยอะขึ้นเท่าไหร่ Amazon ก็ยิ่งวิเคราะห์พฤติกรรมของทุกคนโดยรวมได้ดีขึ้นเท่านั้น เพราะว่านอกจากจะวิเคราะห์แค่จากตัวผมเองแล้ว ก็ยังวิเคราะห์จากคนที่ซื้อของใกล้เคียงกับที่ผมซื้ออีกด้วย ว่าคนพวกนั้นซื้ออะไร ผมน่าจะสนใจตาม อะไรทำนองนี้

ซึ่งมันก็เป็น hit-and-miss

แต่ว่าทุกครั้งที่ผมซื้อ Amazon ก็ยิ่งมีโอกาสได้เงินจากผมมากขึ้นในอนาคต

การใช้ computer และทฤษฎีต่างๆ อย่างฉลาดในเชิงธุรกิจ บางทีมันเพิ่มโอกาสในการทำธุรกิจ ในการขายของ ในการเชื่อมโยง ในการบริหารจัดการมากขึ้นอย่างมากมาย

แต่น่าเสียดาย (อีกล่ะ พักนี้มีแต่เรื่องน่าเสียดาย) ที่หลายๆ คนในบ้านเราที่ศึกษาทฤษฎี ไม่สามารถนำตรงนี้ไปใช้งานจริงได้เท่าไหร่ และไม่สามารถประยุกต์ใช้ในเชิงธุรกิจได้อย่างมีประสิทธิภาพเท่าที่ควร หรือไม่ได้เอาเสียเลย

ปล. ใครมีประสบการณ์สั่งหนังสือจาก Amazon พักหลังๆ ช่วยบอกหน่อยนะครับ ว่าดีมั้ย (การขนส่งและ delivery นะ) เพราะว่าเคยสั่งครั้งนึงเมื่อนานมาแล้วตอนกลับมาเยี่ยมบ้าน ตอนนั้น delivery ในบ้านเราห่วยสุดๆ…. เลยเข็ด

ทำไม arithmetic ในคอมพ์จึงยาก?

Wednesday, October 3rd, 2007

วันก่อน peter (ซี้เก่าสมัยเรียนที่ Tsukuba) ส่งเรื่อง bug ใน Excel 2007 มาให้อ่าน (อันที่ peter ส่งมาไม่ใช่อันนี้นะ แต่ว่าก็เรื่องเดียวกัน)



ก็ตกใจเล็กน้อยนะ แต่ว่าก็ไม่ได้มากอะไร เพราะว่าจริงๆ ก็รู้อยู่ว่า computer arithmetic มันยาก …..

อ่าว มันจะยากได้ไงล่ะ ก็วิธีการก็รู้ๆ กันอยู่นี่นา จริงๆ แล้วไม่หรอก เพราะว่าการทำ computer arithmetic มันมีปัจจัยเยอะมาก .. อย่างที่ว่าน่ะแหละ devils are in details … แทบทุกเรื่องน่ะแหละ เราจะลง details แค่ไหนเท่านั้นเอง

พอดีไปเจอนี่มา

ที่มีคำอธิบายค่อนข้างจะละเอียด แต่ว่าอ่านตามได้ง่ายๆ และที่สำคัญ ถ้าใครคุ้นๆ ชื่อ ก็คงจะร้องอ๋อ ว่านี่มันพวกที่ทำ Mathematica ซึ่งเป็น Mathematical Package ที่ถือกันว่าดีที่สุดตัวหนึ่งนี่นา (มีชื่อมากเรื่องประสิทธิภาพ เรื่อง programmability .. ภาษา Mathematica นี่สุดยอดมากเหมือนกัน และเรื่องความแม่นยำ — แต่ว่าแพงมาก) ใน blog นั้นเขาเขียนขาย/เชียร์ Mathematica มากไปนิด (ก็แน่นอน) ผมก็เลยเอาใจความตรงที่เป็นสาระของเรื่องนี้มาเขียนให้อ่านกันใหม่เป็นภาษไทยก็แล้วกันนะ ตามนี้เลย

  • มันยากเพราะว่าวิธีการทำ arithmetic ที่อยู่ในตำราคณิตศาสตร์เบื้องต้น (วิธีที่เราชอบคิดกัน) มันไม่มีประสิทธิภาพเพียงพอ เช่นการคูณเลข ถ้าเราต้องการคูณเลขที่มีตัวเลขทั้งหมด n ตัว จะต้องใช้การคูณทั้งหมด n^2 ครั้ง แต่ว่าจริงๆ แล้วจาก algorithm ขั้นสูง เราก็รู้วิธีการที่จะทำได้ใน n^1.58, n log n หรือแม้แต่น้อยกว่านั้นสำหรับ n ที่มีค่ามากๆ ดังนั้นถ้า n มันใหญ่พอ มันจะเห็นความแตกต่างได้ชัดเจนมาก เรื่องเวลาที่ใช้ในการคำนวณ (เสี้ยววินาที เทียบกับเป็นนาที อะไรทำนองนั้น) ตัวอย่างของ algorithm ดังกล่าวก็เช่น Karatsuba algorithm
  • Algorithm เหล่านี้ แม้ว่าจะมีประสิทธิภาพสูงกว่า (และมีความแม่นยำสูงกว่า) วิธีการแบบ school-book มาก .. แต่ว่าเนื่องจากความซับซ้อนของมัน ก็ทำให้พวกมันมี bug ง่ายกว่าเช่นกัน
  • นอกจากนั้นยังมีเรื่องของการเก็บค่าตัวเลขทศนิยมไว้ในหน่วยความจำ ซึ่งปกติจะเก็บเป็นฐาน 2 เพื่อคำนวณ แต่ว่าเมื่อจะนำมาแสดงผล จะต้องเปลี่ยนฐานเลขให้เป็นฐาน 10 ซึ่งโดยปกติจะต้องทำการ round ตัวเลขฐาน 2 พวกนั้นให้เป็นเลขฐาน 10 ที่มีความใกล้เคียงที่สุด จากรูปข้างล่างนี่จะเห็นว่ามีความคลาดเคลื่อนในการแสดงผล


  • ปัญหาหลักๆ จริงๆ มาจากการทำ base conversion ซึ่งจาก binary เป็น decimal จะใช้การคูณเป็นหลัก และจาก decimal เป็น binary จะกลับกันคือใช้การหารเป็นหลัก ประเด็นมันอยู่ที่ว่า บางที (สำหรับตัวเลขบางตัว) การคูณหรือหารนั้นจะต้องทำที่ precision ที่มากกว่าตัวเลขนั้นๆ เพื่อให้ได้ค่าที่ถูกต้อง
  • แต่ว่าระบบคำนวณหลายระบบดันผูกติดกับ fixed precision ของ hardware ที่ใช้งาน ดังนั้นในหลายๆ งานจึงไม่สามารถที่จะได้การแปลงเลขฐานที่ถูกต้องสำหรับตัวเลขหลายๆ ตัว
  • ความผิดพลาดยังเกิดได้จาก “เลขทด” (carries) หรือตัวเลขที่เกิดจากกระบวนการทดเลขน่ะแหละครับ ซึ่งระบบซอฟต์แวร์หลายตัวก็จะทำงานพลาดถ้ามีการทดมากๆ ไป ซึ่ง bug แบบนี้มีมาตั้งแต่สมัยไหนสมัยไรแล้ว โปรแกรมหลายตัวในปัจจุบันก็ยังมีปัญหาเรื่องนี้อยู่นะ
  • ปัญหาหนักอีกที่หนึ่งสำหรับ computer arithmetic ก็คือ ในกรณีทั่วๆ ไป มันค่อนข้างจะ “ง่าย” ที่จะทำให้มัน “เกือบถูกต้อง” (คือ ถูกกับ input case ทั่วๆ ไป แต่ว่ากับ input บางตัวจริงๆ จะทำให้เกิดปัญหาขึ้นมา)
  • และปัญหาที่หนักที่สุดก็คือพวก bug กับตัวเลขบางตัวที่มี bit pattern บางประเภทจริงๆ พวกนี้จะหาเจอยากมากในระหว่าง testing หรือว่าเรียกได้ว่า rare bug เลยก็ว่าได้ มันหายากขนาดที่ว่าเราอาจจะทดสอบกับตัวเลขเป็นพันๆ ล้านตัว แต่ว่าไม่เจอพวกมันเลยก็ได้

ยังเชื่อใจโปรแกรมหลายตัวของท่านอยู่อีกหรือเปล่าเนี่ย?

อ้างอิง: Wolfram Blog: Arithmetic is Hard — To Get Right

ปล. หลังจากคุยกันเสร็จ ผมกับ peter ก็ joke เล่นกันต่อว่า เฮ้ย นี่แหละ เห็นมั้ย OpenOffice.org ไม่ compatible กับ MS-Office อีกอย่างแล้วนะ (ค่าที่คำนวณมันได้ไม่เท่ากัน ใส่ตัวเลขข้างบนเข้าไปแล้ว OO.o มันคำนวณถูก…) แถม peter เล่าให้ฟังว่า บางคนตลกร้ายกว่านั้น บอกให้เพิ่ม tag MultiplyLikeExcel2007 ลงไปใน spec ของ OOXML ด้วยนะ ขำกลิ้งเลย

ปล.2 จริงๆ Slashdot ก็มีลง แต่ว่าพักหลังๆ ผมอ่าน /. น้อยลงมั้ง ก็เลยไม่ค่อยได้สังเกตหรือว่าใส่ใจ อันนี้ link:

October 2007
M T W T F S S
« Sep   Nov »
1234567
891011121314
15161718192021
22232425262728
293031