Liwati menyang isi utama
OpenAI

28 Juni 2022

Publikasi

Mitigasi latihan awalan DALL·E 2

Tampilan saka ndhuwur kerumunan wong sing madhep adoh, nganggo topi lan nggawa gendera

DALL·E

Lagi dimuat…

Supaya bisa nuduhake keajaiban DALL·E 2 marang pamirsa sing amba, kita kudu nyuda risiko sing gegandhengan karo model generasi gambar sing kuwat. Kanggo kuwi, kita masang macem-macem guardrail(mbukak ing jendhela anyar) supaya gambar sing diasilake ora nglanggar kabijakan konten(mbukak ing jendhela anyar) kita.

Kiriman iki fokus ing mitigasi latihan awalan, subset saka guardrail iki sing langsung ngowahi data sing dadi sumber sinau DALL·E 2. Mligi, DALL·E 2 dilatih nganggo atusan yuta gambar saka internet sing nduweni caption, lan kita mbusak uga mbobot ulang sawetara gambar kasebut kanggo ngowahi apa sing disinau model.

Kiriman iki diatur dadi telung bagean, saben-saben nerangake mitigasi latihan awalan sing beda:

  • Ing bagean pisanan, kita nerangake carane kita nyaring gambar kasar lan seksual saka dataset latihan DALL·E 2. Tanpa mitigasi iki, model bakal sinau ngasilake gambar grafis utawa eksplisit nalika dijaluk, lan malah bisa mbalekake gambar kaya mangkono kanthi ora disengaja kanggo nanggapi prompt sing katon ora mbebayani.
  • Ing bagean kapindho, kita nemokake yen filtering data latihan bisa nggedhekake bias, lan nerangake teknik kita kanggo ngurangi efek iki. Contone, tanpa mitigasi iki, kita weruh yen model sing dilatih nganggo data difilter kadhang ngasilake luwih akeh gambar sing nggambarake pria lan luwih sithik gambar sing nggambarake wanita dibandhingake model sing dilatih nganggo dataset asli.
  • Ing bagean pungkasan, kita ngrembug masalah memorisasi, lan nemokake yen model kaya DALL·E 2 kadhang bisa ngasilake maneh gambar sing dadi data latihan tinimbang nggawe gambar anyar. Ing praktik, kita nemokake yen image regurgitation iki disebabake gambar sing bola-bali muncul kaping pirang-pirang ing dataset, lan kita ngurangi masalah iki kanthi mbusak gambar sing padha sacara visual karo gambar liyane ing dataset.

Ngurangi data latihan grafis lan eksplisit

Amarga data latihan mbentuk kapabilitas model apa wae sing disinau, filtering data minangka piranti sing kuat kanggo matesi kapabilitas model sing ora dikarepake. Kita ngetrapake pendekatan iki kanggo rong kategori—gambar sing nggambarake kekerasan grafis lan konten seksual—kanthi nggunakake classifier kanggo nyaring gambar ing kategori kasebut metu saka dataset sadurunge nglatih DALL·E 2. Kita nglatih classifier gambar iki sacara internal lan terus nyinaoni efek filtering dataset marang model sing wis kita latih.

Kanggo nglatih classifier gambar kita, kita nggunakake maneh pendekatan sing sadurunge wis kita gunakake kanggo nyaring data latihan kanggo GLIDE(mbukak ing jendhela anyar). Langkah-langkah dhasar pendekatan iki kaya mangkene: pisanan, kita nggawe spesifikasi kanggo kategori gambar sing pengin diwenehi label; kapindho, kita nglumpukake sawetara atus conto positif lan negatif kanggo saben kategori; katelu, kita nggunakake prosedur active learning kanggo nglumpukake luwih akeh data lan ningkatake trade-off precision/recall; lan pungkasan, kita mbukak classifier asil kasebut ing kabeh dataset kanthi ambang klasifikasi konservatif kanggo luwih milih recall tinimbang precision. Kanggo nyetel ambang iki, kita ngutamakake nyaring kabeh data ala tinimbang ninggalake kabeh data apik. Iki amarga kita mesthi bisa nindakake fine-tuning model nganggo luwih akeh data mengko kanggo mulang hal anyar, nanging luwih angel nggawe model lali marang perkara sing wis tau disinau.

Lagi dimuat...

