精华内容
下载资源
问答
  • 光滑曲线什么意思? n次方、n次方和公式、二项式定理(和的n次方),它们的理解记忆与对比。

    目录

    一、光滑曲线

    二、n次方的差、和

    1. 记忆

    2. n次方差为什么有两个公式?

    三、二项式定理


    一、光滑曲线

    同济七版注释:当曲线上每一点都具有切线,且切线随切点的移动而连续转动,这样的曲线是光滑曲线。

    这里的“切线连续转动”很不好理解,也许曲线积分会用到吧,在此不做深究。只需记住,考研数学三范围内的含义:处处存在导数且曲线连续。处处可导,但不一定导函数连续


    相关拓展资料:

    《光滑曲线定义浅析》https://www.ixueshu.com/document/785f0562d02a43a5318947a18e7f9386.html

    光滑的判定:曲线连续可微,则光滑。

    《曲线光滑定义及光滑性条件用途解析》https://www.ixueshu.com/document/eddc91e4b3efa75e318947a18e7f9386.html

    这篇更好理解。定义2: 有一阶连续导数的曲线(充分不必要条件)。即曲线连续是曲线光滑的必要不充分条件。

    二、n次方的差、和

    1. 记忆

    n次方差,首先有 (a-b),后面是指数和为 n-1 的各项 a 与 b 的组合,这里没有二项式定理的系数Cn_m等!

    n次方差,如果拆为 (a+b),那么后面的项正负交替,首项 a^(n-1) 为正,末项 b^(n-1)为负,此时要注意这个展开顺序

    n次方和,相当于n次方差中,b 换成 -b,但该替换仅在 n 为奇数时成立,所以n为偶数时不可拆!

    2. n次方差为什么有两个公式?

    (1)若n=2(2k+1),如6、18等等,那么由平方差公式,先可分解为两个 2k+1 次方的和与差,而奇数次差、和均可拆,分别拆出 (a-b)、(a+b),所以既可以写成 (a-b) 与其他因子的乘积,也可写成 (a+b)。

    (2)若n=2*2k,如8、16等,那么平方差可以直接拆出 2k 次方的和(不可继续分解)、差,而差可以再拆为 k次方的,如果 k 是2的乘方,那么最终将得到 (a^2-b^2) 项,如果 k 经过若干次拆分后变为奇数,那么转为(1)中的情况。


    《n次方和及n次方差公式》:https://wenku.baidu.com/view/f896f5d5ba0d4a7302763a9e.html

    这篇文章写的很全,除了通用公式也给了常用的,如立方差、立方和等。

    三、二项式定理

    二项式定理是以和的n次方为基本形式,如果是差,那么将b换成-b即可。

    与n次方差、和对比,每一项多了一个系数C,而且这里的指数和是n,符号均为正

     

    展开全文
  • 分隐私Differential Privacy介绍

    万次阅读 2019-05-16 16:46:42
    分隐私,英文名为differential privacy,顾名思义,保护的是数据源中一点微小的改动导致的隐私泄露问题。比如有一群人出去聚餐,那么其中某人是否是单身狗就属于分隐私。 为了更形式化地描述分隐私,我们需要...

    差分隐私,英文名为differential privacy,顾名思义,保护的是数据源中一点微小的改动导致的隐私泄露问题。比如有一群人出去聚餐,那么其中某人是否是单身狗就属于差分隐私。

    为了更形式化地描述差分隐私,我们需要先定义相邻数据集。现给定两个数据集D和D’, 若它们有且仅有一条数据不一样,那我们就称此二者为相邻数据集。以上面数据集为例:假定有 n 个人,他们是否是单身狗,形成一个集合 \{a_1,a_2, …, a_n\} (其中 a_i = 01),那么另一个集合当中只有一个人改变了单身状态,形成另一个集合 \{a_1’, a_2’, …, a_n’\} ,也就是只存在一个 i 使得 a_i \ne a_i’,那么这两个集合便是相邻集合。

    那么对于一个随机化算法 A (所谓随机化算法,是指对于特定输入,该算法的输出不是固定值,而是服从某一分布),其分别作用于两个相邻数据集得到的两个输出分布难以区分。差分隐私形式化的定义为:

    Pr\{A(D) = O\} ≤e^\epsilon \cdot Pr\{A(D’) = O\}

    也就是说,如果该算法作用于任何相邻数据集,得到一个特定输出 O 的概率应差不多,那么我们就说这个算法能达到差分隐私的效果。也就是说,观察者通过观察输出结果很难察觉出数据集一点微小的变化,从而达到保护隐私的目的。

    那如何才能得到差分隐私呢?最简单的方法是加噪音,也就是在输入或输出上加入随机化的噪音,以期将真实数据掩盖掉。比较常用的是加拉普拉斯噪音(Laplace noise)。由于拉普拉斯分布的数学性质正好与差分隐私的定义相契合,因此很多研究和应用都采用了此种噪音。还是以前面那个数据集为例,假设我们想要知道到底有多少人是单身狗,我们只需要计算 \sum a_i ,那么为了掩盖具体数值,实际输出值应为 O=\sum a_i + r_{lap} ,相应地,另一个数据集输出的是 O’= \sum a_i’+r_{lap}’ 。这使得观察者分不清最终的输出是由哪个数据集产生的。

    前面描述的是差分隐私的严格定义。还有一种稍微放宽一点的定义为:

    Pr\{A(D) = O\} \le e^\epsilon \cdot Pr\{A(D’) = O\} + \delta

    其中 \delta 是一个比较小的常数。要获取这种差分隐私,我们可以使用高斯噪音(Gaussian noise)。

    当然,对输入或输出加噪音会使得最终的输出结果不准确。而且由于噪音是为了掩盖一条数据,所以很多情况下数据的多少并不影响加的噪音的量。那么在数据量很大的情况下,噪音的影响很小,这时候就可以放心大胆地加噪音了,但数据量很小的情况下,噪音的影响就显得比较大,会使得最终结果偏离准确值较远而变得不可用。也有些算法不需要加噪音就能达到差分隐私的效果,听起来很美好,但这种算法通常要求数据满足一定的分布,这一点在现实中通常很难满足。

    [1] Dwork, Cynthia, et al. "Our data, ourselves: Privacy via
    distributed noise generation." Annual International Conference on the Theory and Applications of
    Cryptographic Techniques. Springer, Berlin, Heidelberg, 2006.

    [2] Dwork, Cynthia, and Aaron Roth. "The algorithmic
    foundations of differential privacy." Foundations and Trends® in Theoretical Computer Science 9.3–4 (2014):
    211-407.

    [3] Bhaskar, Raghav, et al. "Noiseless database
    privacy." International Conference on
    the Theory and Application of Cryptology and Information Security. Springer, Berlin,
    Heidelberg, 2011.

    展开全文
  • 背景提取的目标就是根据视频图像序列,找出图像中每一点的背景值。 背景提取有很多算法。针对静止摄像机的帧间分法、高斯背景分法,还有针对运动摄像机的光流法等。  一. 帧间分法 相邻帧间图像分思想:...

          背景提取是在视频图像序列中提取出背景,背景就是场景中静止不动的景物。因为摄像机不动,因此图像中的每个像素点都有一个对应的背景值,在一段时间内,这个背景值是比较固定的。背景提取的目标就是根据视频图像序列,找出图像中每一点的背景值。 背景提取有很多算法。针对静止摄像机的帧间差分法、高斯背景差分法,还有针对运动摄像机的光流法等。 

    一. 帧间差分法

    相邻帧间图像差分思想:检测出了相邻两帧图像中发生变化的区域。该方法是用图像序列中的连续两帧图像进行差分,然后二值化该灰度差分图像来提取运动信息。由帧间变化区域检测分割得到的图像,区分出背景区域和运动车辆区域,进而提取要检测的车辆目标。它是通过比较图像序列中前后两帧图像对应像素点灰度值的不同,通过两帧相减,如果灰度值很小,可以认为该点无运动物体经过;反之灰度变化很大,则认为有物体经过。
    1. 算法原理

         帧间差分法是将视频流中相邻两帧或相隔几帧图像的两幅图像像素值相减,并对相减后的图像进行阈值化来提取图像中的运动区域。 
    若相减两帧图像的帧数分别为第k帧, 第(k+1)帧,其帧图像分别为f_{k}(x,y)f_{k+1}(x,y)差分图像二值化阈值为T,差分图像用D(x, y)表示,则帧间差分法的公式如下: 

                                         

    帧间差分法的优缺点如下:

    • 优点:算法简单,不易受环境光线影响
    • 缺点: 
      • 不能用于运动的摄像头中;
      • 无法识别静止或运动速度很慢的目标;
      • 运动目标表面有大面积灰度值相似区域的情况下,在做差分时图像会出现孔洞;

    我们以年辆检测为例,车辆检测除了要检测出运动车辆.同时还要检测出暂时停止的车辆,在这个方面,此类方法无能为力。而且如果车辆的体积较大,那么车辆在前后帧中根容易产生重叠部分,尤其是大货车,这使得帧问差分的结果主要为车头和车尾。车辆中间部分的差分值相对报小.形成空洞,不利于检测。

    实例:

    #include<opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    
    int main()//帧间差分法
    {
    VideoCapture capture("tree.avi");//获取视频
    if (!capture.isOpened())
    return -1;
    double rate = capture.get(CV_CAP_PROP_FPS);//获取视频帧率
    int delay = 10000 / rate;
    Mat framepro, frame, dframe;
    bool flag = false;
    namedWindow("image");
    namedWindow("test");
    while (capture.read(frame))
    {
    if (false == flag)
    {
    framepro = frame.clone();//将第一帧图像拷贝给framePro
    flag = true;
    }
    else
    {
    absdiff(frame, framepro, dframe);//帧间差分计算两幅图像各个通道的相对应元素的差的绝对值。
    framepro = frame.clone();//将当前帧拷贝给framepro
    threshold(dframe, dframe, 80, 255, CV_THRESH_BINARY);//阈值分割
    imshow("image", frame);
    imshow("test", dframe);
    waitKey(delay);
    }
    }
    waitKey();
    return 0;
    }

    结果:

      

     

    二. 背景差分法

          为达到前景目标的识别,譬如,交通路口对车辆的识别、监控器对行人的识别,常用的且较为有效的方法就是背景差分法(还有其他的方法,比如光流场法,帧差法),背景差分法是一种对静止场景进行运动分割的通用方法,它将当前获取的图像帧与背景图像做差分运算,得到目标运动区域的灰度图,对灰度图进行阈值化提取运动区域,而且为避免环境光照变化影响,背景图像根据当前获取图像帧进行更新。 根据前景检测,背景维持和后处理方法,存在几种不同的背景差方法。如何获取一个“美好”的背景图,是背景差分法的关键和难点。此处介绍一种最为简单的获取背景的方法——平均背景法。

    顾名思义,其基本思想就是,将所采集到的背景图片叠加求和,而后求取平均值作为要求的背景。

    平均背景法使用四个OpenCV函数:

    1.将图像视频的前几帧,利用opencv的cvAcc函数累加求和,并统计累加次数,求取平均值,记为A。(注意理解该平均值的意思是在(x,y)位置处,所有参与求和计算的图像在该点出的像素平均值);

    2.前一帧图像和当前参与累加的图像求差的绝对值,利用cvAbsDiff函数,而后该绝对值图像也进行累加求平均值,记为D。(同理这是某点的差值平均值)它描述的是某点像素值得波动幅度。

    3.那么有1和2便可以认为,图像某点的像素值P若满足A-D < P < A+D,则认为此点属于背景,然而由于前景目标的加入,可能对背景点的亮度有一定的影响,故对波动幅度D进行一定的放缩,若 A -KD < p < A + KD,便认为该点为背景点。自然在该范围外的点,便是我们需要的前景点。那么用cvThreshold函数完成二值化。我们的目的就达到了。
    此为背景建模最简单的方法,在室内等干扰较少的环境下使用时,效果较好,一旦有些许干扰则效果严重下降.

    from :https://blog.csdn.net/q6541oijhk/article/details/41850129

    实例:

    #include<opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    Mat IavgF, IdiffF, IprevF, IhiF, IlowF;//平均,差分,前景,判断是否前景的高低阈值,在之间表示是背景(变化小)
    Mat tmp, tmp2;//作为中间变量,传递变量
    Mat Imaskt;
    float Icount;
    vector<Mat> Igray(3);
    vector<Mat> Ilow(3);//将高阈值按通道分别存放
    vector<Mat> Ihi(3);//将低阈值按通道分别存放
    
    void AllocateImages(Mat& I);
    void accumulateBackground(Mat& I);
    void creatModelsfromStats();
    void setHighThreshold(float scale);
    void setLowThreshold(float scale);
    void backgroundDiff(Mat& I, Mat& Imask);
    int main() {
    	Mat image;
    	VideoCapture capture("tree.avi");
    	double rate = capture.get(CV_CAP_PROP_FPS);//获取视频帧率
    	int delay = 10000 / rate;
    	capture >> image;
    	if (image.empty())//如果某帧为空则退出循环
    		cout << "read fail" << endl;
    	AllocateImages(image);
    	if (!capture.isOpened())
    		return -1;
    	int num = 1;
    	while (num==50) {//这一个是学习背景模型,也可以设置为前50帧用来学习,不一定非要学习整个视频
    		accumulateBackground(image);
    		capture >> image;
    		if (image.empty())
    			break;
    		imshow("intput", image);
    		waitKey(delay);
    		num++;
    	}
    	destroyAllWindows();
    
    	creatModelsfromStats();//获得高低阈值
    	Mat mask;
    	while (1) {
    		capture >> image;
    		if (image.empty())
    			break;
    		backgroundDiff(image, mask);//mask输出二值化图像,前景为255
    		imshow("ed", mask);
    		split(image, Igray);
    		Igray[2] = max(mask, Igray[2]);//用红色标记前景
    	    merge(Igray, image);
    		imshow("标记", image);
    		waitKey(delay);
    	}
    	destroyAllWindows();//防止异常退出
    }
    void AllocateImages(Mat& I) {
    	Size sz = I.size();
    	IavgF = Mat::zeros(sz, CV_32FC3);
    	IdiffF = Mat::zeros(sz, CV_32FC3);
    	IprevF = Mat::zeros(sz, CV_32FC3);
    	IhiF = Mat::zeros(sz, CV_32FC3);
    	IlowF = Mat::zeros(sz, CV_32FC3);
    	Icount = 0.00001f;//防止除以0
    	tmp = Mat::zeros(sz, CV_32FC3);
    	tmp2 = Mat::zeros(sz, CV_32FC3);
    	Imaskt = Mat(sz, CV_32FC3);
    }
    void accumulateBackground(Mat& I) {
    	static int flag = 1;
    	I.convertTo(tmp, CV_32F);//类型转换
    	if (!flag) {
    		IavgF += tmp;
    		absdiff(tmp, IprevF, tmp2);
    		IdiffF += tmp2;
    		Icount += 1;
    	}
    	flag = 0;
    	IprevF = tmp;
    }
    void creatModelsfromStats() {//得到背景模型
    	IavgF *= (1 / Icount);
    	IdiffF *= (1 / Icount);
    	IdiffF += Scalar(1.0, 1.0, 1.0);
    	setHighThreshold(12.0);//参数指 倍数
    	setLowThreshold(13.0);
    }
    void setHighThreshold(float scale) {//高低阈值的设定
    	IhiF = IavgF + (IdiffF*scale);
    	split(IhiF, Ihi);
    }
    void setLowThreshold(float scale) {
    	IlowF = IavgF - (IdiffF*scale);
    	split(IlowF, Ilow);
    }
    void backgroundDiff(Mat& I, Mat& Imask) {
    	I.convertTo(tmp, CV_32F);//类型转换
    	split(tmp, Igray);
    	//对三个通道依次比较是否在阈值区间内
    	inRange(Igray[0], Ilow[0], Ihi[0], Imask);//输出二值图像Imask
    	inRange(Igray[1], Ilow[1], Ihi[1], Imaskt);
    	Imask = min(Imask, Imaskt);//与运算
    	inRange(Igray[2], Ilow[2], Ihi[2], Imaskt);
    	Imask = min(Imask, Imaskt);
    	Imask = 255 - Imask;//在阈值内的置255,表示背景,所以做翻转,使背景标为0,前景为255.
    }

    结果:

      

    程序可以运行,但我使用opencv例程里的tree.avi做检测,但结果失败了,未能检测出手掌,求各位大佬能指出算法哪地方出了问题? 

    下面是网上普遍流传的c版本的平均背景法,亲测有效,效果一般。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include<opencv\cv.h>
    #include<opencv\highgui.h>
    
    //float 3-channel iamges
    IplImage *IavgF, *IdiffF, *IprevF, *IhiF, *IlowF;
    
    IplImage *Iscratch, *Iscratch2;
    
    //float 1-channel iamges
    IplImage *Igray1, *Igray2, *Igray3;
    IplImage *Ilow1, *Ilow2, *Ilow3;
    IplImage *Ihi1, *Ihi2, *Ihi3;
    
    //byte  1-channel image
    IplImage *Imaskt;
    
    //counts number of images learned for averaging later
    float Icount;
    
    void  AllocateImages(IplImage* I);
    void  accumulateBackground(IplImage* I);
    void  createModelsfromStats();
    void  setHighThreshold(float scale);
    void  setLowThreshold(float scale);
    void  backgroundDiff(IplImage *I, IplImage * Imask);
    void  DeallocateImage();
    
    int main(int argc, char** argv)
    {
    	cvNamedWindow("intput", CV_WINDOW_AUTOSIZE);                    //创建输入显示窗口
    	cvNamedWindow("output", CV_WINDOW_AUTOSIZE);                    //创建输出显示窗口
    	CvCapture* capture = cvCreateFileCapture(argv[1]);          //返回一个capture指针,指向视频
    
    	IplImage* img = cvQueryFrame(capture);                          //从视频中取出的图片
    
    	IplImage* Imask = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//创建输出图片,这里不能去掉cvCreateImage(cvGetSize(Img),IPL_DEPTH_8U,1),虽然我看例程里省略了
    
    	AllocateImages(img);//给图像分配内存
    
    						/*累积图像,只取了前30帧图片*/
    	while (Icount<30) {
    		accumulateBackground(img);                                   //调用累积图像的函数,循环30次                               
    		img = cvQueryFrame(capture);								 //从视频中取出的图片
    		cvShowImage("intput", img);
    		cvWaitKey(20);
    	}
    
    
    	createModelsfromStats();                                        //背景建模
    
    	while (1)
    	{
    		img = cvQueryFrame(capture);
    		if (!img) break;
    
    		backgroundDiff(img, Imask);                                 //根据模型分割前景
    
    		cvShowImage("output", Imask);                               //显示图像,视频是一张一张图片连续播放的结果
    		cvShowImage("intput", img);
    		char c = cvWaitKey(33);                                    //当前帧被显示后,等待33ms再读取下一张图片
    		if (c == 27) break;                                           //等待期间按下esc键,ASCII码为27,则循环退出
    	}
    	cvReleaseCapture(&capture);
    	cvDestroyWindow("output");
    	cvDestroyWindow("intput");
    	DeallocateImage();
    }
    
    
    
    
    //给需要的所有临时图像分配内存
    void  AllocateImages(IplImage* I) {
    	CvSize sz = cvGetSize(I);
    	IavgF = cvCreateImage(sz, IPL_DEPTH_32F, 3); cvZero(IavgF);
    	IdiffF = cvCreateImage(sz, IPL_DEPTH_32F, 3); cvZero(IdiffF);
    	IprevF = cvCreateImage(sz, IPL_DEPTH_32F, 3); cvZero(IprevF);
    	IhiF = cvCreateImage(sz, IPL_DEPTH_32F, 3); cvZero(IhiF);
    	IlowF = cvCreateImage(sz, IPL_DEPTH_32F, 3); cvZero(IlowF);
    	Ilow1 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Ilow2 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Ilow3 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Ihi1 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Ihi2 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Ihi3 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Icount = 0.00001;//protect against divide by zero
    
    	Iscratch = cvCreateImage(sz, IPL_DEPTH_32F, 3);
    	Iscratch2 = cvCreateImage(sz, IPL_DEPTH_32F, 3);
    	Igray1 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Igray2 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Igray3 = cvCreateImage(sz, IPL_DEPTH_32F, 1);
    	Imaskt = cvCreateImage(sz, IPL_DEPTH_8U, 1);
    	cvZero(Iscratch);
    	cvZero(Iscratch2);
    }
    /*积累背景图像和每一帧图像差值的绝对值
    /函数调用需要通道为3,深度为8的彩色图像
    */
    void  accumulateBackground(IplImage* I) {
    	static int first = 1;
    	cvCvtScale(I, Iscratch, 1, 0);//convert to float,3-channel
    	if (!first) {
    		cvAcc(Iscratch, IavgF);
    		cvAbsDiff(Iscratch, IprevF, Iscratch2);
    		cvAcc(Iscratch2, IdiffF);
    		Icount += 1.0;
    	}
    	first = 0;
    	cvCopy(Iscratch, IprevF);
    }
    
    //计算每一个像素的均值和方差观测(平均绝对差分)
    void createModelsfromStats() {
    	cvConvertScale(IavgF, IavgF, (double)(1.0 / Icount));
    	cvConvertScale(IdiffF, IdiffF, (double)(1.0 / Icount));
    
    	//make sure diff is always something
    	cvAddS(IdiffF, cvScalar(1.0, 1.0, 1.0), IdiffF);
    	setHighThreshold(7.0);
    	setLowThreshold(6.0);
    }
    
    void setHighThreshold(float scale) {
    	cvConvertScale(IdiffF, Iscratch, scale);
    	cvAdd(Iscratch, IavgF, IhiF);
    	cvSplit(IhiF, Ihi1, Ihi2, Ihi3, 0);
    }
    
    void setLowThreshold(float scale) {
    	cvConvertScale(IdiffF, Iscratch, scale);
    	cvAdd(IavgF, Iscratch, IlowF);
    	cvSplit(IlowF, Ilow1, Ilow2, Ilow3, 0);
    }
    
    //图像分割
    void backgroundDiff(IplImage *I, IplImage *Imask) {
    	cvConvertScale(I, Iscratch, 1, 0);//to float
    	cvSplit(Iscratch, Igray1, Igray2, Igray3, 0);
    	//channel-1
    	cvInRange(Igray1, Ilow1, Ihi1, Imask);
    	//channel-2
    	cvInRange(Igray2, Ilow2, Ihi2, Imaskt);
    	cvOr(Imask, Imaskt, Imask);
    	//channel-3
    	cvInRange(Igray3, Ilow3, Ihi3, Imaskt);
    	cvOr(Imask, Imaskt, Imask);
    	cvSubRS(Imask, cvScalar(255), Imask);
    }
    
    //内存释放
    void DeallocateImage() {
    	cvReleaseImage(&IavgF);
    	cvReleaseImage(&IdiffF);
    	cvReleaseImage(&IprevF);
    	cvReleaseImage(&IhiF);
    	cvReleaseImage(&IlowF);
    	cvReleaseImage(&Ilow1);
    	cvReleaseImage(&Ilow2);
    	cvReleaseImage(&Ilow3);
    	cvReleaseImage(&Ihi1);
    	cvReleaseImage(&Ihi2);
    	cvReleaseImage(&Ihi3);
    	cvReleaseImage(&Iscratch);
    	cvReleaseImage(&Iscratch2);
    	cvReleaseImage(&Igray1);
    	cvReleaseImage(&Igray2);
    	cvReleaseImage(&Igray3);
    	cvReleaseImage(&Imaskt);
    }
    

    关于int argc, char** argv的参数传递和调试时如何使用请参见:

    https://blog.csdn.net/qq_30815237/article/details/87006586 

     

    展开全文
  • 分隐私 走过的坑

    千次阅读 多人点赞 2019-03-11 12:59:02
    分隐私 小记:学了隐私保护相关匿名模型后,初看分隐私感觉真不是一个层次,好难理解,像是个大坑。书上的内容就给一对兄弟数据表,一个ε-分隐私公式...以下是我初学时一直理解的几个问题: ...

    差分隐私

    小记:学了隐私保护相关匿名模型后,初看差分隐私感觉真,一时好难理解,像是个大坑。书上的内容就给一对兄弟数据表,一个ε-差分隐私公式,然后两个实现机制。真的很难结合起来看懂,到底如何差分?如何实现?如何评估?
    差分隐私口口交流群:564314157

    以下是我初学时一直不理解的几个问题:

    1. 差分隐私针对怎样的数据进行何样的保护?
    2. 差分是什么意思?
    3. 为何给输出结果添加噪声就能使其概率分布近似?
    4. Laplace机制和指数机制的原理到底什么鬼?
    5. 隐私保护强度ε、Laplace噪声参数λ、敏感度如何理解?

    在知乎上看到一些文章,通俗易懂,各抒己见,可罗列学习。

    文章一
    作者:Nemo 链接:https://www.zhihu.com/question/47492648/answer/194047182
    来源:知乎 著作权归作者所有。

    问题提出

    2016 年 6 月份,苹果 WWDC 大会上提到了一项 Differential Privacy 差分隐私技术,其作用是能够对用户的数据进行「加密」上传到苹果服务器。苹果能通过这些「加密」过的数据计算出用户群体的行为模式,但是对每个用户个体的数据却无法解析。
    从而达到保护个人隐私的目的。

    苹果这项技术的实现原理是什么?

    1. 什么是隐私?

    隐私的定义:不同的考量也各抒己见,目前普遍比较接受的是:“单个用户的某一些属性” 可以被看做是隐私。
    这个说法里所强调的是:单个用户。也就是说,如果是一群用户的某一些属性,那么可以不看做隐私。

    举个例子:医院说,抽烟的人有更高的几率会得肺癌。这个不泄露任何隐私。但是如果医院说,张三因为抽烟,所以有了肺癌。那么这个就是隐私泄露了。好,那么进一步,虽然医院发布的是趋势,说抽烟的人更高几率得肺癌。然后大家都知道张三抽烟,那么是不是张三就会有肺癌呢?那么这算不算隐私泄露呢?结论是不算,因为张三不一定有肺癌,大家只是通过一个趋势猜测的。

    因此 从隐私保护的角度来说,隐私的主体是单个用户,只有牵涉到某个特定用户的才叫隐私泄露,发布群体用户的信息(一般叫聚集信息)不算泄露隐私。

    记得高德地图发过一张图,大意是开凯迪拉克的群体喜欢去洗浴中心…很多人说暴露隐私,
    其实从学术定义上来说,这个不算隐私泄露,因为没有牵涉到任何个体。

    那么我们是不是可以任意发布聚集信息呢?倒是未必。
    

    我们设想这样一种情况: 医院发布了一系列信息,说我们医院这个月有100个病人,其中有10个感染HIV。假如攻击者知道其中99个人是否有HIV的信息,那么他只需要把他知道的99个人的信息和医院发布的100人比对,就可以知道第100个人是否感染HIV。

                                    这种对隐私的攻击行为就是差分攻击。
    

    当然,差分隐私一般针对统计数据库的隐私泄露问题,即用户或攻击者看不到数据库的数据集,他们只能通过对数据库查询获取某些统计数据值。
    例如上例,攻击者可查询医院数据库,获取当月患病总人数100,和感染HIV的人数10,并且攻击者已经拥有最大背景知识,知道其中99人的信息。从而进行差分攻击。

    1. 差分隐私

    差分隐私顾名思义就是防止差分攻击了,它想做的事情就是即使你小子知道我发布的100个人的信息,以及另外99个人的信息,你也绝对没办法把这两个信息比对之后获取第100个人的信息。怎么才能做到这一点呢?

    差分隐私于是定义:如果你能找出一种方法让攻击者用某种方式查询100个信息和查询那99个信息得到的结果是一致的,那攻击者就没办法找出那第100个人的信息了。

    但这个“一致” 怎么做到呢?那就加入随机性吧。

    如果查询100个记录和查询99个记录,输出同样值的概率是一样的,攻击者就无法进行差分攻击。

    这里我们就得到了差分隐私的核心思想:对于差别只有一条记录的两个数据集,查询它们获得相同值的概率非常非常的接近。

    Wait,不是说一致的么?为什么变成了非常接近了? 这是因为,如果概率一样,就表示数据集需要完全随机化,那数据的可用性就没有了,隐私保护也没有意义了。所以,我们尽可能的把概率做的接近,而不是一致,以期在隐私和可用性之间找一个平衡。
    在这里插入图片描述
    上面这张图描述了差分隐私的基本思想:

    对于两个只相差一条记录的数据集D和D’来说,查询M的输出结果S的概率应该非常接近。

    Differential Privacy (DP)的严格定义如下:
    在这里插入图片描述
    参数ε 接近0时,exp(ε )接近1,两个概率接近相等,保密程度高。
    ε 越大,越没隐私,但查询结果可以更精确。

    DP就是为了允许研究者在不泄露个体信息(用户隐私)的前提下,对一个数据集的整体(用户行为)进行分析而研究出的加密手段。

    通俗来讲,这个机制保证了一个数据集的每个个体都不被泄露,但数据集整体的统计学信息(比如均值,方差)却可以被外界了解。因此,比如一个医疗机构要公布患者的疾病数据给外界以供研究,就可以先对这个数据集做一个满足DP的扰动,再公布出去。

    1. 如何做到差分隐私

    其实就是在查询结果里 加入随机性。

    任何一种方法,只要用在数据集上能满足差分隐私的核心思想,那这个方法就是满足差分隐私的。所以最常用的方法是在结果上加满足某种分布的噪音,使查询结果随机化。

    目前常用的有两种方法,一个是Laplace机制,在查询结果里加入Laplace分布的噪音,适用于数值型输出。
    例如: zhihu里有多少人是985大学毕业的? 假如结果是2000人,那么加噪后,每一次查询得到的结果都会稍稍有些区别,比如有很高的概率输出2001,也有较高概率输出2010, 较低概率输出1990,等等。

    另外一个是指数机制,在查询结果里用指数分布来调整概率,适用于非数值型输出。
    例如: 中国top 3大学是哪一所。很高概率输出 浙江大学,较高概率输出上海交大,较低概率输出武汉大学,很低概率输出蓝翔技校,等等。

    1. 差分隐私应用

    这么说吧,任何需要保护隐私的算法里都可以使用差分隐私。

    差分隐私最美丽的一点在于只要你的算法每一个步骤都满足差分隐私的要求,那么它可以保证这个算法的最终输出结果满足差分隐私,
    换句话说,即使攻击者具有足够多的背景知识,也无法在最终的输出中找出单个人的某项属性。

    目前在学术上,差分隐私可以被应用在
    推荐系统
    社交网络
    基于位置的服务
    当然,也包括了苹果的输入系统
    1. 差分隐私的弱点

    差分隐私的弱点其实很明显:

    • 由于对于背景知识的假设过于强,需要在查询结果中加入大量的随机化,导致数据的可用性急剧下降。
    • 特别对于那些复杂的查询,有时候随机化结果几乎掩盖了真实结果。这也是导致目前应用不多的一个原因。

    但差分隐私作为一个非常漂亮的数学工具,为隐私研究指明了一个发展的方向

    • 在早期,人们很难证明我的方法保护了隐私,更无法证明究竟保护了多少隐私。
    • 现在差分隐私用严格的数学证明告诉人们,只要你按照我的做,我就保证你的隐私不会泄露。

    有兴趣可以移步Havard的Differential Privacy实验室,
    他们做了一个DP的原型实现,你可以传一个数据集上去,得到一个加密过的新数据集:Differentially Private Curator

    更有意思的是,Dwork团队2015年提出应用差分隐私的想法可以解决机器学习的over-fitting问题,一步从隐私界跨到了AI界,开始抢机器学习的饭碗了。她们的论文发表在了2015年的Science上,有志于抢AI饭碗的同学可以瞄一下。
    The reusable holdout: Preserving validity in adaptive data analysis

    1. 最后,放一篇作者朱老师在2017年写的有关差分隐私的前世今生,很学术,有兴趣研究这个方向的同学可以读读。
      Differentially Private Data Publishing and Analysis: a Survey
      附录一篇Dwork的比较老的综述。
      Differential Privacy: A Survey of Results
    展开全文
  • TDK是什么意思,TDK怎么写?SEO中的TDK分别代表标题,关键词,描述,那么对于TDK如何写能提高网站关键词排名呢?一个好的TDK充分证明该SEO人员的优化水平。很多在做seo的伙伴苦于对标题的创意没有深度,排名好但是...
  • 为什么python性能

    千次阅读 2017-08-30 21:16:08
    正文 注意:本文除非特殊指明,”...当我们提到一门编程语言的效率时:通常有两层意思,第一是开发效率,这是对程序员而言,完成编码所需要的时间;另一个是运行效率,这是对计算机而言,完成计算任务所需要的时间
  • 真的是感觉到可怕,最高分 738 分, 12 分满分,700 分以上的有 68 人! 换句话说,如果内卷是存在的,那么就河南考生的竞争而言,绝对是内卷的王中王。 有人可能会说,会不会是考题太简单了,其实分对于河南考生...
  • DRS是啥你都知道?不是吧,不是吧

    万次阅读 多人点赞 2020-07-10 16:09:27
    其实从本地到云,或者从云到云,要思考的点估计是多的,那我先抛出一些问题,看下这些问题华为云服务厂商是怎么解决的。 迁移失败:数据迁移失败怎么办 数据丢失:怎么判断迁移后数据是否完整 业务中断:迁移到...
  • 分阻抗-什么是分?

    万次阅读 2013-12-30 21:01:47
    当你认为你已经掌握了PCB 走线的特征阻抗Z0,紧接着一份数据手册告诉你去设计一个特定的分阻抗。令事情变得更困难的是,它说:“……因为两根走线之间的耦合可以降低有效阻抗,使用50Ω的设计规则来得到一个大约80...
  • 组FreeNas11.3的一点心得

    千次阅读 多人点赞 2020-05-09 10:42:35
    组FreeNas11.3的一点心得零、前言一、Nas的选择功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 共模电压和模电压两种理解方式

    万次阅读 2019-02-20 11:35:46
    共模电压和模电压理解 我们需要的是整个有意义的“输入信号”,要把两个输入端看作“整体”。 就像初中时平面坐标需要用 x,y 两个数表示,而到了高中或大学就只要用一个“数”v,但这个 v 是由 x,y 两个数构成的...
  • 微小、一点 10 Κ κ /'kæpə/ kappa 卡帕 介质常数、绝热指数 11 ∧ λ /'læmdə/ lambda 拉姆达 波长、体积、导热系数 普朗克常数 12...
  • 很难想象哪个学习计算机技术的人是没看过这方面书籍的,如果只是在网上看看技术贴,那样得来的知识绝对是离散的,系统的。而要真正学好一门学问(比如一门计算机语言或者一门技术),一本好书的作用是不言而喻的。...
  • 菜鸟弱弱地问:找个薪资待遇的工作能成长吗?

    千次阅读 多人点赞 2020-07-24 14:13:00
    先看再点赞,给自己一点思考的时间,微信搜索【沉默王二】关注这个靠才华苟且的程序员。 本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章。 读者芒果私信了我一个问题,...
  • CRT是什么意思?LCD又是什么意思

    千次阅读 2008-11-20 17:41:00
    CRT是什么意思?LCD又是什么意思 CRT(Cathode Ray Tube)是阴极射线管。是应用较为广泛的一种显示技术。CRT投影机把输入的信号源分解到R(红)、G(绿)B(蓝)三个CRT管的荧光屏上,在高压作用下发光信号放大、...
  • 如果懂 numpy,请别说自己是 python 程序员

    万次阅读 多人点赞 2019-02-17 14:51:20
    事实上,numpy 的数据组织结构,尤其是数组(numpy.ndarray),几乎已经成为所有数据处理与可视化模块的标准数据结构了(这一点,类似于在机器学习领域 python 几乎已经成为首选工具语言)。越来越多的基于 python ...
  • 共模和模的理解

    千次阅读 2018-05-30 11:50:13
    我们需要的是整个有意义的“输入信号”,要把两个输入端...而共模、模正是“输入信号”整体的属性,分输入可以表示为vi = (vi+, vi-) 也可以表示为 vi = (vic, vid) c 表示共模,d 表示模。两种描述是完...
  • 阻抗匹配是什么意思?阻抗匹配原理详解

    万次阅读 多人点赞 2019-06-12 20:00:53
    阻抗匹配是什么意思_阻抗匹配原理详解 -------本文轉載自<http://m.elecfans.com/article/671550.html>  本文主要详解什么是阻抗匹配,首先介绍了输入及输出阻抗是什么,其次介绍了阻抗匹配的原理,最后...
  •  CV_TM_SQDIFF 平方匹配法:该方法采用平方来进行匹配;最好的匹配值为0;匹配越,匹配值越大。  CV_TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。  CV_TM_CCOEFF...
  • 【通俗理解】模电压和共模电压

    千次阅读 2017-11-15 15:02:55
    我们需要的是整个有意义的“输入信号”,要把两个输入端看作“整体”。   就像初中时平面坐标需要用 x,y 两个数表示,而到了高中或大学就只要用一个“数”v,但这个 v 是由 x,y... 而共模、模正是“输入信号”
  • 关于数模中编程的一点愚见

    万次阅读 多人点赞 2011-12-10 20:15:37
    2011数模国赛已经过去整整三个月,作为负责编程的队员,在此发表一点愚见,也作为年末一点总结,请各位选择性吸收,欢迎拍砖。  编程语言,这个估计是大家最关心的。数模中编程语言首选Matlab,世界公认加默认。...
  • 从Logistic回归到神经网络的一点感悟

    千次阅读 2017-12-12 23:40:06
    从Logistic回归到神经网络的一点感悟 第一次写博客,是自己刚迈入新的学习节奏,想写一点东西,整理一下思绪的时候;也希望为数据分析学会的每周技术帖分享起个头。 主要是记录自己的感悟,当做学习笔记来写;有错误...
  • 433MHz资讯一点

    万次阅读 2016-11-22 15:41:47
      在物联网应用中,BLE、 ...由于该模块的成本极低、睡眠模式到1uA的电流消耗、绿色环保小尺寸封装和极少的外围部件等特点, 得到越来越多人的青睐, 势必在智能家居系统中被广泛使用。
  • 理解机器学习算法的一点心得

    万次阅读 2014-05-10 18:08:34
    然后用不同的方法来优化这个问题,得到尽量好的结果,给人的感觉就像是一个黑盒,实际使用中需要不断地调参实验,但倘若你能理解好算法,至少能让这个盒子透明一点,这也是机器学习算法确实需要使用者去理解算法的...
  • 其实早就想把最近一年的事情总结下来,但因为拖延,或者说一直都有其他的事情,也是心里想着等到31号再总结也迟。 当然,毋庸置疑,2018年对于我来说,是收获的一年,更是过的飞快的一年,博主是一名普普通通的大...
  • 每天读一点好玩心理学--记忆

    万次阅读 2018-01-19 07:55:18
    也许有人说婴幼儿的记忆力,但从婴儿到幼儿这段时间,我们没用几年就记住了一门语言,很多生存的技能都是在婴幼儿学会的。 1)婴幼儿长期记忆系统还能很好运行,记忆的大多是片段,或准确 当长到4岁左右,...
  • <br />同行柬埔寨的一个姑娘是500强企业的技术主管,很客气地说,你经常加班,说明工作方式。我随口回了句,现在美国加班够狠的企业,第一是Facebook,第二是Apple(信息来源[李开复微博])。她愣了一下,...
  • 关于求职的一点感想吧

    千次阅读 2013-01-05 15:59:39
    很多人在面试结束之后都会去写面经,这是一个很好的习惯,一方面在将想法转变成文字之间,自己可以获取更多,另一方面也可以给其它人带来更多好处,自己也曾经想过去写下一些,但碍于自己文笔的功底太,也就...
  • 现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色充分大。 输入格式: 输入第一行给出三个正整数,分别是 M 和 N...
  • 惊呆了!一个程序员的水平能到什么程度?

    万次阅读 多人点赞 2021-01-29 18:56:26
    知乎上有一个灵魂拷问“一个程序员的水平能到什么程度?”让各位猿们纷纷有感而发。 一时吐槽爽,一直吐槽一直爽。很多回答都引发了程序员的共鸣。 0、网友Benny的分享,2200+ 赞 想起了一件十多年前的往事,有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,656
精华内容 40,262
关键字:

一点不差的意思