ในวัน 14 มีนาคม 2561 ซึ่งตรงกับวัน Pi และ วันเกิดของ Albert Einsteinที่ผ่านมานี้ โลกเราได้สูญเสียบุคลากรที่มีคุณูประกาศต่อโลกยิ่งอย่าง ศ. Stephen Hawking ไปอย่างไม่มีวันกลับแม้จะใช้ชีวิตทั้งชีวิตทำงานกับเรื่องของ ฟิสิกห์จักรวาลแต่ตลอดชีวิต ศ. Hawking ท่านอยากไปอวกาศซักครั้ง เคยได้ไปใกล้เคียงสุดก็แค่ ขึ้นเครื่อง Boeing 727 ไปจำลองสภาพไร้แรงโน้มถ่วงเมื่อปี 2007ทั้งนี้ทั้งนั้น ศ. Hawking ได้เคยบอกไว้ว่า “การไปอวกาศ คือความปรารถนาที่ยังไม่ถูกเติมเต็ม”

ศ. Stephen Hawking กับหนึ่งในวันที่มีความสุขที่สุดในชีวิต

น่าเสียดายที่วันนี้ท่านได้จากเราไปโดยไม่มีวันกลับแล้ว แต่เราสามารถพาท่านอย่างน้อยก็ในรูปภาพไปอวกาศได้เ้วย Style Transfer ซึ่งเป็นเทคนิคของ Deep Convolution Neural Network เพื่อทำการวาดรูป ศ. Stephen Hawking ด้วย Style กาแลคซี่กันเถอะ

Style Transfer คืออะไร

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

รูปบนเป็นการนำรูปเมืองเปอเซียโปลิช ของอาญาจักรเปอร์เซีย มาวาดใหม่ด้วย Style ของรูป The Starry Night ของ Van Gogh ผลทีได้ก็คือเมืองที่วาดด้วย Style ของ Van Gogh นั่นเอง(สวยเนอะ)

แต่ในวันนี้ผมจะมาวาดรูป Stephen Hawking ให้ไปอยู่ท่ามกลางอวกาศด้วยการใช้เทคนิคเดียวกันนี้ครับ





Our Content, Style and Output

เราจะใช้ Content เป็นรูป ศ. Hawking และ Style เป็นรูป Galaxy

ผลลัพธ์ที่ได้เป็นการ Mix ระหว่าง ศ. Hawking และ Galaxy

Explanation of Style Transfer

ก่อนอื่นเราก็โหลด VGG-16 หรือ VGG-19 โมเดล CNN อันโด่งดังมาก่อนครับ แล้วก็โหลดค่า Pre-Train ของ Weight และ Bias มาด้วย

โมเดล VGG-16

Pre-Train คือโมเดลที่นักวิจัยรุ่นคนอื่นๆเค้าได้เทรนโมเดลด้วยรูปภาพมหาศาลมาแล้ว เพื่อให้ได้โมเดลที่ได้เรียนรู้ฟีเจอร์ของรูปภาพและเก็บ Weight และ Bias มาแล้ว มาแจกจ่ายให้เรา ได้โหลดมาใช้งานได้ง่ายๆไม่ต้องมานั่งเทรนเองทั้งหมด อันนี้เรียกว่า Transfer Learning ครับ

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

Layer 1 จะ Detect ได้เป็นฟีเจอร์ที่ไม่ละเอียดเท่าไหร่ เช่น ขอบ เส้น รูปแบบต่างๆ ที่เป็นอย่างนี้เพราะว่า Layer 1 มันไปเชื่อมต่อกับข้อมูลเท่านั้นเองครับจึงยังไม่มี การ Combination ของฟีเจอร์ซักเท่าไหร่

Layer 3 เราจะเห็นว่า โครงข่ายสามารถตรวจพบ ฟีเจอร์อย่าง แอปเปิล คน 9ล9 แล้ว ก็เพราะว่าในชั้นนี้มีการ Combination ระหว่าง Layer แล้วนั่นเอง

จะทำ Style Transfer มันต้อง MIX ระหว่าง Content และ Style

เนื่องจากการทำ Style Transfer มันคือการที่จะทำภาพใหม่ออกนั้น ต้องทำให้ภาพใหม่เหมือนทั้ง Content และ Style โดยการเอาทั้งสองมา Mix กันครับ การจะทำแบบนั้นได้เราต้องดูก่อนจะเอาอะไรมา Mix

Content

ในส่วนของ Content ถ้าเป็น Layer ล่างๆ เช่น Layer 1 มันก็จะเป็นบอกโครงข่ายว่ารูปที่ออกมามันจะค่อนข้างเหมือนของเดิมเลยครับ เพราะ Layer แรกๆมันก็จะเรียนรู้พวกขอบ เส้นต่างๆใช่ไหมครับ มันก็กำหนดให้ฟีเจอร์พวกนั้นออกมาเป็น Output ค่อนข้างคล้ายกับรูปต้นฉบับ แบบ Pixel เลย แต่ถ้าเราใช้ Layer ลึกๆ ลงไปมันก็อาจจะทำแต่ Feature ใหญ่ๆเช่น แอปเปิล แมว หมา คน ในรูปนั้นนั่นเอง แล้วการหา ว่า Content และ Output เหมือนหรือต่างกันอย่างไรนั้นเราดูได้ที่ Activation ใน Layer นั้นๆครับ ถ้าใกล้เคียงกันก็แปลว่ารูปภาพต้องออกมาใกล้เคียงกันแล้วล่ะ

ตัวนี้เป็นรูป ศ. Hawking จาก VGG-16 เราสามารถพูดได้คร่าวๆว่า เรากำลังดีไฟน์ว่าส่วนไหนกันแน่ที่เป็นโครงสร้างหลักของรูปภาพที่ต่อไปเราจะนำไป Mix กับ Style ครับ

Style

คล้ายๆกับด้านบนครับ ถ้าเป็น Layer ล่างๆมันก็จะจดจำแต่ฟีเจอร์เล็กๆ พวก ขอบเส้นเหมือนกัน ถ้าบน ก็จดจำฟีเจอร์ใหญ่ๆ พวก คน หมา แมว อะไรเทือกนี้เหมือนกัน แต่มันต่างกันหน่อยตรงนี้การหา Style นั้นเราต้องหา Correlation บน Activation ของแต่ล่ะ Chanel ครับ ว่า Activation ของ Chanel ไหนบ้างที่ Activation พร้อมกัน(Chanel หลังจาก Filter มันจะมีหลายตัว) อธิบายใหเข้าใจง่ายๆหน่อยก็คือมันจะหาว่าฟีเจอร์(สมมุติว่าเป็นเส้นตรง)จาก Activation ตัวหนึง จะปรากฎตัวพร้อม ฟีเจอร์อีกตัว(สมมุติว่าเป็นวงกลม)จาก Activation อีกตัวในอีก Chanel หรือไม่นั่นเอง มันจะเก็บเป็น

Style ของรูป Galaxy

เนื่องจากการทำ Style Transfer มันเป็นการสร้าง Art เราสามรถเลือกได้เลยว่าจะ Mix Content และ Style ใน Layer ไหนบ้างไม่มีผิดไม่มีถูก อยากได้ Output แบบไหนก็เลือกแบบนั้นเถิดหนาออเจ้า

Cost Function ของรูป Output จะต้องมาจากการคิดร่วมกันระหว่าง Cost Function ของสองสิ่งคือ

  • Cost Function ของ Content ที่มาจาก L(Content,Output) คือ Output ที่ได้มีความต่างกับรูป Content ต้นฉบับแค่ไหน ถ้าต่างมากค่าก็มากใช่ไหมครับ อัลกอริทึ่มก็จะพยายามรันเพื่อลดค่า Error ตรงนี้ให้ Output ใหม่ที่ออกมามีค่าความจากจากรูปต้นฉบับน้อยลง
  • Cost Function ของ Style ที่มาจาก L(Content,Output) Output ที่ได้มีความต่างกับรูป Style ที่เราเลือกแค่ไหน ถ้าต่างมากรูปมันก็จะไม่เหมือน Style น่ะสิ่ ฉะนั้นก็เหมือนกับตัวบน มันก็จะลด Error จนรูปที่สร้างออกมาใหม่เหมือน Style ด้วย
  • เมื่อ Cost Function ของ Output มาจาก การลด Cost ของทั้ง Content และ Style รวมกันย่อมแปลว่าเป้าหมายของอัลกอริทึ่มนี้คือการสร้างรูปใหม่ที่ต้องเหมือนทั้งรูปต้นฉบับ Content และ Style นั่นเอง นั่นเป็นเหตุผลให้เราได้ภาพใหม่เป็นรูปใหม่วาดใน Style ที่เราต้องการนั่นแหละครับ ดังสมการต่อไปนี้

เป็นสมการจากเปเปอร์ต้นฉบับของผู้คิดค้นเอง(มีลิงค์ให้อ่านด้านล่าง) Ltotal ก็คือ Cost Function ของ Output ที่ผมพูดถึงนี่แหละครับ ส่วน Lcontent กับ Lstyle ก็คือ Cost Function ของ Content และ Cost Function ของ Style ตามลำดับโดยมีถ่วงน้ำหนักด้วยด้วย Hyperparameter สองตัวคือ Alpha(ถ่วงน้ำหนัก Lcontent) และ Beta(ถ่วงน้ำหนัก Lstyle) ตรงนี้อาจารย์ Andrew Ng บอกว่ามันจะเป็นการซ้ำซ้อนหน่อยเพราะสามารถใช้ตัวเดียวก็ได้ แต่จริงๆมันก็สำคัญที่จะถ่วงน้ำหนักของ Cost ทั้งสองตัวเพื่อที่ให้ Freedom เราที่จะกำหนดดรีกรีความเหมือนของ Style หรือ Content มากกว่ากันครับ แต่ที่อาจารย์เค้าพูดก็ไม่ได้ผิด เพราะเรากำหนด สมมุติแค่ Alpha >1 ขึ้นไปมันก็เป็นการบอกแล้วว่าจะให้น้ำหนักของ Content มากกว่า Style เช่นกันครับ

ตอนที่เรารันโครงข่ายแต่ละ Epoch ค่า Cost Function ของ Output ก็จะถูกลดลงไปเรื่อยๆ รูปภาพจะค่อยๆเหมือนขึ้นเรื่อยๆตัวอย่างเช่น

รูปตั้งต้น Content และ Style

Output ของแต่ล่ะ Epoch จะเห็นว่าภาพค่อยๆถูกปรับให้เหมือนกับ Content และ Style เรื่อยๆ

Cost Function ใน แต่ละ Epoch

สุดท้ายนี้ RIP. Stephen Hawking ขอบคุณสำหรับทุกอย่างครับ ถ้าวัยเด็กไม่ได้นั่งอ่าน A Brief History of Time และ ค้นเจออาจารย์พร้อมทั้งเรื่องราวต่างๆที่เป็นกำลังใจในวันนั้น ตอนนี้เราก็คงไม่ได้ใช้ชีวิตแบบทุกวันนี้แน่นอน

Ref.

เปเปอร์ต้นตำหรับของ คุณ Leon A. Gatys, Alexander S. Ecker, Matthias Bethge “A Neural Algorithm of Artistic Style”

https://arxiv.org/abs/1508.06576