สิ่งที่ฟังก์ชั่นอาจเป็นเคอร์เนล?


21

ในบริบทของการเรียนรู้ของเครื่องและการจดจำรูปแบบที่มีแนวคิดที่เรียกว่าเคอร์เนลเคล็ดลับ เผชิญปัญหาที่ฉันถูกขอให้ตรวจสอบว่าฟังก์ชันอาจเป็นฟังก์ชันเคอร์เนลหรือไม่ควรทำอะไรอย่างแน่นอน ฉันควรตรวจสอบก่อนว่าพวกเขาอยู่ในรูปแบบของฟังก์ชั่นเคอร์เนลสามหรือสี่อย่างเช่นพหุนาม RBF และ Gaussian หรือไม่? ถ้าอย่างนั้นฉันควรทำยังไงดี? ฉันควรแสดงว่าเป็นบวกแน่นอนหรือไม่ มีคนช่วยแก้ปัญหาตัวอย่างเพื่อแสดงวิธีแก้ปัญหาแบบทีละขั้นตอนได้หรือไม่? เหมือนเช่นเป็นฟังก์ชันเคอร์เนลf(x)=extx (สมมติว่าเราไม่ทราบว่ามันเป็นเคอร์เนล Gaussian)?

คำตอบ:


27

โดยทั่วไปแล้วฟังก์ชั่นk(x,y)เป็นฟังก์ชั่นเคอร์เนลที่ถูกต้อง (ในแง่ของเคล็ดลับเคอร์เนล) หากเป็นไปตามคุณสมบัติหลักสองประการ:

  • สมมาตร: k(x,y)=k(y,x)

  • ความแน่นอนกึ่งบวก

การอ้างอิง: หน้า 4 ของhttp://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf

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

  • (1) ตรวจสอบการเป็นตัวแทน "ผลิตภัณฑ์ภายใน"

พิจารณา y ที่ เราสามารถหาϕ ( a )ที่k ( x , y ) = ϕ ( x ) T ϕ ( y ) ได้ไหม? คณิตศาสตร์น้อยแสดงให้เห็นว่าe x + y = e x e yดังนั้นให้ϕ ( a ) = e aและเราเสร็จแล้วk(x,y)=ex+yϕ(a)k(x,y)=ϕ(x)Tϕ(y)ex+y=exeyϕ(a)=ea

หากคุณได้รับโชคดีคุณจะสามารถแก้ไขการวิเคราะห์นี้ได้ ถ้าไม่คุณสามารถใช้ตัวเลือก (2):k()

  • (2) การตรวจสอบความแน่นอนเชิงบวกโดยการจำลองแบบสุ่ม

Dk(x,y)=d=1Dmin(xd,yd)x,y

เราสามารถตรวจสอบสิ่งนี้ได้ด้วยการจำลองสถานการณ์ วาดชุดของเวกเตอร์สุ่มและสร้างแกรมเมทริกซ์โดยที่_j) จากนั้นตรวจสอบว่าเป็นค่าบวก (กึ่ง -) แน่นอนหรือไม่{ x i } N i = 1 K K ฉันj = k ( x i , x j )N{xi}i=1NKKij=k(xi,xj)K

วิธีที่ดีที่สุดที่จะทำตัวเลขนี้คือการหาค่าลักษณะเฉพาะของเมทริกซ์ (ใช้ดีที่มีอยู่ในห้องสมุดเช่นตัวเลข SciPy หรือ MATLAB) และตรวจสอบว่ามีขนาดเล็กที่สุด eigenvalue มีขนาดใหญ่กว่าหรือเท่ากับ 0 ถ้าใช่เมทริกซ์คือ psd มิฉะนั้นคุณไม่มีเคอร์เนลที่ถูกต้องK

ตัวอย่าง MATLAB / รหัสอ็อกเทฟ:

D=5;
N=100;

X = zeros(N,D);
for n = 1:N
   xcur = rand(1,D);
   X(n,:) = xcur/sum(xcur);
end

K = zeros(N,N);
for n = 1:N;  for m = 1:N
    K(n,m) = sum( min( X(n,:), X(m,:) ) );
end;  end;

disp( min( eig(K) ) );

นี่คือการทดสอบง่ายมาก แต่ต้องระวัง หากการทดสอบล้มเหลวคุณสามารถตรวจสอบว่าเคอร์เนลไม่ถูกต้อง แต่ถ้าผ่านเคอร์เนลก็อาจไม่ถูกต้อง

ฉันพบว่าไม่ว่าจะสร้างเมทริกซ์สุ่มจำนวนเท่าใดและไม่คำนึงถึงและเคอร์เนลนี้จะผ่านการทดสอบดังนั้นมันอาจเป็นค่าบวกกึ่งแน่นอน (อันที่จริงนี่คือเคอร์เนลฮิสโทแกรมที่รู้จักกันดีและได้รับการพิสูจน์แล้ว) ถูกต้อง).DND

อย่างไรก็ตามการทดสอบเดียวกันกับล้มเหลวในการลองทุกครั้งที่ฉันได้รับ (อย่างน้อย 20) . ดังนั้นจึงเป็นสิ่งที่ไม่ถูกต้องแน่นอนที่สุดและค่อนข้างง่ายต่อการตรวจสอบk(x,y)=d=1Dmax(xd,yd)

ฉันชอบตัวเลือกที่สองนี้เพราะค่อนข้างเร็วและง่ายต่อการตรวจแก้จุดบกพร่องมากกว่าการพิสูจน์อย่างเป็นทางการที่รวบรวม ตามสไลด์ที่ 19 ของ Jitendra Malikเคอร์เนลถูกนำมาใช้ในปี 1991 แต่ไม่ได้รับการพิสูจน์ว่าถูกต้องจนถึงปี 2005 การพิสูจน์อย่างเป็นทางการอาจเป็นเรื่องที่ท้าทายมาก!


ที่ผมเข้าใจเงื่อนไขที่สองเป็นบวกเท่านั้นกึ่ง -definiteness และจากสิ่งที่ฉันบอกมีความจำเป็นถ้าคุณต้องการพิสูจน์การลู่เข้าของอัลกอริทึม SVM ในทางปฏิบัติมีเมล็ดจำนวนมากที่ไม่ใช่ PSD แต่ทำงานได้ดีในทางปฏิบัติ
ปีเตอร์

@Peter: ใช่คุณพูดถูก มันอาจเป็น * semi- * แน่นอนไม่ใช่แค่ชัดเจน แก้ไขตามนั้น
Mike Hughes

ในโดเมน SVM การใช้เคอร์เนล PSD ช่วยให้มั่นใจได้ว่าปัญหาจะนูนออกมาดังนั้นการปรับให้เหมาะสมจึงเป็นโซลูชันที่เหมาะสมที่สุดทั่วโลก หากไม่มีคุณสมบัติ PSD จะไม่มีการรับประกันว่าโซลูชันที่พบจะอยู่ใกล้กับที่ดีที่สุด แต่ใช่มีหลายเมล็ด (เช่น Sigmoid) ที่ไม่ใช่ PSD แต่ก็ยังประสบความสำเร็จในการฝึก การอ้างอิงที่ดีสำหรับเรื่องนี้คือ: perso.lcpc.fr/tarel.jean-philippe/publis/jpt-icme05.pdf
Mike Hughes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.