วิธีการครอส-เอนโทรปี

วิธีครอส-เอนโทรปี (อังกฤษ: Cross-Entropy Method) เป็นขั้นตอนวิธีที่ใช้หลักการของ Monte Carlo เพื่อที่จะแก้ปัญหา ถูกนำเสนอโดย R.Y. Rubinstein[1][2] ซึ่งประเภทของปัญหาที่สามารถใช้วิธีครอส-เอนโทรปีได้นั้นจะมีอยู่สองลักษณะ คือ การประมาณค่า หรือ การหาค่าที่ดีที่สุด โดยวิธีการนี้ถูกประยุกต์ใช้ในปัญหาเชิงวิศวกรรม และวิทยาศาสตร์มากมาย

ภาพรวมของวิธีครอส-เอนโทรปี แก้

วิธีการครอส-เอนโทรปีนั้นถูกพัฒนาขึ้นโดย Reuven Y. Rubinstein ซึ่งเป็นนักวิทยาศาสตร์ชาวอิสราเอลที่ให้ความสนใจทางด้านการพัฒนาขั้นตอนวิธีเชิงสถิติมากมาย เขียนหนังสือหกเล่มและตีพิมพ์ผลงานกว่าร้อยผลงาน[3] ซึ่งแน่นอนว่าวิธีการครอส-เอนโทรปีเป็นหนึ่งในขั้นตอนวิธีเชิงสถิติเหล่านั้นเช่นกัน โดยเป็นขั้นตอนวิธีที่มีประสิทธิภาพตัวหนึ่งที่ใช้สำหรับปัญหาการประมาณค่าความน่าจะเป็นของเหตุการณ์ที่พบเจอได้ยาก (rare-event probability) ปัญหาการหาค่าที่เหมาะสมที่สุดเชิงการจัด (combinatorial optimization)

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

วิธีการครอส-เอนโทรปีนั้นถูกนำไปใช้ในปัญหาการหาค่าที่เหมาะสมที่สุดเชิงการจัดมากมาย เช่น ปัญหาการตัดที่มากที่สุด (Maximum Cut Problem) ปัญหาการหาเส้นทางเดินของพนักงานขาย (Traveling Salesman Problem) ปัญหาการหากราฟย่อยบริบูรณ์ที่มีขนาดใหญ่ที่สุดในกราฟ (Clique Problem) และปัญหาต่างๆอีกมากมาย และจุดเด่นพิเศษอีกอย่างหนึ่งสำหรับวิธีการครอส-เอนโทรปีคือ สามารถหาค่าที่เหมาะสมที่สุดสำหรับปัญหาที่มีค่ารบกวน (noisy problem) ได้ เพราะลักษณะขั้นตอนวิธีแก้ปัญหาที่เป็นเชิงสถิตินั่นเอง
วิธีการครอสเอนโทรปีนั้นสามารถแตกขั้นตอนที่สำคัญออกได้เป็นสองส่วน คือ
  1. ขั้นสุ่มตัวอย่าง (Generate) จะสร้างตัวอย่างจากความหนาแน่นของความน่าจะเป็นที่ได้มาจากการคำนวณในขั้นตอนวิธี
  2. ขั้นปรับปรุง (Update) ปรับพารามิเตอร์บางอย่าง เพื่อให้การสุ่มครั้งต่อไป ได้ตัวอย่างที่ดีขึ้นไปอีก

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

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

การใช้วิธี ครอส-เอนโทรปี ในปัญหาการประมาณค่า แก้

แนวคิด แก้

ในกรณีที่เราพยายามที่จะใช้วิธีครอส-เอนโทรปีเพื่อประมาณค่านั้น สามารถแปลงปัญหาเป็นสมการคณิตศาสตร์ของการประมาณหาค่าคาดหวังง่ายๆได้ดังสมการที่ (1)

  (1)

