ความหมายของคำว่า logits ใน TensorFlow คืออะไร?


250

ในฟังก์ชั่น TensorFlow ต่อไปนี้เราจะต้องป้อนการเปิดใช้งานของเซลล์ประสาทเทียมในชั้นสุดท้าย ที่ฉันเข้าใจ แต่ฉันไม่เข้าใจว่าทำไมเรียกว่าบันทึก นั่นคือฟังก์ชันทางคณิตศาสตร์ใช่ไหม

loss_function = tf.nn.softmax_cross_entropy_with_logits(
     logits = last_layer,
     labels = target_output
)

8
ซ้ำซ้อนที่เป็นไปได้ของtensorflow tf.nn.softmax และ tf.nn.softmax_cross_entropy_with_logits
martianwars

คำตอบ:


215

การบันทึกเป็นคำที่ใช้มากเกินไปซึ่งอาจหมายถึงสิ่งต่าง ๆ มากมาย:


ในวิชาคณิตศาสตร์ , Logitเป็นฟังก์ชันที่น่าจะเป็นแผนที่ (ก[0, 1]) เพื่อ R ( (-inf, inf))

ป้อนคำอธิบายรูปภาพที่นี่

ความน่าจะเป็นของ 0.5 สอดคล้องกับ logit ของ 0 Logit เชิงลบตรงกับความน่าจะเป็นน้อยกว่า 0.5 เป็นบวก> 0.5

ใน MLก็สามารถ

เวกเตอร์ของการคาดการณ์ raw (ที่ไม่ได้ทำให้เป็นมาตรฐาน) ที่โมเดลการจัดหมวดหมู่สร้างขึ้นซึ่งโดยปกติจะถูกส่งผ่านไปยังฟังก์ชันการทำให้เป็นมาตรฐาน หากโมเดลกำลังแก้ไขปัญหาการจำแนกประเภทหลายคลาสโดยทั่วไปการบันทึกจะกลายเป็นอินพุตไปยังฟังก์ชัน softmax จากนั้นฟังก์ชั่น softmax จะสร้างเวกเตอร์ของความน่าจะเป็น (ปกติ) ที่มีค่าเดียวสำหรับแต่ละคลาสที่เป็นไปได้

ใน บางครั้งการบันทึกยังอ้างถึงอินเวิร์สชันที่ชาญฉลาดของฟังก์ชัน sigmoid


127
สำหรับ Tensorflow: เป็นชื่อที่คิดว่าเป็นการบ่งบอกว่า Tensor นี้เป็นปริมาณที่แมปกับความน่าจะเป็นของ Softmax
thertweck

1
นี่เป็นสิ่งเดียวกับสิ่งที่ได้รับการยกกำลังต่อหน้า softmax หรือไม่? เช่นsoftmax(logit) = exp(logit)/Z(logit)นั้นlogit = h_NN(x)? ดังนั้น logit จึงเหมือนกับ "คะแนน"?
Charlie Parker

4
ความเข้าใจส่วนบุคคลในโดเมน TensorFlow การบันทึกคือค่าที่ใช้เป็นอินพุตไปยัง softmax ฉันมาถึงความเข้าใจนี้ตามการกวดวิชาแรงดึงนี้
Diansheng

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

1
คุณสร้างตัวอย่างง่ายๆได้ไหม? ถูกต้องหรือไม่ [1, 0.5, 0.5]ผ่านการทำให้เป็นมาตรฐาน[0.5, 0.25, 0.25]แล้ว soft max จะกลายเป็น[0,]ถ้าร้อน[1, 0, 0]? หรือเพิ่งออกมา[1, 0, 0]ทำให้เกิดการส่งออกควรเป็นเวกเตอร์?
Tina Liu

92

เพียงแค่เพิ่มคำอธิบายนี้เพื่อให้ทุกคนที่เลื่อนลงมาอย่างน้อยสามารถทำให้ถูกต้องได้เนื่องจากมีคำตอบที่ผิดจำนวนมากขึ้น

Diansheng ของคำตอบและ JakeJ ของคำตอบที่ได้รับมันขวา
คำตอบใหม่โพสต์โดย Shital Shah เป็นคำตอบที่ดียิ่งขึ้นและสมบูรณ์ยิ่งขึ้น


