คำตอบนี้อยู่ในด้านทั่วไปของฟังก์ชั่นค่าใช้จ่ายซึ่งไม่เกี่ยวข้องกับ TensorFlow และส่วนใหญ่จะกล่าวถึง "คำอธิบายบางส่วนเกี่ยวกับหัวข้อนี้" ในคำถามของคุณ
ในตัวอย่าง / การกวดวิชาส่วนใหญ่ที่ฉันติดตามฟังก์ชั่นค่าใช้จ่ายค่อนข้างใช้โดยพลการ ประเด็นก็คือการแนะนำผู้อ่านให้รู้จักวิธีการเฉพาะไม่ใช่ฟังก์ชั่นค่าใช้จ่ายโดยเฉพาะ ไม่ควรหยุดให้คุณทำตามบทช่วยสอนเพื่อทำความคุ้นเคยกับเครื่องมือ แต่คำตอบของฉันควรช่วยคุณในการเลือกฟังก์ชั่นต้นทุนสำหรับปัญหาของคุณเอง
หากคุณต้องการคำตอบเกี่ยวกับ Cross-Entropy, Logit, L2 norms หรืออะไรก็ตามที่เฉพาะเจาะจงฉันแนะนำให้คุณโพสต์คำถามที่เฉพาะเจาะจงมากกว่านี้ สิ่งนี้จะเพิ่มโอกาสในการที่คนที่มีความรู้เฉพาะจะเห็นคำถามของคุณ
การเลือกฟังก์ชั่นค่าใช้จ่ายที่เหมาะสมเพื่อให้ได้ผลลัพธ์ที่ต้องการเป็นจุดสำคัญของปัญหาการเรียนรู้ของเครื่อง วิธีการพื้นฐานหากคุณไม่ทราบว่าสิ่งที่คุณต้องการออกจากวิธีการของคุณคือการใช้Mean Square Error (Wikipedia)สำหรับปัญหาการถดถอยและร้อยละของข้อผิดพลาดสำหรับปัญหาการจำแนก อย่างไรก็ตามหากคุณต้องการผลลัพธ์ที่ดีออกมาจากวิธีการของคุณคุณต้องกำหนดสิ่งที่ดีและกำหนดฟังก์ชันต้นทุนที่เพียงพอ สิ่งนี้มาจากความรู้ทั้งโดเมน (ข้อมูลของคุณคืออะไรคุณพยายามทำอะไร) และความรู้เกี่ยวกับเครื่องมือต่างๆ
ฉันไม่เชื่อว่าฉันสามารถแนะนำคุณเกี่ยวกับฟังก์ชั่นค่าใช้จ่ายที่ดำเนินการแล้วใน TensorFlow เนื่องจากฉันมีความรู้น้อยมากเกี่ยวกับเครื่องมือ แต่ฉันสามารถให้ตัวอย่างเกี่ยวกับวิธีการเขียนและประเมินฟังก์ชันต้นทุนที่แตกต่างกัน
เพื่อแสดงให้เห็นความแตกต่างระหว่างการทำงานต่าง ๆ ค่าใช้จ่ายให้เราใช้ตัวอย่างของปัญหาการจัดหมวดหมู่ไบนารีที่เราต้องการสำหรับแต่ละตัวอย่างชั้น\}xnf(xn)∈{0,1}
เริ่มต้นด้วยคุณสมบัติการคำนวณ ; ฟังก์ชั่นสองอย่างที่วัด "สิ่งเดียวกัน" สามารถนำไปสู่ผลลัพธ์ที่ต่างกันได้อย่างไร ทำหน้าที่ดังต่อไปนี้ฟังก์ชั่นค่าใช้จ่ายอย่างง่าย ร้อยละของข้อผิดพลาด หากคุณมีตัวอย่างเป็นคลาสที่ทำนายไว้และเป็นคลาสจริงคุณต้องการย่อขนาดเล็กสุดNf(yn)yn
- 1N∑n{10 if f(xn)≠yn otherwise=∑nyn[1−f(xn)]+[1−yn]f(xn)(x_n)
ฟังก์ชันต้นทุนนี้มีประโยชน์ในการตีความได้อย่างง่ายดาย อย่างไรก็ตามมันไม่ราบรื่น หากคุณมีเพียงสองตัวอย่างฟังก์ชัน "กระโดด" จาก 0 ถึง 0.5 ถึง 1 สิ่งนี้จะนำไปสู่ความไม่ลงรอยกันถ้าคุณพยายามใช้การไล่ระดับสีลงบนฟังก์ชันนี้ วิธีหนึ่งที่จะหลีกเลี่ยงคือเปลี่ยนฟังก์ชั่นราคาเพื่อใช้ความน่าจะเป็นของการมอบหมาย x_n) ฟังก์ชั่นจะกลายเป็นp(yn=1|xn)
- 1N∑nynp(yn=0|xn)+(1−yn)p(yn=1|xn)x_n)
ฟังก์ชั่นนี้ราบรื่นและจะทำงานได้ดีขึ้นด้วยวิธีการไล่ระดับสี คุณจะได้รับโมเดล 'ละเอียดกว่า' อย่างไรก็ตามมีปัญหาอื่น ๆ ถ้าคุณมีตัวอย่างที่ไม่ชัดเจนก็ขอให้บอกว่าคุณไม่ได้มีข้อมูลมากพอที่จะพูดอะไรดีกว่า0.5 จากนั้นการใช้การไล่ระดับสีลงบนฟังก์ชั่นต้นทุนนี้จะนำไปสู่รูปแบบที่เพิ่มความน่าจะเป็นนี้ให้มากที่สุดp(yn=1|xn)=0.5
อีกปัญหาของฟังก์ชั่นนี้คือถ้าในขณะที่คุณมั่นใจว่าถูกต้อง แต่คุณผิด เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้เข้าสู่ระบบของความน่าจะเป็นที่x_n) Asและ , ฟังก์ชั่นต่อไปนี้ไม่มีปัญหาอธิบายไว้ในย่อหน้าก่อนหน้า:p(yn=1|xn)=1yn=0logp(yn|xn)log(0)=∞log(1)=0
- 1N∑nynlogp(yn=0|xn)+(1−yn)logp(yn=1|xn)x_n)
นี่ควรจะแสดงให้เห็นว่าในการปรับแต่งสิ่งเดียวกันให้ดีที่สุดเปอร์เซ็นต์ของข้อผิดพลาดคำจำกัดความที่แตกต่างกันอาจให้ผลลัพธ์ที่แตกต่างกัน
มันเป็นไปได้สำหรับฟังก์ชั่นค่าใช้จ่ายและในการวัดแนวคิดเดียวกันแต่อาจนำไปสู่วิธีการของคุณเพื่อผลลัพธ์ที่ดีกว่าBABAB
ทีนี้มาดูกันว่าฟังก์ชั่นค่าใช้จ่ายต่าง ๆ สามารถวัดแนวคิดที่แตกต่างกันได้อย่างไร ในบริบทของการดึงข้อมูลเช่นเดียวกับในการค้นหาของ Google (ถ้าเราไม่สนใจการจัดอันดับ) เราต้องการผลลัพธ์ที่ส่งคืน
โปรดทราบว่าหากอัลกอริทึมของคุณคืนค่าทุกอย่างมันจะส่งคืนผลลัพธ์ที่เกี่ยวข้องทั้งหมดที่เป็นไปได้และทำให้มีการเรียกคืนสูง แต่มีความแม่นยำต่ำมาก ในทางตรงกันข้ามถ้ามันส่งกลับเฉพาะหนึ่งองค์ประกอบหนึ่งที่ว่ามันเป็นบางอย่างที่มากที่สุดคือที่เกี่ยวข้องก็จะมีความแม่นยำสูง แต่การเรียกคืนต่ำ
เพื่อที่จะตัดสินขั้นตอนวิธีการเช่นฟังก์ชั่นค่าใช้จ่ายเหมือนกันคือ -score (วิกิพีเดีย) กรณีที่เหมือนกันคือ -score ซึ่งจะช่วยให้น้ำหนักเท่ากับความแม่นยำและการเรียกคืน แต่กรณีทั่วไปมัน -score และคุณสามารถปรับแต่งที่จะได้รับFF1Fββ
- การเรียกคืนที่สูงขึ้นหากคุณใช้β>1
- ความแม่นยำที่สูงขึ้นถ้าคุณใช้<1β<1
ในสถานการณ์เช่นนี้การเลือกฟังก์ชั่นค่าใช้จ่ายจะเลือกสิ่งที่การออกอัลกอริทึมของคุณควรจะทำอย่างไร
อีกตัวอย่างที่มักจะนำมาใช้เป็นกรณีของการวินิจฉัยทางการแพทย์คุณสามารถเลือกฟังก์ชั่นค่าใช้จ่ายที่จะลงโทษเชิงลบที่ผิดพลาดมากขึ้นหรือผลบวกที่ผิดพลาดขึ้นอยู่กับสิ่งที่ดีกว่า:
- คนที่มีสุขภาพมากขึ้นที่ถูกจำแนกว่าป่วย (แต่แล้วเราอาจรักษาคนที่มีสุขภาพดีซึ่งมีราคาแพงและอาจทำร้ายพวกเขาหากพวกเขาไม่ป่วยจริง ๆ )
- คนที่ป่วยมากกว่านั้นถูกจำแนกว่ามีสุขภาพดี (แต่แล้วพวกเขาก็อาจตายโดยไม่ได้รับการรักษา)
โดยสรุปการกำหนดฟังก์ชั่นค่าใช้จ่ายเป็นการกำหนดเป้าหมายของอัลกอริทึมของคุณ อัลกอริทึมกำหนดวิธีการเดินทาง
หมายเหตุด้านข้าง: ฟังก์ชั่นค่าใช้จ่ายบางอย่างมีอัลกอริทึมที่ดีในการเข้าถึงเป้าหมายของพวกเขา ตัวอย่างเช่นมีวิธีที่ดีในการลดการสูญเสียบานพับ (Wikipedia)ขั้นต่ำโดยการแก้ไขปัญหาสองอย่างในSVM (Wikipedia)