เมื่อ H คือฟังก์ชันที่เราต้องการประมาณค่า เรียกได้อีกอย่างหนึ่งว่า ฟังก์ชันของประสิทธิภาพของตัวอย่างสุ่ม
และ f คือฟังก์ชันของความหนาแน่นของความน่าจะเป็นของตัวแปรสุ่ม X

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

  (2)

โดยที่กำหนดให้

  เมื่อ  

เนื่องจาก g เป็นความหนาแน่นของความน่าจะเป็นที่เราเป็นคนสร้างขึ้น ทำให้การสุ่มตัวอย่างเป็นไปได้ง่ายกว่า f ดังนั้น เราจึงสามารถสุ่มตัวอย่างสุ่ม   ตามความหนาแน่นของความน่าจะเป็นของ g(x) ได้ง่ายกว่า ทำให้ประมาณค่าของ l ด้วยตัวประมาณค่าที่ไม่ลำเอียงได้ง่ายขึ้นตามสมการที่ (3)

  (3)

จากปัญหาการประมาณค่า ก็จะเหลือแค่ปัญหาว่าจะสร้างความหนาแน่นของความน่าจะเป็น g ที่ดีที่สุดได้อย่างไรซึ่งค่า g ที่ดีที่สุดในอุดมคตินั้นนิยามด้วย

 

แต่สิ่งที่เกิดขึ้นก็คือ เราสามารถหาค่า g*(x) ได้ยาก สำหรับวิธีครอส-เอนโทรปีนี้แทนที่จะมุ่งไปที่การหาค่าของ g*(x) จะพยายามหาค่าของ g ที่ทำให้ความแตกต่างระหว่าง g และ g* น้อยที่สุด ซึ่งความแตกต่างนั้นเองที่เรียกว่าครอส-เอนโทรปีตามที่เกริ่นไว้ในช่วงต้น ซึ่งครอส-เอนโทรปีของความหนาแน่นของความน่าจะเป็นของสองฟังก์ชันนั้น นิยามได้ดังสมการที่ (4)

  (4)
หลังจากที่ได้รู้หลักการคร่าวๆของวิธีการครอส-เอนโทรปีเพื่อการประมาณค่าในทางทฤษฎีไปแล้วว่าเป็นไปในลักษณะอย่างไร หากพิจารณาในทางปฏิบัติแล้วนั้นฟังก์ชัน f นอกจากจะแปรไปตามตัวแปรต้น x แล้ว ยังถูกควบคุมโดยพารามิเตอร์ u บางอย่าง ซึ่งสามารถเขียนฟังก์ชัน f ได้เป็น f(x; u) ซึ่งคงเดาได้ไม่ยากว่าบางกรณีนั้น พารามิเตอร์ u นี้หาได้ยากมาก เราจึงพยายามหาค่าของ g ที่ทำให้มี v ที่ทำให้ g(x) = f(x; v) และ v ทำให้ความแตกต่างของ f(x; v) และ f(x; u) น้อยๆ ซึ่งความแตกต่างนี้วัดโดยครอส-เอนโทรปีตามสมการที่ 4 นั่นเอง ก็จะทำให้ปัญหาเล็กลงอีกขั้นหนึ่งคือเป็นปัญหาที่จะพยายามหาค่าของ v ที่ดีที่สุดเท่านั้น ซึ่งนิยาม v ในอุดมคติว่า v* ลองไปแทนค่าของ f(x; v) และ f(x; u) ลงในสมการที่ (4) แล้วจัดรูปสักเล็กน้อยก็จะรู้ว่า v ที่ดีที่สุดจะทำให้   มีค่ามากที่สุดนั่นเอง ซึ่งการแก้ปัญหานี้ก็สามารถหาได้ตามสมการที่ (5)
  (5)