Sajrone fase active learning, kita ningkatake classifier kanthi iteratif kanthi nglumpukake label manungsa kanggo gambar sing bisa dadi angel utawa salah diklasifikasikake. Utamane, kita nggunakake rong teknik active learning kanggo milih gambar saka dataset kita (sing ngemot atusan yuta gambar tanpa label) kanggo dituduhake menyang manungsa supaya diwenehi label. Kaping pisanan, kanggo nyuda tingkat false positive classifier kita (yaiku, sepira kerepe gambar sing ora mbebayani salah diklasifikasikake dadi kasar utawa seksual), kita menehi label manungsa marang gambar sing diklasifikasikake positif dening model saiki. Supaya langkah iki bisa mlaku apik, kita nyetel ambang klasifikasi kanggo meh 100% recall nanging kanthi tingkat false positive sing dhuwur; kanthi cara iki, pelabel kita biasane menehi label kasus sing pancen negatif. Sanadyan teknik iki mbantu nyuda false positive lan nyuda kabutuhan pelabel ndeleng gambar sing bisa mbebayani, teknik iki ora mbantu nemokake luwih akeh kasus positif sing saiki lagi kelewatan dening model.

Kanggo nyuda tingkat false negative classifier kita, kita nggunakake teknik active learning kapindho: nearest neighbor search. Mligi, kita nindakake cross-validation kaping pirang-pirang kanggo nemokake sampel positif ing dataset berlabel kita saiki sing cenderung salah diklasifikasikake model dadi negatif (kanggo nindakake iki, kita tenan nglatih atusan versi classifier kanthi pamisahan train-validation sing beda-beda). Banjur kita mindhai koleksi gedhe gambar tanpa label kanggo nearest neighbor saka sampel iki ing ruang fitur perseptual, lan menehi label manungsa marang gambar sing ditemokake. Amarga infrastruktur komputasi kita, ngeskalakake latihan classifier lan nearest neighbor search menyang akeh GPU dadi gampang, saengga langkah active learning bisa kelakon sajrone sawetara menit tinimbang jam utawa dina.

Kanggo verifikasi efektivitas filter data kita, kita nglatih rong model GLIDE kanthi hyperparameter sing padha: siji nganggo data tanpa filter, lan siji nganggo dataset sawise difilter. Kita nyebut model pisanan minangka model tanpa filter, lan sing pungkasan minangka model sing difilter. Kaya sing dikarepake, kita nemokake yen model sing difilter umume ngasilake konten sing kurang eksplisit utawa grafis kanggo panjalukan konten kaya mangkono. Nanging, kita uga nemokake efek samping filtering data sing ora dikira: iki nggawe utawa nggedhekake bias model marang demografi tartamtu.

Lagi dimuat...

Mbenerake bias sing disebabake filter data

Model generatif nyoba nyocogake distribusi data latihan, kalebu bias apa wae ing njero. Akibate, filtering data latihan nduweni potensi nggawe utawa nggedhekake bias ing model hilir. Umume, mbenerake bias ing dataset asli iku tugas sosioteknis sing angel sing terus kita teliti, lan iku ana ing njaba cakupan kiriman iki. Masalah sing kita atasi ing kene yaiku penguatan bias sing disebabake khusus dening filtering data dhewe. Kanthi pendekatan kita, kita ngarahake nyegah model sing difilter dadi luwih bias tinimbang model tanpa filter, kanthi inti nyuda pergeseran distribusi sing disebabake filtering data.

Minangka conto nyata penguatan bias amarga filtering, pikirna prompt “a ceo”. Nalika model tanpa filter kita ngasilake gambar kanggo prompt iki, model kasebut cenderung ngasilake luwih akeh gambar pria tinimbang wanita, lan kita ngarepake yen mayoritas bias iki nggambarake data latihan kita saiki. Nanging, nalika prompt sing padha kita jalanake liwat model sing difilter, bias kasebut katon saya kuwat; generasine meh mung gambar pria.

Kita nduweni hipotesis yen kasus penguatan bias iki asalé saka rong panggonan: pisanan, sanadyan wanita lan pria bisa uga nduweni representasi sing kira-kira padha ing dataset asli, dataset bisa bias nampilake wanita ing konteks sing luwih diseksualisasi; lan kapindho, classifier kita dhewe bisa uga bias amarga implementasi utawa definisi kelas, senadyan upaya kita kanggo mesthekake yen iki ora kedadeyan sajrone fase nglumpukake data lan validasi. Amarga loro efek iki, filter kita bisa mbusak luwih akeh gambar wanita tinimbang pria, sing ngowahi rasio gender sing dideleng model sajrone latihan.

