จาก pain point ที่สอบแล้วได้คะแนน 7/25
เลยอยากจะเข้าใจเนื้อหาที่เป็นพื้นฐานของ data science
บทความนี้จึงเป็นการเรียนซ้ำอีกรอบและพื้นฐานแบบย่อตามที่ตัวผมเองเข้าใจ
ดังนั้นแปลว่าอาจจะเข้าใจผิดได้ ถ้าใครเห็นอะไรแปลก ๆ ก็ทักได้เลยนะครับ
และข้อมูลส่วนใหญ่ตัดแปะมาจากในสไลด์ข้อมูลที่ได้เรียนมา
แต่ไม่ได้เอา source มาโดยตรงนะครับเพราะไม่รู้ว่าจะติดลิขสิทธ์ไหม
อีกทั้งการทำสรุปใช้เวลานานมาก เพราะต้องกลับไปเหมือนเรียนใหม่ให้เข้าใจจริง ๆ
ดังนั้นจะค่อย ๆ เพิ่มเติมเนื้อหานะครับ
และหากใครเห็นว่าตรงไหนผมเข้าใจผิดสามารถที่จะบอกได้เลยนะครับ
คือ เรามีข้อมูลหนึ่งชุด แล้วเราก็หาแนวโน้มข้องข้อมูล
โดยเราจะหาตัวแทนเป็นเส้นหนึ่งเส้นที่กลายเป็นตัวแทนของข้อมูลได้
ในและเมื่อเราได้ตัวแทนเส้นเส้นนั้นแล้วเราก็จะประมาณค่าในอนาคตหรือในอดีตได้

ที่มา https://statistics.laerd.com/spss-tutorials/linear-regression-using-spss-statistics.php
- simple and quite effective model when you normalize your data.
It will be easy to detect which features are important to the model and which are not.
The gradient descent is a numerical optimization method whichallows searching for a local minimum.

ที่มา https://www.ibm.com/cloud/learn/gradient-descent