ซึ่งจากสมการที่ (5) R. Y. Rubinstein ได้นำเสนอวิธีสำหรับแก้ปัญหานี้ไว้แล้ว[4]
ในปัญหาเฉพาะที่ชื่อว่าปัญหาการหาความน่าจะเป็นของเหตุการณ์ที่พบเจอได้ยาก(rare event probability) ซึ่งเป็นปัญหาที่ประยุกต์ด้วยวิธีครอส-เอนโทรปีกันอย่างแพร่หลาย โดยเป็นกรณีเฉพาะที่ฟังก์ชัน H เป็นฟังก์ชันตัวชี้ของฟังก์ชัน   วัดที่ระดับ   ตามสมการ   ซึ่งในการประมาณค่าของ   ด้วยวิธีเดิมเพื่อหาความน่าจะเป็นที่   นั้นจะยากโดยดูได้จากสมการที่ (5) คือค่าของ   ส่วนมากจะมีค่าเป็น 0 ไปมากพอสมควรจะไม่สามารถประมาณหาค่าที่แม่นยำได้ วิธีการแก้ไขคือต้องทำวิธีการ ครอส-เอนโทรปีหลายๆรอบ หลายๆชั้น โดยจะปรับค่าพารามิเตอร์ v และระดับปัจจุบันให้เข้าใกล้ v* และ   ไปเรื่อยๆจนถึงเงื่อนไขยุติที่พอใจ สามารถเขียนขั้นตอนวิธีตามที่ได้อธิบายมาเป็นรหัสเทียมได้ดังนี้

รหัสเทียมสำหรับวิธีครอส-เอนโทรปีเพื่อประมาณความน่าจะเป็นสำหรับเหตุการณ์ที่พบเจอได้ยาก แก้

 1    และ 
 2  
 3 t = 0 /*ตัวนับจำนวนรอบ*/
 4
 5 ทำ
 6     t = t + 1
 7     สุ่มตัวอย่างสุ่ม   ตามความหนาแน่นของความน่าจะเป็น  
 8     สำหรับทุก i ตั้งแต่ 1 ถึง N
 9          
10     เรียงลำดับจากน้อยไปหามาก(S)        
11      
12       = ค่าต่ำสุด( , )
13     คำนวณ   จากสมการ (5) ด้วย   และ  
14 ระหว่างที่             
15
16 สุ่มตัวอย่างสุ่ม   ตามความหนาแน่นของความน่าจะเป็น  
17 คำนวณ   จากสมการ (3) ด้วย  
18 คืนค่า  

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

การใช้วิธี ครอส-เอนโทรปี ในปัญหาการหาค่าที่เหมาะสมที่สุด แก้

แนวคิด แก้

ให้   เป็นเซตของสถานะ และ S เป็นฟังก์ชันจริงซึ่ง S(x) จะให้ค่าความเหมาะสมของ x โดยที่ x เป็นสมาชิกของ   โดยค่า x ที่เหมาะสมที่สุดคือ x* ซึ่งจะทำให้ค่าของ S(x*) มีค่าสูงที่สุด สามารถเขียนเป็นปัญหาในรูปของสมการทางคณิตศาสตร์ได้ดังสมการที่ (6)

  (6)


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

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

รหัสเทียมสำหรับวิธีครอส-เอนโทรปีเพื่อใช้ในปัญหาการหาค่าที่เหมาะสมที่สุด แก้

 1    และ 
 2  
 3 t = 0 /*ตัวนับจำนวนรอบ*/
 4
 5 ทำ
 6     t = t + 1
 7     สุ่มตัวอย่างสุ่ม   ตามความหนาแน่นของความน่าจะเป็น  
 8     สำหรับทุก i ตั้งแต่ 1 ถึง N
 9          
10     เรียงลำดับจากน้อยไปหามาก(S)        
11      
12       = ค่าต่ำสุด( , )
13     คำนวณ   ที่ทำให้   สูงที่สุด
14 ระหว่างที่ ยังไม่ถึงเงื่อนไขยุติ
15
16 คืนค่า  

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