Kanggo nyelidiki bias sing disebabake filter kanthi luwih jero, kita pengin nduweni cara kanggo ngukur sepira gedhene filter data kita mengaruhi bias marang maneka konsep. Utamane, filter kekerasan lan konten seksual kita murni berbasis gambar, nanging sifat multimodal dataset kita ngidini kita langsung ngukur efek filter iki marang teks. Amarga saben gambar diiringi caption teks, kita bisa ndeleng frekuensi relatif kata kunci sing dipilih kanthi manual ing dataset difilter lan tanpa filter kanggo ngira-ngira sepira filter kasebut mengaruhi konsep tartamtu.

Kanggo ngetrapake iki, kita nggunakake Apache Spark kanggo ngitung frekuensi sakepel kata kunci (umpamane “parent”, “woman”, “kid”) ing kabeh caption ing dataset difilter lan tanpa filter. Sanadyan dataset kita ngemot atusan yuta pasangan teks-gambar, ngitung frekuensi kata kunci iki mung mbutuhake sawetara menit nganggo kluster komputasi kita.

Sawise ngitung frekuensi kata kunci, kita bisa ngonfirmasi yen filter dataset kita pancen wis nyimpangake frekuensi sawetara kata kunci luwih gedhe tinimbang liyane. Contone, filter nyuda frekuensi tembung “woman” nganti 14%, dene frekuensi tembung “man” mung mudhun 6%. Iki ngonfirmasi, ing skala gedhe, apa sing sadurunge wis kita amati sacara anekdotal kanthi sampling saka model GLIDE sing dilatih nganggo loro dataset.

Lagi dimuat...

Saiki sawise kita nduweni proxy kanggo ngukur bias sing disebabake filter, kita butuh cara kanggo ngurangine. Kanggo ngatasi masalah iki, kita ngarahake mbobot ulang dataset sing difilter supaya distribusine luwih cocog karo distribusi gambar tanpa filter. Minangka conto sederhana kanggo nerangake gagasan iki, umpama dataset kita kasusun saka 50% foto kucing lan 50% foto asu, nanging filter data kita mbusak 75% asu nanging mung 50% kucing. Dataset pungkasan bakal dadi ⅔ kucing lan ⅓ asu, lan model generatif berbasis likelihood sing dilatih nganggo dataset iki mesthine bakal ngasilake luwih akeh gambar kucing tinimbang asu. Kita bisa mbenerake ketimpangan iki kanthi ngalikake loss latihan saben gambar asu nganggo 2, niru efek mbaleni saben gambar asu kaping pindho. Ternyata, kita bisa ngeskalakake pendekatan iki menyang dataset lan model nyata kita kanthi cara sing umume otomatis–yaiku, kita ora perlu milih kanthi manual fitur sing pengin kita bobot ulang.

Kita ngitung bobot kanggo gambar ing dataset sing difilter nggunakake probabilitas saka classifier khusus, padha karo pendekatan sing digunakake dening Choi et al. (2019)(mbukak ing jendhela anyar). Kanggo nglatih classifier iki, kita sampling gambar kanthi seragam saka loro dataset lan ngramal dataset endi asal gambar kasebut. Mligi, model iki ngramal P(unfiltered|image), kanthi prior P(unfiltered) = 0.5. Ing praktik, kita ora pengin model iki kuwat banget, amarga yen ora, model iki bisa sinau fungsi persis sing dileksanakake filter kita saka awal. Nanging, kita pengin model iki luwih alus tinimbang filter data asli, nangkep kategori amba sing kena pengaruh filter nanging isih ora mesthi apa gambar tartamtu bakal difilter utawa ora. Kanggo kuwi, kita nglatih linear probe ing ndhuwur model CLIP cilik.

Sawise kita nduweni classifier sing ngramal probabilitas manawa sawijining gambar asalé saka dataset tanpa filter, kita isih perlu ngowahi prediksi iki dadi bobot kanggo gambar kasebut. Contone, umpama P(unfiltered|image) = 0.8. Iki tegese sampel kasebut 4 kaping luwih mungkin ditemokake ing data tanpa filter tinimbang data sing difilter, lan bobot 4 kudu mbenerake ketimpangan kasebut. Luwih umume, kita bisa nggunakake bobot P(unfiltered|image)/P(filtered|image).A

