برای برداری با ۳۶۳ درایه که طولش به ۲ محدود شده، کران حساسیت L1 حدود ۷۶٫۲۱ در می‌آید، یعنی نوزده برابر کران حساسیت L2 که ۴ است؛ همین نسبت، جذر تعداد ویژگی‌هاست.
برای برداری با ۳۶۳ درایه که طولش به ۲ محدود شده، کران حساسیت L1 حدود ۷۶٫۲۱ در می‌آید، یعنی نوزده برابر کران حساسیت L2 که ۴ است؛ همین نسبت، جذر تعداد ویژگی‌هاست.

برگ انجیر

نوار مغزی آدم مثل اثر انگشت می‌مونه و با پاک کردن اسم ناشناس نمی‌شه، برای همین روی عددهایی که از هر بیمار در میارن نویز تصادفی می‌ریزن تا رد بیمار گم بشه. مقدار این نویز رو هم باید حساب کرد و قاعده‌اش ساده‌ست؛ هرچه از یک نفر عدد بیشتری منتشر کنی، نویز بیشتری لازم داری. یک مقاله‌ی تازه از هر بیمار ۳۶۳ عدد منتشر کرده ولی نویز رو با فرمولی حساب کرده که تعداد این عددها اصلا توش نمی‌آد، و آخرش نویزی ریخته که حدود نوزده برابر کمتر از لازم بوده. خود نویسنده‌ها هم همین رو در مقاله نوشته‌ن.

اگه اسم و کد ملی بیمار رو از یک ضبط نوار مغزی پاک کنی، چیزی که می‌مونه هنوز قابل ردیابیه. EEG امضای فردی داره و این موضوع سال‌هاست شناخته‌شده‌ست، پس حذف شناسه کار رو تموم نمی‌کنه. راه‌حلی که این سال‌ها جدی گرفته می‌شه حریم خصوصی تفاضلی (differential privacy) است، چون به‌جای اینکه قول بده «قابل شناسایی نیست»، یک عدد به اسم ε تحویلت می‌ده و می‌گه حضور یا نبود یک نفر حداکثر به همین اندازه می‌تونه خروجی رو جابه‌جا کنه.

حالا سوال مهندسی اینه که ε=۱ روی یک جدول ویژگی EEG واقعا چقدر نویز می‌خواد. مقاله‌ای تازه از دانشگاه جنوب شرقی نروژ دقیقا همین خط لوله رو ساخته و عددهاش رو گذاشته وسط. و ارزشمندترین چیزی که در این مقاله هست، یک ناهماهنگی در پیاده‌سازی خودشونه که با صراحت گزارشش کردن؛ نویزی که واقعا اضافه کردن حدود نوزده برابر کمتر از چیزیه که تضمین رسمی لازم داشت.

چیزی که منتشر می‌شه، خود سیگنال نیست

اول ببینیم دقیقا چی قراره از بیمارستان بیرون بره، چون همه‌ی حساب‌ها به همین بستگی داره. سیگنال خام منتشر نمی‌شه. ۱۲۲ فایل ضبط با حدود ۳۳ کانال و نرخ نمونه‌برداری ۲۵۰ تا ۵۰۰ هرتز رو می‌گیرن، فیلتر ۰٫۵ تا ۷۰ هرتز می‌زنن، نویز برق شهر رو با فیلتر ناچ ۵۰ هرتزی برمی‌دارن، و سیگنال رو به پنجره‌های دو ثانیه‌ای با پنجاه درصد هم‌پوشانی می‌شکنن.

از هر پنجره روی هر کانال یازده عدد در میارن؛ طول خط، ریشه‌ی میانگین مربعات، واریانس، نرخ عبور از صفر، توان باندهای دلتا و تتا و آلفا و بتا و گاما و گامای بالا، و فرکانس لبه‌ی طیفی ۹۵ درصد. یازده ویژگی ضربدر ۳۳ کانال می‌شه ۳۶۳. بعد میانگین همه‌ی پنجره‌های یک بیمار رو می‌گیرن تا هر بیمار دقیقا یک بردار ۳۶۳تایی داشته باشه. چیزی که منتشر می‌شه همین جدوله، یک سطر برای هر بیمار.

واحد حریم خصوصی هم همینه، یعنی یک بیمار کامل، نه یک پنجره و نه یک فایل. تعریف همسایگی‌شون هم صریحه؛ دو جدول همسایه‌ن اگه تعداد بیمارهاشون یکی باشه و فقط در بردار کامل یک بیمار فرق کنن. این تعریف رو یادت باشه چون تمام عددهای بعدی از همین بیرون می‌آن.