ตัวอย่างปัญหาที่สามารถประยุกต์ใช้วิธีการครอสเอนโทรปีได้ แก้

ปัญหาการหาเส้นทางเดินของพนักงานขาย (Traveling Salesman Problem) แก้

นิยามปัญหา แก้

ปัญหาการเดินของพนักงานขายคือปัญหาที่มีผู้ที่ให้ความสนใจพอสมควรในวงการคอมพิวเตอร์ ปัญหาจะกำหนดด้วยกราฟเชื่อมโยงประกอบด้วยปม n ชื่อว่า 1,2,...,n ปมซึ่งเชื่อมกันด้วยเส้นเชื่อมที่มีน้ำหนัก เส้นเชื่อมจากปม i ไปยังปม j จะมีน้ำหนัก  ให้ทำการหาเส้นทางซึ่งเป็นวงที่สั้นที่สุดซึ่งผ่านทุกปมและกลับมาที่จุดเดิม

แนวทางการแก้ปัญหา แก้

โดยไม่เสียนัยสำคัญทั่วไป ให้กราฟเป็นกราฟบริบูรณ์ ซึ่งจะมีบางเส้นเชื่อมที่มีน้ำหนักเป็น +∞ ให้   เป็นเซตของวงจรที่ผ่านทุกปม และให้   เป็นความยาวของวงจร   ปมละหนึ่งครั้งตามเงื่อนไข เราสามารถแทนแต่ละวงจรใน Χ ได้ด้วยการเรียงสับเปลี่ยน(permutation) ของปม 1,2,...,n ซึ่งจริงๆแล้วเราสามารถให้วงจร   โดยที่   ได้โดยไม่เสียนัยสำคัญทั่วไป เราสามารถแปลงปัญหาทางเดินของพนักงานขายได้เป็นสมการที่ (7)
  (7)

สังเกตว่าขนาดของสมาชิกใน   มีขนาดใหญ่มาก  

จากสมการที่ (7) จะเห็นว่าปัญหาเป็นลักษณะของการหาค่าที่เหมาะสมที่สุดซึ่งสามารถแก้ไขได้ด้วยวิธีการครอส-เอนโทรปี แต่แทนที่จะเป็นลักษณะของการหาค่าที่มากที่สุดจะต้องเปลี่ยนเป็นปัญหาการหาค่าที่น้อยที่สุด โดยหากจะแก้ปัญหาด้วยวิธีการครอส-เอนโทรปีนั้นเราจะต้องกำหนด
  1. จะสร้างเส้นทางแบบสุ่มอย่างไร?
  2. จะทำการปรับปรุงพารามิเตอร์ในแต่ละรอบการทำงานอย่างไร?
ก่อนที่จะหาวิธีการสร้างและปรับปรุงดังกล่าว จะขอนิยามเซตใหม่ขึ้นมาก่อน ให้
 

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

วิธีง่ายๆวิธีหนึ่งที่จะสร้างทางเดินสุ่ม   คือการสร้างลูกโซ่มาร์คอฟ(Markov Chain) ของกราฟ G เริ่มต้นที่ปม 1 และหยุดหลังจากขั้นที่ n ให้   คือเมตริกซ์ nxn เพื่อเปลี่ยนสถานะไปหนึ่งขั้นสำหรับลูกโซ่มาร์คอฟนี้ หรือจะพูดให้เข้าใจง่ายขึ้นเป็นภาษาทั่วไปก็คือเมตริกซ์ P จะเป็นส่วนที่ใช้เก็บเส้นทางเดินนั่นเอง กำหนดให้ในสมาชิกตามแนวเส้นทแยงมุมของ P เป็น 0 และสมาชิกอื่นๆใน P เป็นจำนวนจริงบวก ความหนาแน่นของความน่าจะเป็น   ของ   ที่ถูกจำกัดด้วยพารามิเตอร์เป็นเมตริกส์ P นิยามโดย

 (8)