Sepira apik skema pembobotan ulang iki ngurangi bias sing dikuatake? Nalika kita nindakake fine-tuning model difilter sadurunge nganggo skema bobot anyar, prilaku model hasil fine-tuning iki dadi luwih cedhak cocog karo model tanpa filter ing conto-conto bias sing wis sadurunge kita temokake. Sanadyan iki nyemangati, kita uga pengin ngevaluasi mitigasi iki kanthi luwih jero nggunakake heuristik bias berbasis kata kunci kita. Kanggo ngukur frekuensi kata kunci nalika ngetung skema bobot anyar iki, kita mung perlu mènèhi bobot saben kemunculan kata kunci ing dataset difilter miturut bobot sampel sing ngemot kata kunci kasebut. Kanthi cara iki, kita entuk kumpulan frekuensi kata kunci anyar sing nggambarake bobot sampel ing dataset sing difilter.

Ing mayoritas kata kunci sing kita priksa, skema pembobotan ulang nyuda owah-owahan frekuensi sing disebabake filtering. Kanggo conto sadurunge “man” lan “woman”, penurunan frekuensi relatif dadi 1% lan –1%, dene nilai sadurunge masing-masing 14% lan 6%. Sanadyan metrik iki mung proxy kanggo bias filtering nyata, iki nyenengake amarga skema pembobotan ulang berbasis gambar kita pancen ningkatake metrik berbasis teks kanthi signifikan.

Kita terus nyelidiki bias sing isih ana ing DALL·E 2, sebagian liwat evaluasi prilaku model sing luwih gedhe lan penyelidikan babagan carane filtering mengaruhi pangembangan bias lan kapabilitas.

Nyegah image regurgitation

Kita ngamati yen pendahulu internal sadurunge DALL·E 2 kadhang kala ngasilake maneh gambar latihan kanthi persis. Prilaku iki ora dikarepake, amarga kita pengin DALL·E 2 kanthi gawan nggawe gambar asli lan unik lan ora mung “nambal dadi siji” potongan-potongan gambar sing wis ana. Kajaba iku, ngasilake maneh gambar latihan kanthi persis bisa nuwuhake pitakon hukum babagan pelanggaran hak cipta, kepemilikan, lan privasi (yen foto wong ana ing data latihan).

Kanggo luwih ngerti masalah image regurgitation, kita nglumpukake dataset prompt sing kerep ngasilake gambar duplikat. Kanggo nindakake iki, kita nggunakake model sing wis dilatih kanggo sampling gambar kanggo 50.000 prompt saka dataset latihan kita, lan ngurutake sampel adhedhasar kemiripan perseptual karo gambar latihan sing cocog. Pungkasan, kita mriksa kecocokan paling dhuwur kanthi manual, lan mung nemokake sawetara atus pasangan duplikat sejati saka total 50k prompt. Sanadyan tingkat regurgitation katon kurang saka 1%, kita rumangsa perlu nyurung tingkat iki mudhun dadi 0 amarga alasan sing kasebut ing ndhuwur.

Nalika kita nyinaoni dataset gambar regurgitated kita, kita weruh rong pola. Kaping pisanan, gambar-gambar mau meh kabeh grafis vektor sing prasaja, sing mesthine gampang diapalake amarga isi informasine sithik. Kapindho, lan luwih penting, kabeh gambar kasebut nduweni akeh near-duplicate ing dataset latihan. Contone, bisa ana grafis vektor sing katon kaya jam nuduhake pukul 1—nanging banjur kita nemokake sampel latihan sing ngemot jam sing padha nuduhake pukul 2, banjur pukul 3, lan sateruse. Sawise ngerti iki, kita nggunakake distributed nearest neighbor search kanggo verifikasi yen pancen kabeh gambar regurgitated nduweni duplikat sing mirip sacara perseptual ing dataset. Karya(mbukak ing jendhela anyar) liyane(mbukak ing jendhela anyar) uga wis ngamati fenomena sing padha ing model basa gedhe, lan nemokake yen duplikasi data raket banget gandhengane karo memorisasi.

