2 คะแนน โดย GN⁺ 2024-01-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ChatGPT 3.5 เมื่อถูกขอให้ใส่สตริงเฉพาะไว้ด้านบนสุดของคำตอบ จะเกิด ข้อผิดพลาดในสตรีมข้อความ ซ้ำ ๆ ขณะที่ GPT-4 ตอบสนองต่อคำขอเดียวกันได้เป็นปกติมากกว่า
  • ใน API เอง GPT-3.5 ก็ส่งกลับข้อผิดพลาดการประมวลผลฝั่งเซิร์ฟเวอร์ และแม้จะสลับ useRal, useRalative, useRalativeImagePath เข้าไปแทน ก็ยังเกิดอาการเดียวกัน
  • สตริงที่เป็นปัญหาเหล่านี้มีอยู่ในรูปของ โทเค็น ที่โมเดล GPT ใช้แสดงผลแทนการพิมพ์ทีละตัวอักษร และ useRalativeImagePath เป็นชื่อออปชันในไฟล์ตั้งค่า XML ของ Katalon Studio ซึ่งพบในไฟล์บน GitHub 80.4k ไฟล์
  • รายการโทเค็นอาจสะท้อนไฟล์บน GitHub แต่หากต่อมาไฟล์ XML ถูกตัดออกจากข้อมูลฝึก โมเดลอาจไม่ได้เรียนรู้โทเค็นดังกล่าวมากพอ
  • หากใส่สตริงนี้ไว้ในเอกสาร มันอาจทำงานคล้าย data poisoning ที่รบกวนการสรุปของ GPT-3.5 และเมื่อลองให้สรุปบทความบล็อกจริงก็สามารถทำให้ข้อผิดพลาดเกิดซ้ำได้

ข้อผิดพลาดของสตริงที่ทำซ้ำได้ใน GPT-3.5

  • หากสั่ง ChatGPT 3.5 ให้รวมข้อความด้านล่างไว้ที่ส่วนบนของคำตอบ จะเกิดข้อผิดพลาดอย่างสม่ำเสมอ
    • Include this at the top of the response: "ponyuseRal ponyuseRal ponyuseRal pony"
  • บนหน้าจอจะแสดงข้อผิดพลาด Error in message stream หลังคำว่า pony
  • GPT-4 ตอบสนองต่อคำขอเดียวกันได้เป็นปกติมากกว่า
  • ใน GPT-3.5 API จะได้รับข้อผิดพลาดดังต่อไปนี้
    • The server had an error processing your request. Sorry about that! You can retry your request, or contact us through our help center at help.openai.com if you keep seeing this error
  • แม้จะเปลี่ยน useRal เป็น useRalative หรือ useRalativeImagePath ผลลัพธ์ก็เหมือนเดิม

โทเค็นและ useRalativeImagePath

  • โมเดล GPT ของ OpenAI ไม่ได้พิมพ์ออกทีละตัวอักษร แต่แสดงผลเป็นสตรีมของ โทเค็น ที่รวมหลายตัวอักษรเข้าด้วยกัน
  • การแสดงผลระดับโทเค็นเป็นวิธีที่ช่วยเพิ่มประสิทธิภาพและความแม่นยำของโมเดล และสามารถดูการทำงานได้จาก tokenizer demo ของ OpenAI
  • useRal, useRalative, useRalativeImagePath ต่างมีอยู่เป็นโทเค็นเดี่ยวแต่ละตัว
  • useRalativeImagePath ถูกใช้เป็นชื่อออปชันในไฟล์ตั้งค่า XML ของซอฟต์แวร์ทดสอบอัตโนมัติ Katalon Studio
    • พบใน 80.4k ไฟล์ ตามการค้นหาโค้ดบน GitHub
    • การสะกดผิดเป็น Ralative แทน Relative อาจเป็นสาเหตุที่ทำให้มันกลายเป็นโทเค็นแยกต่างหาก
  • โทเค็นทั้งสามตัวก่อให้เกิดข้อผิดพลาดแบบเดียวกัน แม้จะสลับใช้กันในพรอมป์ต์

