fbpx
วิกิพีเดีย

การเคลื่อนลงตามความชัน

การเคลื่อนลงตามความชัน (Gradient Descent Algorithm) เป็นอัลกอริทึมที่ใช้หาค่าที่เหมาะสมที่สุดให้กับฟังก์ชั่นที่กำหนดขึ้นมา โดยอัลกอริทึมใช้การวนหาค่าที่ทำให้ค่าต่ำสุดจากการคำนวณจากความชันที่จุดที่เราอยู่แล้วพยายามเดินทางไปทางตรงข้ามกับความชันที่คำนวณขึ้นมา

ขั้นตอนการทำงาน

1.กำหนดฟังก์ชันที่ต้องการหาค่า ยกตัวอย่างเช่น ฟังก์ชันแคลคูลัส   ซึ่งมีค่าความชัน (gradient) เท่ากับ  

2.เราสามารถเริ่มที่จุดใดๆก็ได้บนพาราโบลา เช่นถ้าเราสุ่มค่าเริ่มต้นออกมาที่   เราจะหาจุดต่ำสุดโดยดูจุดที่เราอยู่แล้วเลื่อนไปทางตรงข้าม ทำแบบเดียวกันหลายครั้ง x ก็จะลู่เข้าสู่จุดต่ำลงเรื่อยๆ และสิ้นสุดเมื่อถึงค่า  ที่ slope มีค่าเท่าศูนย์

3.ให้   (n_iter) คือ จำนวนครั้งที่เราวนหาค่า   อัลกอริทึมที่หาจุดต่ำสุดของ   สามารถเขียนได้ดังนี้  

โดยค่า 𝛼 คือค่าการลู่เข้า ยิ่งมีค่ามากจะยิ่งลู่เข้าเร็ว แต่ถ้ามากเกินไป การอัพเดทครั้งถัดไปจะทำให้ค่า   มีค่ามากเกินไปจนลู่ออกไปถึงอนันต์ก็ได้

ความซับซ้อนในการทำงาน

ความซับซ้อนของอัลกอริทึมการเคลื่อนลงตามความชันมีค่าเท่ากับ Big(O ) = O(n)

  • Best case คือ จำนวนการวนรอบที่น้อยที่สุด
  • Worst case คือ จำนวนวนรอบที่มากที่สุด

ตัวอย่างการเขียนโปรแกรม

จากตัวอย่างข้างต้น เราสามารถเขียนโปรแกรมภาษา Python เพื่อหาค่า   ที่ทำให้   มีค่าต่ำที่สุดโดยใช้อัลกอริทึมการเคลื่อนลงตามความชันได้ดังนี้

 def gradient(x, n_iter, alpha):  J = []  def compute_cost(x):  """  ฟังก์ชันที่เราต้องการทำให้มีค่าต่ำที่สุด  """  J = x ** 2 - 4 * x  return J   def compute_grad(x):  """  ฟังก์ชันคำนวณหาความชันเมื่อได้รับค่า x  """  grad = 2 * x - 4  return grad   # n_iter เป็นจำนวนครั้งที่เราอัพเดทค่า x จนไปถึงจุดต่ำที่สุด  for i in range(n_iter):  x = x - alpha * compute_grad(x)  J.append(compute_cost(x))  return x, J[-1] 

นอกจากจะใช้วิธีการทั่วไปแล้ว เรายังสามารถใช้ไลบรารี่ Pytorch (เวอร์ชัน 0.4.1) ร่วมกับ autograd เพื่อคำนวณหาค่า   ที่ทำให้   มีค่าต่ำที่สุดได้เช่นกัน โดย autograd สามารถประมาณความชันได้โดยที่เราไม่ต้องคำนวณหาความชันของฟังก์ชันด้วยตัวเอง

import torch x = 10 * torch.ones(1) x.requires_grad_(True) # ตั้งค่าให้ x สามารถคำนวณหา gradient ได้ out = torch.sum(x * x - 4 * x) # cost function print(x) # สมมติค่าเริ่มต้นที่ x = 10 # gradient descent alpha = 0.02 for _ in range(1000): out.backward(retain_graph=True) # calculate gradient using x.data.sub_(alpha * x.grad.data) # x = x - alpha * f'(x) x.grad.data.zero_() # setting gradient back to zero again print(x) # สุดท้ายแล้วจะได้ค่า x = 2 ที่ทำให้ฟังก์ชันมีค่าต่ำที่สุด 

อ้างอิง

  1. https://tupleblog.github.io/gradient-descent-part1/ https://lukkiddd.com/%E0%B9%80%E0%B8%94%E0%B8%B4%E0%B8%99%E0%B8%A5%E0%B8%87%E0%B9%80%E0%B8%82%E0%B8%B2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-gradient-descent-algorithm-7db99092b981

