เปิดม่าน Deep Learning (2) : Neural Network – Learning rate

จากบทความชุด

เปิดม่าน Deep Learning (1) : Neural Network – Perceptron

เราได้จบบทความนั้นเอาไว้ที่ปัญหาที่ perceptron หรือ neuron มีความ sensitive ต่อข้อมูลสอนมากเกินไป จนเกิดปัญหาในลักษณะของ overfitting กับข้อมูลสอน ดังรูป

Screen Shot 2017-06-21 at 12.10.07

จากรูป เป็นการทำงานของนิวรอนแบบไม่มีค่า Learning Rate จะเห็นได้ชัดเจนว่าในการสอนนิวรอนครั้งที่ 1 ด้วยข้อมูลสอน input 1 นิวรอนปรับตัวอยู่ใกล้กับข้อมูลสอนนั้นมาก (ค่าคำตอบที่ได้ค่อนข้างจะเฉพาะเจาะกับข้อมูลนี้มาก) ต่อมาเราจึงทำการสอนด้วย input 2 เราจะเห็นว่านิวรอนปรับตัวอย่างเร็วเข้าหา input 2 โดยแทบจะลืมการสอนในครั้งแรกไปเลย กลายเป็นค่าคำตอบเปลี่ยนไปเฉพาะเจาะกับกับ  input 2 แทน

ปัญหาในลักษณะนี้อันตรายมาก เนื่องจากคำตอบของนิวรอนในลักษณะนี้ ทำให้ข้อมูลที่เข้ามาใหม่มีโอกาสเกิดการผิดพลาดได้สูง ดังรูป

Screen Shot 2017-06-21 at 12.15.36.png

จากรูปจะเห็นได้ว่า ถ้าเส้นคำตอบมีค่าเฉพาะเจาะจงกับข้อมูล input 1 มาเกินไป ข้อมูล class 0 (Benign = ปกติ)  ที่เข้ามาภายหลัง (วงกลมสีเขียวอ่อน)  มีโอกาสจะถูกทำนายผิดเป็น class 1 (Malignant = มะเร็ง) ได้สูงมาก

เช่นเดียวกันกับถ้าเส้นคำตอบไปเฉพาะเจาะจงกับ input 2 มากเกินไป ข้อมูล class 1 (Malignant = มะเร็ง) ที่เข้ามาก็มีโอกาสจะถูกทำนายผิดเป็น class 0 (Benign = ปกติ) ได้ เรียกว่า “False Negative” ซึ่งการทำนายผิดในลักษณะนี้ต้องระวังค่ะ เพราะถือเป็นความผิดที่อันตรายมาก และรับไม่ได้ในปัญหาบางประเภท เช่น การทำนายก้อนเนื้อมะเร็ง เป็นต้น เนื่องการทำนายก้อนเนื้อมะเร็ง เป็น ก้อนเนื้อปกติ ทำให้ผู้ป่วยพลาดโอกาสในการรักษาได้ ดังรูป

Screen Shot 2017-06-21 at 12.26.14

เห็นถึงปัญหากันแล้วนะคะ ในบทความนี้เราจะมาดูวิธีการแก้ปัญหานี้ด้วยการเพิ่ม Learning rate เข้าไปให้กับ perceptron กันค่ะ

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

ค่า  Learning Rate ปกติจะเป็นค่าเล็กๆ อยู่ระหว่าง [0-1] เดี๋ยวเรามาลองเปรียบเทียบการทำงานของนิวรอนในแบบที่มีการใช้ค่า Learning rate กับ  ไม่มีกันค่ะ ว่านิวรอนมีการเรียนรู้แตกต่างกันอย่างไร

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

เปิดม่าน Deep Learning (1) : Neural Network – Perceptron

เปรียบเทียบการทำงานของนิวรอน with/ without Learning Rate.

Step 1 : เตรียม input เพื่อใช้เป็นข้อมูลสอน  (Training set) เพื่อใช้สอนนิวรอน

เราจะสอนนิวรอนด้วยข้อมูลเดียวกับบทความที่แล้ว ดังนี้

Screen Shot 2017-06-10 at 23.19.51

Step 2 : อ่านข้อมูลสอนแถวแรก (x,y) = (2,2) และ Random คำตอบแรก

ในขั้นตอนนี้ นิวรอนทั้งสองแบบจะได้คำตอบจากการสุ่ม ดังนั้นเราจะกำหนดให้ได้คำตอบเดียวกันในการสุ่มครั้งแรกคือ  A = 3.5 ดังนั้น เส้นตรงที่ได้คืะ  y=0.35x  เพื่อให้ง่ายต่อความเข้าใจ เส้นคำตอบจึงเป็นเส้นเดียวกันดังรูปด้านบน

Screen Shot 2017-06-21 at 13.56.40

Step 3 :  คำนวณค่า error

ในขั้นนี้ การทำงานก็ยังจะเหมือนกันทั้งสองนิวรอน เนื่องจากในขั้นตอนนี้ค่า Learning Rate นั้น ยังไม่มีการถูกเรียกใช้เลย

Screen Shot 2017-06-21 at 13.55.48

Step 4 :  Adjust ค่า A  ด้วยการ evaluate ค่า error ในขั้นตอนที่ 3

ขั้นตอนนี้ถือเป็นขั้นตอนที่สำคัญมาก เนื่องจากเป็นขั้นตอนที่ค่า ​Learning Rate ได้เข้ามามีบทบาทในการปรับค่า A โดย  ดังนี้

Screen Shot 2017-06-21 at 13.54.51

มาดูเส้นคำตอบที่ 2  ที่ได้จากการปรับนิวรอนด้วยข้อมูลสอนแรกกันค่ะ

Screen Shot 2017-06-21 at 14.10.24.png

จะเห็นได้ว่า

– เส้นคำตอบใหม่ที่ได้จากนิวรอนที่ มี Learning Rate ซึ่งในที่นี้เรากำหนดให้มีค่าเท่ากับ  0.5 การเรียนรู้จึงช้ากว่า นิวรอนที่ไม่มี Learnign Rate

– เส้นที่ได้จากนิวรอนที่ มี Learning Rate ก็จะค่อยๆ ปรับช้าๆ ขึ้นมา ถึงแม้เส้นที่ได้จะยังไม่สามารถแบ่งข้อมูลได้ แต่ก็ไม่มีความ sensitive ต่อข้อมูล สูงเหมือนนิวรอนแบบไม่มีการปรับด้วย  Learning Rate

Step 5 :  สอนนิวรอนด้วยข้อมูลแถวที่ 2 (x,y) = (3,4) และหา error

Screen Shot 2017-06-21 at 14.19.40

Step 6 :  Adjust ค่า A  ด้วยการ evaluate ค่า error ในขั้นตอนที่ 5

Screen Shot 2017-06-21 at 14.40.00.png

เส้นคำตอบที่ได้เป็นดังนี้

Screen Shot 2017-06-21 at 14.49.37.png

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

Screen Shot 2017-06-21 at 15.06.22

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

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

13062103_233130583716199_6224283738921716075_n
Enjoy neural network!

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s