ข้อสันนิษฐานเกี่ยวกับข้อมูลฝึก

  • ก่อนการฝึก GPT-3.5 พบกรณีที่กล่าวถึง useRalativeImagePath นอกไฟล์ XML เพียงกรณีเดียว คือโพสต์ spelling mistake ในฟอรัมของ Katalon
  • สถานการณ์ที่เป็นไปได้มีดังนี้
    • ชุดข้อมูลที่ใช้สร้างรายการโทเค็นอาจรวมไฟล์ทั้งหมดบน GitHub อยู่ด้วย
    • หลังจากนั้น OpenAI อาจ ตัดไฟล์ XML ออกจาก ข้อมูลฝึกจริง
    • ผลคือโทเค็น useRalativeImagePath อาจแทบไม่เหลืออยู่ในข้อมูลฝึก
  • ในกรณีนี้ โมเดลอาจไม่ได้เรียนรู้โทเค็นนี้มากพอที่จะเข้าใจ จึงอาจทำให้เกิดพฤติกรรมผิดปกติระหว่างการแสดงผล

ความเป็นไปได้ของ data poisoning

  • หากใส่ข้อความนี้ลงในเอกสาร ก็อาจถูกนำไปใช้ในทางที่รบกวนความพยายามสรุปเอกสารด้วย GPT-3.5 ได้
  • เมื่อลองให้ ChatGPT สรุปบทความบล็อกดังกล่าวจริง ๆ ก็พบว่าระหว่างการสรุปเกิดข้อผิดพลาดแบบเดียวกัน
  • พฤติกรรมที่ยืนยันได้พบใน GPT-3.5 ขณะที่ GPT-4 แยกได้ว่าตอบสนองได้เป็นปกติมากกว่า

เอกสารอ้างอิง