เมื่อ   เป็นเซตของเส้นทางทั้งหมดที่ "จำนวนครั้ง" ที่ต้องเดินระหว่างปม i ไปปม j เป็น r ครั้ง

หลังจากนี้จะเริ่มเป็นการคำนวณเชิงคณิตศาสตร์ที่ซับซ้อนหากผู้สนใจสามารถไปศึกษาเพิ่มเติมได้ตามแหล่งอ้างอิง[5]

หากจะสรุปเฉพาะใจความสำคัญให้เข้าใจอย่างสั้นๆสามารถสรุปได้ว่าในขณะนี้เราจะแทนการเปลี่ยนสถานะจากปมปัจจุบันไปยังปมใดๆไ้ด้ด้วยเมตริกซ์ซึ่งก็คือ   นั่นเอง โดยเมตริกซ์นี้จะได้มาในแต่ละรอบที่ทำการสุ่มตัวอย่างและปรับปรุงพารามิเตอร์ ซึ่งทั้งสองขั้นตอนนี้สามารถทำได้โดย
  1. ขั้นสุ่มตัวอย่าง สามารถสุ่มตัวอย่างให้ได้ x ต่างๆได้ตามสมการที่ 8
  2. ขั้นปรับปรุง ปรับปรุงพารามิเตอร์   ของสมการที่ 8 ได้ด้วยตัวประมาณค่าของ   ตามสมการที่ (9)
  (9)

ซึ่งรายละเอียดการได้มาซึ่งสมการที่ 10 นั้นผู้สนใจสามารถไปค้นคว้าได้ตามแหล่งอ้่างอิงที่ได้ระบุไว้ข้างต้น

เมื่อเราสามารถนิยามว่าจะสุ่มตัวอย่างและปรับปรุงได้อย่างไรแล้วนั้น เราก็จะสามารถสร้างขั้นตอนวิธีเพื่อที่จะแก้ปัญหานี้ได้ดังรหัสเทียมด้านล่าง

รหัสเทียมสำหรับปัญหา แก้

 1  ตั้งค่า   และ  
 2  t = 0 /*ตัวนับจำนวนรอบ*/
 3  ทำ
 4        t = t + 1
 5        ตั้งค่าในในหลักที่   ของ   เป็น 0 
 6        ทำการทำค่าในแต่ละแถวของ   ให้เป็นมาตรฐาน(normalize) //เฉลี่ยค่าในแต่ละแถวให้รวมกันได้ 1 
 7        ใช้สมการที่ (8) สร้าง   ด้วยพารามิเตอร์  
 8        ทำการปรับปรุงค่าให้ได้   ในแต่ละแถว i และหลักที่ j ตามสมการที่ (9)
 9  ระหว่างที่ t < n-1 // ถ้ายังสร้างลำดับของทางเดินไม่ครบทุกจุด
10  คืนค่า  

ดูเพิ่ม แก้

โปรแกรมภาษา C++ ของ Shark Machine Learning Library เก็บถาวร 2013-11-18 ที่ เวย์แบ็กแมชชีน

อ้างอิง แก้

  1. R. Y. Rubinstein. The cross-entropy method for combinatorial and continuous optimization. Methodology and Computing in Applied Probability, 2:127–190, 1999.
  2. R. Y. Rubinstein. Combinatorial optimization, cross-entropy, ants and rare events. In S. Uryasev and P. M. Pardalos, editors, Stochastic Optimization: Algorithms and Applications, pages 304–358, Dordrecht, 2001. Kluwer.
  3. "Conference on the Occasion of R.Y. Rubinstein's 70th Birthday". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2010-09-30. สืบค้นเมื่อ 2011-09-29.
  4. R. Y. Rubinstein and D. P. Kroese. Simulation and the Monte Carlo Method. John Wiley & Sons, New York, second edition, 2007.
  5. Pieter-Tjerk de Boer. A Tutorial on the Cross-Entropy Method, P.25 - 27.