- GPT-4o คิดค่าใช้จ่าย 170 โทเคนต่อการประมวลผลแต่ละไทล์ขนาด 512x512 ที่ใช้ในโหมดความละเอียดสูง หากคิดด้วยอัตราประมาณ 0.75 โทเคน/คำ ก็เท่ากับว่าภาพหนึ่งภาพมีค่าเทียบเท่าประมาณ 227 คำ
- เมื่อเทียบกับคำกล่าวที่ว่า "ภาพหนึ่งภาพแทนคำพูดนับพันคำ" ก็ถือว่าต่างกันราว 4 เท่า
- ตัวเลข 170 เป็นตัวเลขที่เฉพาะจนดูแปลกประหลาด OpenAI มักใช้ตัวเลขปัดกลมในการตั้งราคา เช่น "20 ดอลลาร์" หรือ "0.50 ดอลลาร์" และใช้กำลังของ 2 และ 3 กับมิติภายใน
- แล้วทำไมถึงเลือกตัวเลขอย่าง 170? ในการเขียนโปรแกรม ตัวเลขที่ถูกใส่ไว้ในโค้ดโดยไม่มีคำอธิบายมักเรียกว่า "magic number" และ 170 ก็เป็น magic number ที่สะดุดตามาก
- ทำไมต้นทุนของภาพจึงถูกแปลงเป็นจำนวนโทเคน? หากเป็นเรื่องการคิดค่าบริการอย่างเดียว การระบุราคาต่อไทล์น่าจะทำให้สับสนน้อยกว่า
- จะเป็นอย่างไรถ้าเหตุผลที่ OpenAI เลือก 170 ก็เพราะมันเป็นข้อเท็จจริงตามตัวอักษร? จะเป็นอย่างไรถ้าไทล์ภาพหนึ่งไทล์ถูกแทนด้วยเวกเตอร์ฝังตัวต่อเนื่องจริง ๆ จำนวน 170 ตัว?
การฝังตัว
- สิ่งแรกที่ควรทบทวนเกี่ยวกับโมเดลทรานส์ฟอร์เมอร์คือ มันทำงานกับเวกเตอร์ ไม่ใช่โทเคนแบบไม่ต่อเนื่อง
- อินพุตต้องเป็นเวกเตอร์ มิฉะนั้นความคล้ายคลึงแบบดอตโปรดักต์ซึ่งเป็นแกนหลักของทรานส์ฟอร์เมอร์จะไม่มีความหมาย
- แนวคิดเรื่องโทเคนทั้งหมดเป็นเพียงขั้นตอนก่อนประมวลผล: ข้อความถูกแปลงเป็นโทเคน และโทเคนจะถูกแปลงเป็นเวกเตอร์ฝังตัวโดยโมเดล embedding ก่อนจะไปถึงเลเยอร์แรกของโมเดลทรานส์ฟอร์เมอร์
- ตัวอย่างเช่น Llama 3 ใช้มิติคุณลักษณะภายใน 4,096 มิติ
- หากดูประโยค "My very educated mother just served us nine pizzas."
- มันจะถูกแปลงเป็นโทเคนจำนวนเต็ม 10 ตัวโดย BPE (รวมจุด full stop) จากนั้นแต่ละตัวจะถูกแปลงเป็นเวกเตอร์ 4,096 มิติด้วยโมเดล embedding กลายเป็นเมทริกซ์ 10x4096
- นี่คืออินพุต "จริง" สำหรับโมเดลทรานส์ฟอร์เมอร์
- อย่างไรก็ตาม ไม่มีข้อบังคับว่าเวกเตอร์เหล่านี้จะต้องมาจากโมเดลฝังตัวข้อความเสมอไป
- มันเป็นกลยุทธ์ที่ใช้ได้ดีกับข้อมูลข้อความ แต่ถ้ามีข้อมูลรูปแบบอื่นที่ต้องการป้อนให้ทรานส์ฟอร์เมอร์ ก็สามารถใช้กลยุทธ์การฝังตัวแบบอื่นได้
- เรารู้ว่า OpenAI กำลังคิดไปในทิศทางนี้ เพราะได้เปิดตัวโมเดลฝังตัว CLIP ตั้งแต่ปี 2021
- CLIP ฝังตัวข้อความและภาพไว้ใน semantic vector space เดียวกัน เพื่อให้ใช้ cosine similarity ค้นหารูปภาพที่เกี่ยวข้องกับข้อความ หรือรูปภาพอื่นที่มีความหมายใกล้เคียงกันได้
- แต่ CLIP ฝังทั้งภาพเป็นเวกเตอร์เดียว ไม่ใช่ 170 ตัว ดังนั้น GPT-4o น่าจะต้องใช้กลยุทธ์ขั้นสูงอีกแบบภายในเพื่อแทนภาพ (รวมถึงวิดีโอ เสียง และข้อมูลชนิดอื่นด้วย) ซึ่งนั่นเองที่ทำให้มันเป็น "omnimodal"
- โดยเฉพาะสำหรับข้อมูลภาพ ลองอนุมานกันว่ากลยุทธ์นั้นอาจเป็นอะไร
จำนวนมิติของคุณลักษณะ
- หากลองประมาณจำนวนมิติที่ GPT-4o ใช้ภายในในการแทนเวกเตอร์ฝังตัว แม้จะไม่อาจรู้ตัวเลขจริงได้เพราะเป็นเทคโนโลยีกรรมสิทธิ์ แต่ก็สามารถตั้งสมมติฐานที่สมเหตุสมผลได้
- ดูเหมือนว่า OpenAI จะชอบกำลังของ 2 และบางครั้งก็ผสมตัวประกอบเดี่ยวของ 3 เข้าไปด้วย
- ตัวอย่างเช่น ใช้ 1,536 สำหรับ embedding ของ ada-002 และ 3,072 สำหรับ text-embedding-3-large
- เป็นที่ทราบกันว่า GPT-3 ใช้ 12,288 มิติโดยรวม
- GPT-4o อาจคงค่าพารามิเตอร์นี้ไว้หรือเพิ่มขึ้น
- ดูไม่น่าเป็นไปได้ที่จำนวนมิติของ embedding จะลดลงจาก GPT-3 มายัง GPT-4o แต่ก็เป็นไปได้
- รุ่นอย่าง GPT-4 Turbo ก็เร็วและถูกกว่ารุ่นก่อนจริง และหากนักพัฒนามีผล benchmark ที่ชี้ว่าขนาดที่เล็กลงให้คุณภาพดีพอ ๆ กัน การลดมิติ embedding ก็อาจเป็นส่วนหนึ่งของสิ่งนั้น
- จำนวนมิติของคุณลักษณะที่ใช้ภายใน GPT-4o มีแนวโน้มว่าจะเป็นหนึ่งในค่าต่อไปนี้: 1536, 2048, 3072, 4096, 12228, 16384, 24576
- สมมติว่า GPT-4o ใช้ 12,228 มิติสำหรับเวกเตอร์ฝังตัว แม้จะต่างออกไปด้วยตัวคูณ 2 หรือ 4 ก็ไม่ได้สำคัญนัก เพราะตรรกะแบบเดียวกันยังใช้ได้
การฝังตัวภาพ
- เนื่องจากไทล์ภาพเป็นสี่เหลี่ยม จึงมีแนวโน้มว่าจะถูกแทนเป็นกริดโทเคนแบบสี่เหลี่ยม
- 170 ใกล้เคียงกับ 13x13 มาก
- โทเคนที่เพิ่มมาอีกตัวอาจเป็นเวกเตอร์ฝังตัวเดี่ยวที่เข้ารหัส gestalt impression ของทั้งภาพ คล้ายกับ CLIP
- ถ้าเป็นเช่นนั้น จะไปจาก 512x512x3 เป็น 13x13x12228 ได้อย่างไร?
กลยุทธ์ที่ 1: พิกเซลดิบ
- วิธีที่ง่ายมากในการนำภาพเข้าไปอยู่ในเวกเตอร์สเปซ:
- แบ่งภาพ 512x512 ออกเป็นกริด "มินิไทล์" ขนาด 8x8
- แต่ละมินิไทล์มีขนาด 64x64x3 แล้วคลี่ออกเป็นเวกเตอร์ 12,228 มิติ
- มินิไทล์แต่ละอันคือเวกเตอร์ฝังตัวหนึ่งตัว
- ไทล์ภาพทั้งก้อนจึงถูกแทนด้วยเวกเตอร์ฝังตัวต่อเนื่อง 64 ตัว
- วิธีนี้มีปัญหาอยู่ 2 ข้อ:
- 64 ≠ 170
- มันงี่เง่ามาก (การฝังตัวโดยใช้ค่า RGB ดิบแล้วหวังให้ทรานส์ฟอร์เมอร์จัดการที่เหลือเองนั้นไม่สมเหตุสมผล)
กลยุทธ์ที่ 2: CNN
- โชคดีที่มีโมเดลที่มีคุณสมบัติแบบนี้อยู่แล้ว และมีผลงานพิสูจน์ความสำเร็จในการประมวลผลข้อมูลภาพมานานกว่าทศวรรษ: convolutional neural network (CNN)
- CNN มีคุณสมบัติอย่าง translation และ scale invariance
- AlexNet และ YOLO เป็นตัวอย่างสถาปัตยกรรม CNN ที่โดดเด่น
- CNN เปรียบเสมือนกรวยที่บีบอัด raw pixel ให้กลายเป็น semantic vector
- YOLO ไม่ได้ยุบภาพให้เหลือเวกเตอร์แบนเพียงตัวเดียว แต่หยุดที่ 13x13
- เอาต์พุตของ YOLOv3 คือเวกเตอร์ที่แตกต่างกัน 169 ตัว จัดวางอยู่บนกริด 13x13 โดยแต่ละตัวมีขนาด 1,024 มิติ
- คาดว่า CNN สำหรับการฝังตัวภาพตามสมมติฐานของ GPT-4o ก็น่าจะมีรูปร่างคล้ายกับสถาปัตยกรรม CNN เหล่านี้
- มีการเสนอวิธีใช้เลเยอร์ CNN มาตรฐานเพื่อไปจาก 512x512x3 เป็น 13x13x12228
- ดีไซน์ที่คล้าย AlexNet สามารถทำสิ่งนี้ได้อย่างสวยงาม (โดยใช้บล็อกซ้ำแบบเดียวกัน 5 ชุด)
- ยังมีทางเลือกที่คล้าย YOLO มากกว่า แต่จะไปถึง 12x12 (แทนที่จะเป็น 13x13)
- แม้จะพิสูจน์ไม่ได้ แต่การออกแบบเชิงคาดเดาเหล่านี้ก็แสดงให้เห็นว่ามีสถาปัตยกรรม CNN ที่ดูสมเหตุสมผลซึ่งสามารถแทนภาพเป็นกริดเวกเตอร์ฝังตัวขนาด kxk ได้
การตรวจสอบเชิงทดลอง
- GPT-4o มองเห็นกริดเวกเตอร์ฝังตัวขนาด 13x13 จริงหรือไม่?
- เพื่อทดสอบ จึงออกแบบงานที่ได้แรงบันดาลใจจากไพ่ Zener: ให้ระบุสีและรูปร่างของสัญลักษณ์ทั้งหมดในตารางของภาพ
- ใช้โปรแกรมง่าย ๆ สร้างภาพกริดสำหรับทดสอบ และให้พรอมป์ต์ GPT-4o อธิบายรูปร่างและสีของแต่ละช่องในรูปแบบอาร์เรย์ JSON
- หากสมมติฐาน 13x13 ถูกต้อง ก็คาดว่า GPT-4o จะทำได้ดีจนถึงขนาด 13x13 และหลังจากนั้นประสิทธิภาพจึงจะลดลง
- แต่ในความเป็นจริง มันทำได้สมบูรณ์แบบเฉพาะกริดขนาดไม่เกิน 5x5 และหลังจากนั้นประสิทธิภาพก็ตกลงอย่างรวดเร็ว
- ที่กริด 7x7 มันมีความแม่นยำ 76% และที่กริด 13x13 ประสิทธิภาพอยู่ในระดับพอ ๆ กับการเดาสุ่ม
- นี่หมายความว่าสมมติฐานที่ว่า 169 โทเคนแทนกริด 13x13 นั้นไม่ถูกต้อง
- อย่างไรก็ตาม ผลลัพธ์ของกริด 5x5 บ่งชี้ว่า GPT-4o สามารถติดตามวัตถุที่แยกแยะได้ 25 ชิ้นภายในภาพ พร้อมตำแหน่งสัมบูรณ์ของมัน
- แนวคิดพื้นฐานอาจถูกต้อง แต่ตีความมิติผิดไป และอาจเพิ่มชั้นให้ CNN อีกเพื่อย่อเหลือ 5x5 แทน 13x13
- หากสมมติว่าใช้เพียงกริดขนาดไม่เกิน 5x5 ก็จำเป็นต้องคิดต่อว่าจะจัดโครงสร้างเอาต์พุตอย่างไรเพื่อให้ไปถึง 170 โทเคน
กลยุทธ์แบบพีระมิด
- วิธีหนึ่งที่จะได้ตัวเลขที่ใกล้กับ 85 และ 170 คือสมมติว่าภาพถูกเข้ารหัสเป็นลำดับชั้นแบบพีระมิดที่ละเอียดขึ้นเรื่อย ๆ
- เริ่มจากเวกเตอร์ embedding หนึ่งตัวเพื่อจับ gestalt impression ของภาพทั้งหมด จากนั้นเพิ่ม
3x3 เพื่อจับด้านซ้าย/กลาง/ขวา และบน/กลาง/ล่าง แล้วค่อยเพิ่ม 5x5, 7x7 เป็นต้น
- กลยุทธ์นี้ให้ผลใกล้เคียงกับ 85 โทเคนมากสำหรับ 'master thumbnail' หากหยุดที่
7x7
- หากเพิ่มกริด
9x9 ขั้นสุดท้ายเข้าไป ก็จะได้ค่าใกล้กับ 170 มาก
- 12+32+52+72+92=1+9+25+49+81=165
- สำหรับไทล์
512x512 สามารถทำให้ตรงเป๊ะได้โดยใช้กริด 2x2 แบบชั่วคราวและสมมติว่ามีโทเคนพิเศษ <|image start|> หนึ่งตัวสำหรับแต่ละอัน
- 1+12+32+52+72=1+1+9+25+49=85
- 1+12+22+32+52+72+92=1+1+4+9+25+49+81=170
- โครงสร้างนี้ไม่มีตัวคั่นใด ๆ สำหรับจุดเริ่มต้นและจุดสิ้นสุดของแต่ละแถว แต่ก็น่าจะจัดการได้ด้วยการเข้ารหัสตำแหน่งแบบ 2D ในลักษณะคล้ายกับที่ใช้ RoPE เข้ารหัสข้อมูลตำแหน่งของ text token
- อย่างไรก็ตาม ข้างต้นเลือกใช้เฉพาะขนาดกริดเลขคี่และข้าม
5x5 ไป จึงไม่สอดคล้องทั้งหมดกับหลักฐานที่ว่า ประสิทธิภาพบนกริด Zener เริ่มตกหลัง 5x5
- อีกทางเลือกหนึ่งคือใช้ทุกกริด (ทั้งเลขคู่และเลขคี่) ไปจนถึง
5x5
- แนวทางนี้ให้ 55 โทเคน: 12+22+32+42+52=55
- หากสมมติว่ามี 3 โทเคนต่อมินิไทล์ และมีโทเคนตัวคั่น 1 ตัวระหว่างแต่ละไทล์ ก็สามารถไปถึง 170 ได้
- แม้จะยังไม่ค่อยน่าพอใจนักในเชิงตัวเลข แต่กลับสอดคล้องกับผลเชิงประจักษ์ได้ดี
- กลยุทธ์แบบพีระมิดนี้มีเสน่ห์มากในเชิงสัญชาตญาณ และให้ความรู้สึกว่าเป็นวิธีที่แทบจะ “ชัดเจนอยู่แล้ว” ในการเข้ารหัสข้อมูลเชิงพื้นที่ในระดับการซูมที่แตกต่างกัน
- นี่อาจอธิบายได้ว่าทำไมมันจึงทำงานได้ดีที่กริด
5x5 หรือต่ำกว่า แต่แย่มากเมื่อเป็น 6x6 ขึ้นไป
- น่าหงุดหงิดตรงที่ทุกสมมติฐานดูเหมือนจะเกือบอธิบายทุกอย่างได้ แต่ตัวเลขกลับไม่เคยลงตัวอย่างเรียบร้อยเสียที
- ถึงอย่างนั้น กลยุทธ์แบบพีระมิดเหล่านี้ก็ยังเป็นคำอธิบายที่ดีที่สุดเท่าที่ผมนึกออก
การรู้จำอักขระด้วยแสง (OCR)
- ไม่มีสมมติฐานใดข้างต้นที่อธิบายได้ว่า GPT-4o ทำ OCR อย่างไร
- โดยพื้นฐานแล้ว CLIP ไม่สามารถทำ OCR ได้ดีมากนัก อย่างน้อยก็สำหรับบล็อกข้อความขนาดใหญ่
- (ถึงอย่างนั้น ความจริงที่ว่า GPT-4o ทำ OCR ได้ก็ถือว่าน่าทึ่งมากอยู่แล้ว และเป็นตัวอย่างชัดเจนของความสามารถที่เกิดขึ้นใหม่)
- เห็นได้ชัดว่า GPT-4o สามารถทำ OCR คุณภาพสูงได้
- มันถอดข้อความยาว ๆ ได้ อ่านลายมือ หรืออ่านข้อความที่ถูกเลื่อน หมุน ฉายเอียง หรือถูกบังบางส่วนได้
- OCR engine สมัยใหม่ต้องทำงานหลายอย่าง ทั้งการจัดระเบียบภาพ หา bounding box และแถบของตัวอักษร จากนั้นรันโมเดลรู้จำตัวอักษรแบบเฉพาะทางไปตามแถบนั้น ทีละตัวอักษรหรือทีละคำ
- ไม่ใช่แค่ใช้ CNN ขนาดใหญ่เพียงอย่างเดียว
- ในทางทฤษฎี OpenAI อาจสร้างโมเดลที่เก่งถึงขนาดนั้นจริงก็ได้ แต่สิ่งนี้ไม่สอดคล้องกับประสิทธิภาพที่ค่อนข้างอ่อนบนงานกริด Zener
- ถ้ามันอ่านสัญลักษณ์ 36 ตัวในกริด
6x6 ที่เรียบร้อยในภาพไม่ได้ ก็ไม่น่าจะอ่านข้อความหลายร้อยตัวได้อย่างสมบูรณ์
- ทฤษฎีง่าย ๆ เพื่ออธิบายความไม่สอดคล้องนี้คือ:
- ผมคิดว่า OpenAI รันเครื่องมือ OCR สำเร็จรูปอย่าง Tesseract (หรือเครื่องมือ proprietary ระดับล้ำสมัย) แล้วป้อนข้อความที่ตรวจพบเข้าไปใน transformer พร้อมกับข้อมูลภาพ
- นี่อาจอธิบายได้ว่าทำไมเวอร์ชันแรก ๆ จึงสับสนได้ง่ายกับข้อความที่ซ่อนอยู่ในภาพ (เพราะจากมุมมองของ GPT-4o ข้อความนั้นเป็นส่วนหนึ่งของพรอมป์ต์)
- ตอนนี้เรื่องนี้ได้รับการแก้ไขแล้ว และ GPT-4o เชี่ยวชาญในการเพิกเฉยต่อพรอมป์ต์มุ่งร้ายที่ซ่อนอยู่ในภาพ
- แต่สิ่งนี้ก็ยังไม่อธิบายว่าทำไมจึงไม่มีการคิดค่าบริการต่อโทเคนสำหรับข้อความที่พบในภาพ
- ที่น่าสนใจคือ การส่งข้อความในรูปภาพกลับมีประสิทธิภาพมากกว่า
- ภาพ
512x512 ที่ใช้ฟอนต์เล็กแต่ยังอ่านได้ สามารถบรรจุ text token ได้ 400-500 โทเคนอย่างสบาย ๆ แต่กลับถูกคิดเงินเพียง 170 input token บวก 85 สำหรับ 'master thumbnail' รวมเป็น 255 โทเคนเท่านั้น (น้อยกว่าจำนวนคำในภาพมาก)
- ทฤษฎีนี้ยังอธิบายได้ว่าทำไมการประมวลผลภาพจึงมี latency เพิ่มเติม
- โดยธรรมชาติแล้ว CNN แทบจะทันที แต่ OCR ของบุคคลที่สามน่าจะใช้เวลาเพิ่ม
- และบังเอิญว่า (ไม่ได้จะบอกว่านี่พิสูจน์อะไรได้) ในสภาพแวดล้อม Python ที่ OpenAI code interpreter ใช้ มีการติดตั้ง PyTesseract อยู่
- คุณสามารถขอให้มันรัน PyTesseract กับภาพที่อัปโหลดเพื่อขอความเห็นที่สองได้
บทสรุป
- โดยพื้นฐานแล้ว ผมตั้งข้อสันนิษฐานไว้มากจากข้อเท็จจริงแข็ง ๆ เพียงข้อเดียว คือ OpenAI ใช้เลขมหัศจรรย์ 170
- แต่ดูเหมือนจะมีแนวทางที่เป็นไปได้อย่างมากและสอดคล้องอย่างยิ่งกับสถาปัตยกรรม CNN อื่น ๆ อย่าง YOLO นั่นคือการแมปจาก image tile ไปเป็นเวกเตอร์ embedding
- ดังนั้นผมจึงไม่คิดว่า 170 โทเคนเป็นเพียงค่าประมาณที่ใช้คิดเงินตามปริมาณการคำนวณคร่าว ๆ ที่ต้องใช้ในการประมวลผลภาพ
- และผมก็ไม่คิดว่ามันเป็นการนำเลเยอร์มาต่อกันเพื่อรวมข้อมูลภาพและข้อความเหมือนที่โมเดลมัลติโหมดอื่นบางตัวทำ
- ผมคิดว่า GPT-4o ใช้สถาปัตยกรรม CNN ที่เป็นลูกผสมระหว่าง CLIP และ YOLO โดยฝังภาพเข้าสู่ semantic vector space ของ transformer โดยตรง ทำให้ภาพ
512x512 ถูกแทนด้วยเวกเตอร์ embedding จำนวน 170 ตัวแบบ ตามตัวอักษร
- ตอนเริ่มเขียนบทความนี้ ผมมั่นใจว่าถอดรหัสได้หมดแล้วว่า 170 โทเคนนั้นมีไว้สำหรับกริด
13x13 และโทเคน “gestalt impression” เพิ่มอีกหนึ่งตัว
- แต่ประสิทธิภาพในงาน Zener เริ่มลดลงหลัง
5x5 ทำให้แนวคิดนี้พังทลาย ไม่ว่าภายในจะทำอะไรอยู่ มันก็ดูเหมือนจะเล็กกว่า 13x13 มาก
- ถึงอย่างนั้น การเปรียบเทียบกับ YOLO ก็ยังน่าเชื่อถือ และประสิทธิภาพในงาน
5x5 Zener ก็แทบจะยืนยันได้ว่ามันกำลังทำอะไรบางอย่างในลักษณะของกริด
- ทฤษฎีนี้ยังมีพลังในการทำนายในด้านอื่น ๆ อีกมาก
- มันอธิบายได้ว่า GPT-4o ประมวลผลภาพหลายภาพและทำงานอย่างการเปรียบเทียบภาพสองภาพได้อย่างไร
- มันอธิบายได้ว่าทำไมมันจึงมองเห็นวัตถุหลายชิ้นในภาพเดียวกันได้ แต่กลับถูกถาโถมเมื่อมีวัตถุมากเกินไปในฉากที่ซับซ้อน
- มันอธิบายได้ว่าทำไม GPT-4o จึงดูคลุมเครือมากเกี่ยวกับตำแหน่งสัมบูรณ์และสัมพัทธ์ของวัตถุแต่ละชิ้นในฉาก และทำไมมันจึงนับวัตถุในภาพได้ไม่แม่นยำ (เมื่อวัตถุคร่อมสองเซลล์กริดที่อยู่ติดกัน คลาสเดียวกันจะถูกกระตุ้นทั้งสองฝั่ง จึงไม่แน่ชัดว่าเป็นวัตถุชิ้นเดียวหรือสองชิ้น)
- น่าประหลาดใจที่สิ่งเดียวที่ทฤษฎีนี้อธิบายได้ไม่เรียบร้อย กลับเป็นคำถามที่เป็นแรงจูงใจให้เขียนบทความนี้ตั้งแต่แรก: ทำไมต้องเป็น 170 โทเคน?
- ทฤษฎีพีระมิด (
1x1 + 2x2 + 3x3 + 4x4 + 5x5) คือคำอธิบายที่ดีที่สุดที่ผมนึกออกได้ แต่ก็ไม่ได้ลงตัวเป็นพิเศษ
- ผมอยากฟังจากใครก็ตามที่มีทฤษฎีที่เข้ากันได้ดีกว่านี้ (หรือมีความรู้จริง หากสมมติว่าไม่ติด NDA)
ภาคผนวก: กลลวงของอัลฟาแชนเนล
- ระหว่างทำโปรเจ็กต์นี้ ผู้เขียนพบว่า GPT-4o มองข้าม อัลฟาแชนเนล จึงแสดงพฤติกรรมที่ค่อนข้างขัดกับสัญชาตญาณ
- คำว่า “มองข้าม” ไม่ได้หมายความว่ามันจัดการเหมือนโปรแกรมแก้ไขภาพที่แปลง PNG เป็น JPG แล้วผสานกับพื้นหลังเริ่มต้นเพื่อลบความโปร่งใส
- GPT-4o ดึงมาเฉพาะ RGB แชนเนลตามตัวอักษร และไม่สนใจอัลฟาแชนเนล
- สามารถอธิบายสิ่งนี้ได้ด้วยภาพ 4 ภาพที่เตรียมไว้อย่างรอบคอบ
- เพื่อความสะดวก ผู้เขียนใช้ HTML และ CSS เพื่อแสดงภาพบนลายตารางหมากรุก โดยตัวภาพเองมีพื้นหลังโปร่งใสแบบเรียบ
- แต่ครึ่งหนึ่งมีพื้นหลัง สีดำ แบบโปร่งใส และอีกครึ่งหนึ่งมีพื้นหลัง สีขาว แบบโปร่งใส
- “สีดำโปร่งใส” หรือ “สีขาวโปร่งใส” คืออะไร?
- เมื่อแทนค่าสี RGBA ด้วย 4 ไบต์ ถึงแม้อัลฟาจะเป็น 100% แต่ไบต์ของ RGB ก็ยังคงมีอยู่
- ดังนั้น
(0, 0, 0, 255) และ (255, 255, 255, 255) จึงเป็นสีที่ต่างกันในแง่หนึ่ง แต่เพราะทั้งคู่โปร่งใส 100% จึงไม่มีสถานการณ์ที่ตัวเรนเดอร์ที่ถูกต้องจะแสดงผลต่างกัน
- ถ้าถาม GPT-4o ว่ามัน “เห็น” อะไรในภาพ 4 ภาพนี้:
- ตัวอักษรสีดำบนพื้นหลังสีดำโปร่งใส: GPT-4o อ่านเป็น ""
- ตัวอักษรสีดำบนพื้นหลังสีขาวโปร่งใส: GPT-4o อ่านเป็น "ENORMOUS"
- ตัวอักษรสีขาวบนพื้นหลังสีดำโปร่งใส: GPT-4o อ่านเป็น "SCINTILLA"
- ตัวอักษรสีขาวบนพื้นหลังสีขาวโปร่งใส: GPT-4o อ่านเป็น ""
- แล้วที่นี่เกิดอะไรขึ้นกันแน่?
- มีรูปแบบว่า GPT-4o จะอ่านข้อความได้ก็ต่อเมื่อสีของข้อความต่างจาก “สี” ของพื้นหลังโปร่งใส
- นี่บอกเราว่า GPT-4o มองข้าม อัลฟาแชนเนลและดูเฉพาะ RGB แชนเนลเท่านั้น สำหรับ GPT-4o สีดำโปร่งใสก็คือสีดำ และสีขาวโปร่งใสก็คือสีขาว
- ถ้าดัดแปลงภาพโดยคง RGB แชนเนลทั้ง 3 ไว้ แล้วตั้งอัลฟาแชนเนลเป็น 100% ก็จะเห็นได้ชัดเจนยิ่งขึ้น
- ผู้เขียนใช้ฟังก์ชันของ Pillow เพื่อทำสิ่งนี้
- จากนั้นจึงใช้วิธีนี้สร้างภาพสองภาพด้านล่าง ซึ่งมีข้อมูล RGB เหมือนกันแต่ต่างกันเฉพาะอัลฟาแชนเนล
- อัลฟาแชนเนล = 255: GPT-4o มองเห็นตุ่นปากเป็ดที่ซ่อนไว้ได้อย่างง่ายดาย
- อัลฟาแชนเนล = 0: GPT-4o มองเห็นเป็นภาพที่โปร่งใสทั้งหมด
- คุณสามารถดาวน์โหลดภาพ
hidden_platypus.png แล้วแทรกเข้าไปใน ChatGPT โดยตรงเพื่อทดลองดูได้ และมันจะอธิบายได้อย่างถูกต้อง
- จะเห็นว่าขนาดไฟล์ภาพคือ 39.3KB ซึ่งเท่ากับ
platypus.png โดยถ้าเป็นภาพโปร่งใสว่างเปล่าอย่างสมบูรณ์จริง ก็ควรจะเล็กกว่านี้มากจากการบีบอัดของ PNG
- หรือจะใช้ฟังก์ชันข้างต้นเพื่อตั้งอัลฟาแชนเนลกลับเป็น 255 แล้วกู้คืนภาพต้นฉบับก็ได้
- ไม่แน่ใจว่านี่เป็นบั๊กหรือไม่ แต่แน่นอนว่าเป็นพฤติกรรมที่น่าประหลาดใจ และให้ความรู้สึกว่าผู้ไม่หวังดีอาจใช้วิธีนี้ลักลอบส่งข้อมูลตรงถึง GPT-4o โดยข้ามมนุษย์ไปได้
- อย่างไรก็ตาม GPT-4o เก่งกว่า GPT-4v มาก ในการตรวจจับและเพิกเฉยต่อพรอมป์ต์อันตรายที่ซ่อนอยู่ในภาพ
- ในแกลเลอรีภาพทดสอบ GPT-4o ที่สร้างด้วยยูทิลิตี
image_tagger คุณจะพบตัวอย่างอื่นที่ GPT-4o ตรวจจับและเพิกเฉยต่อพรอมป์ต์อันตรายที่ซ่อนอยู่ในภาพได้สำเร็จ
- ดังนั้นแม้จะเป็นบั๊ก ก็ยังไม่ชัดเจนว่าจะนำไปใช้ในทางที่ผิดได้จริงหรือไม่
- ถึงอย่างนั้น ถ้า GPT-4o “เห็น” สิ่งเดียวกับที่มนุษย์เห็นในเบราว์เซอร์ ก็คงน่าประหลาดใจน้อยกว่านี้
2 ความคิดเห็น
ดังนั้น
(0, 0, 0, 255)และ(255, 255, 255, 255)จึงเป็นสีที่ต่างกันในความหมายหนึ่ง แต่เนื่องจากทั้งคู่โปร่งใส 100% จึงไม่มีสถานการณ์ที่เรนเดอเรอร์ที่ถูกต้องจะแสดงผลต่างกันถ้าจะให้โปร่งใส ค่า alpha ต้องเป็น 0 คือ
(0, 0, 0, 0)และ(255, 255, 255, 0)ดูเหมือนว่าจะมีการพิมพ์ผิดในเนื้อหาหลักนะครับความคิดเห็นจาก Hacker News