سهم یک بیمار رو چطور سقف می‌زنی

برای اینکه بشه نویز رو اندازه گرفت، اول باید بدونی یک نفر حداکثر چقدر می‌تونه خروجی رو تکون بده. اسم این عدد حساسیته، و راه به‌دست آوردنش اینه که جلوی سهم هر بیمار سد ببندی.

کاری که می‌کنن ساده‌ست. هر بردار بیمار رو طوری کوچک می‌کنن که طولش از یک سقف ثابت رد نشه، و اون سقف رو C=۲٫۰ گذاشتن. منظور از طول هم نرم L2 است، یعنی ریشه‌ی مجموع مربع درایه‌ها. حالا اگه یک بیمار رو با بیمار دیگه‌ای عوض کنی، بدترین حالت اینه که برداری به طول ۲ برداشته بشه و برداری به طول ۲ گذاشته بشه، پس کل جدول حداکثر ۲C یعنی ۴ واحد در نرم L2 جابه‌جا می‌شه. این می‌شه حساسیت L2 برابر ۴٫۰.

تا اینجا هیچ ایرادی نیست. مکانیزم گاوسی هم دقیقا با همین عدد کار می‌کنه؛ نویز نرمالی با انحراف معیار σ اضافه می‌کنی که σ رو از روی حساسیت L2 و ε و δ حساب کرده‌ای، و در این مقاله δ رو ۱۰ به توان منفی ۵ گرفته‌ن و ε رو روی شش مقدار ۰٫۵ و ۱ و ۲ و ۵ و ۱۰ و ۲۰ آزمایش کرده‌ن.

عددها رو دنبال کن؛ ضریب نوزده از کجا میاد

مکانیزم دوم لاپلاسه، و اینجاست که شهودت اشتباه می‌گه. نویز لاپلاس رو که روی تک‌تک درایه‌ها جداگانه اضافه می‌کنی، مقیاسش رو حساسیت L1 تعیین می‌کنه نه حساسیت L2، و نرم L1 یعنی مجموع قدرمطلق درایه‌ها و نه ریشه‌ی مجموع مربع‌ها.

و این دو تا نرم در فضای پربعد اصلا نزدیک هم نیستن. اگه بدونی طول L2 یک بردار حداکثر r است، تنها چیزی که درباره‌ی L1 می‌تونی نتیجه بگیری اینه که حداکثر r√d است، که d همون تعداد درایه‌هاست. چرا؟ چون بدترین حالت وقتیه که بار بردار به‌طور مساوی بین همه‌ی درایه‌ها پخش شده باشه، و اون‌وقت مجموع قدرمطلق‌ها √d برابر ریشه‌ی مجموع مربع‌ها در می‌آد.

حالا عددها رو بذار سر جاشون. چون d برابر ۳۶۳ و C برابر ۲٫۰ است، کران حساسیت L1 می‌شه ۲ ضربدر جذر ۳۶۳ ضربدر ۲٫۰ که تقریبا ۷۶٫۲۱ در می‌آد، و مقیاس لاپلاسی که درست بود همین ۷۶٫۲۱ تقسیم بر ε می‌شد.

چیزی که در کد پیاده شده ۴٫۰ تقسیم بر ε بوده، یعنی همون حساسیت L2 رو در فرمول لاپلاس گذاشتن. نسبت این دو رو حساب کن؛ ۷۶٫۲۱ تقسیم بر ۴٫۰ می‌شه ۱۹٫۰۵، که دقیقا جذر ۳۶۳ است. پس در ε=۱ نویزی با مقیاس ۴ اضافه شده جایی که انتشار رسمی کل بردار به مقیاس ۷۶٫۲۱ نیاز داشت.

و چون واریانس لاپلاس با مربع مقیاس بالا می‌ره، فاصله از این هم بدتره؛ نسبت واریانس‌ها می‌شه مربع ۱۹٫۰۵ یعنی دقیقا ۳۶۳، درست به اندازه‌ی تعداد ویژگی‌ها. نویز درست، از نظر توان، ۳۶۳ برابر نویزیه که اضافه شده.

