ฟังก์ชั่น Softmax vs Sigmoid ในลอจิสติกลอจิก


62

อะไรคือตัวเลือกของฟังก์ชั่น (Softmax vs Sigmoid) ในลอจิสติกลักษณนาม?

สมมติว่ามี 4 ชั้นเรียนเอาท์พุท แต่ละฟังก์ชั่นด้านบนให้ความน่าจะเป็นของแต่ละคลาสเป็นเอาต์พุตที่ถูกต้อง ดังนั้นอันไหนที่จะใช้สำหรับลักษณนาม


16
ฟังก์ชั่น softmax นั้นไม่ได้เป็นเพียงแค่ซิกเนออยด์ทั่วไปดังนั้นจึงไม่ชัดเจนเลยว่าคุณหมายถึงอะไรโดย "softmax กับ sigmoid"
dsaxton

2
มันเป็นกรณีที่มี sigmoid เมื่อเราใช้ sigmoid คลาสหนึ่งจะมีความน่าจะเป็นและอีกอันมีความน่าจะเป็น1) exp(βTx)/(exp(βTx)+1)1/(exp(βTx)+1)
dsaxton

3
โปสเตอร์ Reddit กำลังสร้างความแตกต่างที่ฉันคิดว่าผิดหรืออย่างน้อยก็ไม่เกี่ยวข้อง ไม่ว่าหนึ่งในชั้นเรียนมีน้ำหนักหนึ่งหรือไม่เป็นเพียงเรื่องของการเลื่อนระดับคะแนนซึ่งไม่มีผลต่อความน่าจะเป็น
dsaxton


3
"มันไม่ชัดเจนเลยว่าคุณหมายถึงอะไร" softmax กับ sigmoid ""ใต้ชื่อมีเนื้อหาของคำถาม - ง่ายที่จะพลาด นอกจากนี้ยังเป็นชื่อที่ดีในการส่งคำสั่ง google เพื่อมาที่นี่เพื่อตอบสิ่งที่ถูกถาม
ไมเคิล

คำตอบ:


77

ฟังก์ชั่น sigmoidจะใช้สำหรับการถดถอยโลจิสติกสองชั้นในขณะที่ฟังก์ชั่น softmaxจะใช้สำหรับการถดถอยโลจิสติก multiclass (aka Maxent ถดถอยโลจิสติกพหุนาม, ถดถอย softmax, เอนโทรปีสูงสุดลักษณนาม)


ในการถดถอยโลจิสติกสองระดับโพรบที่คาดการณ์มีดังนี้โดยใช้ฟังก์ชัน sigmoid:

Pr(Yi=0)=eβXi1+eβ0XiPr(Yi=1)=1Pr(Yi=0)=11+eβXi

ในการถดถอยโลจิสติกหลายคลาสด้วยคลาสความน่าจะเป็นที่คาดการณ์มีดังนี้โดยใช้ฟังก์ชัน softmax:K

Pr(Yi=k)=eβkXi 0cKeβcXi

เราสามารถสังเกตได้ว่าฟังก์ชั่น softmax เป็นส่วนเสริมของฟังก์ชั่น sigmoid ไปยังกรณีหลายชั้นดังที่อธิบายไว้ด้านล่าง ลองดูการถดถอยโลจิสติกหลายคลาสด้วยคลาส :K=2

Pr(Yi=0)=eβ0Xi 0cKeβcXi=eβ0Xieβ0Xi+eβ1Xi=e(β0β1)Xie(β0β1)Xi+1=eβXi1+eβXiPr(Yi=1)=eβ1Xi 0cKeβcXi=eβ1Xieβ0Xi+eβ1Xi=1e(β0β1)Xi+1=11+eβXi

กับbeta_1) เราเห็นว่าเราได้รับความน่าจะเป็นเช่นเดียวกับในการถดถอยสองระดับโดยใช้ฟังก์ชัน sigmoid Wikipediaจะขยายเพิ่มเติมอีกเล็กน้อยβ=(β0β1)


