18 คะแนน โดย xguru 2024-06-10 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ข้อ:
    1. 64 ≠ 170
    2. มันงี่เง่ามาก (การฝังตัวโดยใช้ค่า 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
    • 12+32+52+72=1+9+25+49=84
  • หากเพิ่มกริด 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 ได้
    • 3×(12+22+32+42+52)+5=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 ความคิดเห็น

 
hi098123 2024-06-10

ดังนั้น (0, 0, 0, 255) และ (255, 255, 255, 255) จึงเป็นสีที่ต่างกันในความหมายหนึ่ง แต่เนื่องจากทั้งคู่โปร่งใส 100% จึงไม่มีสถานการณ์ที่เรนเดอเรอร์ที่ถูกต้องจะแสดงผลต่างกัน

ถ้าจะให้โปร่งใส ค่า alpha ต้องเป็น 0 คือ (0, 0, 0, 0) และ (255, 255, 255, 0) ดูเหมือนว่าจะมีการพิมพ์ผิดในเนื้อหาหลักนะครับ

 
xguru 2024-06-10

ความคิดเห็นจาก Hacker News

  • ความจำเป็นของทางเลือกโอเพนซอร์สสมัยใหม่: มีความจำเป็นอย่างยิ่งต่อทางเลือกโอเพนซอร์สสมัยใหม่ของ Tesseract ที่อิงกับเทคโนโลยีแมชชีนเลิร์นนิงล่าสุด โดย LLM ที่ใช้อยู่ในปัจจุบันทรงพลังเกินความจำเป็นและมีค่าใช้จ่ายสูง
  • ความสามารถด้าน OCR ของ Llava1.6, IntenVL, CogVLM2: โมเดลเหล่านี้สามารถทำ OCR ได้ด้วย tile image embedding และ LLM เพียงอย่างเดียว หากป้อนผล OCR จาก Tesseract เข้าไป ความน่าเชื่อถือจะดีขึ้น แต่ไม่ใช่สิ่งจำเป็น
  • การรู้จำข้อความของ Clip embedding: Clip embedding สามารถ “อ่าน” ข้อความได้หากข้อความมีขนาดใหญ่เพียงพอ และการทำ tiling ช่วยให้อ่านข้อความขนาดเล็กได้
  • ความอยากรู้อยากเห็นและการสำรวจอย่างเปิดกว้าง: ชอบความอยากรู้อยากเห็นและการสำรวจอย่างเปิดกว้างเกี่ยวกับการทำงานของเทคโนโลยีนี้ อีกทั้งความเชื่อมโยงกับทฤษฎีกลุ่มรีนอร์มัลไลเซชันเพื่อการตีความโมเดลแมชชีนเลิร์นนิงก็น่าสนใจ
  • ประสิทธิภาพของการส่งข้อความเป็นภาพ: การส่งข้อความในรูปภาพอาจมีประสิทธิภาพมากกว่า ด้วยฟอนต์ขนาดเล็ก ภาพขนาด 512x512 สามารถบรรจุโทเค็นได้ 400-500 โทเค็นอย่างสบาย
  • การขาดเอกสารของ OpenAI: ไม่เข้าใจว่าทำไม OpenAI ถึงไม่จัดทำเอกสารที่ชัดเจนและครอบคลุม สำหรับผู้ที่ใช้งาน API การขาดเอกสารนี้เป็นอุปสรรคใหญ่
  • ข้อผิดพลาดในการประมวลผลภาพของ GPT-4: เคยพบปัญหาที่ GPT-4 vision บิดเบือนเนื้อหาเมื่อทำ OCR กับภาพเดียวที่แสดงหลายหน้าของ PDF หาก OpenAI มีเอกสารที่ชัดเจน ปัญหาแบบนี้ก็น่าจะหลีกเลี่ยงได้อย่างมีประสิทธิภาพมากขึ้น
  • คุณภาพของบทความ: คิดว่าบทความนี้เขียนได้ดีมาก อธิบายหัวข้อได้เข้าใจง่ายแต่ยังลึกซึ้ง การจะอธิบายให้เรียบง่ายได้ต้องเข้าใจหัวข้อนั้นเป็นอย่างดี
  • ความเป็นไปได้ของการใช้ VQVAE: มีความเป็นไปได้ที่จะใช้ VQVAE เพื่อสร้างพจนานุกรมโทเค็นและแปลงภาพผ่าน encoder
  • ต้นทุนของการแมปภาพกับโทเค็น: การแมปภาพไปยัง token embedding อาจใช้การคำนวณและพื้นที่มากกว่าการแมปไปยัง token ID ราว 170 เท่า
  • ความเป็นไปได้ของการทำ tiling แบบ 13x13: ยังตัดความเป็นไปไม่ได้ไม่ได้ว่า tiling แบบ 13x13 อาจไม่สามารถรู้จำกริดวัตถุ 13x13 ได้ เนื่องจาก receptive field ที่ซ้อนทับกัน และอาจมีพีระมิดของความละเอียด tiling ที่ซ้อนทับกันได้เช่นกัน
  • วิธีทดสอบประสิทธิภาพของ GPT-4: วิธีทดสอบประสิทธิภาพของ GPT-4 โดยขอให้ส่งรูปร่างสีในกริด 7x7 ออกมาเป็น JSON นั้นชาญฉลาดมาก