نکته‌ی مهم اینه که خود نویسنده‌ها این رو پنهان نکردن. در متن مقاله هر دو مقیاس رو کنار هم آورده‌ن و صریح نوشتن که نتایج لاپلاس فقط رفتار داده رو زیر همین مقدار نویز نشون می‌ده و ادعای تضمین رسمی ε-DP برای کل بردار ندارن. این صداقت، بهترین چیز این مقاله‌ست و کاری‌ست که خیلی از مقاله‌های مشابه نمی‌کنن.

چرا اصلا کسی مقیاس درست رو اجرا نمی‌کنه

جواب این سوال هم عددیه و ارزش داره یک لحظه روش وایستی. چون بردار برش‌خورده طولش حداکثر ۲ است و ۳۶۳ تا درایه داره، ریشه‌ی میانگین مربعات هر درایه از ۲ تقسیم بر جذر ۳۶۳ بیشتر نمی‌شه یعنی حدود ۰٫۱۰۵، در حالی که نویز لاپلاس با مقیاس ۷۶٫۲۱ انحراف معیاری برابر ۷۶٫۲۱ ضربدر جذر ۲ داره که می‌شه نزدیک ۱۰۸.

یعنی نویزی که هزار برابر خود سیگناله، و وقتی این‌قدر نویز روی بردار بریزی بردار منتشرشده عملا نویز خالص می‌شه و هیچ سنجه‌ای که بگه داده به چه دردی می‌خوره روی اون معنا نمی‌ده. پس اینکه پیاده‌سازی مقیاس کوچک‌تر رو انتخاب کرده اتفاقی نیست، چون مقیاس درست در این ابعاد داده رو کاملا از بین می‌بره. این خودش یک یافته است، به شرطی که همین‌طور صورت‌بندی بشه، یعنی «لاپلاس مختصات‌به‌مختصات برای انتشار یک بردار ۳۶۳بعدی ابزار مناسبی نیست»، نه اینکه عدد کوچک‌تری در فرمول گذاشته بشه.

اینجاست که مکانیزم گاوسی برتری واقعیش رو نشون می‌ده، چون با حساسیت L2 تنظیم می‌شه و جریمه‌ی √d رو نمی‌ده. دلیل وجود داشتن مکانیزم گاوسی هم دقیقا همینه و نه چیز دیگه‌ای؛ در ازای پذیرفتن یک δ کوچک، از ضریب جذر بعد خلاص می‌شی.

بعد بردار، یک پارامتر حریم خصوصیه

حالا نتیجه‌ی عملی رو ببین که از خود مقاله هم فراتر می‌ره، چون عامل √d تعداد ویژگی‌ها رو مستقیم به مقدار نویز وصل می‌کنه.

۳۳ کانال ضربدر ۱۱ ویژگی می‌شه ۳۶۳ و ضریب می‌شه حدود ۱۹. اگه همون یازده ویژگی رو روی یک هدست ۶۴ کاناله حساب کنی، d می‌شه ۷۰۴ و ضریب می‌ره روی حدود ۲۶٫۵. اگه فقط یک ویژگی دیگه به ازای هر کانال اضافه کنی، ۳۳ ضربدر ۱۲ می‌شه ۳۹۶ و ضریب می‌شه حدود ۱۹٫۹.

هیچ‌کس موقع نوشتن تابع استخراج ویژگی فکر نمی‌کنه داره تصمیم حریم خصوصی می‌گیره. ولی زیر لاپلاس مختصات‌به‌مختصات، انتخاب ویژگی همون تصمیم حریم خصوصیه. هر کانالی که اضافه می‌کنی بودجه‌ی ε رو گران‌تر می‌کنه، و این هزینه در هیچ نمودار دقت و هیچ گزارش منابع پیدا نیست.

نشت دومی که صداش در نمیاد

یک چیز دیگه در همین مقاله هست که آروم‌تره و از ضریب نوزده مهم‌تر. قبل از برش و نویز، هر ستون ویژگی رو نرمال می‌کنن، یعنی میانه رو کم می‌کنن و بر دامنه‌ی میان‌چارکی تقسیم می‌کنن، که تا اینجا کار استانداردیه.

مسئله اینه که این میانه و این دامنه‌ی میان‌چارکی از روی همون بیمارهای خصوصی حساب شده‌ن. یعنی آماره‌ای که مستقیم از دل داده‌ی محرمانه بیرون اومده، بدون هیچ نویزی، در خط لوله‌ی انتشار نشسته. نویسنده‌ها این رو هم خودشون نوشتن و گفته‌ان که کران‌های حساسیت یک تبدیل مقیاس ثابت رو فرض می‌کنن و تضمین سرتاسری برای کل خط لوله‌ی پیش‌پردازش برقرار نمی‌کنن.