ที่มา https://easyai.tech/en/ai-definition/gradient-descent/
Gradient descent is very similar to a rolling ball.
Stochastic gradient descent (often abbreviated SGD) is an iterative method for optimizing an objective function with suitable smoothness properties (e.g. differentiable or subdifferentiable). It can be regarded as a stochastic approximation of gradient descent optimization, since it replaces the actual gradient (calculated from the entire data set) by an estimate thereof (calculated from a randomly selected subset of the data). Especially in high-dimensional optimization problems this reduces the very high computational burden, achieving faster iterations in trade for a lower convergence rate. from wikipedia.com
จากตัวอย่างของช่อง StatQuest เขาได้บอกว่าถ้ามี features น้อย ๆ ใช้ในการคำนวน linear gradient descent ก็ไม่เป็นไร
แต่ถ้าหากว่าเราจะคำนวน Genetice feature ที่มี 23,000 ในการทำนายว่าใครจะเป็นเบาหวาน กับประชากร 1,000,000 คน
ถ้าคำนวนแค่ 1,000 step เราจะต้องคำนวน 23,000,000,000,000 ครั้ง ซึ่งมันอึกถึกและทนมาก
ดังนั้นการสุ่มมา 1 ค่า หรือสุ่มมากเป็น batch ที่มากกว่า 1 ค่าจะช่วยลดเวลาและปริมาณในการคำนวนได้เยอะมากประมาณ 3 เท่า
Advantages:
- Speeds up the training considerably
- Allows training on truly big data
- Can be used in a streaming setup when new data arrives over time
Disadvantages:
- May never converge or converge too slowly
- The solution may be unstable
Setp size be determined dynamically, affecting the outcome of the optimization.
- When the function value increases after a gradient step, the step-size was too large. Undothe step and decrease the step-size.
- When the function value decreases the step could have been larger. Try to increase the step-size.
Momentum optimizationalgorithm (a method of choosing the next weight vector w^(n+1) is defined as follows:
which lead to
Gamma is the learning rate and Alpha is the exponential decay factor determining how much the gradients from the previous steps affect the current step.
ค่า decay rate ที่ดีจะอยู่ที่ประมาณ 0.8-0.9
อันนี้เป็นที่เอามาจาก slide ที่สอน ถามว่าอ่านรู้เรื่องไหม? ตอบว่าไม่ ถถถ
อันนี้เอามาจากของ Andrew Ng ถามว่ารู้เรื่องไหม ตอบ 20%
เพราะอย่างน้อยก็เห็นว่า beta กับ 1-beta อยู่ด้วยกัน นั่นแปลว่า
ถ้าให้ใส่ค่าน้ำหนักให้ตัวนึกมาก แปลว่าค่าน้ำหนักอีกตัวจะน้อยลงทันที
และลุงเขาให้จินตนาการถึงการกลิ้งบอลลงในถ้วยขนาดใหญ่ เป็นการทำ gredient descent
ถ้าความเร่งของบอลไม่ลดลงเลยบอลก็จะไม่ยอมหยุดนิ่ง
ซึ่งตรงนั้นทำให้บอลไหลข้าม local minimum ไปสู่ global minimum ได้
แต่ที่เข้าใจสุดมากที่สุดมาจากของคุณพี่อินเดียท่านนี้
พี่เขาทำให้เห็นว่าถึงแม้จะเลือก gamma เป็น 0.5
ก็ไม่ได้แปลว่าเราจะสนใจทุกค่าเท่ากัน
แต่เราจะสนใจค่า b ล่าสุดมากที่สุด แล้วสนใจค่า b ก่อนหน้าก็ลดหลั่นตามกันไป
จากที่ไปดูมา momentum ก็จะเร็วกว่า SGD ขึ้นไปอีก
ที่มา https://deepai.org/machine-learning-glossary-and-terms/hyperplane
-Small enough (negligible) parameter change
-Small enough loss change
-Number of steps limit
ถ้ามีคนให้ function เรามา 1 function แล้วเราจะได้รู้ได้อย่างไรว่าค่าสูงสุดและค่าต่ำสุดของ function นั้นอยู่ที่เท่าไร?
แต่คนที่ให้ function เรามาเขายังแถม constrain หรือข้อจำกัดว่าต้องหาในค่าในช่วงนี้ถึงช่วงนี้เท่านั้นด้วย
เช่น เขาให้ function f(x) : xy+1 มา
แต่ให้หาค่าสูงสุดและต่ำสุดที่อยู่ในช่วง constrain วงกลมอันนึงมาคือ g(x) : (x^2+y^2)+1

จากรูปจะเป็น g(x) และ f(x)
ถ้าเราเอาทั้ง 2 function ที่ได้มาไปฉายลงในกราฟ 2 มิติซ้อนกันเราจะได้หน้าตาประมาณนี้

เราก็จะได้รูปทรงคล้าย ๆ กับถ้วยหนึ่งถ้วยไว้
ซึ่งถ้าข้อมูลมันเป็น 2 มิติ เราก็ง่ายหน่อย ในการหา absolute max และ absolute min
โดยเราจะหาได้จากด้านซ้ายสุดหรือขวาสุด
ถ้ากลายเป็น 3 มิติ ค่า domain ของเราก็จะกลายถ้วยและมันก็มีจุดที่เป็นค่าอนันต์
ซึ่งส่วนใหญ่ในชีวิตจริงมิติของข้อมูลจะมีมากกว่า 3
● Lagrange multipliers
จากตอนที่ 1 เราจะรู้ว่าจุดสูงสุดและต่ำสุดของ function ค่าความชันจะเป็น 0
แต่ในการใช้ Lagrange เราต้องเขียน constrain ให้อยู่ในรูปของ g(x, y) = k
โดย g=multi-variable function, k=constant
แล้วถ้าเรารูปที่เรา visualize จาก สมการที่ 1 ตอนแรกมาตัดแบ่งตามความสูงของ z ซึ่งเราก็จะได้รูปประมาณด้านล่าง
โดยที่เราจะรู้ค่าความสูงที่จุดไหนเป็นจุดสูงสุด และจุดไหนเป็นจุดต่ำสุดของ function
ถ้าเราค่อย ๆ เลื่อน z สูงขึ้นไปเรื่อย ๆ ไปจุดไหนแล้วไม่ตัดกราฟแปลว่าเราเลยแล้ว
ดังนั้นจุดสุดท้ายที่ยังติดกับกราฟ constrain อยู่นั่นเราจะเดาได้ว่านั่นคือจุดสูงสุด

ที่มา https://www.youtube.com/watch?v=5A39Ht9Wcu0
ซึ่งเราก็จะเห็นได้ว่าสมการแรกกับสมการที่ 2 จากรูปสีส้มด้านบนหน้าตาไม่เหมือนกัน
แต่การมาตัดสมการที่เป็น g(x) หรือ constrain มันช่วยอะไรเราได้บ้าง?
ที่มา https://www.youtube.com/watch?v=5A39Ht9Wcu0
ถึงแม้ว่า f(x) และ g(x) แทบจะไม่มีอะไรที่เหมือนกัน
แต่จุดที่ f(x) ตั้งจากกับแกน x เรารู้แน่นอนว่าจุดนั้นมีความชันเป็น 0
ซึ่งแน่นอนว่าหากมันไม่ใช่ "จุดสูงสุด" ก็เป็น "จุดต่ำสุด" อย่างแน่นอน
เช่นเดียวกันกับ g(x) จะต้องตั้งฉากกับแกน x ตรงที่ความชันเป็น 0
ซึ่งเมื่อทั้ง f(x) และ g(x) มีความชันเป็น 0 เหมือนกัน
แปลว่าจุดนั้น f(x) และ g(x) ขนานกัน
ดังนั้นเราจึงได้สมการ Largrange multipliers
ซึ่งตัว multipliers ก็คือค่า lambda แต่นั่นก็ไม่ใช่สาระสำคัญ
เพราะเป็นเพียงตัวบอกว่า f(x) และ g(x) ขนานกันกี่เท่าเฉย ๆ
ทำต่อไปเรื่อย ๆ เราก็จะได้สมการแบบนี้
ในกรณีแรกที่ y = 0 แล้ว x = 0 รูปร่างที่ได้มันไม่ใช่รูปร่างวงกลมที่เราต้องการ
ดังนั้นจึงเหลืออีก 1 กรณีนั่นก็คือ y ไม่ใช่ 0 และเอาค่า lambda ไปแทน
เราก็จะได้ความสัมพันธ์ระหว่าง x และ y
และเราก็จะได้จุดมา 4 จุด
ถ้าเราเอาจุด 4 จุดไปแทนในกราฟ จริง ๆ เราก็จะได้จุดสูงสุดและต่ำสุดตามรูป

หรือจะไป plot เล่นเองก็ได้ https://c3d.libretexts.org/CalcPlot3D/index.html
คือจริง ๆ ค่อนข้างเจ็บปวดนะที่ไม่เข้าใจ
แล้วด้านล่างคือไสลด์ที่เรียนในห้อง บอกเลยว่าอ่านอีก 1,000 รอบก็ไม่เข้าใจ
คือที่ไม่เรียนจากอินเตอร์เน็ตมาคือด้านบนแล้วเอามาสรุป

คำว่า duality ทางคณิตศาสตร์หมายถึง
เราสามารถที่จะมองสิ่งใดสิ่งหนึ่งจาก 2 มุมมองได้

ที่เขาเขียนแบบนี้ต้องมีคนเข้าใจแหละ แต่ผมคนนึงที่ไม่เข้าใจ 555
ถ้าเขาเขียนผิดผมก็บอกไม่ได้ว่าผิดตรงไหน 555
ก่อนที่เราจะเอา lagrangian ไปช่วยในการทำ gradient descent ได้
เราจะต้องรู้อีกเรื่องนึงก็คือ เงื่อนไขของ Karush-kuhn-Tucker ต้องเป็นจริงก่อน
โดย x optimal ก็ต่อเมื่อมี 3 เงื่อนไขนี้
เงื่อนไขแรกคือ g(x) >= 0 หมายถึง x ต้องมากกว่าหรือเท่ากับ 0
เงื่อนไขที่สองคือ u >= 0 หมายถึง scalar u ต้องไม่เป็นค่าติดลบ
นั่นแปลว่า f(x) และ g(x) ต้องไม่มี negative coefficients ที่เป็นสัดส่วนกัน
เพราะถ้าเราสามารถที่จะลดค่า g(x) ได้โดยที่ไม่ต้อง optimal ค่า f(x) มันก็ผิดวัตถุประสงค์ของเรา
เพราะเราอยากได้ค่าที่เป็นจุดต่ำสุดหรือจุดสูงสุดของ f(x)
และเงื่อนไขสุดท้าย ug(x)=0 หมายถึง ถ้าสุดท้ายเราเจอค่า x และ u ที่เหมาะสม
มันจะไม่ส่งผลต่อค่า optimal value ในการหาค่า minimization ของเรา
แปลว่า f(x) จะไปวิ่งไปเจอค่าที่ความชันเป็น 0 จริง ๆ
เมื่อทั้ง 3 เงื่อนไขเป็นจริงแล้ว เราค่า Max(lambda >=0) min(x) ของ Lagrangian duality ได้โดย
1) หาค่า x ที่น้อยที่สุดก่อนโดยให้ค่า lambda(u เพราะเอามาจากหลายตำราอาจจะงง ๆ ตัวแปรหน่อย) เป็นค่าคงที่
2) คำนวนหา gradient โดยขยับไปทีละ labmda step
Since L(x, lambda) is concave function f(lambda), this is guaranteed to converge.
จริง ๆ เรื่อง Lagrangian duality และก็ Karush-Kuhn-Tucker conditions ใช้เวลาเขียนเกือบ 2 วัน
แต่บอกได้เลยว่ายังไม่ได้เข้าใจถึงแก่นจริง ๆ ตอนนี้เข้าใจแค่ concept คร่าว ๆ
แล้วจะตัดจบตอนนี้ไว้ที่นี่เลย แล้วจะได้ขึ้น probability ไว้ตอนใหม่เลย แยกอ่านกันง่าย ๆ
เวลาเลื่อนหาจะได้ไม่ต้องเลื่อนนาน ตอนที่ 3
นักเรียนที่ทำสรุปวิชาคณิตศาสตร์ที่เคยได้เรียน