ใช่logit เป็นฟังก์ชันทางคณิตศาสตร์ในสถิติแต่การlogitใช้ในบริบทของเครือข่ายประสาทเทียมนั้นแตกต่างกัน สถิติlogitไม่ได้ทำให้รู้สึกใด ๆ ที่นี่


ฉันไม่สามารถหาคำจำกัดความที่เป็นทางการได้ทุกที่ แต่logitโดยทั่วไปหมายถึง:

การคาดการณ์แบบดิบซึ่งออกมาจากชั้นสุดท้ายของโครงข่ายประสาท
1. นี่คือเมตริกซ์ที่คุณใช้argmaxฟังก์ชั่นเพื่อรับคลาสที่ทำนายไว้
2. นี่คือเมตริกซ์ที่คุณป้อนเข้าไปในsoftmaxฟังก์ชันเพื่อรับความน่าจะเป็นสำหรับคลาสที่ทำนายไว้


นอกจากนี้จากการสอนเกี่ยวกับเว็บไซต์อย่างเป็นทางการของ tensorflow:

Logits Layer

เลเยอร์สุดท้ายในเครือข่ายประสาทของเราคือเลเยอร์การบันทึกซึ่งจะคืนค่าดิบสำหรับการคาดการณ์ของเรา เราสร้างเลเยอร์หนาแน่นที่มี 10 เซลล์ประสาท (หนึ่งสำหรับแต่ละชั้นเป้าหมาย 0–9) ด้วยการเปิดใช้งานเชิงเส้น (เริ่มต้น):

logits = tf.layers.dense(inputs=dropout, units=10)

หากคุณยังสับสนสถานการณ์จะเป็นดังนี้:

raw_predictions = neural_net(input_layer)
predicted_class_index_by_raw = argmax(raw_predictions)
probabilities = softmax(raw_predictions)
predicted_class_index_by_prob = argmax(probabilities)

ที่ไหนpredicted_class_index_by_rawและpredicted_class_index_by_probจะเท่ากัน

ชื่ออีกraw_predictionslogitในรหัสข้างต้นนี้


สำหรับเหตุผลที่ logit ... ฉันไม่มีความคิด ขอโทษ
[แก้ไข: ดูคำตอบสำหรับแรงจูงใจทางประวัติศาสตร์ที่อยู่เบื้องหลังคำนี้]


เรื่องไม่สำคัญ

แม้ว่าถ้าคุณต้องการคุณสามารถใช้สถิติlogitกับฟังก์ชั่นที่probabilitiesออกมาsoftmax

ถ้าน่าจะเป็นของชั้นหนึ่งคือp,
จากนั้นเข้าสู่ระบบอัตราต่อรองL = logit(p)ของการเรียนที่เป็น

นอกจากนี้ความน่าจะเป็นของคลาสนั้นสามารถกู้คืนได้p = sigmoid(L)โดยใช้sigmoidฟังก์ชัน

ไม่มีประโยชน์อย่างมากในการคำนวณอัตราต่อรองแม้ว่า


80

Logitเป็นฟังก์ชันที่แมปความน่า[0, 1]จะ[-inf, +inf]เป็น

Softmaxเป็นฟังก์ชันที่แมป[-inf, +inf]เพื่อ[0, 1]ที่คล้ายกันเป็นซิกมอยด์ แต่ Softmax ยังทำให้ผลรวมปกติของค่า (เวกเตอร์เอาต์พุต) เป็น 1

Tensorflow "with logit" : หมายความว่าคุณกำลังใช้ฟังก์ชั่น softmax เพื่อบันทึกหมายเลขเพื่อทำให้ปกติ input_vector / logit ไม่ได้ทำให้เป็นมาตรฐานและสามารถปรับขนาดได้จาก [-inf, inf]

การนอร์มอลไลซ์นี้ใช้สำหรับปัญหาการจำแนกประเภทหลายคลาส และสำหรับปัญหาการจำแนกประเภทมัลติลาเบลมีการใช้ sigmoid normalization เช่นtf.nn.sigmoid_cross_entropy_with_logits