این دقیقا همون شکست کلاسیک حریم خصوصی تفاضلیه. مکانیزم درست است، نویز درست اضافه شده، و تضمین باز هم برقرار نیست، چون تضمین خاصیت کل مسیر از داده‌ی خام تا خروجی منتشرشده‌ست، نه خاصیت آن تابعی که نویز رو اضافه می‌کنه. در عمل هر جا که آماره‌ای از داده‌ی خصوصی بیرون کشیده بشه و بدون بودجه در مسیر بمونه، همین اتفاق می‌افته.

کتابخانه این کار رو برات نمی‌کنه

مقاله برای نویز از کتابخانه‌ی حریم خصوصی تفاضلی IBM استفاده کرده. این نکته رو به این خاطر می‌گم که هر دو اشکال بالا بیرون از دسترس کتابخانه‌ان.

هر کتابخانه‌ی حریم خصوصی تفاضلی حساسیت رو به‌عنوان ورودی از تو می‌گیره و دقیقا همان نویزی رو اضافه می‌کنه که خواستی. کتابخانه نمی‌دونه بردارت چند بعد دارد، نمی‌دونه سقف برش رو روی چه نرمی گذاشتی، و نمی‌دونه تعریف همسایگی‌ات چیه. من در عمل ندیده‌ام که این استدلال جایی مستند بشه؛ کد فراخوانی نویز همیشه بازبینی می‌شه، ولی آن چند خط ریاضی که حساسیت رو از تعریف همسایگی بیرون می‌کشه معمولا در سر کسی می‌مونه و روی کاغذ نمی‌آد. هر بازبینی جدی حریم خصوصی باید از همان چند خط شروع بشه، نه از فراخوانی کتابخانه.

نتیجه‌ها چقدر وزن دارن

چند تا قید هست که خود مقاله می‌گذارد و رعایتشان لازم است. هر پیکربندی حریم خصوصی فقط با یک بار نمونه‌گیری نویز ارزیابی شده، یعنی یک قرعه بدون تکرار و بدون بازه‌ی خطا، آن هم روی مجموعه‌ای که ۱۲۲ فایل بیشتر نیست و توزیع کلاس‌هاش نامتوازنه و برچسب‌هاش رو با تطبیق کلیدواژه‌های مربوط به تشنج از فایل‌های فراداده در آورده‌ن.

پس منحنی ε در برابر اینکه چقدر از داده باقی می‌مونه رو نباید مثل یک فهرست قیمت خواند که از رویش بودجه انتخاب کنی. مقاله خودش هم اون رو یک مطالعه‌ی موردی می‌خواند و ادعای بیشتری نمی‌کنه، چنان‌که آزمون طبقه‌بندی رو هم صریحا یک بررسی جانبی معرفی کرده تا ببینن چقدر از داده مونده، نه هدف اصلی کار.

زنجیره‌ای که ε ته‌ش می‌شینه

ε شبیه یک پیچ تنظیم به نظر می‌رسه که هرچه بازترش کنی داده‌ات سالم‌تر می‌مونه. ولی ε آخرین حلقه‌ی یک زنجیره است و به‌تنهایی هیچ معنایی نداره.

زنجیره از تعریف همسایگی شروع می‌شه، یعنی اینکه اصلا چه چیزی رو داری پنهان می‌کنی، یک بیمار یا یک پنجره. بعد می‌رسه به اینکه سهم آن واحد رو با چه سقفی محدود کرده‌ای. بعد به اینکه آن سقف روی کدام نرم بسته شده و مکانیزمی که انتخاب کرده‌ای با کدام نرم کار می‌کنه. و بعد به تعداد ابعاد، که در یکی از این دو مسیر ضریب می‌گیره و در آن یکی نه. ε تازه بعد از همه‌ی این‌ها می‌آد.

هر کدام از این حلقه‌ها رو که اشتباه ببندی، ε همچنان چاپ می‌شه و در جدول مقاله قشنگ می‌شینه و هیچ هشداری نمی‌ده. تنها چیزی که یک ادعای حریم خصوصی رو قابل بررسی می‌کنه، منتشر کردن کل زنجیره‌ست. کاری که این مقاله کرده، و ارزشش هم دقیقا همین است، افشای حلقه‌ای بوده که در کار خودشان محکم بسته نشده.

مقالات مرتبط