การเคล, อนลงตามความช, gradient, descent, algorithm, เป, นอ, ลกอร, มท, ใช, หาค, าท, เหมาะสมท, ดให, บฟ, งก, นท, กำหนดข, นมา, โดยอ, ลกอร, มใช, การวนหาค, าท, ทำให, าต, ำส, ดจากการคำนวณจากความช, นท, ดท, เราอย, แล, วพยายามเด, นทางไปทางตรงข, ามก, บความช, นท, คำนวณข, . karekhluxnlngtamkhwamchn Gradient Descent Algorithm epnxlkxrithumthiichhakhathiehmaasmthisudihkbfngkchnthikahndkhunma odyxlkxrithumichkarwnhakhathithaihkhatasudcakkarkhanwncakkhwamchnthicudthieraxyuaelwphyayamedinthangipthangtrngkhamkbkhwamchnthikhanwnkhunma enuxha 1 khntxnkarthangan 2 khwamsbsxninkarthangan 3 twxyangkarekhiynopraekrm 4 xangxingkhntxnkarthangan aekikh1 kahndfngkchnthitxngkarhakha yktwxyangechn fngkchnaekhlkhuls f x x 2 4 x displaystyle f x x 2 4x sungmikhakhwamchn gradient ethakb f x 2 x 4 displaystyle f x 2x 4 2 erasamartherimthicudidkidbnpharaobla echnthaerasumkhaerimtnxxkmathi x 10 displaystyle x 10 eracahacudtasudodyducudthieraxyuaelweluxnipthangtrngkham thaaebbediywknhlaykhrng x kcaluekhasucudtalngeruxy aelasinsudemuxthungkha x displaystyle x thi slope mikhaethasuny3 ih k displaystyle k n iter khux canwnkhrngthierawnhakha x displaystyle x xlkxrithumthihacudtasudkhxng f x x 2 4 x displaystyle f x x 2 4x samarthekhiyniddngni x k 1 x k a f x k displaystyle x k 1 x k alpha f x k odykha 𝛼 khuxkhakarluekha yingmikhamakcayingluekhaerw aetthamakekinip karxphedthkhrngthdipcathaihkha x displaystyle x mikhamakekinipcnluxxkipthungxnntkidkhwamsbsxninkarthangan aekikhkhwamsbsxnkhxngxlkxrithumkarekhluxnlngtamkhwamchnmikhaethakb Big O O n Best case khux canwnkarwnrxbthinxythisud Worst case khux canwnwnrxbthimakthisudtwxyangkarekhiynopraekrm aekikhcaktwxyangkhangtn erasamarthekhiynopraekrmphasa Python ephuxhakha x displaystyle x thithaih f x x 2 4 x displaystyle f x x 2 4x mikhatathisudodyichxlkxrithumkarekhluxnlngtamkhwamchniddngnidef gradient x n iter alpha J def compute cost x fngkchnthieratxngkarthaihmikhatathisud J x 2 4 x return J def compute grad x fngkchnkhanwnhakhwamchnemuxidrbkha x grad 2 x 4 return grad n iter epncanwnkhrngthieraxphedthkha x cnipthungcudtathisud for i in range n iter x x alpha compute grad x J append compute cost x return x J 1 nxkcakcaichwithikarthwipaelw erayngsamarthichilbrari Pytorch ewxrchn 0 4 1 rwmkb autograd ephuxkhanwnhakha x displaystyle x thithaih f x x 2 4 x displaystyle f x x 2 4x mikhatathisudidechnkn ody autograd samarthpramankhwamchnidodythieraimtxngkhanwnhakhwamchnkhxngfngkchndwytwexngimport torch x 10 torch ones 1 x requires grad True tngkhaih x samarthkhanwnha gradient id out torch sum x x 4 x cost function print x smmtikhaerimtnthi x 10 gradient descent alpha 0 02 for in range 1000 out backward retain graph True calculate gradient using x data sub alpha x grad data x x alpha f x x grad data zero setting gradient back to zero again print x sudthayaelwcaidkha x 2 thithaihfngkchnmikhatathisudxangxing aekikh 1 https tupleblog github io gradient descent part1 https lukkiddd com E0 B9 80 E0 B8 94 E0 B8 B4 E0 B8 99 E0 B8 A5 E0 B8 87 E0 B9 80 E0 B8 82 E0 B8 B2 E0 B8 94 E0 B9 89 E0 B8 A7 E0 B8 A2 gradient descent algorithm 7db99092b981ekhathungcak https th wikipedia org w index php title karekhluxnlngtamkhwamchn amp oldid 7851806, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม