कोड की ख़ामी पैच की जा सकती है। जो मॉडल ग़लत चीज़ सीख गया हो, उसे पैच नहीं किया जा सकता
🌐 Read this article in English
संक्षेप में: AI सिस्टम उन तरीक़ों से टूटते हैं जिनसे आम सॉफ़्टवेयर नहीं टूटता, क्योंकि ख़ामी लिखे हुए कोड में नहीं, सीखे हुए पैरामीटरों में बैठी होती है। यह लेख बताता है कि एडवर्सेरियल उदाहरण क्या हैं और वे एक मॉडल से दूसरे तक क्यों चले जाते हैं, जेलब्रेक और प्रॉम्प्ट इंजेक्शन में क्या फ़र्क़ है, बाहरी टेक्स्ट पढ़ने वाला एजेंट निर्देश और सामग्री में फ़र्क़ क्यों नहीं कर सकता, वेब से जुटाए डेटा में ज़हर कैसे मिलाया जा सकता है, और व्यावहारिक बचाव क्या हैं — कम से कम अधिकार, बड़े काम से पहले इंसान की मंज़ूरी, और ऐसा सिस्टम जो यह मानकर बने कि मॉडल कभी न कभी बहकाया जाएगा।
किसी प्रोग्राम में सुरक्षा की ख़ामी निकले तो इसका मतलब है किसी ने एक पंक्ति ग़लत लिखी थी, और कोई दूसरा उसे दोबारा लिख सकता है। सुधार जाँचा जा सकता है: वही ख़राब इनपुट अब वही ख़राब नतीजा नहीं देता, और वह रास्ता सबके लिए बंद हो जाता है।
मशीन लर्निंग वाले सिस्टम यह सुविधा नहीं देते। उनका बर्ताव लाखों सीखे हुए पैरामीटरों में बसा है, जिन्हें किसी इंसान ने न लिखा है, न चुना है, न पढ़ सकता है। सुधारने के लिए कोई पंक्ति है ही नहीं। जो मॉडल किसी इनपुट पर ख़राब जवाब देता है, वह इसलिए देता है कि डेटा से निकले एक फलन की बनावट ऐसी है — और आप दोबारा ट्रेनिंग कर सकते हैं, छँटाई लगा सकते हैं, फ़ाइन-ट्यून कर सकते हैं, पर फ़ाइल खोलकर ग़लती ठीक नहीं कर सकते, क्योंकि वह ग़लती कहीं लिखी ही नहीं है। AI की सुरक्षा आम सॉफ़्टवेयर सुरक्षा से इतनी अलग क्यों दिखती है, इसकी बुनियादी वजह यही है — और इसीलिए आज के सिस्टमों की सबसे भारी कमज़ोरी का कोई स्वीकृत हल मौजूद नहीं है।
एडवर्सेरियल उदाहरण: वह ज़रा-सा धक्का जो जवाब पलट देता है
इसका सबसे मशहूर प्रदर्शन अब दस साल से ज़्यादा पुराना है और आज भी हल नहीं हुआ। ऐसी तस्वीर लीजिए जिसे कोई वर्गीकारक पूरे भरोसे के साथ सही पहचानता है। एक छोटा-सा बदलाव निकालिए — गणना से, बेतरतीब नहीं — और उसमें जोड़ दीजिए। इंसान को तस्वीर वही लगेगी; पिक्सलों की हलचल आँख की पकड़ से नीचे है। मॉडल अब पूरे आत्मविश्वास से कुछ और ही बता रहा है।
यह किसी एक नेटवर्क की ख़राबी नहीं है। यह इस बात का नतीजा है कि ये मॉडल अपने इनपुट-क्षेत्र को बाँटते कैसे हैं। सिखाया गया वर्गीकारक बेहद ज़्यादा आयामों वाले क्षेत्र में फ़ैसले की सरहदें खींचता है, और ऐसे क्षेत्र में किसी आम बिंदु से नज़दीकी सरहद की दूरी उस दिशा में बहुत कम होती है जिस पर इंसानी इंद्रियाँ ध्यान ही नहीं देतीं। हमलावर मॉडल की "आँखें" धोखा नहीं दे रहा; वह बस उस दिशा में थोड़ा-सा चल रहा है जिसकी मॉडल को परवाह है और लोगों को नहीं।
दो गुण इसे कौतूहल से हटाकर व्यावहारिक समस्या बनाते हैं। पहला, ये बदलाव अक्सर एक मॉडल से दूसरे तक चले जाते हैं: एक मॉडल पर निकाला गया हमला अक्सर उस दूसरे मॉडल पर भी चल जाता है जिसे किसी और टीम ने किसी और डेटा पर सिखाया था — यानी हमलावर को निशाने तक पहुँच चाहिए ही नहीं। दूसरा, ये भौतिक दुनिया में भी टिकते हैं — छपे हुए नमूने, सड़क के चिह्न पर चिपकाया स्टिकर, कपड़ों पर बना पैटर्न — यानी बात सिर्फ़ सीधे API में डाली गई फ़ाइलों तक सीमित नहीं है।
बचाव मौजूद हैं और अधूरे हैं। एडवर्सेरियल उदाहरणों पर ट्रेनिंग उन्हीं हमलों के ख़िलाफ़ मज़बूती देती है जिनकी आपने कल्पना की थी, आम सटीकता की कुछ क़ीमत पर, और जिनकी कल्पना नहीं की थी उन पर कम काम आती है। गणितीय गारंटी देने वाले तरीक़े हैं, पर वे सीमित क़िस्म के बदलावों पर लागू होते हैं और बड़े पैमाने पर नहीं चलते। एक दशक की मेहनत ने सुधार दिया है, अंत नहीं।
प्रॉम्प्ट इंजेक्शन: जिसका साफ़ इलाज है ही नहीं
ज़्यादा तात्कालिक समस्या भाषा मॉडलों के साथ आई, और इसे ठीक-ठीक कहना ज़रूरी है क्योंकि इसे लगातार किसी और चीज़ से मिला दिया जाता है।
जेलब्रेक का मतलब है उपयोगकर्ता का मॉडल को इस बात के लिए राज़ी करना कि वह अपने ही इस्तेमाल के नियम तोड़ दे। यह सामग्री-नीति की समस्या है, इसमें हमलावर उपयोगकर्ता ही है, और नुक़सान ज़्यादातर संचालक की साख का होता है।
प्रॉम्प्ट इंजेक्शन का मतलब है किसी तीसरे का ऐसी सामग्री में निर्देश छिपा देना जिसे मॉडल पढ़ेगा, ताकि मॉडल उसी उपयोगकर्ता के ख़िलाफ़ काम करे जिसके लिए वह चल रहा है। यहाँ उपयोगकर्ता हमलावर नहीं, शिकार है — और नुक़सान उतना है जितना करने का भरोसा उस सिस्टम को दिया गया था।
यह मुश्किल क्यों है, इसकी वजह ढाँचागत है। भाषा मॉडल के पास टोकनों की एक ही धारा आती है। आपके निर्देश, सिस्टम के निर्देश, वह वेब पेज जो उसने खोला, वह ईमेल जिसका सार उसने बनाया और वह दस्तावेज़ जो उसे दिया गया — सब एक ही चैनल से आते हैं, और मॉडल के पास ऐसी कोई विशेषाधिकार वाली व्यवस्था नहीं जो "यह मेरे स्वामी का आदेश है" और "यह वह टेक्स्ट है जिसे पढ़ने को कहा गया था" में फ़र्क़ कर सके। हर ऑपरेटिंग सिस्टम ने इसी तरह की समस्या दशकों पहले विशेषाधिकार अलग करके हल कर ली थी; ट्रांसफ़ॉर्मर के पास ऐसी कोई बुनियादी सुविधा नहीं, क्योंकि उसने निर्देश मानना लागू किए गए नियम से नहीं, डेटा से सीखा है।
नतीजा यह कि जो भी एजेंट बाहरी सामग्री पढ़ता है और साथ ही कुछ कर भी सकता है, वह असल में अजनबियों का लिखा टेक्स्ट चला रहा है। कैलेंडर का निमंत्रण, किसी उत्पाद की समीक्षा, कोई PDF, कोड में लिखी टिप्पणी, वेब पेज पर सफ़ेद पर सफ़ेद लिखा वाक्य — इनमें से कुछ भी निर्देश ढो सकता है, और मॉडल के पास सिर्फ़ यह देखकर उन्हें ठुकराने का भरोसेमंद तरीक़ा नहीं है कि वे आए कहाँ से थे।
आम सॉफ़्टवेयर में डेटा तब तक निर्देश नहीं बनता जब तक प्रोग्रामर से चूक न हुई हो। भाषा मॉडल में डेटा और निर्देश बनावट से ही एक ही क़िस्म की चीज़ हैं। यह पैच करने लायक़ चूक नहीं है; मॉडल है ही यही।
बचाव असली हैं, पर वे घेराबंदी हैं, इलाज नहीं। एजेंट को उतना ही अधिकार दीजिए जितने में उसका काम चल जाए, ताकि सफल इंजेक्शन भी कम दूर तक पहुँचे। जो काम बड़ा या अपरिवर्तनीय हो — भेजना, भुगतान, मिटाना, प्रकाशित करना — उससे पहले इंसान की मंज़ूरी अनिवार्य कीजिए। जो हिस्सा बाहरी सामग्री पढ़ता है उसे उस हिस्से से अलग रखिए जिसके पास पासवर्ड और कुंजियाँ हैं। खुले-आम आदेशों के बजाय पहले से तय कामों की सूची तक आउटपुट सीमित कीजिए। और बाहरी सामग्री से निकले हर मॉडल-आउटपुट को अगले चरण के लिए अविश्वसनीय इनपुट मानिए। इनमें से कोई भी मॉडल को इंजेक्शन-रोधी नहीं बनाता; ये इंजेक्शन के सफल होने पर उसे कम काम का बना देते हैं — और इंजीनियरिंग का सही लक्ष्य यही है।
ट्रेनिंग डेटा में ज़हर मिलाना
तीसरा हमला और ऊपर की ओर जाता है। अगर मॉडल का बर्ताव उसके डेटा से आता है, तो डेटा पर असर डालना मॉडल पर असर डालना है।
डेटा पॉइज़निंग का मतलब है ट्रेनिंग सेट में गढ़े हुए उदाहरण डालकर प्रदर्शन बिगाड़ना — या ज़्यादा दिलचस्प रूप में, एक बैकडोर बिठा देना: मॉडल हर चीज़ पर सामान्य बर्ताव करता है, सिवाय उन इनपुटों के जिनमें कोई ख़ास संकेत हो, और उन पर वह करता है जो हमलावर ने चुना। बैकडोर वाला मॉडल आम मूल्यांकन में पास हो जाता है, क्योंकि मूल्यांकन सामान्य वितरण से नमूने लेता है और वह संकेत उसमें होता ही नहीं।
सुनने में लगता है कि इसके लिए ट्रेनिंग पाइपलाइन तक पहुँच चाहिए। वेब से जुटाए डेटा पर सिखाए गए मॉडलों के लिए नहीं चाहिए। शोधकर्ताओं ने दिखाया है कि वेब-पैमाने के डेटासेट व्यवहार में ज़हर मिलाए जा सकते हैं — डेटासेट बनने के बाद किसी सूचीबद्ध पते की सामग्री बदली जा सकती है, और प्रकाशित डेटासेट में दर्ज डोमेन की मियाद ख़त्म होने पर उसे कोई और ख़रीद सकता है। किसी संग्रह के बहुत छोटे हिस्से में फेरबदल भी कोई ख़ास बर्ताव बिठाने के लिए काफ़ी हो सकता है।
यही तर्क फ़ाइन-ट्यूनिंग के डेटा पर, रिट्रीवल के संग्रह पर, और उस हर चीज़ पर लागू होता है जो मॉडल को चलते वक़्त दी जाती है। और इससे जुड़े हमलों का एक परिवार उल्टी दिशा में चलता है: बार-बार सवाल पूछकर किसी निजी मॉडल का बर्ताव लगभग उतारा जा सकता है, या यह पता लगाया जा सकता है कि कोई ख़ास रिकॉर्ड उसके ट्रेनिंग डेटा में था या नहीं — और चिकित्सा या निजी रिकॉर्ड पर सिखाए मॉडलों के लिए यह निजता का असली सवाल है।
इन सिस्टमों की हिफ़ाज़त दिखती कैसी है
इस सबसे जो व्यावहारिक रुख़ निकलता है वह "मॉडल को मज़बूत बनाओ" नहीं है। वह यह है कि सिस्टम इस मान्यता पर बनाया जाए कि मॉडल कभी न कभी ठीक उसी तरह ग़लत होगा जैसा किसी हमलावर ने चुना है।
यानी मॉडल को सिस्टम मानने के बजाय एक भरोसेमंद सिस्टम के भीतर बैठा अविश्वसनीय पुर्ज़ा माना जाए। यानी सुरक्षा की सरहद कामों पर खींची जाए — यह चीज़ असल में कर क्या सकती है, किसके अधिकार से, और किसके लिए इंसान की मंज़ूरी ज़रूरी है। यानी निगरानी सिर्फ़ इनपुट की नहीं, बर्ताव की हो, क्योंकि जो इनपुट भोला दिखने के लिए गढ़ा गया है वह भोला ही दिखेगा। और यानी जो कुछ भी निश्चित रूप से जाँचा जा सकता है उसकी जाँच अलग से हो: मॉडल डेटाबेस क्वेरी बनाए तो उसे परखिए; भुगतान बनाए तो पाने वाले को सूची से मिलाइए; कोई हवाला दे तो उसे खोलकर देखिए।
यह अनुशासन नया नहीं है। यही सोच पारंपरिक कंप्यूटिंग में सैंडबॉक्सिंग, विशेषाधिकार अलगाव और इनपुट जाँच तक ले गई थी — बस अब यह ऐसे पुर्ज़े पर लगाई जा रही है जिसके बिगड़ने के तरीक़े पहले से गिनाए ही नहीं जा सकते।
विद्यार्थियों और शोधकर्ताओं के लिए क्यों मायने रखता है
सुरक्षा वही जगह है जहाँ प्रदर्शन और तैनात सिस्टम का फ़र्क़ साफ़ दिखता है, और आज व्यावहारिक मशीन लर्निंग में यही सबसे कम पढ़ाया जाने वाला हिस्सा है। कोई विद्यार्थी प्रभावशाली मॉडल बना सकता है और यह सवाल कभी न पूछे कि तब क्या होगा जब कोई सचमुच इसे नाकाम करना चाहेगा — जबकि इनमें से हर सिस्टम, जिस क्षण वह लोगों के सामने आता है या उसे कुछ करने का अधिकार मिलता है, ठीक वही दुश्मन पा लेता है।
बौद्धिक रूप से भी यह इस समय इस क्षेत्र की सबसे दिलचस्प सरहद है, क्योंकि यहाँ पुराने जवाब काम नहीं करते। सीखे हुए फलन को आप कोड की तरह सत्यापित नहीं कर सकते। उसके सारे इनपुट गिना नहीं सकते। उसे पैच नहीं कर सकते। जो आप कर सकते हैं वह है उसका अधिकार सीमित करना, उसके आउटपुट को किसी निश्चित जाँच से मिलाना, और आसपास का सिस्टम ऐसा बनाना कि बहकाया जाना भी झेला जा सके। AI इंजीनियरिंग में जाने वाले किसी भी व्यक्ति के लिए सोचने की यह आदत — मानकर चलो कि पुर्ज़ा फ़ेल होगा, और ऐसा बनाओ कि उससे फ़र्क़ न पड़े — किसी भी ख़ास बचाव-तकनीक से ज़्यादा क़ीमती है, क्योंकि उनमें से ज़्यादातर तो विद्यार्थियों के निकलने से पहले ही पुरानी पड़ चुकी होंगी।
अक्सर पूछे जाने वाले सवाल
एडवर्सेरियल उदाहरण क्या होता है?
यह ऐसा इनपुट है जिसमें सोच-समझकर निकाला गया इतना छोटा बदलाव किया गया हो कि इंसान को वह वैसा ही दिखे, पर मॉडल ग़लत जवाब दे। यह मॉडल की फ़ैसला-सरहदों की ज्यामिति का फ़ायदा उठाता है, किसी कोडिंग ग़लती का नहीं।
जेलब्रेक और प्रॉम्प्ट इंजेक्शन में क्या फ़र्क़ है?
जेलब्रेक में उपयोगकर्ता ख़ुद मॉडल को उसके नियम तोड़ने के लिए राज़ी करता है। प्रॉम्प्ट इंजेक्शन में कोई तीसरा उस सामग्री में निर्देश छिपा देता है जिसे मॉडल पढ़ेगा, ताकि मॉडल उसी उपयोगकर्ता के ख़िलाफ़ काम करे जिसकी मदद कर रहा है — यहाँ उपयोगकर्ता हमलावर नहीं, शिकार होता है।
प्रॉम्प्ट इंजेक्शन ठीक करना इतना मुश्किल क्यों है?
क्योंकि भाषा मॉडल के पास निर्देश और सामग्री एक ही टोकन धारा में आते हैं और उनके बीच कोई अंतर्निहित विशेषाधिकार-अलगाव नहीं होता। आम सॉफ़्टवेयर में डेटा प्रोग्रामर की चूक से ही निर्देश बनता है, जबकि मॉडल बनावट से ही हर टेक्स्ट को संभावित निर्देश मानता है।
डेटा पॉइज़निंग क्या है?
यह ट्रेनिंग डेटा में गढ़े हुए उदाहरण डालकर मॉडल का बर्ताव बदलना है, जिसमें अक्सर ऐसा बैकडोर बिठाया जाता है जो किसी ख़ास संकेत पर ही चालू होता है। वेब से जुटाए डेटा पर सिखाए मॉडल इसके प्रति खुले हैं, क्योंकि दर्ज पते के पीछे की सामग्री संग्रह बनने के बाद बदली जा सकती है।
व्यवहार में AI सिस्टम सुरक्षित कैसे किए जाएँ?
मॉडल को अविश्वसनीय पुर्ज़ा मानकर: उसे कम से कम अधिकार देकर, अपरिवर्तनीय कामों के लिए इंसान की मंज़ूरी अनिवार्य करके, बाहरी सामग्री पढ़ने वाले हिस्से को कुंजियाँ रखने वाले हिस्से से अलग करके, और जहाँ भी संभव हो आउटपुट को निश्चित जाँचों से मिलाकर।