10
ดังนั้น logit จึงเหมือนกับ "score"
Charlie Parker

1
ฉันขอแนะนำให้เพิ่มบรรทัดในคำตอบของคุณLogitฟังก์ชั่นการแยกความแตกต่างอย่างชัดเจน(สถิติ) และlogitsเลเยอร์ (เทนเซอร์)
AneesAhmed777

62

สรุป

ในบริบทของการเรียนรู้อย่างลึกซึ้งเลเยอร์การบันทึกหมายถึงเลเยอร์ที่ป้อนเข้าสู่ softmax (หรือการทำให้เป็นมาตรฐานเช่นนั้น) เอาต์พุตของ softmax เป็นความน่าจะเป็นสำหรับงานการจำแนกประเภทและอินพุตคือเลเยอร์การบันทึก เลเยอร์การบันทึกมักจะสร้างค่าจาก -infinity ถึง + infinity และเลเยอร์ softmax จะแปลงเป็นค่าตั้งแต่ 0 ถึง 1

บริบททางประวัติศาสตร์

คำนี้มาจากไหน ในปี 1930 และ 40 หลายคนพยายามปรับการถดถอยเชิงเส้นให้เข้ากับปัญหาของการทำนายความน่าจะเป็น อย่างไรก็ตามการถดถอยเชิงเส้นสร้างเอาต์พุตจาก - infinity ถึง + infinity ในขณะที่ความน่าจะเป็นผลลัพธ์ที่เราต้องการคือ 0 ถึง 1 วิธีหนึ่งในการทำเช่นนี้คือการแมปความน่าจะเป็น 0 ถึง 1 ถึง-infinity ถึง + infinity แล้วใช้การถดถอยเชิงเส้นตามปกติ การทำแผนที่หนึ่งอย่างนั้นคือการแจกแจงแบบปกติสะสมที่ Chester Ittner Bliss ใช้ในปี 1934 และเขาเรียกว่าแบบจำลองนี้ "probit" ย่อมาจาก "หน่วยความน่าจะเป็น" อย่างไรก็ตามฟังก์ชั่นนี้มีราคาแพงในขณะที่ขาดคุณสมบัติที่พึงประสงค์สำหรับการจำแนกประเภทหลายชั้น ในปี 1944 Joseph Berkson ใช้ฟังก์ชันlog(p/(1-p))ในการทำแผนที่นี้และเรียกมันว่า logit ย่อมาจาก "logistic unit" คำว่าการถดถอยโลจิสติกได้มาจากสิ่งนี้เช่นกัน

ความสับสน

น่าเสียดายที่การบันทึกคำศัพท์ถูกใช้ในการเรียนรู้อย่างลึกซึ้ง จาก logit เปอร์สเปคทีฟทางคณิตศาสตร์ล้วนๆเป็นฟังก์ชั่นที่ทำงานเหนือการแมป ในการเรียนรู้อย่างลึกซึ้งผู้คนเริ่มเรียกเลเยอร์ "logits layer" ที่ดึงข้อมูลเข้าสู่ฟังก์ชัน logit จากนั้นคนเริ่มเรียกเอาท์พุทค่าของชั้นนี้ "logit" สร้างความสับสนกับ logit ฟังก์ชั่น

รหัส TensorFlow

แต่น่าเสียดายที่รหัส TensorFlow tf.nn.softmax_cross_entropy_with_logitsต่อไปจะเพิ่มในความสับสนโดยชื่อเช่น บันทึกหมายถึงอะไรที่นี่? หมายความว่าอินพุตของฟังก์ชันควรเป็นเอาต์พุตของเลเยอร์เซลล์ประสาทสุดท้ายตามที่อธิบายไว้ข้างต้น _with_logitsต่อท้ายเป็นซ้ำซ้อนสับสนและไม่มีจุดหมาย ควรตั้งชื่อฟังก์ชั่นโดยไม่คำนึงถึงบริบทที่เฉพาะเจาะจงเช่นนั้นเพราะเป็นเพียงการดำเนินการทางคณิตศาสตร์ที่สามารถดำเนินการกับค่าที่ได้มาจากโดเมนอื่น ๆ ในความเป็นจริง TensorFlow มีฟังก์ชั่นsparse_softmax_cross_entropyที่คล้ายกันซึ่งพวกเขาโชคดีที่ลืมที่จะเพิ่ม_with_logitsคำต่อท้ายการสร้างความไม่สอดคล้องกันและเพิ่มความสับสน PyTorch ในทางกลับกันเพียงแค่ตั้งชื่อฟังก์ชั่นของมันโดยไม่มีคำต่อท้ายแบบนี้