1
ฉันไร้เดียงสาในเรื่องนี้ แต่ฉันเห็นเวลานี้มากβ = - (β0 − β1) คำอธิบายที่เป็นไปได้คืออะไร? เท่าที่ฉันรู้ใน Sigmoids βจะเป็นเวกเตอร์ และพวกเขามักจะเป็นหนึ่งสำหรับวิ่ง ถ้าอย่างนั้นทำไมβ0และβ1มาถึงในรูปภาพ?
Ishan Bhatt

1
@IshanBhatt ความคิดเห็นนี้อาจช่วยได้
Tom Hale

แปลกพอฉันยังคงสามารถที่จะถอยหลัง multiclasses ใช้เพียง sigmoid :)
datdinhquoc

15

อันที่จริงแล้วพวกเขามีความเท่าเทียมกันในแง่ที่ว่าสามารถเปลี่ยนเป็นอีกแบบหนึ่งได้

สมมติว่าข้อมูลของคุณแสดงโดย vectorของมิติโดยพลการและคุณสร้างตัวจําแนกแบบไบนารีสําหรับมันโดยใช้การแปลงเลียนแบบตามด้วย softmax:x

P( C i | x)=softmax( z i )= e z i

(z0z1)=(w0Tw1T)x+(b0b1),
P(Ci|x)=softmax(zi)=eziez0+ez1,i{0,1}.

ลองเปลี่ยนเป็นตัวแยกประเภทไบนารีเทียบเท่าที่ใช้ sigmoid แทน softmax ครั้งแรกของทั้งหมดที่เราต้องตัดสินใจว่าน่าจะเป็นที่เราต้องการ sigmoid เพื่อการส่งออก (ซึ่งอาจจะเป็นสำหรับการเรียนหรือ ) ทางเลือกนี้เป็นพลอย่างแน่นอนและดังนั้นผมจึงเลือกระดับC_0จากนั้นลักษณนามของฉันจะอยู่ในรูปแบบ:C 1 C 0C0C1C0