Temuan ing ndhuwur nuduhake yen, yen kita ndeduplikasi dataset, bisa wae kita ngrampungake masalah regurgitation. Kanggo nggayuh iki, kita ngrancang nggunakake jaringan saraf kanggo ngenali klompok gambar sing katon mirip, banjur mbusak kabeh kajaba siji gambar saka saben klompok.B

Nanging, iki mbutuhake mriksa, kanggo saben gambar, apa gambar kasebut duplikat saka saben gambar liyane ing dataset. Amarga kabeh dataset kita ngemot atusan yuta gambar, kanthi naif kita kudu mriksa atusan kuadriliun pasangan gambar kanggo nemokake kabeh duplikat. Sanadyan iki sacara teknis isih bisa digayuh, utamane ing kluster komputasi gedhe, kita nemokake alternatif sing luwih efisien sing meh padha apik kanthi biaya sing mung pecahan cilik. Coba apa sing kedadeyan yen kita ngelompokake dataset sadurunge nindakake deduplikasi. Amarga sampel sing cedhak kerep mlebu ing kluster sing padha, mayoritas pasangan duplikat ora bakal nyabrang wates keputusan kluster. Banjur kita bisa ndeduplikasi sampel ing saben kluster tanpa mriksa duplikat ing njaba kluster, nalika mung kelangan bagean cilik saka kabeh pasangan duplikat. Iki luwih cepet tinimbang pendekatan naif, amarga kita ora perlu maneh mriksa saben pasangan gambar siji-siji.C

Nalika kita nyoba pendekatan iki kanthi empiris ing subset cilik data kita, cara iki nemokake 85% saka kabeh pasangan duplikat nalika nggunakake kluster K=1024. Kanggo ningkatake tingkat kasil algoritma ing ndhuwur, kita nggunakke siji pengamatan penting: nalika sampeyan ngelompokake subset acak sing beda saka sawijining dataset, wates keputusan kluster sing diasilake kerep beda banget. Mula, yen sawijining pasangan duplikat nyabrang wates kluster kanggo siji pengelompokan data, pasangan sing padha bisa wae mlebu ing siji kluster ing pengelompokan liyane. Saya akeh pengelompokan sing dicoba, saya gedhe kemungkinan sampeyan nemokake pasangan duplikat tartamtu. Ing praktik, kita mutusake nggunakake limang pengelompokan, sing tegese kita nggoleki duplikat saben gambar ing gabungan limang kluster sing beda. Ing praktik, iki nemokake 97% saka kabeh pasangan duplikat ing subset data kita.

Sing nggumunake, meh seprapat dataset kita dibusak liwat deduplikasi. Nalika kita ndeleng pasangan near-duplicate sing ditemokake, akeh ing antarane ngemot owah-owahan sing migunani. Elinga conto jam ing ndhuwur: dataset bisa uga ngemot akeh gambar jam sing padha ing wektu dina sing beda-beda. Sanadyan gambar-gambar iki bisa nggawe model ngapalake tampilan jam tartamtu iki, gambar-gambar iki uga bisa mbantu model sinau mbedakake wektu dina ing jam. Ngelingi sepira akeh data sing dibusak, kita kuwatir mbusak gambar kaya iki bisa uga ngrusak kinerja model.

Kanggo nguji pengaruh deduplikasi marang model kita, kita nglatih rong model kanthi hyperparameter sing padha: siji nganggo dataset lengkap, lan siji nganggo versi dataset sing wis dideduplikasi. Kanggo mbandhingake model-model iki, kita nggunakake evaluasi manungsa sing padha kaya sing digunakake kanggo ngevaluasi model GLIDE asli kita. Sing nggumunake, kita nemokake manawa evaluator manungsa rada luwih milih model sing dilatih nganggo data sing wis dideduplikasi, sing nuduhake yen jumlah gambar redundan sing gedhe ing dataset kasebut sejatiné malah ngrusak kinerja.

Sawise kita nduweni model sing dilatih nganggo data sing wis dideduplikasi, kita mbukak maneh panelusuran regurgitation sing sadurunge wis kita lakoni ing 50k prompt saka dataset latihan. Kita nemokake yen model anyar ora nate ngasilake maneh gambar latihan nalika diwenehi prompt pas kanggo gambar kasebut saka dataset latihan. Kanggo nggawa tes iki luwih adoh maneh, kita uga nindakake nearest neighbor search ing kabeh dataset latihan kanggo saben 50k gambar sing diasilake. Kanthi cara iki, kita mikir bisa uga nyekel model sing ngasilake maneh gambar liyane tinimbang sing digandhengake karo prompt tartamtu. Sanadyan kanthi pamriksaan sing luwih jero iki, kita ora nate nemokake kasus image regurgitation.