การอ้างอิง

Logit / Probit สไลด์บรรยายเป็นหนึ่งในทรัพยากรที่ดีที่สุดที่จะเข้าใจ logit ฉันได้อัปเดตบทความ Wikipediaด้วยข้อมูลข้างต้นบางส่วนแล้ว


31

ความเข้าใจส่วนบุคคลในโดเมน TensorFlow การบันทึกคือค่าที่จะใช้เป็นอินพุตสำหรับ softmax ฉันมาถึงความเข้าใจนี้ตามการกวดวิชาแรงดึงนี้

https://www.tensorflow.org/tutorials/layers


แม้ว่ามันจะเป็นจริงที่ logit เป็นฟังก์ชันในวิชาคณิตศาสตร์ (โดยเฉพาะในสถิติ) แต่ฉันไม่คิดว่านั่นคือ 'logit' แบบเดียวกับที่คุณกำลังดู ในหนังสือDeep Learningโดย Ian Goodfellow เขากล่าว

ฟังก์ชั่นσ −1 (x) เรียกว่า logit ในสถิติ แต่คำนี้ใช้บ่อยกว่าในการเรียนรู้ของเครื่อง σ −1 (x) หมายถึงฟังก์ชันผกผันของฟังก์ชัน sigmoid logistic

ใน TensorFlow จะเห็นบ่อยครั้งเป็นชื่อของเลเยอร์สุดท้าย ในบทที่ 10 ของหนังสือHands-on Machine Learning พร้อม Scikit-Learn และ TensorFLowโดยAurélienGéronฉันได้ข้ามย่อหน้านี้ซึ่งระบุlogitsชั้นอย่างชัดเจน

โปรดทราบว่าlogitsเป็นผลลัพธ์ของเครือข่ายประสาทก่อนที่จะผ่านฟังก์ชั่นการเปิดใช้งาน softmax: เพื่อเหตุผลด้านการเพิ่มประสิทธิภาพเราจะจัดการกับการคำนวณ softmax ในภายหลัง

กล่าวคือถึงแม้ว่าเราใช้ softmax เป็นฟังก์ชั่นการเปิดใช้งานในเลเยอร์สุดท้ายในการออกแบบของเราเพื่อความสะดวกในการคำนวณเราlogitsแยกออกจากกัน นี่เป็นเพราะมันมีประสิทธิภาพมากขึ้นในการคำนวณsoftmaxและcross-entropyการสูญเสียร่วมกัน โปรดจำไว้ว่าcross-entropyเป็นฟังก์ชันต้นทุนที่ไม่ได้ใช้ในการเผยแพร่ไปข้างหน้า


12

นี่คือคำตอบที่รัดกุมสำหรับผู้อ่านในอนาคต Tensorflow's logitถูกกำหนดให้เป็นผลลัพธ์ของเซลล์ประสาทโดยไม่ต้องใช้ฟังก์ชั่นการเปิดใช้งาน:

logit = w*x + b,

x: อินพุต, w: น้ำหนัก, b: bias แค่นั้นแหละ.


ต่อไปนี้ไม่เกี่ยวข้องกับคำถามนี้

สำหรับการบรรยายทางประวัติศาสตร์อ่านคำตอบอื่น ๆ ปิดTensorflowการประชุมเรื่องการตั้งชื่อแบบ "สร้างสรรค์" ที่สับสน ในPyTorchมีเพียงหนึ่งเดียวเท่านั้นCrossEntropyLossและจะยอมรับเอาท์พุทที่ไม่ได้เปิดใช้งาน Convolutions, การคูณเมทริกซ์และการเปิดใช้งานเป็นการดำเนินการในระดับเดียวกัน การออกแบบเป็นแบบแยกส่วนมากขึ้นและสับสนน้อยลง นี้เป็นหนึ่งในเหตุผลที่ว่าทำไมผมเปลี่ยนจากการTensorflowPyTorch


