Dictionary · กลไกโมเดล · 64 / 321

Seed

ตัวเลขตั้งต้นของการสุ่มที่ล็อกไว้เพื่อให้สั่งงานเดิมแล้วมีโอกาสได้ผลใกล้เดิม เอกสารผู้ให้บริการหลายเจ้าย้ำว่าใส่ seed เดิมก็ไม่รับประกันว่าเหมือนเป๊ะ

Seed คือตัวเลขจำนวนเต็มที่เราใส่เข้าไปพร้อมคำสั่ง เพื่อกำหนดจุดตั้งต้นของการสุ่มในระบบ AI งานสร้างภาพและงานสร้างข้อความมีการสุ่มแทรกอยู่ในขั้นตอนการทำงาน สั่งด้วย prompt เดิมสองรอบจึงมักได้ผลไม่เหมือนเดิม เอกสารของ diffusers ซึ่งเป็นชุดเครื่องมือของ Hugging Face สำหรับรัน diffusion model แบบที่ stable-diffusion ใช้ เปิดหัวข้อเรื่องการทำผลลัพธ์ให้ซ้ำได้ด้วยประโยคว่า "Diffusion is a random process that generates a different output every time." แล้วอธิบายต่อว่าขั้นตอนสร้างภาพต้องสุ่มก้อน noise ตั้งต้นขึ้นมาก่อน ส่วน seed คือค่าที่กำหนดว่าก้อน noise นั้นจะออกมาหน้าตาแบบไหน ใส่เลขเดิมกลับเข้าไปก็ได้จุดตั้งต้นเดิม ทั้งนี้เอกสารแนะนำให้สร้าง Generator ฝั่ง CPU แล้วตั้งเลขนั้นกับ Generator ส่งเข้าไปแทนการส่งตัวเลขตรงๆ ถ้าอยากได้ผลที่ทำซ้ำได้ และต้องตั้งเลขนั้นใหม่ทุกครั้งที่สั่ง เพราะ Generator ที่ถูกใช้ไปแล้วหนึ่งรอบจะเปลี่ยนสถานะภายใน รอบถัดไปจะให้ผลไม่เหมือนเดิม

ฝั่งงานข้อความ ผู้ให้บริการวาง seed ไว้เป็นค่าหนึ่งที่ส่งไปกับ request ตอน inference เอกสารอ้างอิง REST ของ Azure OpenAI บน Microsoft Learn อธิบายค่านี้ว่า "This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend." แปลว่าระบบจะพยายามให้ผลเดิมเท่าที่ทำได้ ไม่ได้รับประกัน และให้ดูค่า system_fingerprint ที่ตอบกลับมาเพื่อจับว่าเบื้องหลังเปลี่ยนไปหรือยัง จุดที่ต้องอ่านให้ครบคือในตารางเดียวกันนั้นกำกับชนิดของ field seed ไว้ว่า integer or null (deprecated) คือขึ้นสถานะเลิกแนะนำให้ใช้แล้ว จึงไม่ควรวางระบบระยะยาวไว้บนค่านี้ เรื่องความไม่แน่นอนนี้คู่มือ cookbook ของ OpenAI เขียนไว้ตรงกัน โดยหน้านั้นระบุว่าค่านี้ยังอยู่ในสถานะ beta และรองรับเฉพาะ gpt-4-1106-preview กับ gpt-3.5-turbo-1106 ซึ่งทั้งสองรุ่นตอนนี้อยู่ในรายการเลิกให้บริการของ OpenAI แล้ว ขณะที่เอกสารอ้างอิงของ Azure OpenAI ฉบับปัจจุบันวาง seed ไว้เป็นค่าทั่วไปของ chat completions โดยไม่ได้จำกัดรุ่น หน้า cookbook เดียวกันนี้ยังกำชับว่า "Set all other parameters (prompt, temperature, top_p, etc.) to the same values across requests." และยอมรับว่ายังมี "a small chance that responses differ even when request parameters and system_fingerprint match, due to the inherent non-determinism of our models" ฝั่งภาพเขียนต่างออกไป เอกสาร Imagen บน vertex-ai ระบุว่า seed คือ "Any non-negative integer you provide to make output images deterministic. Providing the same seed number always results in the same output images." แต่ประโยคถัดมาในย่อหน้าเดียวกันกำกับเงื่อนไขไว้ว่า ถ้า model ที่ใช้อยู่รองรับ digital watermarking ต้องตั้ง addWatermark เป็น false ก่อนจึงจะใช้ field นี้ได้ ซึ่งเอกสารหน้าเดียวกันระบุว่าค่าเริ่มต้นของ addWatermark คือ true และระบบจะใส่ลายน้ำให้อัตโนมัติ แปลว่าตามปกติต้องสั่งปิดลายน้ำเองก่อนจึงจะใช้ seed ได้ และระบุช่วงตัวเลขที่รับคือ 1 ถึง 2147483647 ส่วนเอกสารของ Amazon Titan Image Generator บน amazon-bedrock เลือกใช้คำที่ระมัดระวังกว่า บอกว่าให้ใส่ seed เดิมพร้อมตั้งค่าอื่นเหมือนรอบก่อน "to allow inference to create a similar image" คือได้ภาพที่ใกล้เคียง ไม่ได้สัญญาว่าตรงกันทุกจุด