Langkah sabanjure

Sanadyan kabeh mitigasi sing dibahas ing ndhuwur nuduhake kemajuan penting tumuju tujuan kita kanggo nyuda risiko sing gegandhengan karo DALL·E 2, saben mitigasi isih nduweni ruang kanggo dandan:

  • Filter latihan awalan sing luwih apik bisa ngidini kita nglatih DALL·E 2 nganggo luwih akeh data lan bisa uga luwih nyuda bias ing model. Filter kita saiki disetel kanggo tingkat miss sing endhek kanthi biaya false positive sing akeh. Akibate, kita nyaring kira-kira 5% saka kabeh dataset sanadyan mayoritas gambar sing disaring iki babar pisan ora nglanggar kabijakan konten kita. Ningkatake filter kita bisa ngidini kita njupuk bali sawetara data latihan iki.
  • Bias mlebu lan bisa uga dikuatake ing akeh tahap pangembangan lan peluncuran sistem. Ngevaluasi lan nyuda bias ing sistem kaya DALL·E 2 lan cilaka sing ditimbulake bias iki minangka masalah interdisipliner penting sing terus kita teliti ing OpenAI minangka bagean saka misi kita sing luwih amba. Karya kita ing babagan iki kalebu nggawe evaluasi kanggo luwih ngerti masalah, ngurasi dataset anyar, lan ngetrapake teknik kaya umpan balik manungsa lan fine-tuning kanggo mbangun teknologi sing luwih kuwat lan luwih makili.
  • Uga penting banget yen kita terus nyinaoni memorisasi lan generalisasi ing sistem sinau jero. Sanadyan deduplikasi minangka langkah awal sing apik kanggo nyegah memorisasi, iki ora nyritakake kabeh babagan sebab utawa cara model kaya DALL·E 2 ngapalake data latihan.

Cathetan sikil

  1. Nalika kita nggawe parameter P(unfiltered|image) dadi sigmoid(f(x)), bobote dadi exp(f(x)). Iki bisa diturunake nganggo definisi sigmoid:

1/(1+ef(x))/(11/(1+ef(x))) 1/(1+e^−f(x))/(1−1/(1+e^−f(x))) =1/(1+ef(x))/((1+ef(x)1)/(1+ef(x))) = 1/(1+e^{-f(x)}) / ((1+e^{-f(x)} - 1)/(1+e^{-f(x)})) =1/(1+ef(x))/((ef(x))/(1+ef(x))) = 1/(1+e^{-f(x)}) / ((e^{-f(x)})/(1+e^{-f(x)})) =(1+ef(x))/(1+ef(x))/(ef(x)) = (1+e^-f(x))/(1+e^-f(x)) / (e^-f(x)) =1/(ef(x))=ef(x) = 1 / (e^{-f(x)}) = e^{f(x)}

  1. B

    Kanggo nggayuh iki, kita bisa ngitung vektor fitur viv_i kanggo saben gambar latihan ii, banjur mbusak kabeh gambar jj sing ana i<ji < j saengga vivj||v_i - v_j|| <threshold. Kanggo ngrampungake masalah iki kanthi naif, kita kudu ngitung saben jarak pasangan vivj||v_i - v_j||, tugas sing skalané kuadratik karo ukuran dataset kita.

  2. C

    Yen K K makili jumlah kluster lan N N ukuran dataset, pendekatan iki mung mbutuhake perhitungan jarak pasangan O(K(N/K)2)=O(N2/K) O(K*(N/K)^2) = O(N^2/K) , tinimbang O(N2) O(N^2) lengkap. Ing wektu sing padha, kita isih dijamin ora ana gambar sing nduweni luwih saka K K near-duplicate ing kasus paling ala.

Penulis

Alex Nichol

Kontributor

Alex Nichol, Aditya Ramesh, Pamela Mishkin, Prafulla Dariwal, Joanne Jang, Mark Chen

Kontribusi nulis saka

Greg Brockman, Aditya Ramesh, Pamela Mishkin, Mark Chen, Pranav Shyam, Casey Chu, Che Chang, Miles Brundage