8

( FOMO sapiens)

หากคุณตรวจสอบฟังก์ชั่น Logit คณิตศาสตร์จะแปลงพื้นที่จริงจากช่วงอินฟินิตี้[0,1][-inf, inf]

Sigmoid และ softmax จะทำสิ่งตรงกันข้าม พวกเขาจะแปลง[-inf, inf]พื้นที่[0, 1]จริงเป็นพื้นที่จริง

นี่คือเหตุผลว่าทำไมในการเรียนรู้ของเครื่องเราอาจใช้ logit ก่อนฟังก์ชั่น sigmoid และ softmax (เนื่องจากตรงกัน)

และนี่คือเหตุผล "เราอาจจะเรียกว่า" อะไรในการเรียนรู้เครื่องที่จะไปในด้านหน้าของsigmoidหรือsoftmaxฟังก์ชันlogit

นี่คือวิดีโอของ J. Hinton ที่ใช้คำนี้

PS ฉันไม่แนะนำให้ดูวิดีโอเพียงเพื่อตรวจสอบคำศัพท์


5

โดยพื้นฐานแล้วเป็นโมเดลที่เรียนรู้ได้อย่างสมบูรณ์แบบที่สุดที่คุณจะได้รับจากเครือข่ายก่อนที่มันจะถูกบีบอัดเพื่อนำไปใช้กับจำนวนชั้นเรียนที่เราสนใจเท่านั้นลองดูว่านักวิจัยบางคนใช้พวกมันเพื่อฝึกโครงข่ายประสาทตื้น เครือข่ายได้เรียนรู้: https://arxiv.org/pdf/1312.6184.pdf

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


1

ฟังก์ชัน logit (/ ˈloʊdʒɪt / LOH-jit) เป็นฟังก์ชันผกผันของฟังก์ชัน sigmoidal "logistic" หรือการแปลงโลจิสติกที่ใช้ในคณิตศาสตร์โดยเฉพาะอย่างยิ่งในสถิติ เมื่อตัวแปรของฟังก์ชันแสดงถึงความน่าจะเป็น p ฟังก์ชัน logit จะให้ log-odds หรือลอการิทึมของ odds p / (1 - p)

ดูที่นี่: https://en.wikipedia.org/wiki/Logit


4
ที่อยู่ในสถิติ / คณิตศาสตร์ เรากำลังพูดถึงการเรียนรู้ของเครื่องที่นี่ซึ่งlogitมีความหมายแตกต่างกัน ดูนี้ , นี้ , นี้
AneesAhmed777

1

logits

เวกเตอร์ของการคาดการณ์แบบดิบ (ไม่ใช่แบบปกติ) ที่แบบจำลองการจำแนกประเภทสร้างขึ้นซึ่งโดยปกติจะถูกส่งผ่านไปยังฟังก์ชันการทำให้เป็นมาตรฐาน หากโมเดลกำลังแก้ไขปัญหาการจำแนกประเภทหลายคลาสโดยทั่วไปการบันทึกจะกลายเป็นอินพุตไปยังฟังก์ชัน softmax จากนั้นฟังก์ชั่น softmax จะสร้างเวกเตอร์ของความน่าจะเป็น (ปกติ) ที่มีค่าเดียวสำหรับแต่ละคลาสที่เป็นไปได้

นอกจากนี้ในบางครั้งการบันทึกจะอ้างถึงการผกผันองค์ประกอบที่ชาญฉลาดของฟังก์ชั่น sigmoid สำหรับข้อมูลเพิ่มเติมโปรดดู tf.nn.sigmoid_cross_entropy_with_logits

เอกสารเทนเซอร์ไหลอย่างเป็นทางการ


-3

การบันทึกมักเป็นค่าของฟังก์ชัน Z ของเอาต์พุตเลเยอร์ใน Tensorflow


ไม่จำเป็นต้องดูคำตอบอื่น ๆ
quant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.