คนทำงานสายภาพเป็นกลุ่มที่เจอคำนี้บ่อย เพราะมักต้องการภาพชุดเดิมแล้วขยับทีละนิด วิธีที่ใช้กันคือพอได้ภาพที่ลูกค้าชอบแล้วก็จดเลข seed ของภาพนั้นไว้ รอบต่อไปใส่เลขเดิมกลับเข้าไปพร้อมแก้คำสั่งเล็กน้อย เพื่อให้องค์ประกอบโดยรวมมีโอกาสใกล้เคียงของเดิมมากขึ้น ไม่ใช่การรับประกันว่าจะได้องค์ประกอบเดิม ทีมที่ทำ regression-testing กับงาน AI ก็ใช้หลักเดียวกัน คือตรึงตัวแปรให้มากที่สุดก่อน แล้วค่อยดูว่าผลที่เปลี่ยนไปมาจากสิ่งที่เราตั้งใจแก้จริงหรือเปล่า ข้อควรระวังคือ seed ไม่ได้ทำให้ผลลัพธ์ดีขึ้น มันแค่ตรึงจุดตั้งต้น และอย่ารับปากลูกค้าว่ากดซ้ำเมื่อไหร่ก็ได้ของเดิมเป๊ะ เพราะเอกสารของ Azure OpenAI และ cookbook ของ OpenAI เขียนไว้เองว่าไม่รับประกัน ส่วนฝั่งภาพก็มีเงื่อนไขกำกับ เช่น Imagen ที่ถ้า model รองรับ digital watermarking ต้องตั้ง addWatermark เป็น false ก่อนถึงจะใช้ field นี้ได้ อีกจุดที่เข้าใจผิดกันบ่อยคือคิดว่าเลขเดิมย้ายไปใช้กับ model คนละรุ่นคนละเจ้าแล้วจะได้ภาพเดิม ทั้งที่เอกสารแต่ละเจ้าพูดถึง seed ในบริบทระบบของตัวเองเท่านั้น และเอกสาร diffusers ปิดท้ายหัวข้อนี้ว่า "You can try to limit randomness, but it is not guaranteed even with an identical seed." ซึ่งก็คือเรื่อง non-determinism ที่ติดมากับวิธีทำงานของระบบเหล่านี้

ตัวอย่างจากบทสนทนาจริง

ฝ่ายการตลาด: พี่คะ ภาพโฆษณาที่ทำไว้เมื่อวาน ลูกค้าขอเปลี่ยนแค่สีเสื้อ หนูสั่งใหม่ด้วยคำสั่งเดิมทุกตัวอักษร แต่ได้หน้าคนละคน มุมกล้องก็คนละมุมเลยค่ะ

กราฟิก: ปกติระบบจะสุ่มเลข seed ให้ใหม่ในการสั่งแต่ละครั้ง ภาพเมื่อวานเลยเป็นคนละจุดตั้งต้นกับรอบนี้ ถ้าจดเลข seed ของภาพที่ลูกค้าชอบไว้แล้วใส่กลับเข้าไปพร้อมคำสั่งเดิม โอกาสได้องค์ประกอบใกล้ของเดิมจะสูงขึ้นมาก แต่ต้องบอกลูกค้าไว้ก่อนว่าไม่การันตีเหมือนเป๊ะ เอกสารของผู้ให้บริการเขียนกำกับเองว่าเป็นการพยายามให้ผลเดิมเท่าที่ทำได้ และบางระบบยังมีเงื่อนไขเพิ่ม เช่น ต้องปิด watermark ก่อนถึงจะใช้ seed ได้

ระวังสับสนกับ

  • temperature : temperature คือปุ่มปรับว่าจะสุ่มกว้างหรือแคบ ยิ่งสูงยิ่งได้คำตอบหลากหลาย ส่วน seed ไม่ได้แตะระดับความหลากหลายเลย มันแค่กำหนดว่าการสุ่มจะเริ่มจากจุดไหน คู่มือ cookbook ของ OpenAI จึงบอกให้ตั้ง temperature ให้เท่าเดิมด้วยถ้าอยากได้ผลซ้ำ
  • top-p : top-p เป็นอีกค่าที่คุมขอบเขตการสุ่มเช่นกัน ในคู่มือชุดเดียวกันของ OpenAI ระบุว่าต้องตั้งค่าอื่นทั้งหมดให้เหมือนกันทุกครั้ง เปลี่ยน top-p แล้วผลก็เปลี่ยนได้ถึงจะใช้ seed เลขเดิม
  • parameters : parameters คือค่าน้ำหนักจำนวนมหาศาลภายใน model ที่เกิดจากการ train ซึ่งผู้ใช้ไม่ได้ตั้งเอง ส่วน seed เป็นเลขตัวเดียวที่เรากรอกเองได้ในแต่ละครั้งที่สั่งงาน

ดูคำนี้ใน Knowledge Atlas →

■ ไม่อยากพลาดของใหม่

อ่านจบแล้วอยากตามเรื่อง AI แบบนี้ต่อทุกวัน เรามีสรุปข่าวภาษาไทยส่งทาง LINE ทุกเช้า กดเพิ่มเพื่อนไว้ได้เลย ไม่มีค่าใช้จ่าย

เพิ่มเพื่อนใน LINE →
QR เพิ่มเพื่อน LINE ของ TRAINIAC AIคอมพิวเตอร์สแกนด้วยมือถือได้เลย

RLHFSpeculative decoding