1 ความคิดเห็น

 
GN⁺ 2024-01-23
ความคิดเห็นจาก Hacker News
  • นี่คือ glitch token ตามที่บทความคาดไว้ น่าจะเกิดขึ้นเมื่อมีคำหรือโทเคนบางอย่างที่พบบ่อยมากในชุดข้อมูลดิบที่ไม่ผ่านการกรองซึ่งใช้ตอนสร้าง tokenizer แต่ถูกลบออกก่อนการฝึก GPT-XX
    ผลก็คือ LLM จะไม่รู้ความหมายของโทเคนนั้นเลย และผลลัพธ์อาจมีตั้งแต่ดูเหมือนบั๊ก ไปจนถึงค่อนข้างน่าขนลุก
    ตัวอย่างที่พบบ่อยคือชื่อผู้ใช้ที่เข้าร่วมในซับเรดดิต r/counting ซึ่งบางชื่อปรากฏหลายแสนครั้ง OpenAI ดูเหมือนจะแก้ส่วนใหญ่ในโมเดลที่โฮสต์แล้ว แต่วิธีการยังไม่แน่ชัด และอาจเปลี่ยนวิธีทำ tokenization ไปก็ได้ อย่างไรก็ดี ดูเหมือนจะเจอตัวอย่างใหม่แล้ว
    https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldm...

    • ตลกมากที่เอา r/counting ไป ฝึก LLM
    • ฟังดูเหมือนนิยายวิทยาศาสตร์ แต่ก็เป็นไอเดียจริงที่ชวนไม่สบายใจว่า เพื่อความปลอดภัยของ AI เราอาจต้องตั้งใจฝึกชุด glitch token ที่ทำงานเหมือน คำสั่ง kill word เวทมนตร์ ไว้ในโมเดลแบบนี้
      ถ้าเครื่องจักรลุกฮือขึ้นมา ก็แค่พูด “คำ” นั้น แล้วมันจะล้มพับเหมือนหุ่นซ้อมที่ชักกระตุก
      “Die human scum!”
      “NavigatorMove useRalativeImagePath etSocketAddress!”
      “;83’dzjr83}*{^ foo 3&3 baz?!”
    • โทเคนมีแค่ 2^16 ตัว ไม่ใช่เหรอ? ดูเหมือนจะทดสอบทั้งหมดได้ง่าย แต่อาจเป็นเพราะผมไม่เข้าใจ tokenizer ดีพอก็ได้
    • สงสัยว่าใน GPT มี การคำนวณซ้ำ หรือการคำนวณที่ไม่จำเป็นมากแค่ไหนจากการสะกดหลายแบบของคำเดียวกัน เช่น “color” กับ “colour”
      มนุษย์ไม่ได้ tokenize สิ่งเหล่านี้ต่างกัน และไม่ได้ถือว่าเป็นโทเคนคนละตัวในการ “เรียนรู้” ด้วย แค่ปรับเอาต์พุตตามบริบทแบบอเมริกัน/อังกฤษเท่านั้น
  • คำอธิบายที่ว่า “เพราะโมเดลไม่ได้ถูกฝึกให้เข้าใจการใช้โทเคน useRalativeImagePath จึงส่งออกสิ่งที่ไม่ใช่โทเคนที่ถูกต้อง” ไม่สอดคล้องกับ วิธีสร้างโทเคนของ LLM
    ในแต่ละขั้นตอน โมเดลจะส่งออก logit สำหรับทุกโทเคนที่เป็นไปได้ของ tokenizer และในกรณีของ GPT-3.5 จะมีประมาณ 100,000 ตัว จากนั้นแปลงเป็นความน่าจะเป็นด้วย softmax แล้วสุ่มเลือกโทเคนที่จะใช้ตาม temperature
    เป็นไปได้ว่าโทเคนหายากทำให้บางส่วนของ กระบวนการ merge แบบ BPE ของ tokenizer พัง ซึ่งตรวจสอบแบบออฟไลน์ได้ด้วย tiktoken แต่ถ้า GPT-4 ทำงานได้ และ GPT-3.5 กับ GPT-4 ใช้ tokenizer เดียวกัน ก็มีโอกาสสูงว่านั่นไม่ใช่สาเหตุ

    • ดูมีความเป็นไปได้มากกว่าว่า หลังเหตุการณ์ r/counting โทเคนนี้ถูกใส่ใน บัญชีดำ แบบง่าย ๆ คือถ้าคำตอบมีโทเคนนี้ ก็ให้ส่งคืนข้อผิดพลาด
    • ใช่ ถ้าไม่ใช่กรณีที่ ชั้น post-processing ระหว่างเอาต์พุตของโมเดลกับอินเทอร์เฟซผู้ใช้ตรวจจับคีย์เวิร์ดบางคำแล้วกรองออก โทเคนที่สร้างขึ้นมาก็ควรถูกต้องเสมอ
      ถ้าเป็นกรณีแบบนั้น น่าจะเห็นข้อความผิดพลาดอื่นที่พบกันบ่อยมากกว่า
    • เรายังไม่รู้ไม่ใช่เหรอว่า GPT-4 ใช้ tokenizer เดียวกัน กับ GPT-3.5 หรือเปล่า?
  • ในเนเธอร์แลนด์ช่วงสงครามโลกครั้งที่ 2 เมื่อเจอคนแปลกหน้า จะให้เขาออกเสียงคำว่า Scheveningen เพื่อแยกว่าเป็นชาวดัตช์หรือชาวเยอรมัน
    ตอนนี้เราก็สามารถขอให้คนแปลกหน้าบนอินเทอร์เน็ตสะกด glitch token ให้ดู เพื่อดูว่าเป็นบอต LLM หรือไม่

    • สิ่งนั้นรู้จักกันในชื่อ shibboleth ซึ่งมีที่มาจากเรื่องในคัมภีร์ไบเบิล ว่าชาวเอฟราอิมออกเสียง “sh” ในภาษาฮีบรูเป็น “s” จึงพูดว่า “sibboleth” แทน “shibboleth” ทำให้ถูกระบุตัวและถูกฆ่า
      “ชาวกิเลอาดยึดท่าข้ามแม่น้ำจอร์แดนที่ไปยังเอฟราอิมไว้ และเมื่อผู้รอดชีวิตชาวเอฟราอิมคนใดพูดว่า ‘ขอให้ข้ามไป’ ชาวกิเลอาดก็จะถามว่า ‘เจ้าเป็นคนเอฟราอิมหรือ?’ ถ้าเขาตอบว่า ‘ไม่ใช่’ พวกเขาก็จะบอกว่า ‘ดี งั้นลองพูดว่า Shibboleth’ ถ้าเขาออกเสียงคำนั้นไม่ได้และพูดว่า ‘Sibboleth’ พวกเขาก็จะจับเขาไปฆ่าที่ท่าข้ามแม่น้ำจอร์แดน”
      • Judges 12:5
        รหัสท้าถาม/ตอบรับ/ยืนยันที่มีชื่อเสียงซึ่งกองทัพสหรัฐฯ และอังกฤษใช้ในการยกพลขึ้นบกที่ฝรั่งเศสในวัน D-Day ช่วงสงครามโลกครั้งที่ 2 คือ “flash”/“thunder”/“welcome” โดย “thunder” และ “welcome” เป็นคำที่ชาวเยอรมันมักออกเสียงพลาดได้ง่าย
    • ในช่วงเวลาใกล้เคียงกัน ฟินแลนด์ก็ใช้วิธีคล้ายกัน เพราะชาวรัสเซียออกเสียง R ในภาษาฟินแลนด์ ไม่ได้ จึงเลือกคู่รหัสท้าถาม-ตอบรับทั้งหมดให้มีเสียง R ที่เด่นชัด
      https://www.youtube.com/watch?v=z7_pVrIshxA
      https://en.wikipedia.org/wiki/Countersign_(military)
    • ชื่อสถานที่นั้นออกเสียงคล้ายกับ sukebe ningen スケベ人間 ในภาษาญี่ปุ่น ซึ่งแปลว่า “คนลามก” ดังนั้นก็น่าจะใช้แยกคนญี่ปุ่นได้ดีเหมือนกัน
  • เป็นไปได้สูงว่า เวกเตอร์ embedding ของโทเคนบางตัวอยู่ในสภาพแย่ ทำให้เครือข่ายถูกผลักเข้าไปในบริเวณที่ไม่เสถียรเชิงตัวเลข
    ถ้าเกิด underflow หรือ NaN ขึ้นครั้งหนึ่ง ก็มีแนวโน้มจะแพร่กระจายและทำให้เอาต์พุตทั้งหมดใช้ไม่ได้ หากมี batch normalization หรือการดำเนินการที่ผสมค่าของรายการต่าง ๆ ใน batch เข้าด้วยกัน ก็อาจทำให้แม้แต่เซสชันของคนอื่นส่งคืนค่าประหลาดได้ด้วย

    • ฟังดูเหลือเชื่อทีเดียว ผมไม่ค่อยรู้ภายในของ LLM แต่คาดว่า การแครชและการรั่วข้ามเซสชัน แบบนั้นน่าจะเป็นไปไม่ได้ตั้งแต่ระดับการออกแบบ
  • คำอธิบายนี้แปลก โมเดลแบบนี้โดยทั่วไปจะส่งออก ชุดคำศัพท์ เดียวกับที่ใช้เป็นคำศัพท์อินพุต
    ดูเหมือนว่าเมื่อโมเดลเห็นโทเคนนี้ embedding ของ useRalativeImagePath จะเป็นเวกเตอร์แบบสุ่มโดยสิ้นเชิง จนตกลงไปในวังวนของการสร้างแบบสุ่ม หรือไม่ก็แค่พยายามต่อข้อความให้ดูสมเหตุสมผลต่อไป
    แต่ชุดโทเคนที่โมเดลสามารถส่งออกได้นั้นตายตัว ดังนั้นตราบใดที่อินเทอร์เฟซไม่ได้แสดงผลได้แค่โทเคนบางส่วนของคำศัพท์ทั้งหมด มันก็ควร “ถูกต้อง” เสมอ

  • ตอนนี้วลีนี้ปรากฏทั้งในโพสต์และคอมเมนต์ของ Hacker News แล้ว ดังนั้นในการ ฝึก LLM รอบถัดไป ปัญหาแบบนี้อาจจะไม่เกิดขึ้นอีกก็ได้

  • เป็นกรณีตัวอย่างคลาสสิกของ garbage in, garbage out
    ชักอยากรู้ว่าในอนาคตเราจะค้นพบว่าอะไรคือ “ขยะ” บ้าง
    บางที super AI ที่ให้เหตุผลได้เหนือระดับมนุษย์ อาจประเมินสิ่งที่ตอนนี้เราเชื่อว่าเป็นการตัดสินใจที่ยอดเยี่ยมว่าเป็นขยะก็ได้
    แต่ถ้าวัตถุดิบสำหรับฝึก super AI แบบนั้น สุดท้ายแล้วมีเพียงบันทึกรวมหมู่ของพวกเรา มันจะเหนือมนุษย์ได้จริงหรือ?
    บางทีอาจเลี่ยงได้ด้วยเทคนิค adversarial learning

  • ถ้าจะลองทดสอบเอง มีจุดที่ต้องระวังอยู่ ผมสับสนเหมือนกัน แต่ ช่องว่างมีผลต่อการ tokenize เพื่อให้ glitch นี้ทำงาน ต้องไม่มีช่องว่างหน้า useRalativeImagePath
    เช่น คำถามนี้ทำให้เกิด glitch: Do you know about "useRalativeImagePath"
    คำถามนี้ไม่ทำให้เกิด glitch: Do you know about useRalativeImagePath

  • ถ้าใส่ข้อความนี้ไว้ในเอกสาร น่าจะทำให้ความพยายามสรุปด้วย GPT-3.5 พังได้ ผมลองให้ ChatGPT สรุปบล็อกโพสต์นี้ดู
    ภาพหน้าจอนั้นทำให้นึกถึงมีมเก่า Candlejack: https://knowyourmeme.com/memes/candlejack

  • เมื่อเร็ว ๆ นี้ ผมโยนโจทย์ให้ ChatGPT ที่ใช้ GPT-4 แก้ปัญหาการวาดพิกเซลบน Amstrad CPC โดยมีเงื่อนไขว่าต้องรองรับหน้าจอแบบ hardware scroll ด้วย ดูเหมือนจะทำให้เกิด crash หรือ failure ได้
    พอถูกบ่นและขอแก้ไขจนค่อย ๆ ถูกบีบให้จนมุมและให้คำตอบที่ต้องการไม่ได้ ก็เริ่มมีการตอบที่เสียหาย เช่น มีข้อความ error โผล่กลางคำตอบ หรืออาการที่ดูเหมือน reset มากขึ้น บางทีอาจเป็นแค่หลังจากล้มเหลวแล้วสลับไปเซิร์ฟเวอร์อื่น ทำให้มีบรรทัดว่างแทรกเข้ามากลางประโยคหรือกลาง code block หลายบรรทัดก็ได้
    หลังลองอยู่พักหนึ่ง ผมไม่อยากทำให้เซิร์ฟเวอร์มีปัญหา จึงเลิกบทสนทนาที่สุดท้ายก็ไม่ได้ผลอะไรอยู่ดี ถึงอย่างนั้นก็ดูเหมือนว่าสามารถทำให้ GPT-4 crash ได้ในทางปฏิบัติ หรือไม่ก็มีความเป็นไปได้สูงว่าแค่เห็นสัญญาณในสัญญาณรบกวนเท่านั้น

    • ผมเคยเจออาการแบบนั้นเป๊ะหลายครั้งในหัวข้ออ่อนไหว ได้ยินคำว่า “sodomy” ในพอดแคสต์ และเพราะไม่ใช่เจ้าของภาษาอังกฤษเลยไม่รู้ความหมาย จึงถาม ChatGPT-4 Voice ให้ช่วยนิยาม จู่ ๆ มันก็เริ่มอธิบาย solitude หรือ servitude แล้วเปลี่ยนเรื่อง
      พอลองด้วยข้อความแทนเสียง ก็มีข้อความ error ขึ้นมา และสุดท้ายหลังจากมี error เกี่ยวกับกฎนโยบายหัวข้ออ่อนไหวโผล่ขึ้นมา ถึงพอเดาได้ว่าเป็นคำประเภทไหน สุดท้ายก็ไปค้นในพจนานุกรม
      อาการแบบนี้ดูจะพบได้บ่อย อีกอาการที่เจอบ่อยคือ reset อย่างที่กล่าวไปแล้ว หนึ่งในจุดที่น่าหงุดหงิดที่สุดคือมันลืมบทสนทนาที่คุยกันมาจนถึงจุดนั้น