P ( C 0

z=wTx+b,
P(C1|
P(C0|x)=σ(z)=11+ez,
P(C1|x)=1σ(z).

ตัวแยกประเภทจะเท่ากันถ้าความน่าจะเป็นเหมือนกันดังนั้นเราต้องกำหนด:

σ(z)=softmax(z0)

เปลี่ยน ,และโดยการแสดงออกของพวกเขาในแง่ของและและการทำตรงไปตรงมาบางส่วน พีชคณิตยักย้ายคุณอาจตรวจสอบว่ามีความเสมอภาคเหนือถ้าหากและได้รับจาก:z0z1zw0,w1,w,b0,b1,bxwb

w=w0w1,
b=b0b1.

@ เป็นไรฉันถ้าคุณถามว่าแล้วคุณไม่เข้าใจคำอธิบายของฉัน ให้ฉันแก้ไขปัญหาเฉพาะของคุณ: ถ้าคุณบอกฉันว่าคุณจะให้อาหารข้อมูลของคุณไป sigmoid แล้วมันต้องเป็นหมายเลขหนึ่งมิติxเมื่อให้อาหารมันจะ sigmoid คุณจะได้รับความน่าจะเป็นของเป็นหนึ่งในสองชั้นเรียนของคุณตัวอย่างเช่น :(x) จากนั้นน่าจะเป็นของอยู่ในคือ(x) ตอนนี้เรามาแทนที่ sigmoid ของคุณด้วย softmax (ยังมีต่อ). x C 0 P ( C 0xxC0P(C0|x)=σ(x)xC1P(C1|x)=1P(C0|x)=σ(x)
...

(ต่อเนื่อง) ในการใช้ softmax กับปัญหาการจำแนกประเภทกับสองคลาสคุณต้องมีข้อมูลมิติเดียวของคุณเพื่อแปลงเป็นเวกเตอร์สองมิติ ดังนั้นเราจำเป็นต้องกำหนดและเรา ลองเลือก 1 ตั้งแต่ต้องตอบสนองเรามีดังนั้น 0 ขณะนี้เรามีและ 0 ใช้นี้ทันทีที่คุณสามารถตรวจสอบว่า(z_0) w 1 w 0 = 1 w 1 w = w 0 - w 1 1 = 1 - ww0w1w0=1w1w=w0w11=1w1w1=0z0=w0x=xz1=w1x=0σ(x)=softmax(z0)
...

ยิ่งกว่านั้นการรวมกันของและที่สอดคล้องกับ (นั่นคือ ) จะนำไปสู่ผลลัพธ์เดียวกัน นี่แสดงว่า softmax มีพารามิเตอร์ที่ซ้ำซ้อนหนึ่งพารามิเตอร์ แม้ว่าสิ่งนี้อาจดูโง่ แต่ในความเป็นจริงมันเป็นคุณสมบัติที่น่าสนใจเพราะมันช่วยให้การปรับค่าพารามิเตอร์ของเป็นมาตรฐานซึ่งส่งเสริมเสถียรภาพเชิงตัวเลขของอัลกอริทึมการเรียนรู้และการอนุมาน แต่นี่เป็นเพียงความคิดเห็นเป็นพิเศษก็ไม่ได้เป็นสิ่งสำคัญที่จะตอบคำถามของคุณ :)w 1 w = w 0 - w 1 1 = w 1 - w 0 w iw0w1w=w0w11=w1w0wi
D ...

ขอบคุณมาก. ฉันเข้าใจแล้ว. ในความคิดเห็นครั้งแรกของคุณน่าจะเป็นอาจจะ(x) ตอนนี้ฉันเข้าใจสิ่งที่เป็นความคิดที่อยู่เบื้องหลังการเปลี่ยนแปลง 1 - σ ( x )P(C1|x)1σ(x)
null

ดีใจที่คุณเข้าใจ;) ใช่มันพิมพ์ผิดก็เห็นได้ชัดว่าควรจะเป็น(x) ขอบคุณที่ชี้นำ! P(C1|x)=1σ(x)
...

8

ฉันสังเกตว่าผู้คนมักจะถูกนำไปยังคำถามนี้เมื่อค้นหาว่าจะใช้ sigmoid vs softmax ในเครือข่ายประสาท หากคุณเป็นหนึ่งในคนที่สร้างลักษณนามเครือข่ายประสาทเทียมนี่คือวิธีการตัดสินใจว่าจะใช้ sigmoid หรือ softmax กับค่าเอาต์พุตดิบจากเครือข่ายของคุณ:

  • หากคุณมีปัญหาการจำแนกประเภทฉลากหลายป้าย = มี "คำตอบที่ถูกต้อง" มากกว่าหนึ่ง = = ผลลัพธ์ไม่ได้เกิดขึ้นพร้อมกันโดยเฉพาะให้ใช้ฟังก์ชั่น sigmoid ในแต่ละผลลัพธ์ดิบโดยอิสระ sigmoid จะช่วยให้คุณมีโอกาสสูงในการเรียนทั้งหมดของพวกเขาบางคนหรือไม่มีพวกเขา ตัวอย่าง: การจำแนกโรคในภาพเอ็กซ์เรย์ทรวงอก ภาพอาจมีโรคปอดบวมถุงลมโป่งพองและ / หรือมะเร็งหรือไม่มีการค้นพบเหล่านั้น
  • หากคุณมีปัญหาการจำแนกประเภทหลายคลาส = มี "คำตอบที่ถูกต้อง" เพียงตัวเดียว = ผลลัพธ์ที่ได้จะไม่เกิดร่วมกันดังนั้นให้ใช้ฟังก์ชั่น softmax softmax จะบังคับใช้ว่าผลรวมของความน่าจะเป็นของคลาสเอาต์พุตของคุณมีค่าเท่ากับหนึ่งดังนั้นเพื่อเพิ่มความน่าจะเป็นของคลาสใดคลาสหนึ่งโมเดลของคุณจะต้องลดความน่าจะเป็นอย่างน้อยหนึ่งคลาสอื่น ๆ ตัวอย่าง: การจำแนกรูปภาพจากชุดข้อมูล MNIST ของตัวเลขที่เขียนด้วยลายมือ รูปภาพหนึ่งหลักมีตัวตนที่แท้จริงเพียงตัวเดียว - รูปภาพไม่สามารถเป็น 7 และ 8 ในเวลาเดียวกัน

การอ้างอิง: สำหรับคำอธิบายโดยละเอียดมากขึ้นว่าควรใช้ sigmoid vs. softmax ในการออกแบบเครือข่ายประสาทรวมถึงการคำนวณตัวอย่างโปรดดูบทความนี้: "การจำแนก: Sigmoid vs. Softmax"


-1

การเพิ่มคำตอบก่อนหน้าทั้งหมด - ฉันต้องการพูดถึงความจริงที่ว่าปัญหาการจำแนกประเภทหลายคลาสสามารถลดลงเป็นปัญหาการจำแนกเลขฐานสองหลายโดยใช้วิธี "one-vs-all" เช่นมี C sigmoids (เมื่อ C คือจำนวน คลาส) และตีความทุก sigmoid ให้เป็นความน่าจะเป็นที่อยู่ในคลาสนั้นหรือไม่และรับความน่าจะเป็นสูงสุด

ตัวอย่างเช่นในตัวอย่างหลักของ MNIST คุณสามารถใช้ softmax หรือสิบซิกก็ได้ อันที่จริงนี่คือสิ่งที่ Andrew Ng ทำในหลักสูตร Coursera ML ของเขา คุณสามารถตรวจสอบได้ที่นี่วิธีที่ Andrew Ng ใช้ 10 sigmoids สำหรับการจัดหมวดหมู่หลายคลาส (ดัดแปลงจาก Matlab เป็น Python โดยฉัน) และนี่คือการปรับแบบ softmax ของฉันใน python

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

ข้อได้เปรียบที่ยิ่งใหญ่ของการใช้การจำแนกประเภทไบนารีหลายรายการ (เช่น Sigmoids) ในการจำแนกประเภทหลายคลาสเดี่ยว (เช่น Softmax) - คือถ้า Softmax ของคุณมีขนาดใหญ่เกินไป (เช่นถ้าคุณกำลังใช้คำเดียวที่ร้อนแรง ) - มันไม่มีประสิทธิภาพในการฝึก สิ่งที่คุณสามารถทำได้คือนำส่วนเล็ก ๆ ของชุดฝึกอบรมของคุณไปใช้เพื่อฝึกเพียงส่วนเล็ก ๆ ของ sigmoids ของคุณ นี่คือแนวคิดหลักที่อยู่เบื้องหลังการสุ่มตัวอย่างเชิงลบ


ฟังก์ชั่นไม่เทียบเท่ากันเนื่องจากเครือข่าย softmax ถูก จำกัด ให้สร้างการแจกแจงความน่าจะเป็นในคลาสที่เป็นเอาท์พุต: เวกเตอร์ไม่เป็นลบและผลรวมถึง 1 หน่วย sigmoid ไม่เป็นลบ แต่สามารถรวมกับจำนวนใดก็ได้ ระหว่าง 0 ถึง ; มันไม่ใช่การแจกแจงความน่าจะเป็นที่ถูกต้อง ความแตกต่างนี้มีความสำคัญต่อการจำแนกลักษณะของทั้งสองฟังก์ชันที่แตกต่างกัน CCC
Reinstate Monica

คำจำกัดความของคุณเทียบเท่าคืออะไร? Mine คือ: คุณสามารถใช้สำหรับการจำแนกประเภทหลายคลาสได้โดยไม่มีปัญหาใด ๆ นอกจากนี้ - การจำแนกประเภทหลายคลาสใด ๆ ที่ใช้ softmax สามารถเปลี่ยนเป็นการจำแนกประเภทไบนารีหนึ่งเดียวกับทุกประเภทที่ใช้ sigmoids ทำไมฉันถึงต้องสนใจการแจกแจงของผลรวมที่เป็น 1?
David Refaeli

0,1,2,,C

ฉันหลงทาง สำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมดที่ฉันรู้ sigmoids หลายรายการ = 1 softmax ฉันยังเพิ่มกรณีของการสุ่มตัวอย่างเชิงลบโดยที่ sigmoids หลายอันนั้นมีความได้เปรียบมากกว่า softmax
David Refaeli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.