图像处理的数学修养pdf_图像处理中的数学修炼 pdf - CSDN
  • 数字图像处理数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展。为了弭平图像...

    数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展。为了弭平图像处理道路上的数学险阻,帮助更多人学好数字图像处理,并更快地具备深入研究的能力。笔者特别撰写了这本《图像处理中的数学修炼》(该书现已由清华大学出版社正式出版)。欲了解《图像处理中的数学修炼》的更多详细内容,你可以参考本书的目录

    通常,我不喜欢翻开一本技术书,里面满篇满篇的都是代码。我也不希望用代码去凑页数或者挤占宝贵的篇幅。就《图像处理中的数学修炼》一书而言,更是如此。本书的重点在于全面系统地对图像处理中可能用到的各种数学基础加以总结归纳,所以数学原理才是我们所关注的重点!

    但是如果把数学原理同图像处理实践割裂开来,又可能令某些读者觉得“英雄无用武之地”!为了真正帮读者建立起从数学原理到图像处理实践的桥梁,本书特意在后半部分安排了一些比较实用且非常经典的图像处理算法介绍,而书籍的前半部分则是纯数学部分,后半部分中的经典算法大量使用了前半部分里的数学知识,我们希望以这种方式来帮助读者夯实基础、巩固所学。

    在后半部分的图像处理算法介绍部分,偶尔为了便于理解,本书配备了必要的MATLAB代码。但所用到的代码也非常有限的。因为这并不是一本教你怎么使用MATLAB的书!全书的代码不过六百多行,主要是为了对一些比较经典但又比较复杂的算法加以解释。这些“比较经典但又比较复杂的算法”主要包括(但不限于):

    • 基于暗通道的图像去雾实现
    • 对比度有限的自适应直方图均衡(CLAHE)
    • 自适应直方图均衡(AHE)
    • 基于小波变换的图像融合(失焦图像修复)
    • 基于泊松方程的泊松融合算法(基于迭代)
    • 基于泊松方程的泊松融合算法(有限差分方法解偏微分方程)
    • 基于主成分提取(PCA)的图像压缩

    特别感谢前期试读本书的读者给予笔者的意见反馈,以及CSND博客上【图像处理中的数学原理详解】专栏的读者提出的宝贵见解。下面所列之代码已经结合之前收到的意见反馈进行了调整和优化,并修正了此前存在的一些小问题。非常感谢这部分读者为提高本书质量所做之努力。此书文字部分的勘误可以参见图像处理中的数学修炼》一书之勘误表

    重要的事情说三遍:
    代码或者编程不是这本书的重点!
    代码或者编程不是这本书的重点!
    代码或者编程不是这本书的重点!

    所以全本书也就只有这么点代码。但如果你——本书的读者——对下面这些代码实现有疑问,或者发现那里有缺失,可以直接发邮件(邮件地址见博客左侧联系方式)给作者进行咨询或者获取补充代码。你也可以在“图像处理书籍读者群”中直接联系作者,提出你的疑问,或者得到你想得到的内容。面向本书读者的沟通渠道永远都是畅通的。


    P270

    i=double(imread('vase.tif'));
    [C,S]=wavedec2(i,2,'db1');
    a2=appcoef2(C,S,'db1',2);
    dh1=detcoef2('h',C,S,1);
    dv1=detcoef2('v',C,S,1);
    dd1=detcoef2('d',C,S,1);
    dh2=detcoef2('h',C,S,2);
    dv2=detcoef2('v',C,S,2);
    dd2=detcoef2('d',C,S,2);
    [x,y]=size(i);
    img = zeros(x,y);
    img(1:x/4,1:y/4) =im2uint8(mat2gray(a2));
    img(((x/4)+1):y/2,1:y/4) = im2uint8(mat2gray(dv2));
    img(((x/4)+1):x/2,1:y/4) = im2uint8(mat2gray(dv2));
    img(1:x/4,((y/4)+1):y/2) = im2uint8(mat2gray(dh2));
    img(((x/4)+1):x/2,((y/4)+1):y/2) = im2uint8(mat2gray(dd2));
    img(((x/2)+1):x,1:y/2) = im2uint8(mat2gray(dv1));
    img(1:x/2,((y/2)+1):y) = im2uint8(mat2gray(dh1));
    img(((x/2)+1):x,((y/2)+1):y) = im2uint8(mat2gray(dd1));
    imshow(img,[]);
    

    P272

    X1 = imread('cathe1.bmp');
    X2 = imread('cathe2.bmp');
    XFUS = wfusimg(X1,X2,'sym4',5,'mean','max');
    imshow(XFUS,[]);
    

    P273

    X1 = imread('cathe1.bmp');
    X2 = imread('cathe2.bmp');
    M1 = double(X1) / 256;
    M2 = double(X2) / 256;
    N = 4;
    wtype = 'sym4';
    [c0,s0] = wavedec2(M1, N, wtype);
    [c1,s1] = wavedec2(M2, N, wtype);
    length = size(c1);
    Coef_Fusion = zeros(1,length(2));
    %低频系数的处理,取平均值
    Coef_Fusion(1:s1(1,1)) = (c0(1:s1(1,1))+c1(1:s1(1,1)))/2;
    %处理高频系数,取绝对值大者,这里用到了矩阵乘法
    MM1 = c0(s1(1,1)+1:length(2));
    MM2 = c1(s1(1,1)+1:length(2));
    mm = (abs(MM1)) > (abs(MM2));
    Y  = (mm.*MM1) + ((~mm).*MM2);
    Coef_Fusion(s1(1,1)+1:length(2)) = Y;
    %重构
    Y = waverec2(Coef_Fusion,s0,wtype);
    imshow(Y,[]);
    

    P274

    I = imread('noise_lena.bmp');
    [thr,sorh,keepapp] = ddencmp('den','wv',I);
    de_I = wdencmp('gbl',I,'sym4',2,thr,sorh,keepapp);
    imwrite(im2uint8(mat2gray(de_I)), 'denoise_lena.bmp');
    

    P298

    I = imread('baboon.bmp');  
    I1 = double(I);  
    T = hadamard(8);  
    myFun1 = @(block_struct)T*block_struct.data*T/64;  
    H = blockproc(I1, [8 8], myFun1);  
    H(abs(H)<3.5)=0;  
    myFun2 = @(block_struct)T*block_struct.data*T;  
    I2 = blockproc(H, [8 8], myFun2);  
    subplot(121), imshow(I1,[]), title('original image');  
    subplot(122), imshow(I2,[]), title('zipped image');  
    

    P299

    I = imread('baboon.bmp');  
    I1 = double(I);  
    [m n] =size(I);  
    sizi = 8;  
    num = 16;  
    %分块进行离散沃尔什变换  
    T = hadamard(sizi);  
    myFun1 = @(block_struct)T*block_struct.data*T/(sizi.^2);  
    hdcoe = blockproc(I1, [sizi, sizi], myFun1);  
    %重新排列系数  
    coe = im2col(hdcoe,  [sizi, sizi], 'distinct');  
    coe_t = abs(coe);  
    [Y, ind] = sort(coe_t);  
    %舍去绝对值较小的系数  
    [m_c, n_c] = size(coe);  
    for i = 1:n_c  
    coe(ind(1:num, i), i)=0;  
    end  
    %重建图像  
    re_hdcoe = col2im(coe, [sizi, sizi], [m, n], 'distinct');  
    myFun2 = @(block_struct)T*block_struct.data*T;  
    re_s = blockproc(re_hdcoe, [sizi, sizi], myFun2);  
    subplot(121), imshow(I1,[]), title('original image');  
    subplot(122), imshow(re_s,[]), title('compressed image');  
    

    P307

    I = imread('baboon.bmp');  
    x = double(I)/255;  
    [m,n]=size(x);  
    y =[];  
    %拆解图像  
    for i = 1:m/8;  
        for j = 1:n/8;  
            ii = (i-1)*8+1;  
            jj = (j-1)*8+1;  
            y_app = reshape(x(ii:ii+7,jj:jj+7),1,64);  
            y=[y;y_app];  
        end  
    end  
      
    %KL变换  
    [COEFF,SCORE,latent] = princomp(y);  
    kl = y * COEFF;  
      
    kl1 = kl;  
    kl2 = kl;  
    kl3 = kl;  
      
    %置零压缩过程  
    kl1(:, 33:64)=0;  
    kl2(:, 17:64)=0;  
    kl3(:, 9:64)=0;  
      
    %KL逆变换  
    kl_i = kl*COEFF';  
    kl1_i = kl1*COEFF';  
    kl2_i = kl2*COEFF';  
    kl3_i = kl3*COEFF';  
      
    image = ones(256,256);  
    image1 = ones(256,256);  
    image2 = ones(256,256);  
    image3 = ones(256,256);  
      
    k=1;  
    %重组图像  
    for i = 1:m/8;  
        for j = 1:n/8;  
      
            y = reshape(kl_i(k, 1:64),8,8);  
            y1 = reshape(kl1_i(k, 1:64),8,8);  
            y2 = reshape(kl2_i(k, 1:64),8,8);  
            y3 = reshape(kl3_i(k, 1:64),8,8);  
      
            ii = (i-1)*8+1;  
            jj = (j-1)*8+1;  
      
            image(ii:ii+7,jj:jj+7) = y;  
            image1(ii:ii+7,jj:jj+7) = y1;  
            image2(ii:ii+7,jj:jj+7) = y2;  
            image3(ii:ii+7,jj:jj+7) = y3;  
      
            k=k+1;  
        end  
    end  
    

    ##P356-1

    mountains = double(imread('./img/mountain.jpg'));
    moon = double(imread('./img/moon.png'));
    sizeSrc = size(mountains);
    sizeDst = size(moon);
    
    gradient_inner = moon(1:sizeDst(1)-2,2:sizeDst(2)-1,:)...
        + moon(3:sizeDst(1),2:sizeDst(2)-1,:)...
        + moon(2:sizeDst(1)-1,1:sizeDst(2)-2,:)...
        + moon(2:sizeDst(1)-1,3:sizeDst(2),:)...
        - 4*moon(2:sizeDst(1)-1,2:sizeDst(2)-1,:);
    

    P356-2

    Lap = [0, 1, 0;1, -4, 1;0, 1, 0];
    
    I1 = conv2(double(moon(:,:,1)), double(Lap));
    I2 = conv2(double(moon(:,:,2)), double(Lap));
    I3 = conv2(double(moon(:,:,3)), double(Lap));
    gradient_inner(:, :, 1) = I1(3:sizeDst(1),3:sizeDst(2));
    gradient_inner(:, :, 2) = I2(3:sizeDst(1),3:sizeDst(2));
    gradient_inner(:, :, 3) = I3(3:sizeDst(1),3:sizeDst(2));
    

    P357

    dstX = 350;dstY = 100;
    rebuilt = mountains(dstY:dstY+sizeDst(1)-1,dstX:dstX+sizeDst(2)-1,:);
    
    for n = [1:1000]
        rebuilt(2:2:sizeDst(1)-1,2:2:sizeDst(2)-1,:)= ...
            (rebuilt(1:2:sizeDst(1)-2 , 2:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1) , 2:2:sizeDst(2)-1,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 1:2:sizeDst(2)-2,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 3:2:sizeDst(2),:)...
            -gradient_inner(1:2:sizeDst(1)-2 , 1:2:sizeDst(2)-2,:))/4;
         rebuilt(3:2:sizeDst(1)-1,3:2:sizeDst(2)-1,:)= ...
            (rebuilt(2:2:sizeDst(1)-2 , 3:2:sizeDst(2)-1,:)...
            +rebuilt(4:2:sizeDst(1) , 3:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 2:2:sizeDst(2)-2,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 4:2:sizeDst(2),:)...
            -gradient_inner(2:2:sizeDst(1)-2 , 2:2:sizeDst(2)-2,:))/4;
         rebuilt(3:2:sizeDst(1)-1,2:2:sizeDst(2)-1,:)= ...
            (rebuilt(2:2:sizeDst(1)-2 , 2:2:sizeDst(2)-1,:)...
            +rebuilt(4:2:sizeDst(1) , 2:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 1:2:sizeDst(2)-2,:)...
            +rebuilt(3:2:sizeDst(1)-1 , 3:2:sizeDst(2),:)...
            -gradient_inner(2:2:sizeDst(1)-2 , 1:2:sizeDst(2)-2,:))/4;
        rebuilt(2:2:sizeDst(1)-1 , 3:2:sizeDst(2)-1,:)= ...
            (rebuilt(1:2:sizeDst(1)-2 , 3:2:sizeDst(2)-1,:)...
            +rebuilt(3:2:sizeDst(1) , 3:2:sizeDst(2)-1,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 2:2:sizeDst(2)-2,:)...
            +rebuilt(2:2:sizeDst(1)-1 , 4:2:sizeDst(2),:)...
            -gradient_inner(1:2:sizeDst(1)-2 , 2:2:sizeDst(2)-2,:))/4;
    end
    
    mountains(dstY:sizeDst(1)+dstY-1,dstX:sizeDst(2)+dstX-1,:) = rebuilt;
    figure,imshow(uint8(mountains));
    

    P360-P361

    TargetImg   = imread('pool-target.jpg');  
    SourceImg   = imread('bear.jpg');  
    SourceMask  = im2bw(imread('bear-mask.jpg'));  
    
    [SrcBoundry, ~] = bwboundaries(SourceMask, 8);
    figure, imshow(SourceImg), axis image  
    hold on  
    for k = 1:length(SrcBoundry)  
        boundary = SrcBoundry{k};  
        plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2)  
    end  
    title('Source image intended area for cutting from');
    
    position_in_target = [10, 225];%xy
    [TargetRows, TargetCols, ~] = size(TargetImg);
    [row, col] = find(SourceMask);
    start_pos = [min(col), min(row)];
    end_pos  = [max(col), max(row)];
    frame_size = end_pos - start_pos;
    
    if (frame_size(1) + position_in_target(1) > TargetCols)
        position_in_target(1) = TargetCols - frame_size(1);
    end
    
    if (frame_size(2) + position_in_target(2) > TargetRows)
        position_in_target(2) = TargetRows - frame_size(2);
    end
    
    MaskTarget = zeros(TargetRows, TargetCols);
    MaskTarget(sub2ind([TargetRows, TargetCols], row-start_pos(2)+ ...
    position_in_target(2), col-start_pos(1)+position_in_target(1))) = 1;
    
    TargBoundry = bwboundaries(MaskTarget, 8);
    figure, imshow(TargetImg), axis image
    hold on
    for k = 1:length(TargBoundry)
        boundary = TargBoundry{k};
        plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 1)
    end
    

    P362

    templt = [0 -1 0; -1 4 -1; 0 -1 0];  
    LaplacianSource = imfilter(double(SourceImg), templt, 'replicate');  
    VR = LaplacianSource(:, :, 1);  
    VG = LaplacianSource(:, :, 2);  
    VB = LaplacianSource(:, :, 3);
    
    TargetImgR = double(TargetImg(:, :, 1));  
    TargetImgG = double(TargetImg(:, :, 2));  
    TargetImgB = double(TargetImg(:, :, 3));  
      
    TargetImgR(logical(MaskTarget(:))) = VR(SourceMask(:));  
    TargetImgG(logical(MaskTarget(:))) = VG(SourceMask(:));  
    TargetImgB(logical(MaskTarget(:))) = VB(SourceMask(:));  
      
    TargetImgNew = cat(3, TargetImgR, TargetImgG, TargetImgB);  
    figure, imagesc(uint8(TargetImgNew)), axis image;
    
    AdjacencyMat = calcAdjancency(MaskTarget);
    
    ResultImgR=PoissonSolver(TargetImgR,MaskTarget,AdjacencyMat,TargBoundry);
    ResultImgG=PoissonSolver(TargetImgG,MaskTarget,AdjacencyMat,TargBoundry);
    ResultImgB=PoissonSolver(TargetImgB,MaskTarget,AdjacencyMat,TargBoundry);
    
    ResultImg = cat(3, ResultImgR, ResultImgG, ResultImgB);
    
    %% Show the final results
    figure;
    imshow(uint8(ResultImg));
    

    特别说明:函数calcAdjancency和PoissonSolver的实现请在图像处理学习群中直接联系群主获取,群号见文末。


    P393

    image = imread('Unequalized_Hawkes_Bay_NZ.jpg');  
    Img = rgb2gray(image);  
    [height,width]=size(Img);
    
    NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
    for i = 1:height  
        for j = 1: width  
        %对应灰度值像素点数量增加一
        %因为NumPixel的下标是从1开始,但是图像像素的取值范围是0~255,
        %所以用NumPixel(Img(i,j) + 1)  
        NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;  
        end  
    end  
    
    ProbPixel = zeros(1,256);
    for i = 1:256  
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
    end 
    
    CumuPixel = cumsum(ProbPixel);  
    CumuPixel = uint8(255 .* CumuPixel + 0.5);  
    
    for i = 1:height  
        for j = 1: width  
            Img(i,j) = CumuPixel(Img(i,j));  
        end  
    end
    
    imshow(Img)
    

    P395-1

    a = imread('couple.tiff');
    R = a(:,:,1);
    G = a(:,:,2);
    B = a(:,:,3);
          
    R = histeq(R, 256);
    G = histeq(G, 256);
    B = histeq(B, 256);
          
    a(:,:,1) = R;
    a(:,:,2) = G;
    a(:,:,3) = B;
    imshow(a)
    

    P395-2

    Img = imread('couple.tiff');
    hsvImg = rgb2hsv(Img);
    V = hsvImg(:,:,3);
    [height,width] = size(V);
    
    V = uint8(V*255);
    NumPixel = zeros(1,256);
    for i = 1:height
        for j = 1: width
            NumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;
        end  
    end
    
    ProbPixel = zeros(1,256);
    for i = 1:256
        ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
    end
    
    CumuPixel = cumsum(ProbPixel);
    CumuPixel = uint8(255 .* CumuPixel + 0.5);
      
    for i = 1:height  
        for j = 1: width  
            if V(i,j)==0
    			V(i,j) = CumuPixel(V(i,j)+1);
    		else 
    			V(i,j) = CumuPixel(V(i,j));
    		end 
        end  
    end  
       
    V = im2double(V);
    hsvImg(:,:,3) = V;
    outputImg = hsv2rgb(hsvImg);
    imshow(outputImg);
    

    P397

    img = imread('space.jpg');
    rimg = img(:,:,1);
    gimg = img(:,:,2);
    bimg = img(:,:,3);
    resultr = adapthisteq(rimg);
    resultg = adapthisteq(gimg);
    resultb = adapthisteq(bimg);
    result = cat(3, resultr, resultg, resultb);
    imshow(result);
    

    P398-1

    clear;  
    img = imread('space.jpg');  
    cform2lab = makecform('srgb2lab');  
    LAB = applycform(img, cform2lab);  
    L = LAB(:,:,1);  
    LAB(:,:,1) = adapthisteq(L);  
    cform2srgb = makecform('lab2srgb');  
    J = applycform(LAB, cform2srgb);  
    imshow(J);  
    

    P398-2

    clc;
    clear all;
    Img = rgb2gray(imread('space.jpg'));
    [h,w] = size(Img);  
    minV = double(min(min(Img)));
    maxV = double(max(max(Img)));
    imshow(Img);
    

    P399

    NrX = 8;
    NrY = 4;
    HSize = ceil(h/NrY);
    WSize = ceil(w/NrX);
          
    deltay = NrY*HSize - h;  
    deltax = NrX*WSize - w;  
          
    tmpImg = zeros(h+deltay,w+deltax);  
    tmpImg(1:h,1:w) = Img;  
    
    new_w = w + deltax;
    new_h = h + deltay;
    NrPixels = WSize * WSize;
    
    % NrBins - Number of greybins for histogram ("dynamic range")
    NrBins = 256;
    
    LUT = zeros(maxV+1,1);
    
    for i=minV:maxV  
        LUT(i+1) = fix(i - minV);%i+1
    end  
    
    Bin = zeros(new_h, new_w);  
    for m = 1 : new_h  
        for n = 1 : new_w  
            Bin(m,n) = 1 + LUT(tmpImg(m,n) + 1);
        end  
    end  
    
    Hist = zeros(NrY, NrX, 256);
    for i=1:NrY  
        for j=1:NrX  
            tmp = uint8(Bin(1+(i-1)*HSize:i*HSize, 1+(j-1)*WSize:j*WSize));
            %tmp = tmpImg(1+(i-1)*HSize:i*HSize,1+(j-1)*WSize:j*WSize);
            [Hist(i, j, :), x] = imhist(tmp, 256);  
        end  
    end
    
    Hist = circshift(Hist,[0, 0, -1]);
    
    ClipLimit = 2.5;  
    ClipLimit = max(1,ClipLimit * HSize * WSize/NrBins);
    Hist = clipHistogram(Hist,NrBins,ClipLimit,NrY,NrX);
    Map=mapHistogram(Hist, minV, maxV, NrBins, NrPixels, NrY, NrX);
    
    yI = 1;  
    for i = 1:NrY+1  
        if i == 1  
            subY = floor(HSize/2);
            yU = 1;
            yB = 1;
        elseif i == NrY+1  
            subY = floor(HSize/2);
            yU = NrY;
            yB = NrY;
        else
            subY = HSize;
            yU = i - 1;
            yB = i;
        end
        xI = 1;
        for j = 1:NrX+1
            if j == 1  
                subX = floor(WSize/2);
                xL = 1;
                xR = 1;
            elseif j == NrX+1
                subX = floor(WSize/2);
                xL = NrX;
                xR = NrX;
            else
                subX = WSize;
                xL = j - 1;
                xR = j;
            end
            UL = Map(yU,xL,:);
            UR = Map(yU,xR,:);
            BL = Map(yB,xL,:);
            BR = Map(yB,xR,:);
            subImage = Bin(yI:yI+subY-1,xI:xI+subX-1);  
    
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            sImage = zeros(size(subImage));
            num = subY * subX;
            for i = 0:subY - 1
                inverseI = subY - i;
                for j = 0:subX - 1
                    inverseJ = subX - j;
                    val = subImage(i+1,j+1);
                    sImage(i+1, j+1)=(inverseI*(inverseJ*UL(val)+j*UR(val))...
                                       + i*(inverseJ*BL(val)+j*BR(val)))/num;
                end
            end
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
            output(yI:yI+subY-1, xI:xI+subX-1) = sImage;
            xI = xI + subX;
        end
        yI = yI + subY;
    end  
    
    output = output(1:h, 1:w);
    figure, imshow(output, []);
    

    P404

    img = rgb2gray(imread('theatre.jpg'));
    img_ref = rgb2gray(imread('rpic.jpg'));
    [hgram, x] = imhist(img_ref);
    J = histeq(img, hgram);
    subplot(2,3,1), imshow(img), title('original image');
    subplot(2,3,4), imhist(img), title('original image');
    subplot(2,3,2), imshow(img_ref), title('reference image');
    subplot(2,3,5), imhist(img_ref), title('reference image');
    subplot(2,3,3), imshow(J), title('output image');
    subplot(2,3,6), imhist(J), title('output image');
    

    P409

    %求一幅图像的暗通道图,窗口大小为15*15
    imageRGB = imread('picture.bmp');
    imageRGB = double(imageRGB);
    imageRGB = imageRGB./255;
    dark = darkChannel(imageRGB);
    
    % 选取暗通道图中最亮的0.1%像素,从而求得大气光
    [m, n, ~] = size(imageRGB);
    imsize = m * n;
    numpx = floor(imsize/1000);
    JDarkVec = reshape(dark,imsize,1);
    ImVec = reshape(imageRGB,imsize,3);
    
    [JDarkVec, indices] = sort(JDarkVec);
    indices = indices(imsize-numpx+1:end);
    
    atmSum = zeros(1,3);
    for ind = 1:numpx
        atmSum = atmSum + ImVec(indices(ind),:);
    end
    
    atmospheric = atmSum / numpx;
    
    %求解透射率,并通过omega参数来选择保留一定程度的雾霾,以免损坏真实感
    omega = 0.95; 
    im = zeros(size(imageRGB));
    
    for ind = 1:3 
        im(:,:,ind) = imageRGB(:,:,ind)./atmospheric(ind);
    end
    
    dark_2 = darkChannel(im);
    t = 1-omega*dark_2;
    
    %通过导向滤波来获得更为精细的透射图
    r = 60;
    eps = 10^-6;
    refined_t = guidedfilter_color(imageRGB, t, r, eps);
    refinedRadiance = getRadiance(atmospheric, imageRGB, refined_t);
    

    P410

    function dark = darkChannel(imRGB)
    
    r=imRGB(:,:,1);
    g=imRGB(:,:,2);
    b=imRGB(:,:,3);
    
    [m n] = size(r);
    a = zeros(m,n);
    for i = 1: m     
        for j = 1: n
             a(i,j) = min(r(i,j), g(i,j));
             a(i,j)= min(a(i,j), b(i,j));
        end
    end
    
    d = ones(15,15);
    fun = @(block_struct)min(min(block_struct.data))*d;
    dark = blockproc(a, [15 15], fun); 
    
    dark = dark(1:m, 1:n);
    

    本书源起

    数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步。在阅读图像处理方面的论文时,面对梯度、散度、黑塞矩阵、傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展。

    大约三年前,我开始在博客上介绍一些数字图像处理中的数学基础和数学原理,并专门开设了一个“图像处理中的数学原理”专栏,其中大概收录了三十几篇文章。很多人开始留言询问我,有没有这样一本书?彼时我并没有将该系列文章付梓的想法。但是耐不住众多热情的读者不断敦促我将这个系列相对完整和系统地整理成一本可读性更强的书籍。于是便有了这本书——《图像处理中的数学修炼》。

    大约一年前清华出版社的编辑同我联系,我想或许时机已到,遂开始着手将千头万绪已经发布的和未曾发布的资料整理成书。期间为了能够更好地呈现这本书,出版日期也是一拖再拖。从最初的十一,到双十一,再到春节前,直到现在的烟花三月。这本《图像处理中的数学修炼》可真算是“千呼万唤始出来”。期间很多热情的读者三番五次地问询该书的出版进度,着实令我感觉身上压力不小。无奈好事毕竟多磨,所幸终于瓜熟蒂落。现在这本书终于同大家见面了!


    1496307488_2945.png
    展开全文
  • 很清楚的电子书,图像处理方面的一定要看看,数学知识
  • 本文总结了常用的数学模型方法和它们的主要用途,主要包括数学和统计上的建模方法,关于在数学建模中也挺常用的机器学习算法暂时不作补充,以后有时间就补。至于究竟哪个模型更好,需要用数据来验证,还有求解方法也...

     

    声明一下:下述内容的多数链接出自一本教材: 司守奎《数学建模算法与应用》 第二版的PDF版本,改成转载需要给出原创链接;实属无意冒犯。

    【pdf版教材链接-百度网盘:  https://pan.baidu.com/s/1TEYSW5ZImQU4Sy7Om2rxgA 【 提取码:7i0s】


    本文总结了常用的数学模型方法和它们的主要用途,主要包括数学和统计上的建模方法,关于在数学建模中也挺常用的机器学习算法暂时不作补充,以后有时间就补。至于究竟哪个模型更好,需要用数据来验证,还有求解方法也不唯一,比如指派问题,你可以用线性规划OR动态规划OR整数规划OR图与网络方法来解。

    总的来说,常用主成分分析来降维综合评价的方法有因子分析法、层次分析法、....,用蒙特卡罗方法随机模拟求解;还应掌握数据变换数据拟合、参数估计、插值等数据处理,线性规划、整数规划、目标规划、动态规划类问题的求解要根据已知信息找出约束条件与目标函数图论算法也是非常常用的,组合优化算法常用于很难求出最优解的NP问题,还有一些连续离散化的技术 eg.通过插值or拟合or光滑技术【移动平均之类的】可以把离散数据连续化,通过分组【把数据划分成不同的小区间】OR差分就可以把连续数据离散化....。此外的数值分析算法eg方程组求解、矩阵运算、函数积分等算法也经常用得到。

    另:建议先读第  【3】数据的描述性统计分析   & 【4】数据预处理    这两部分,比较通用,而且算是数据处理的最基础的知识,

    【挖坑】后期会再根据数模竞赛的常用模型和学习难易程度给出学习建议,再补一份用python进行数据分析的资料。至于图像处理方法稍后再补。


    目录

    一、 教程

    【0】python从入门到放弃:

    【1】matlab教程

    【2】数据科学/数据分析教程:

     二、数据预处理与数据探索

    【3】数据的描述性统计分析

    【4】python数据预处理

    三、模型建立

    1. 数学模型

    【5】线性规划

    【6】图与网络模型及方法

    【7】插值与拟合

    【8】灰色预测 

    【9】动态规划

    【10】层次分析法 AHP

    【11】整数规划

    【12】目标规划模型

    【13】偏最小二乘回归

    【14】微分方程模型

    【15】博弈论 / 对策论

    【16】排队论模型

    【17】存储论

    【18】模糊数学模型

    2. 统计模型

    【19】主成分分析

    【20】判别分析

    【21】聚类分析

    【22】时间序列分析

    【23】方差分析

    【24】典型相关分析

    【25】因子分析

    3. 机器学习/数据挖掘模型

    4. 深度学习模型

     【26】神经网络模型

    四、模型求解与优化

    【27】数值优化方法

    【28】组合优化算法

    【29】差分方程模型

    【30】常微分方程的解法

    【31】偏微分方程的数值解

    【32】稳定状态模型

     【33】变分法模型

    五、应用篇:历年数模真题与优秀论文

    【34】数学建模在经济管理方面的运用

    【35】历年竞赛题目

    附录: 机器学习的特征工程-图片

    附录:深度学习框架-以keras为例-图片



    一、 教程

    【0】python从入门到放弃:

    1. python环境+IDE配置:安装Anaconda + Pycharm

    代码编辑器推荐: Anaconda 的Spyder , Pycharm
           数据探索与分析: Anaconda 的jupyter botebook

    专业版的pycharm需要破解, 社区版的功能少了很多但基本够用!!
    1. 官网下载pycharm :pycharm 下载链接
    2. 安装方式参考手把手的教你安装PyCharm --Pycharm 安装详细教程(非常详细实用

    Anaconda 安装教程参考:
    1.   Anaconda详细安装及使用教程(带图文):https://blog.csdn.net/ITLearnHall/article/details/81708148


    2.学习python 的大致路线

    学习python 的大致路线可以归结为:基础语法,内置函数builtin.py ,常用包【numpy、pandas、matplolib、seaborn、sklearn,....】再操作数据,再高级编程面向对象、正则表达式、爬虫,、机器学习等再项目实战。

     python基础--文字教程

    【!!!】推荐: 廖雪峰的python3教程 ;https://www.liaoxuefeng.com/wiki/1016959663602400   

      Python-100-Days :https://github.com/jackfrued/Python-100-Days

     python3 cookbook  :https://python3-cookbook.readthedocs.io/zh_CN/latest/

     python3 学习爬虫:https://github.com/wistbean/learn_python3_spider

     pandas库 :常用功能与函数介绍(结合实例,持续更新)

    高性能科学计算和数据分析的基础包:Numpy基础笔记

    注: python 官网教程 、 W3Cschool菜鸟教程-python3:这几个适合用来当作字典来查; 代码用到了就查!

    贴一个python_600集基础的视频教程:黑马程序员版:Python教程Python从入门到精通教程
    但我个人不建议看这么长的视频,很容易看了前面忘了后面,倍速播放也让你无法抓住重点:可以试试大致浏览文字版教程,用人眼去快速抓取要点,再练点python-100例打好基础。

    二选一:  python 100例-腾讯云 、

    python 100例-菜鸟教程


    【1】matlab教程

    哎,MATLAB被禁用的话试试python吧、人生苦短!

        【博文链接】 w3cschool的matlab入门教程     

    易百教程的matlab 入门: https://www.yiibai.com/matlab/

    【2】数据科学/数据分析教程:

     【博文链接】

     1.  python 数据科学速查手册(中文版):https://github.com/jaystone776/python-data-science-cheatsheet


           2. Github 上的一份数据科学相关的知识速查表, 标星17K多!! :  abhat222 / Data-Science--Cheat-Sheet


     二、数据预处理与数据探索

    【3】数据的描述性统计分析

    基本的概念: 数据的趋势、特征和数量关系,包括描述性统计量【算术平均值、中位数、标准差、方差、极差、偏度和峰度】、参数估计、假设检验....分布函数、密度函数和分位数 、分布拟合检验、中位数检验....

    【博文链接】 数据的统计描述和分析: 直接点这个链接进去看吧,就介绍了概率论与数理统计的基本知识 : 总体、样本、  频数表、直方图 、 统计量 、算术平均值、中位数 、标准差、方差和极差、偏度和峰度 、中心矩、分布函数、密度函数和分位数 ,正态分布  、卡方分布(Chi square) 、t分布 、F 分布;参数估计的  点估计 &区间估计 &  Matlab 实现;假设检验:Z 检验、t检验、分布拟合检验 、 偏度、峰度检验Wilcoxon秩和检验、中位数检验。

              一般如果有数据,就可以先查看数据的各维度的描述性统计信息,来查看数据的质量,并假设数据可能的分布。有了这些基本印象后,再对数据进行预处理。参考【0  python数据分析】中的 数据变换方法&预处理方法。

    常用离散分布:二项分布、泊松分布、超几何分布、几何分布、 负二项分布

    常用连续分布: 对正态分布、均匀分布、指数分布、伽马分布、卡方分布与贝塔分布作了大致的介绍,需要记住它们的参数、数学期望与方差、以及密度函数,一个分布就是一个概率模型

     


    【4】python数据预处理

               数据预处理包括数据的清洗、缺失值的处理、数据变换数据平滑技术、。。

    对于归一化方式还有深度学习的softmax 归一化【用作分类】batch normalization批标准化。它们是在神经网络模型内部的,不能算是数据预处理方法了。

    【博文链接】 

    数据变换技术: 初值化 、均值化、百分比、倍数、归一化、极差最大值化、区间值化

    用Python进行数据挖掘(数据预处理)

    数据变换方法: 初值化、 均值化、归一化、极差最大值化、区间值化: MinMaxScaler、StandardScaler、MaxAbsScaler

    Python机器学习库SKLearn:数据预处理

    机器学习-常见的数据预处理   

     


    三、模型建立

    1. 数学模型

    【5】线性规划

    线性规划问题的目标函数及约束条件均为线性函数,求解方法有单纯形法,matlab 中可用linprog函数求解。

    【博文链接】 

    线性规划(一):基本概念:可行解、可行域、图解法、超平面、多胞形、多面体

    线性规划(二):运输问题 (产销平衡) & 指派问题、将非线性规划转化为线性规划

    线性规划(三): 对偶理论与灵敏度分析

    线性规划(四): 投资的收益和风险、线性规划习题集


    【6】图与网络模型及方法

    图是指某类具体事物和这些事物之间的联系,最短路径问题、最大流问题、最小费用流问题和匹配问题等都是图与网络的基本问题。图论对建模和解决实际问题都用处极大,数学专业的《数据结构》《离散数学》《运筹学》课程都会重点介绍它。

    【博文链接】

    【1】图与网络模型及方法:图与网络的基本概念& .图在数据结构中的多种表示法:描述了图论中的常见问题eg最短路径问题、指派问题、中国邮递员问题、旅行商问题...

    【2】图&网络模型应用—最短路径问题: 给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间, 找一条最短铁路线。【就是从一个路线网络中,找出两个点之间的最短路径。】

    【3】树:基本概念与最小生成树 : 欲修筑连接 n 个城市的铁路,已知i 城与 j 城之间的铁路造价为Cij ,设计一个线 路图,使总造价最低。这种 连线问题的数学模型是在连通赋权图上求权最小的生成树

    【4】匹配问题: 匈牙利算法 、最优指派、相等子图、库恩—曼克莱斯 (Kuhn-Munkres) 算法: 用于解决【人员分派问题】:给n个工作人员分配不同的n件工作,每个人都适合做其中的一件或几件,那么请问是否每人都有一份合适的工作?

                这里面提到了一个【婚配定理:每个姑娘都结识k (k ≥ 1) 位小伙子,每个小伙子都结识k 位姑娘,则每位 姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。】

    【5】Euler 图和 Hamilton 图、求解旅行商问题的 改良圈算法 : 

                 Euler 图就是从一顶点出发【每条边】恰通过一次能回到出发点的那种图,【中国邮递员问题】的数学模型是:在一个赋权连通图上求一个含所有边的回路, 且使此回路的权最小。 显然,若此连通赋权图是 Euler 图,则可用 Fleury 算法求 Euler 回路,此回路即为 所求。

                 Hamilton 图就是从一顶点出发【每个顶点】恰通过一次能回到出发点的那种图。【旅行商问题描述】一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条 最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的 Hamilton 圈。称这种圈为最优圈

    【6】计划评审方法和关键路线法【统筹方法】:广泛地用于系统分析和项 目管理

    【7】最小费用流及其求法 :eg。在运输问题中希望在完成运输任务的同时,寻求一个使总的运输费用最小的运输方案。

    【8】最大流问题    用来求解流量给定的网络中的可行流。

      分享一个教程里面有讲图论:王铮的《数据结构与算法》-极客时间--音频+pdf教程: ;

        见百度网盘【链接: https://pan.baidu.com/s/1kS0qeGIQgtb0hfHOm3bdmg 提取码: t2y8】

     


    【7】插值与拟合

    插值求过已知有限个数据点的近似函数

    拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小

    插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二 者的数学方法上是完全不同的。

    插值的方法多种多样,拟合问题除了用最小二乘,还可以用机器学习OR深度学习算法来实现,但要注意过拟合问题

    【博文链接】 

    插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值

    插值与拟合 (二) : 曲线拟合的线性最小二乘法、函数逼近问题

     


    【8】灰色预测 

    灰色系统是部分信息已知而部分信息未知的系统,常常采用离散模型,建立一个按时间逐段进行短期分析的模型。其中的关联度分析方法,根据因素之间发展态势的相似或相异程度来衡量因素间关联的程度。此外的灰色模型GM和离散形式的灰色模型DGM也在博文中有介绍。

    【博文链接】

    灰色系统理论及其应用 (一) :灰色系统概论、关联分析、与传统统计方法的比较

    灰色系统理论及其应用 (二) :优势分析

    灰色系统理论及其应用 (三) :生成数

    灰色系统理论及其应用 (四) :灰色模型 GM

    灰色系统理论及其应用 (五) :灰色预测

    灰色系统理论及其应用 (六) :SARS 疫情对某些经济指标影响问题

    灰色系统理论及其应用 (七) :道路交通事故灰色 Verhulst 预测模型

     


    【9】动态规划

    把多阶段过程转化为一系列单阶段问题再逐个求解;一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解,但是要必须对具体问题进行具体分析处理。可用于求解最短路线问题、 生产计划问题、资源分配问题等多阶段决策的优化问题;

    【博文链接】             

     动态规划                           动态规划的具体应用实例


    【10】层次分析法 AHP

    特别适用于那些难于完全定量分析的问题,作出决策时又涉及许多相互关联、相互制约的众多因素,是一种简便、灵活而又实用的 多准则决策方法。在这个模型下,复杂问题被分解为元素的组成部分【目标层、准则层、方案层】。

           【博文链接】   层次分析法 AHP

       【4】模糊决策分析方法

     


    【11】整数规划

    规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中, 变量限制为整数,则称为整数线性规划。目前还没有一种方法能有效地求解一切整数规划。 求解方法有分枝定界法、割平面法、隐枚举法、匈牙利法(解决指派问题) 、蒙特卡洛法...

     【博文链接】 整数规划

     

    【12】目标规划模型

    线性规划只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题,而实际决策中,衡量方案优劣考虑多个目标;这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的.....求解目标规划可用序贯式算法。

    【博文链接】

    目标规划模型:求解思路、序贯式算法

    目标规划模型的实例:生产计划安排、运费最小的调配方案、根据某产品在各地的供需量安排调运方案、数据包络分析

     


    【13】偏最小二乘回归

    研究两组多重相关变量间的相互依赖关系,并研究用 一组变量(常称为自变量或预测变量)去预测另一组变量(常称为因变量或响应变量);是一种多对多线性回归建模,特别当两组变量的个数很多,且都存在多重相关性,而观测数据的数量(样本量)又较少时,用偏最小二乘回归建立的模型具有传统的经典回归分析等方法所没有的优点。 偏最小二乘回归分析在建模过程中集中了主成分分析,典型相关分析和线性回归分析方法的特点。

    【博文链接】 

    偏最小二乘回归(一):模型介绍

    偏最小二乘回归(二):一种更简洁的计算方法

    偏最小二乘回归(三):身体特征与体能训练结果的 案例分析


    【14】微分方程模型

    由微分方程可以描述数学、力学、物理、化学等学科中许多自然现象所满足的规律,如牛顿第二定律、放射性物质的放射性规律等。也可根据大量数据提出简化实际问题的微分方程模型,eg人口模型【Malthus 模型、阻滞增长模型(Logistic 模型)】、战争模型【正规战模型、游击战模型、混合战模型】。

    【博文链接】微分方程模型


    【15】博弈论 / 对策论

    有竞争或对抗性质的对策行为中,参加斗争或竞争的各方各自具有不同的目标和利益;对策论就是研究对策行为中斗争各方是否 存在着最合理的行动方案,以及如何找到这个合理的行动方案。对策问题的特征是参与者为利益相互冲突的各方,其结局不取决于其中任意一方的努力而是各方所采取的策略的综合结果。比如囚徒困境;用极大极小原理来判断某个对策是否有鞍点,【深度学习的生成对抗网络的目标函数就是这个原理:二人零和博弈思想】;零和对策、混合对策的求解问题详见下述链接

    【博文链接】 博弈论 / 对策论


    【16】排队论模型

    由于生活中常常有服务的数量超过服务机构(服务台、服务员等)的容量;有形或无形的排队现象随处可见! 电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机待修,水库的存贮调节等.

    【博文链接】

    排队论模型(五): 有限源排队模型、服务率或到达率依赖状态的排队模型

    排队论模型(六):非生灭过程排队模型、爱尔朗(Erlang)排队模型

    排队论模型(七):排队系统的优化

    排队论模型(八):Matlab 生成随机数、排队模型的计算机模拟

     


    【17】存储论

    存贮论(或称为库存论)研究存贮系统的 性质、运行规律以及如何寻找最优存贮策略。所谓存贮实质上是将供应与需求两个环节以存贮中心联结起来,起到协调与缓和 供需之间矛盾的作用。

    【博文链接】

    存贮论(一):基本概念、无约束的确定型存贮模型

    存储论(二):有约束的确定型存贮模型、单周期随机库存模型

     

    【18】模糊数学模型

    模糊是指客观事物差异的中间过渡中的“不分明性”或“亦此亦彼性”。如高个子 与矮个子、年轻人与老年人、热水与凉水、环境污染严重与不严重等,即模型的背景及关系具有模糊性。。统计数学是将数学的应用范围从确定性的领域扩大到了不确定性的领域,即从必然 现象到偶然现象,而模糊数学则是把数学的应用范围从确定领域扩大到了模糊领域,即 从精确现象到模糊现象。应用模糊数学方法进行的聚类分析即为模糊聚类分析

    【博文链接】

    【1】基本概念: 隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵

    【2】模糊模式识别:海明贴近度 、欧几里得贴近度 、黎曼贴近度、 格贴近度、最大隶属原则、择近原则

    【3】模糊聚类分析方法:模糊等价矩阵、模糊相似矩阵、传递闭包法、布尔矩阵法

    【4】模糊决策分析方法

     


    2. 统计模型

    【19】主成分分析

        目的是希望用较少的变量去解释原来资料中的大部分变异,把相关性很高的变量转化成彼此相互独立或不相关的变量,是一种降维方法。 在描述数据集中的样本时,样本又叫作实例、观测,样本可以由多个属性来描述,这些又可以称为特征、指标、变量、维度比如描述某企业的员工信息时,数据集就是所有员工信息,每个员工就是一个样本,用来描述样本信息的性别、年龄、工龄、籍贯、工资....就是特征,这些指标可能有某种程度上的相关关系,就会存在信息冗余,就需要特征选择,也就是降维,常用的降维方法有主成分分析pca, SVD奇异值分解,逐步回归。。。另一种降维方法:MDS 多维尺度变换

    【博文链接】

    主成分分析 (一): 基本思想与主成分估计方法

    主成分分析 (二): 特征值因子的筛选

    主成分分析法(三):计算步骤

    其它相关:Matlab 在线性代数中的应用 :向量组的线性相关性、相似矩阵及二次型、线性方程组


    【20】判别分析

    根据所研究的个体的观测指标来推断该个体所属类型的一种统计方法.

     【博文链接】

    判别分析 ( distinguish analysis)(一):距离判别

    判别分析 ( distinguish analysis)(二):Fisher 判别,机器学习中把它叫做LDA线性判别分析。

    判别分析 ( distinguish analysis)(三):Bayes 判别

    判别分析 ( distinguish analysis)(四):应用举例

    Matlab 的判别分析 函数 : classify


    【21】聚类分析

    “物以类聚、人以群分” 。聚类分析用数量化的方法对事物进行分类事物的类别标签未知(无监督学习),但已知样本的多个特征取值。常用的聚类方法有层次聚类法,基于网格 / 密度的聚类,DBSCAN聚类K-均值聚类、谱聚类、模糊聚类 、...... 

    以下博文中介绍了样本之间的相似性度量【闵氏距离、绝对值距离、欧氏距离、切比雪夫距离、马氏距离】、类与类间的相似性度量【最短距离法、最长距离法、重心法、类平均法、离差平方和法、Ward 方法】、变量的相似性度量【相关系数 、夹角余弦】,变量聚类法【最大系数法 、最小系数法】以及对应的matlab代码实现

    【博文链接】 聚类分析 

    【2】让你看懂聚类分析 --这个巨佬写得过于好,思路清晰,小白也能懂!我不忍心让它在我收藏夹里吃灰!!,

                 【3】模糊聚类分析方法:模糊等价矩阵、模糊相似矩阵、传递闭包法、布尔矩阵法


    【22】时间序列分析

    时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列(比如股票数据的收益就是每天都在变化);常认为一个时间序列可以分解为以下四大部分:长期趋势变动、季节变动循环变动、不规则变动。时间序列中的数据平滑方法也经常用作数据预处理的平滑技术:eg.移动平均法在深度学习中也有用到。

    【博文链接】  

    时间序列模型 (一):模型概述

    时间序列模型 (二):移动平均法

    时间序列模型 (三):指数平滑法

    时间序列模型 (四):差分指数平滑法、 自适应滤波法

    时间序列模型 (五): 趋势外推预测方法

    时间序列模型 (六):平稳时间序列模型 :自回归AR 、移动平均 MA 、ARMA 模型

    时间序列模型 (七): 时间序列建模的基本步骤

     


    【23】方差分析

    通过对影响产品质量的因素进行分析,找出有显著影响的那些因素,除了从机理方面进行研究外,常常要作许多试验, 对结果作分析、比较,寻求规律。用数理统计分析试验结果、鉴别各因素对结果影响程度的方法称为方差分析(Analysis Of Variance),记作 ANOVA。 人们关心的试验结果称为指标,试验中需要考察、可以控制的条件称为因素或因子。eg.用几种化肥和几个小麦品种在 若干块试验田里种植小麦,要推断不同的化肥和品种对产量有无显著影响,化肥和品种就是两个不同的因素,所以称为双因素方差分析。。。注意【试验】和【实验】不是一个概念。这里的【因子】与【因子分析】也不是一个概念。

    【博文链接】方差分析:单因素方差分析 、双因素方差分析 、正交试验设计

     


    【24】典型相关分析

    研究两组随机变量之间的相关关系(多对多),eg.考虑几种主要产品的价格(作为第一组变量)和相应这些产品的销售量(作为第二组变量)之间的相关关系;考虑投资性变量(如劳动者人数、货物周转量、生产建设投资等)与国民收入变量(如工农业国民收入、运输业国民收入、建筑业国民收入等)之间的相关关系等等.

    【博文链接】 

    典型相关分析(Canonical correlation analysis)(一):基本思想 、复相关系数、偏相关系数

    典型相关分析(Canonical correlation analysis)(二):原始变量与典型变量之间的相关性 、典型相关系数的检验

    典型相关分析(Canonical correlation analysis)(三): 职业满意度典型相关分析案例

    典型相关分析(Canonical correlation analysis)(四): 中国城市竞争力与基础设施的相关分析

     


    【25】因子分析

               因子分析可以看成主成分分析的推广,它也是多元统计分析中常用的一种降维方式。因子分析的首要任务就是估计因子载荷  a_{ij} 的方差  \sigma _{i}^{2},然后给因子 F_{i} 一个合理的解释,若难以进行合理的解释,则需要进一步作因子旋转,希望旋转后能发现比较合理的解释。因子分析的前提条件是观测变量间有较强 的相关性,eg. 为了解学生的知识和能力,对学生进行了抽样命题考试,考题包括的面很广, 但总的来讲可归结为学生的语文水平、数学推导、艺术修养、历史知识、生活知识等五个方面,我们把每一个方面称为一个(公共)因子,显然每个学生的成绩均可由这五个 因子来确定. eg.通过因子分析将24个心理指标被归结为4个公共因子:词语因子、速度因子、 推理因子和记忆因子。

    【博文链接】

    因子分析 factor analysis (一 ):模型的理论推导

    因子分析 factor analysis (二 ) : 因子分析模型

    因子分析 factor analysis (三) : 因子载荷矩阵的估计方法

    因子分析 factor analysis (四) : 因子旋转(正交变换)

    因子分析 factor analysis (五) : 因子得分

    因子分析 factor analysis (六) :用因子分析法进行综合评价

    因子分析 factor analysis (七) :因子分析法与主成分分析的异同

     


    3. 机器学习/数据挖掘模型

    数据挖掘  开发中常用的正则表达式:https://github.com/ziishaned/learn-regex

    100天精通机器学习 :https://github.com/Avik-Jain/100-Days-Of-ML-Code

    常用的机器学习方法: 决策树、贝叶斯网络、近邻算法、朴素贝叶斯、支持向量机、异常检测、条件随机场、EM等。

    【稍后再补】

    4. 深度学习模型

     【26】神经网络模型

    深度学习模型是“万能的函数近似器”,可用于拟合各种非线性模型。常用的有:卷积神经网络CNN, RNN, FasterRCNN, GAN, 自编码器,DBN, LSTM, Boltzman 机 .....可用于训练一个分类/回归模型来作预测。这里只提供一篇神经网络模型入门的简精明教程。

    【博文链接】神经网络模型用于数学建模[这篇文章的内容太老了,不建议看 ; 建议自己搜下CNN,RNN, lstm]

    深度学习框架: tensorflow 、keras、 pytorch都行:【稍后再更】

    NLP-GitHub项目:https://github.com/fighting41love/funNLP


    四、模型求解与优化

    【27】数值优化方法

    如果目标函数或约束条件中包含非线性函数的规划问题为非线性规划,求解非线性规划可用梯度法、牛顿法、拟牛顿法、高斯·塞德尔迭代法,BFGS等一系列方法。

    【博文链接】

    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)

    非线性规划(二): Matlab 求解约束极值问题

     


    【28】组合优化算法

    一些用于模型求解的启发式算法,主要针对很难求解的NP问题。

    【博文链接】

    现代优化算法 (一):模拟退火算法 及应用举例

    现代优化算法 (二): 遗传算法 及应用举例

    现代优化算法(三):禁忌搜索算法

    现代优化算法(四):改进的遗传算法

    现代优化算法(五): 蚁群算法

     


    【29】差分方程模型

    差分方程是包含未知函数的差分及自变数的方程。主要用于时间序列模型和求解常微分方程。在求微分方程的数值解时,常用差分来近似微分,所导出的方程就是差分方程。通过解差分方程来求微分方程的近似解,连续问题离散化的一个例子。

     【博文链接】    

    差分方程模型(一):模型介绍与Z变换

    差分方程模型(二):蛛网模型

    差分方程模型(三): 预测商品销售量

    差分方程模型(四):遗传模型

     


    【30】常微分方程的解法

    建立微分方程只是解决问题的第一步,通常需要求出方程的解。而绝大多数变系数方程、非线性方程都是所谓“解不出来”的,对于用微分方程解决实际问题来说,数值解法就是一个十 分重要的手段.

    【博文链接】

    常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似

    常微分方程的解法 (二): 欧拉(Euler)方法

    常微分方程的解法 (三): 龙格—库塔(Runge—Kutta)方法 、线性多步法

    常微分方程的解法 (四): Matlab 解法

     


    【31】偏微分方程的数值解

    自然科学与工程技术中,事物运动发展过程与平衡现象的规律常是含有未知函数及其导数的方程,而偏微分方程是只含有未知多元函数及其偏导数的方程。

    【博文链接】

    偏微分方程的数值解(一):定解问题 & 差分解法

    偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法

    偏微分方程的数值解(三): 化工应用实例 ----------触煤反应装置内温度及转换率的分布

    偏微分方程的数值解(四): 化工应用————扩散系统之浓度分布

    偏微分方程的数值解(五): 二维状态空间的偏微分方程的 MATLAB 解法

    偏微分方程的数值解(六): 偏微分方程的 pdetool 解法


    【32】稳定状态模型

    对于某些主要研究某种意义下稳定状态的特征的实际问题,或当时间充分长以后动态过程的变化趋势,为了分析这种稳定与不稳定的规律常常不需要求解微分方程,而可以利用微分方程稳定性理论直接研究平衡状态的稳定性。

    【博文链接】

    稳定状态模型 (一): 微分方程稳定性理论简介 :自治系统、动力系统相平面、相图、轨线 、  奇点、孤立奇点

    稳定状态模型 (二):再生资源的管理和开发:资源增长模型 、资源开发模型 、经济效益模型、 种群的相互竞争模型

    稳定状态模型 (三):Volterra 模型

     


     【33】变分法模型

    动态过程的另一类问题——动态优化问题,一般要归结为求最优控制函数使某个泛函达到极值。变分法是研究泛函极值问题的一种经典数学方法,博文中还介绍了动态系统最优控制问题求解的必要条件和最大值原理。

    【博文链接】

    动态优化模型/ 变分法:泛函、极值、变分

    变分法模型的运用:生产设备的最大经济效益 

     


    五、应用篇:历年数模真题与优秀论文

    【34】数学建模在经济管理方面的运用

    【博文链接】

    1 市场营销问题 (一):用马氏链进行新产品的市场预测

     2 市场营销问题 (二):产品属性的效用函数  :每种产品都有不同方面的属性,例如价格、安 全性、外观、保质期等。顾客对每种属性的各个选项的偏好程度可以用效用函数来表示,即某种属性的不同选项对顾客的价值(效用)。联合分析就是从这些具体产品的效用信息中,反过来估计每个属性中各个选项的效用。

    3  市场营销问题 (三):机票的销售策略  :已知各条航线上顾客对舱位的需求,应该如何分配头等舱和经济舱的机票?

    4 经济均衡问题及其应用 (一):根据供需函数 确定市场的清算价格 :即生产和消费(供应能力和需求能力)达到平衡,不再发生变化时,该商品的价格就是市场的清算价格

    5  经济均衡问题及其应用 (二):拍卖与投标问题 :求清算价格。

    6  经济均衡问题及其应用 (三):交通流均衡问题  已知道路上每辆汽车的平均行驶时间和汽车流量之间的关系,长期来看,汽车将如何在每条道路上的分布。

    7  有瓶颈设备的多级生产计划问题

    •  瓶颈设备是组装部件的最关键的设备,其生产能力非常紧张。
    •  生产计划优化问题是在给定的外部需求和生产能力等限制条件下,按照一定的生产目标(通常是生产总费用 最小)编制未来若干个生产周期的最优生产计划。

    8  飞行计划安排问题:考虑飞行员的休假、培训费用问题

    9 投资组合问题 :将不同种类的股票按某种比例组合到一起,使得投资的收益回报尽可能最大,又要使风险尽可能小。收益常用均值来衡量,风险可以用方差OR绝对偏差....来衡量。我们的目标函数或约束条件就常常是与回报OR风险有关,而要求解的就是各种股票在这个投资组合中占的这个比例,也就是权重

    10   钢管下料问题  、易拉罐下料问题 :将原材料通过切割、剪裁、冲压等手段加工成所需大小的工艺品时,确定下料方案, 使用料最省或利润最大,是典型的原料下料问题。

     11  面试顺序问题:使面试时间最短     :对于不同轮 的面试, 多名同学所需时间不同,要如何安排 4 名同学的面试顺序,使完成全部面试所花费的时 间最少。 

    12  消防车调度问题 :为每个火警地点分配消防车、使总损失最小

    13  飞行机的精确定位问题:飞机在飞行过程中,能够收到地面上各个监控台发来的关于飞机当前位置的信息,根据这些信息如何比较精确地确定飞机的位置。


    【35】历年竞赛题目

    【1】 “华为杯”研究生数学建模历年题目与优秀论文

    【2】github -研究生/本科生数学建模: 优秀论文,算法,LaTeX论文模板,算法思维导图,参考书籍,Matlab软件教程,PPT

     


     

    附录: 机器学习的特征工程-图片

    附录:深度学习框架-以keras为例-图片

    keras  中文文档: https://keras.io/zh/


    以后再更,目前上述内容只是大致介绍了常用的数学方法,更详细的信息需要大家自己去深挖,我只是在尽力领着别人入门。


    到此完结!希望能帮到你!


     

    展开全文
  • 深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰教授简历(长文慎入,公号回...

    深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰教授简历(长文慎入,公号回复“深度学习流形分布”可下载PDF资料)

    原创: 顾险峰 数据简化DataSimp 今天

    数据简化DataSimp导读:深度学习基于数据本身的内在规律,揭示并利用这些规律。美国纽约州立大学石溪分校计算机系终身教授顾险峰《深度学习的几何观点:1流形分布定律、2学习能力的上限》,讲述数据科学(或信息科学)中的:1、流形分布定律:自然界中同一类别的高维数据,往往集中在某个低维流形附近。2、聚类分布定律:这一类别中不同的子类对应着流形上的不同概率分布,这些分布之间的距离大到足够将这些子类区分。(或者更为保守的,基本假设)。数据简化社区获顾教授授权,合并转发。附顾险峰教授简历。

    用数学方法描述世界、解决问题,是科学发展的核心动力。知识是如何被发现产生出来,以及不同知识间的渊源和启发关系,比记住很多知识更重要。对于人类来说,文字知识是记录人类智能和思想的手段,而非终点。把文字考试作为教育目标,是极其简单粗暴不负责任的。从启迪思想来说,应试是舍本逐末,愚昧落后的教育者要负责任。AI时代来临,在大多数研究者仍然没有掌握计算机设计开发技术精髓的情况下,很难相信如何跨过计算机科学“弯道超车”步入人工智能科学。我们必须理解计算机、人工智能是如何诞生,背后的科学思想和原理是什幺?加油!只会空想空谈喊口号表忠心可不行,而浪费人财物时间精力投入骗经费的则可耻。(秦陇纪,2018)

    相关文章推荐:计算机应用中存在性证明的代数拓扑方法(8565字)

    目录

    深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰简历(16210)

    01深度学习的几何观点——流形分布定律 (5009)

    02深度学习的几何观点——学习能力的上限 (5309)

    03上期:计算机应用中存在性证明的代数拓扑方法 (1398)

    04纽约石溪大学顾险峰教授简历 (3852)

    1 求学经历 2 主要贡献 3 几何之恋 4 学术交流

    参考文献(253)Appx(626).数据简化DataSimp社区简介


    :近期,哈佛大学丘成桐先生领导的团队,大连理工大学罗钟铉教授、雷娜教授领导的团队应用几何方法研究深度学习;老顾受邀在一些大学和科研机构做了题为“深度学习的几何观点”的报告,汇报了这方面的进展情况。这里是报告的简要记录,具体内容见[1]。

     

    01深度学习的几何观点——流形分布定律 (5009)

    深度学习的几何观点(1 - 流形分布定律

    |原创:顾险峰,老顾谈几何2018-06-04

    深度学习技术正在深刻地改变着人类的历史进程,它在图像识别、语音识别、自然语言处理、文本翻译等几乎所有信息科学领域,都带来了翻天覆地的革命。我们这个时代所面临的最为根本的问题之一就是为深度学习的有效性给出一个合理的答案。

    纵观人类历史的历次技术革命,火的使用,青铜器的制作工艺,农业的大规模普及,机械的应用,内燃机的发明,电力电气工业的成熟,电子计算机技术的推广,信息工业的蓬勃发展等等,无一不是建筑在深刻的自然科学原理之上的。虽然当时人类可能主观上并没有真正意识到,但是在客观上都是顺应了自然,可能是物理、化学、或者生物方面的基本定律。那么深度学习的巨大成功究竟归功于哪一条自然定律?

    我们认为,和历史上的历次技术革命不同,深度学习的成功是基于两条:数据本身的内在规律,深度学习技术能够揭示并利用这些规律。数据科学(或者信息科学)中的基本定律(或者更为保守的,基本假设)可以归结为:

    1. 流形分布定律:自然界中同一类别的高维数据,往往集中在某个低维流形附近。

    2. 聚类分布定律:这一类别中不同的子类对应着流形上的不同概率分布,这些分布之间的距离大到足够将这些子类区分。

    深度学习的主要目的和功能之一就是从数据中学习隐藏的流形结构和流形上的概率分布。

    1. 流形的定义。

    关于聚类分布定律,目前有相对完善的理论基础——最优传输理论,和较为实用的算法,例如基于凸几何的蒙日-安培方程解法[2],这些方法可以测量概率分布之间的距离,实现概率分布之间的变换[3]。关于流形分布定律,目前理论发展不太完备,很多时候学习效果严重依赖于调参。但是很多实际应用问题,都可以用流形的框架来建模,从而用几何的语言来描述、梳理,用几何理论工具来加以解决,进而有望从含混模糊的经验性试错,进化到思路清晰的定量研究。

    流形结构

    流形是拓扑和微分几何中最为基本的概念,本质上就是很多欧氏空间粘贴在一起构成的空间。如图1所示,一个流形(manifold)是一个拓扑空间S,被一族开集所覆盖,对于每个开集存在一个同胚映射被称为是坐标映射称为是参数域(R是实数集合)构成一个局部坐标卡(local chart),所有局部坐标卡构成流形的图册(atlas)。在交集,每个点可以有多个局部坐标,在局部坐标间存在变换从流形到坐标域的变换被称为是参数化,其逆变换,从局部坐标到流形的变换被称为是流形的局部参数表示。如果流形S嵌入到欧氏空间中,则欧氏空间被称为是背景空间

    例一:我们试举一例,嵌在三维欧氏空间中的单位球面是最为简单的二维流形,其局部参数表示为

    这里球面是流形,三维欧氏空间背景空间局部坐标参数化映射可以写成

    在深度学习中,有关流形的这些基本概念都有相应的术语,我们稍作翻译:流形上的一个点被称为是一个样本;参数域被称为是隐空间或者特征空间;参数化映射被称为是编码映射;流形的局部参数表示被称为是解码映射;点的局部坐标被称为是样本的编码特征深度学习的主要目的和功能之一就是学习编码映射和解码映射

    2. 流形和参数化映射。

    例二:如图2所示,米勒佛曲面是三维空间中的二维流形,参数化映射将曲面映射到平面圆盘。这一映射的逆映射给出了曲面的参数化表示。这里,所有的映射都是用分片线性映射来逼近的。注意,这里参数化映射并不唯一,这会带来隐空间概率密度的变化,后面我们会对此进行详细讨论。

    3. 所有人脸图像符合流形分布定律。

    例三:我们考察所有128X128rgb彩色图像所构成的空间,记为背景空间。背景空间中的任意一个点是一张rgb图像。空间中所有人脸的图像所构成的子集记为S,我们来分析一下人脸图像集合是否符合流形分布定律。一张人脸照片主要取决于如下条件:人脸的几何形状,皮肤的纹理特征和施加的化妆品,动态表情,光照条件,相机的内外参数等,人脸几何形状由几十条基因所决定。这些因素渐变时,人脸照片也是渐变。由此,我们有理由认为所有人脸图像分布在某个低维流形S附近。当然,由于随机噪音的存在,我们只能说所有人脸图像分布在S附近,而非精确地落在S上。我们的实验表明,人脸图像流形的隐空间大概有100维左右。

    那么在现实中,我们如何学习人脸图像构成的流形呢?这里所谓的学习意味着什么?答案是用人脸图片的样本集来训练深度神经网络,我们可以得到人脸图像流形的参数化映射(编码)和局部参数表示(解码)。

    编码、解码器

    4. 自动编码解码器。

    自动编码器(autoencoder)是非常基本的深度学习模型,用来学习流形结构。如图3所示,自动编码器是一个前馈网络,输入和输出维数相等,输入输出都是背景空间。中间有一个瓶颈层,瓶颈层的输出空间为特征空间。网络关于瓶颈层对称,左侧网络用于表示编码映射,记为;右侧网络用于表示解码映射,记为。损失函数等于输入、输出图像的范数。我们在流形上稠密采样,得到训练样本集,训练网络,

    .

    由此,我们得到了编码映射和解码映射,解码映射就是流形的一个参数表示。我们用重建的流形来逼近数据流形S。

    一旦我们掌握了流形在手,我们可以完成很多传统方法无法想象的应用,也可以革新很多传统方法所涉猎的经典应用。下面我们通过几个实例来彰显流形思维框架的威力。

    生成模型(Generative Model

    5. 生成模型。

    生成模型是深度学习的一个典型应用,如图5所示,输入一张低维的白噪音,输出一张逼真的人脸图像。这在传统框架下是匪夷所思的:我们妙手空空,平白无故地变出一张人脸!但在流形框架下非常简单。

    我们已经训练好了网络,得到了流形的参数表示,一张白噪声图像就是一个局部参数(编码),其解码后的像在人脸图像的重建模型上,因而是一张人脸图像。我们并非妙手空空,而是拥有了丰富的先验知识:所有人脸图像构成的流形,这一流形被其参数化映射所表示,而这一映射被神经网络的权重所编码。

    当然,生成图像的质量由很多因素所决定,最为重要的有两个:重建流形对数据流形S的逼近精度;白噪声图像是否在参数域中,即是否在编码映射的像集内。后面,我们会对这两个问题进行深入探讨。

    图像去噪(denoising

    图像去噪是图像处理的经典问题。基于信息论,我们将带有噪音的图像进行傅里叶变换,在频域滤波,去除高频分量,然后再进行傅里叶逆变换,得到去噪图像。因为噪声往往分布在高频部分,因此这一方法比较奏效。这种经典方法比较普适,和图像内容无关。

    6. 图像去噪的流形解释。

    那么用流形框架如何解释图像去噪呢?如图6所示,假设所有清晰人脸图像构成了一个流形S。一张带有噪声的人脸图片不在清晰人脸图像流形上,但是在其附近。我们将向流形投影,垂足为,即清晰人脸图像流形距离最近的点。那么,我们将p作为去除噪声后的结果。换言之,我们将图像去噪理解成几何投影

    7. Autoencoder图像去噪结果。

    7显示了基于几何投影思路的图像去噪效果。给定一张带有噪音的人脸图像,其编码为,然后再解码,得到重建流形上的一点p,即为去噪后的图像。

    8. 左帧,输入流形和噪声点;右帧,噪声点被投影到重建的流形上。投影由Autoencoder实现。

    这种方法不问噪声的形成机制,适用于各种噪声。但是这种方法严重依赖于图片内容。这里我们进行人脸图像去噪,因此需要清晰人脸图像流形。如果,我们将带噪声的人脸图像向清晰猫脸图像流形投影,所得结果不再具有任何实际意义。

    这显示了用深度学习方法去噪的某种局限性,首先我们必须拥有相应的流形,其次不同类型的图像,需要不同的流形。猫脸流形无法应用于人脸图像,反之亦然。这种局限诠释了深度学习仍属于弱人工智能范畴

    年龄变换

    9. 基于深度学习的年龄变换(黄迪教授)。

    如图9所示,给定一张人脸图像,生成这张脸二十年后的图像,或者倒推这张脸二十年前的图像,这种变换我们称之为人脸图像年龄变换。对于传统方法而言,人脸图像年龄变换是难以完成的任务。用深度学习的流形框架,我们可以给出清晰的解决方案。

    首先我们学习所有二十岁的人脸图像流形,然后再学习所有四十岁的人脸图像流形,表示成各自的编码、解码映射:, 同时我们学习两个流形之间的映射:

    这里隐空间之间的映射可以用一个深度神经网络来表示,每一个训练样本由同一个人二十岁和四十岁的一对照片所组成。在实际使用中,输入一张青年人的照片p,输出,作为同一个人中年时期的照片。

    手写体数字识别

    10. 手写体数字流形。

    如图10所示,我们考察所有手写体数字二值图像构成的流形,左帧是真实数据,右帧是生成数据。09这十个数字在此流形上定义了十个不同的概率分布。我们用编码映射将流形映射到隐空间,编码映射将这十个分布推前到隐空间上。为了可视化,我们将隐空间定义为二维平面,如此得到十个概率分布。

    11. 手写体数字在隐空间的概率分布。

    11显示了不同数字在隐空间的概率分布,这种流形+概率分布可以对知识进行更加详尽的表述,从而用于识别分类等问题。

    深度学习有效性的几何解释

    流形结构根据数据科学的流形分布定律,自然数据背后隐藏着流形结构,深度学习方法可提取这些流形结构,并用神经网络来表达流形间的映射,给出流形本身的参数化和参数表示。这些流形结构和其上的特定概率分布是整体先验知识的有效表示,正是因为具备这些先验知识,很多视觉和机器学习的问题能够被有效解决。流形能够表达一类数据的整体先验知识,传统方法只能利用局部较少的先验知识

    方法论的灵活性传统方法依赖于严格的因果关系,往往用偏微分方程来表达自然规律。很多相关性可以用概率分布来表述,用深度学习可以习得。传统方法需要自变量和因变量之间精确的数学关系,流形框架下的深度学习只需要猜测流形的存在性和大致维数就可以学出流形结构。

    非线性拟合能力我们可以看到很多计算机视觉、机器学习高层次(highlevel)的问题可以用流形、流形间的映射来描述。后面我们可以看到,概率分布之间的变换可以归结为流形间的映射。流形的局部参数表示,流形的参数化,流形间的局部映射都归结为欧氏空间之间的非线性映射。深度学习的成功也依赖于深度神经网络拟合这种非线性映射的能力。

    学习能力的观察

    那么,深度神经网络学习流形的能力究竟如何?我们考察一个低维流形的简单例子,见微知著,从中可以观察到一些富有启发的现象。

    12. 弥勒佛曲面,输入流形。

    13. 隐空间表示和胞腔分解。

    14. 重建流形。

    我们假设背景空间是三维欧氏空间,流形是米勒佛曲面,如图12所示。我们在弥勒佛表面上稠密采样,然后训练一个自动编码器,得到编码映射和解码映射。编码映射将曲面映射到隐空间即二维欧氏空间,如图13所示;解码映射将隐空间表示映射回背景空间,得到重建流形,如图14所示。我们采用ReLU作为激活函数,编码解码映射为分片线性映射。编码映射将背景空间分解为很多胞腔,在每个胞腔内编码映射为线性映射,图13右帧画出了背景空间的胞腔分解。我们从图中可以看到重建流形比较精确地逼近了原始的输入流形,几乎保留了所有的几何细节。为了达到这一理想效果,艰苦的调参不可避免。而这正是深度学习的困难所在:缺乏理论指导的实验性调节超参数。

    仔细观察这个编码、解码过程,我们看到重建曲面在很大程度上较好地逼近了输入曲面,保持了细微的几何特征,参数化映射建立了整体同胚。由此,引发了下面的问题:

    如何从几何上刻画一个深度神经网络的学习能力?是否可以定义一个指标来明确表示神经网络学习能力的上限?

    如何从几何上刻画一个流形被学习的难度?是否可以定义一个指标来明确表示这一难度?

    对于任意一个深度神经网络,如何构造一个它无法学习的流形?

    在下一讲中,我们对这些问题进行深入讨论。

    小结

    我们认为,深度学习的成功应该归功于数据自身具有内在的规律:高维数据分布在低维流形附近,流形上具有特定概率分布,同时归功于深度学习网络强大的逼近非线性映射的能力。深度学习技术可以从一类数据中提取流形结构,将整体先验知识用流形来表达,具体而言就是编码解码映射,隐含在神经元的权重之中。

    深度学习的强大能力来源于某类知识的整体表达,而传统算法只能利用同一类别的局部有限知识。同时深度学习囿于底层流形的选择,很多算法移植性依赖于底层流形的替换。

    深度学习的流形框架有助于模块化编程。我们可以想象,在未来深度的商品化硬件或软件模块将是各个类别的流形,和流形之间的映射,以及流形上概率密度之间的变换。底层的流形模块已经被AI公司训练完善,大规模产品化,用户只需要搭建这些模块就可以实现各种功能。

     

    02深度学习的几何观点——学习能力的上限 (5309)

    深度学习的几何理解(2 - 学习能力的上限

    |原创:顾险峰,老顾谈几何,2018-06-11

    上文《深度学习的几何理解(1 - 流形分布定律引发很大反响,许多新朋老友与老顾联系,深入探讨学术细节,并给出宝贵意见和建议,在此一并深表谢意。特别是中国科学技术大学的陈发来教授提出了和传统流形学习相比较的建议;和熊楚渝先生提出通用学习机的X-形式理论等等。

    1. 巴塞罗那的马赛克(barcelona mosaic)兔子,揭示深度学习的本质。

    (感谢李慧斌教授,赠送给我们艺术品,启发我们领悟深度学习。)

    2. 流形结构。

    上一讲我们将深度学习成功的原因之一归功于流形分布定律:自然的高维数据往往集中在低维流形附近。深度学习的主要功能是学习流形的参数化映射(编码映射),和流形的参数化表示(解码映射),这里是隐空间,是背景空间,如图2所示;同时,学习流形间的映射,可以表示成隐空间之间的映射:

    很多时候,我们在关注流形的时候,也希望能够控制其上的概率分布,这可以由流形到自身的自同胚来实现:。

    流形是嵌入在背景空间之中,背景空间是欧氏空间,隐空间也是欧氏空间,因此所有流形间的映射最终都归结为欧氏空间之间的非线性映射:。深度神经网络的终极目标之一就是逼近欧氏空间之间的非线性映射。

    万有逼近定理

    深度学习之所以有效,一个核心原因在于深度神经网络表示的函数能够以任意精度逼近连续函数,即所谓的万有逼近定理:任意的连续函数,都可以被深度神经网络以任意精度逼近。

    为了方便讨论,我们假设神经网络的激活函数为ReLU函数,定义如下:

    我们将其推广到矢量输入函数

    .

    给定一个神经网络,带有k个隐层,,输入为维,输出为维,每个隐层具有个神经元。两个相邻的隐层之间有一个仿射映射,整个网络代表一个分片线性映射,.

    万有逼近定理的基本证明思路如下:分片线性函数(piecewiselinear function)在希尔伯特空间中稠密,因此能够以任意精度逼近任何可积的连续函数。任意分片线性函数可以分解为分片线性凸函数之和、之差,

    ,

    这里系数,是分片线性凸函数,

    .

    可以用两层神经网络来实现,隐层的激活函数为ReLU

    由此给定任意分片线性函数,我们都可以构造一个ReLU神经网络来加以实现。由此,对于给定的连续函数和误差界,我们都可以构造一个神经网络来逼近函数,其误差小于误差界。

    但是,我们更为关心的是给定一个流形,给定一个深度神经网络,这个网络能否学习这个流形,即能否实现参数化映射,构造参数表示?

    网络学习过程的观察

    3. 自动编码器学习一条螺旋线。

    我们考察一个最为简单的例子,如图3所示,一条螺旋线嵌入在二维平面上(上行左帧),autoencoder计算了编码映射,将其映射到一维直线上(上行中帧),同时计算了解码映射,将直线映回平面,得到重建的曲线(上行右帧)。编码映射诱导了平面的胞腔分解(下行左帧),编码映射和解码映射的复合诱导了更为细致的胞腔分解(下行中帧),编码映射的水平集显示在下行右帧。

    由此可见,ReLU深度神经网络的每个神经元代表一个超平面,将输入空间一分为二;众多超平面将输入空间剖分,然后将每个胞腔线性映射到输出空间,由此得到编码、解码映射的分片线性逼近。进一步,我们可以得到如下关键的观察:流形(螺旋线)被输入空间上的胞腔分解分割成很多片,每片流形所在的胞腔被线性映射到参数域上(一段直线),这个线性映射限制在流形上是拓扑同胚

    我们将这一计算框架和有限元方法进行类比。线性有限元也是将空间剖分,然后用分片线性函数来逼近目标函数。但是,在有限元方法中,空间剖分和线性逼近是分离的两个过程。在深度学习中,这两个过程混合在一起,密不可分。有限元的剖分更加局部灵活,深度学习的剖分全局刻板。同时,两者都是基于变分法则,即在函数空间中优化某种损失函数。我们可以将每个神经元的参数归一化,那么深度网络的所有参数构成一个紧集,损失函数是网络参数的连续函数,必然存在最大最小值。在传统有限元计算中,人们往往寻求凸能量,这样可以保证解的唯一性。在深度学习中,损失函数的凸性比较难以分析。

    从历史经验我们知道,有限元分析中最为困难的步骤在于设计胞腔分解,这直接关系到解的存在性和计算的精度和稳定性。深度神经网络所诱导的输入空间剖分对于优化过程实际上也是至关重要的,我们可以定量地分析网络的空间剖分能力。

    网络学习的能力

    4. 米勒佛的参数化(编码)映射。

    我们参看弥勒佛曲面的编码映射,如图4所示,编码映射(参数化映射)可以被ReLU神经网络表示成分片线性映射,右列显示了输入空间和参数空间的胞腔分解。

    令编码映射为,给定一个属于背景空间的点,那么在计算时被激活的神经元集合记为,称之为点关于的活跃路径。两个点,如果对应的活跃路径(激活神经元集合)相同,则我们说这两点关于映射彼此等价。所有彼此等价的点构成了背景空间中的一个胞腔,胞腔为凸多面体。由此,诱导了整个背景空间的一个胞腔分解,记为。同样,编码映射和解码映射的复合也诱导了背景空间的胞腔分解。显然,是的一个细分(subdivision)。我们用表示胞腔的个数。

    其实,编码映射构造了一系列胞腔分解,后面的胞腔分解细分了前面的胞腔分解:

    如果没有这些胞腔分解,那么神经网络所表达的映射只能是线性映射。正因为有了这些胞腔分解,才使得映射成为非线性映射。我们可以大致估算的胞腔个数,以此为网络学习能力的一个指标,我们称

    为网络的分片线性复杂度Rectified LinearComplexity)。

    5.左帧编码映射诱导的空间剖分,和右帧重建映射映诱导的空间剖分 ,是的一个细分。

    5显示了自动编码器在学习弥勒佛曲面时诱导的空间剖分,每个胞腔都是一个三维的凸多面体,被线性映射到二维参数平面上的一个低维凸多面体,可能是多边形,线段或者点。整体映射是连续的,并且限制在弥勒佛曲面上是整体拓扑同胚。这些胞腔的像显示在图4右下角。我们观察到,精细的空间剖分对于保证整体同胚性至关重要。

    直接估计网络的分片线性复杂度相对困难,我们这里可以估计一个粗略的上界。我们考虑一个线性映射,这个映射相当于在d维欧氏空间中用n个超平面划分,所得胞腔数目的最大值记为 。我们首先考察最为简单的二维情形-切披萨问题:假设n刀切下去,披萨最多被切成几片?一刀把披萨切成两片,假设第n刀将披萨切成片,那么第(n+1)刀的直线和前面n条直线相交,被分成(n+1)条线段,每条线段将中的某片一分二,由此我们得到递归公式

    .

    由此,我们得到切披萨公式

    同样推理,假设将d维欧氏空间中用n个超平面划分,所得胞腔数目为 ,第(n+1)个超平面为(d-1)维欧氏空间,被前面n个超平面划分成个胞腔,每个(d-1)维的胞腔将 中的某个d维胞腔一分为二,由此我们得到类似的递归公式


    由此,我们得到欧氏空间被超平面划分所得胞腔个数的上限为:

    .

    我们考虑一个前馈式神经网络,输入为维,输出为维,每个隐层具有个神经元,记为

    ,

    那么所诱导的胞腔分解最多有个胞腔。复合映射所诱导的胞腔分解满足估计:


    这一粗略估计给出了神经网络所表达的所有分片线性函数的片数的上限,亦即网络分片线性复杂度的上限。这一不等式也表明:相对于增加网络宽度,增加网络的深度能够更为有效地加强网络的复杂度,即加强网络的学习能力。

    流形被学习的难度

    我们再来考虑一个流形被学习的困难程度。给定一个m维的流形嵌入在n为欧氏空间中,。一个自动编码器将流形编码,即参数化,这里隐空间为m维的欧氏空间,编码映射限制在流形上为拓扑同胚,即连续双射,逆映射也是连续映射。这里,流形的嵌入和编码映射的同胚为流形的可被编码性(可被学习性)提出了苛刻的拓扑和几何要求。

    如果流形的维数等于隐空间的维数,编码映射将流形同胚地映射到m维的欧氏空间的区域中,,因此的拓扑和m维的欧氏空间区域的拓扑相同,这为的拓扑增加很多限制。例如不可能是闭流形。在米勒佛的例子中,为曲面,和平面某个区域同胚,则曲面必为亏格为0的多联通曲面。这意味着目前的自动编码器只能学习拓扑简单的流形,或者只能学习拓扑复杂流形的一个局部。

    6. 克莱因瓶。

    如果的维数小于隐空间的维数,情形更加复杂。比如背景空间为4维欧氏空间,流形为克莱因瓶(Kleinbottle),隐空间为3维欧氏空间。那么根据矢量丛理论,克莱因瓶无法嵌入到三维欧氏空间,编码映射不存在。由此,流形的拓扑为其可学习性带来本质困难。目前,人们对于深度学习理论的理解尚未达到需要应用拓扑障碍理论的高度,我们相信未来随着深度学习方法的发展和完备,拓扑理论会被逐步引入。

    7. 可被线性编码和不可被线性编码的曲线。

    其次,参数化映射为分片线性映射,限制在流形上为同胚映射,这个条件决定了学习难度。假设m维流形嵌入在n维欧氏空间中,如果存在整体线性映射,限制在流形上为拓扑同胚,那么我们说嵌入流形是线性可编码的

    7显示了一条嵌入在平面上的曲线,左帧的曲线线性可编码,右帧的曲线不可线性编码。假如右侧曲线线性可编码,那么的水平集是一族平行直线,每条直线被称为一根纤维。每根纤维和曲线至多只有一个交点。如果一根纤维和曲线相切,我们将纤维进行微小平移,则纤维和曲线有两个交点。曲线的切线方向涵盖了所有方向,因此我们无法找到一族平行直线,每根纤维和曲线至多只有一个交点。由此曲线不可被线性编码。

    这个观察可以被推广,如果m维流形嵌入在n维欧氏空间中(m<n),并且流形可被线性编码,我们来求一个必要条件。假如流形可以被同胚地垂直投影到一个(n-1)维的超平面上,那么和此超平面垂直的直线和流形至多只有一个交点。我们在流形上取相异的两点,过此两点做一条直线,那么所有这种直线都不和超平面垂直。构造映射:

    ,

    这里是积流形,是积流形中的对角线,

    ,

    是实射影空间,代表欧氏空间中所有的1维线性子空间(过原点的直线)。如果像覆盖整个实射影空间,那么流形向任何超平面投影都不是同胚,即流形不可被线性编码。

    如图1所示,巴塞罗那的马赛克兔子,整体不可被线性编码。我们可以将流形分成很多片,每一片都是线性可编码,然后映分片线性映射来构造编码解码映射,如此分解所需要的最少片数被定义成流形的分片线性复杂度(Rectified Linear Complexity

    8. Peano曲线。

    我们可以构造分片线性复杂度任意高的流形。图8显示了经典的皮亚诺曲线。我们首先构造一个单元,如左帧左上角红色框内所示,然后将此单元拷贝,旋转平移,重新连接,得到左帧的曲线;如果我们将单元缩小一倍,重新构造,得到右帧所示曲线。重复这一过程,我们可以构造越来越复杂的皮亚诺曲线,直至极限,极限曲线通过平面上的每一个点。在迭代过程中,每一条皮亚诺曲线所包含的单元个数呈指数增长。每个单元都是线性不可编码的,因此亚诺曲线的分片线性复杂度大于单元个数。在迭代过程中,皮亚诺曲线的分片线性复杂度呈指数增长。经过修改,Peano曲线可以经过任意维欧氏空间中的任意一点。我们将Peano曲线直积上高维球面,就可以构造(k+1)为流形,这种流形具有任意高的复杂度。

    如果一个ReLU神经网络能够对一个嵌入流形进行编码,那么网络的分片线性复杂度必定不低于流形的分片线性复杂度。通过以上讨论,我们看到对于固定组合结构的神经网络,其分片线性复杂度可以被组合结构所界定,我们可以构造一个流形其复杂度超过网络复杂度的上界。由此我们得到结论:给定一个具有固定组合结构的神经网络,存在一个流形,此网络无法学习(编码)这个流形。虽然大家都在直觉上相信这一结论,但是严格的数学证明并不普遍。这里我们将人所共知的一个基本信念加以数学证明。

    9. 不同的学习效果:左帧,输入流形;右帧,Autoencoder重建的流形。

    在实际应用中,深度学习具有很大的工程难度,需要很多经验性的技巧。特别是深度学习网络的学习能力取决于网络的超参数,如何设计超参数,目前主要依赖于经验。如图9所示,我们用autoencoder编码解码弥勒佛头像曲面,上面一行显示了输入输出曲面,重建后的曲面大体上模仿了米勒佛的总体形状,但是失去具体的局部细节。在下面一行,我们加宽了网络,修改了超参数,重建曲面的逼近精度提高很多。

    小结

    ReLU深度神经网络用分片线性函数来逼近一般的非线性函数:每个神经元定义一个超平面,所有的超平面将输入空间进行胞腔分解,每个胞腔是一个凸多面体。映射在每个胞腔上都是线性映射,整体上是连续的分片线性映射。编码映射限制在输入流形上是拓扑同胚。

    深度神经网络将输入空间分解的最多胞腔个数定义为网络的分片线性复杂度,代表了网络学习能力的上限流形需要被分解,每一片可以被背景空间的线性映射所参数化,这种分解所需的最少片数定义为流形的分片线性复杂度。一个网络能够学习一个流形的必要条件是:流形的复杂度低于网络的复杂度。对于任意一个网络,我们都可以构造一个流形,使得此网络无法学习。

    目前所做的估计非常粗糙,需要进一步精化;对于优化过程的动力学,目前没有精细的理论结果,未来需要建立。

    在深度学习的应用中,人们不单单只关心流形,也非常关心流形上的概率分布。如何通过改变编解码映射,使得重建概率分布很好地逼近数据概率分布,使得隐空间的概率分布符合人们预定的标准分布?这些是变分编码器(VAE对抗生成网络(GAN的核心问题。下一讲,我们讨论控制概率分布方法的理论基础【2,3】。


    References

    1. Na Lei, Zhongxuan Luo,Shing-Tung Yau and David Xianfeng Gu.  "Geometric Understanding ofDeep Learning". arXiv:1805.10451 . 

    2.https://arxiv.org/abs/1805.10451

    3. Xianfeng Gu, Feng Luo,Jian Sun, and Shing-Tung Yau. "Variational principles for minkowski typeproblems, discrete optimal transport", and discrete monge-ampereequations. Asian Journal of Mathematics (AJM), 20(2):383-398, 2016.

    4. Na Lei,Kehua Su,LiCui,Shing-Tung Yau,David Xianfeng Gu, "A Geometric View of OptimalTransportation and Generative Model", arXiv:1710.05488. https://arxiv.org/abs/1710.05488


     

    03上期:计算机应用中存在性证明的代数拓扑方法 (1398)

    相关文章推荐:计算机应用中存在性证明的代数拓扑方法(8565字)。节选如下:

    “代数拓扑的语言为什么这么古怪?它究竟在说些什么?我们为什么要学习代数拓扑?在计算机方面有什么实际应用吗?”这些问题令老顾陷入深思。其实老顾内心很清楚,如果这位同学潜心钻研代数拓扑,那么不出一年,他自己应该可以完全回答前面几个理论问题,假以时日,他自然会找到计算机方面的应用。但是,令老顾纠结的是目前深度学习的方法迅猛发展,几乎颠覆了计算机视觉领域的所有分支,那么是应该让这位同学潜心学习抽象的代数拓扑还是训练他实际的调参能力?

    如图7所示,若当曲线定理(Jordan Curve Theorem)说平面上一条连续封闭简单曲线(无自交点)将平面分成两个分离的连通子集,内部和外部。每个子集自身都是道路连通的,但是彼此分离。这一定理非常符合人类直觉,以至于我们觉得它是不辩自明的。我们无法确认这一事实是一条定理,还是一条公理。人类也是经历了漫长岁月,才意识到这一事实需要严格证明,又花费了漫长岁月才真正给出严格的证明。那么,我们为什么需要用如此晦涩的语言来证明如此显而易见的事实呢?难道是出于数学家的孤芳自赏吗?

    真正的原因在于人类的直觉并不可靠,很多貌似合理的论断都是似是而非的谬论。另一方面,人类在拓扑方面的直觉相对有限,高维情形很难建立起来想像力,唯一能够把握的只有严格的数学推导。比如,我们观察图7,Jordan曲线将平面分成道路连通的两部分,每一部分都是单连通的,亦即在曲线内部(或者外部)的任意封闭曲线都可以在内部(或者外部)逐渐缩成一个点。这一观察也非常符合直觉。这被称为是Schonflies定理。但是当我们将这两个结论推向高维的时候,我们发现直觉起不了太大作用,Jordan分离定理可以被推广,但是Schonflies定理在三维的时候就已经失效。

    我们为什么这么重视如此反直觉的拓扑定理?因为这个古怪的定理可以推出区域不变性定理,而区域不变性定理可以证明大量计算机算法解的存在性,是计算机科学不可或缺的理论基础。

    小结

    代数拓扑非常抽象,但是深邃优美,为工程应用提供了理论基础。从增强学术修养角度而言,也是值得学习。代数拓扑的思想手法对于研究符号主义的人工智能非常有意义,她为我们提供了一个不同的视角来思考如何定义智能。

    目前计算机技术发展非常迅猛,因此在一定程度上理论分析相对滞后。很多学生忽视理论修养的培养,将有限的精力全部投入到无限的调参上去,这种学习方法值得商榷。例如,在Wasserstein GAN中,有一个广为人知的困难:如果概率分布的支集(support)具有多个连通分支,那么GAN的训练收敛非常困难。很多学生百折不挠地调整参数,试图解决这一问题。根据我们的理论结果,在这种情形下,最优传输映射无法被深度神经网络表示,换言之,在DNN的框架下,解并不存在,因此工程上无论如何努力,也弥补不了理论的缺陷。

    潜心研究代数拓扑,精神必将会经历一次深刻的洗礼。希望未来有一天,他能够用代数拓扑给出某个算法解的存在性证明......

    纽约石溪大学教授-顾险峰2018/4/16

    【老顾谈几何】邀请国内国际著名纯粹数学家,应用数学家,理论物理学家和计算机科学家,讲授现代拓扑和几何的理论,算法和应用。回复目录,可以浏览往期精华;回复智商,可以阅读如何从大脑形状判断一个人的智商;回复象牙塔,可以阅读纯粹数学走出象牙塔;回复概览,可以阅读计算共形几何概览

    请长按上方二维码,选择“识别图中二维码”,即可关注。

     

    04纽约石溪大学顾险峰教授简历 (3852)

    1 老顾近照:顾险峰

    顾险峰,男,美国纽约州立大学石溪分校计算机系终身教授[2] 

    中文名:顾险峰,职业:大学教授,毕业院校:哈佛大学。

    1 求学经历

    顾险峰,1989年考入清华大学计算机科学与技术系,攻读基础理论方向,班主任黄连生教授。1992年获得清华大学特等奖学金。后于美国哈佛大学获得计算机博士学位,师从国际著名微分几何大师丘成桐先生。[3]目前为美国纽约州立大学石溪分校计算机系终身教授。

    2主要贡献

    曾获美国国家自然科学基金CAREER奖,中国国家自然科学基金海外杰出青年奖(与胡事民教授合作),华人菲尔茨奖:晨兴应用数学金奖[2] 。丘成桐先生和顾险峰博士团队,将微分几何,代数拓扑,黎曼面理论,偏微分方程与计算机科学相结合,创立跨领域学科计算共形几何广泛应用于计算机图形学,计算机视觉,几何建模,无线传感器网络,医学图像等领域。目前已经发表二百篇余篇国际论文,学术专著包括“Computational Conformal Geometry”(计算共形几何),“RicciFlow for Surface Registration and Shape Analysis”[2]等。

    3 几何之恋

    内容来自:清华大学计算机科学与技术系,地址:北京市海淀区清华园1号,邮编100084

    几何之恋——顾险峰

    顾险峰(1989级系友)

    3 国际著名微分几何大师、菲尔茨奖得主丘成桐先生(左)和晨星集团主席陈乐宗先生(右)共同为顾险峰颁奖

    2013714日,台北圆山饭店,第六届世界华人数学家大会隆重召开。丘成桐先生郑重宣布华人数学最高奖-晨兴数学奖的得主。每三年颁发一次的晨星数学奖用于表彰全世界的杰出华人数学家,以鼓励他们对于数学真理的不懈追求。纯粹数学的特别金奖毫无悬念地授予了张益唐,以表彰他在孪生素数问题上的石破天惊的突破。当丘先生宣布应用数学的金奖得主时,我几乎无法相信自己的耳朵,因为他念出的是我的名字。晨星讲评选委员会一致认为,我的工作结合了纯粹数学和计算机科学,创立了一个新兴的交叉领域:计算共形几何,并将共形几何应用于工程和医疗方面的诸多领域,在理论和应用方面都取得了重大进展。当我从丘先生和晨星集团的陈乐宗主席手中接过金牌的时候,我心中非常清醒地认识到,这只是对我过去二十年工作的鼓励,身为计算机科学家而获得数学金奖,我的确走了一条与众不同的漫长之路,但是未来的探索之路将会更加漫长。

    1989年初秋,我来到了梦寐以求的清华园,班主任黄连生老师当天就在宿舍中召开了第一次班会。他开门见山就说人类以前所有的发明创造都是人手的延长,计算机是历史上人脑的延长。计算机的出现必将深刻地改变人类社会和历史。回顾二十年来所经历的计算机带来的革命,的确是翻天覆地,沧海桑田。虽然从未成为科技浪潮的弄潮儿,但是也时时处处感受到计算机技术发展的狂潮,金戈铁马,无坚不摧!黄老师告诉我们,计95班是基础理论班,这些学生都是精心筛选出来的,班中的学生包括奥林匹克数学竞赛的国际金牌得主,奥林匹克物理竞赛的佼佼者,各省高考的状元,榜眼和探花,北京市的高考前五名。我们的训练自然包括纯粹数学和计算机科学两个系的主要课程。

    很快,我深刻地体会了巨大的差距和压力。我们和数学系同学一同学习陈天权老师讲授的数学分析。当时所用的教材是莫斯科大学数学系卓里奇的数学分析,起点很高。我们头三个月用来学习实数理论,学到最后我已经不知道什么是数了。我无法理解为什么最为基本的实数需要用有理数柯西列的等价类来定义,为什么实数的存在性需要连续统的公理假设。多年之后,我才逐渐理解这些貌似玄虚的哲学问题,实际上奠定了数学大厦的基础。十多年后,当我学习泛函分析和偏微分方程理论的时候,我才深深理解空间完备化的重要性。我记得陈老师讲解了函数的芽,芽的层,我们如堕云雾,不知所云。多年之后,我才知晓现代数学很多是用层的上同调的语言写就。同时,卓里奇用很多数学史上能够成为里程碑的定理的证明作为习题,其难度可想而知。第一次考试,我们全军覆没。但是,余华同学几乎满分,被我们惊为天人。余华却谦逊的笑说我暑假里自学了一些。当时,陈老师不停地鼓励大家,你们只是万里长征的第一步,坚持下去必有收获。奥数金牌得主蒋步星同学花费很多时间给大家讲解,帮助大家消化理解。黄老师也建议大家多找参考书来自学:数学书越薄越难读,数学书越厚越容易。于是,我选了一本最厚的北师大的数学分析。果不其然,这本书将很多艰深理论变得深入浅出,通俗易懂。很快,我们对于数学渐渐的入了门,并且日渐欣赏并陶醉其中。记得在我二十岁生日那天,我跟随刘维尔的途径证明了超越数的存在,(所谓超越数就是一个实数,它不是任何有理系数多项式方程的根。)意在超越自我。

    后来,我们又开始跟随许以超老师学习高等代数。陈老师的风格是内力雄浑,对难题当头击破;许老师轻灵飘逸,四两拔千斤。许老师的课程很快使我学到了变化群下不变量的几何思想。我记得理论教研组的卢开澄老师非常推崇伽罗华理论。在一次计算理论课上,当卢教授讲到伽罗华二十出头为了爱情而决斗而死时,大发感慨道:他着什么急嘛?,惹得全年级上百位同学哄堂大笑。到我们后来学习了抽象代数理论,当时蒋步星说了一句一针见血的话:求根公式的存在性等价于对称群中偶次对换群的单性。令我们醍醐灌顶。

    在大三的时候,有幸聆听了陈省身先生的一次讲座,彻底地改变了我的事业轨迹。陈先生一开始就批评清华,偌大的清华,居然无人讲拓扑。然后又从三角形外角和讲起,直到活动标法,微分形式上同调,纤维丛的示性类。虽然我无法完全理解,但是对于微分几何,代数拓扑,无限向往。有一次,在图书馆淘汰的数目中找到一本江泽涵的不动点类理论。这本书用初等的语言和工具讲解了代数拓扑的理论和方法,及其在不动点理论中的应用。其中,代数拓扑的基本定理说任何流形都可以用单纯复形任意精度的逼近,实际上近年来兴盛起来的所谓数字几何就是依循这一途径发展而来。当时,我产生了一个疑虑:所有拓扑相同的流形直接都存在拓扑同胚,但是如何算出这种同胚呢?在过去的二十年中,这一问题一直在我心头萦绕。

    在本科高年级,我们的学习重心逐渐向计算机科学倾斜。很快我就意识到数学在计算机科学中的重要地位。比如,我们系张钹教授杰出的工作是用不动点理论来解决机械手拓扑路径规划问题。有一阶段,C++语言兴起,每晚的卧谈会上,大家都如火如荼地探讨面向对象的编程。蒋步星轻描淡写的一句话令我铭记至今:所谓类就是范畴学中的范畴。

    后来出国深造,有幸在哈佛大学计算机方向攻读博士,并追随丘成桐先生学习几何。我选修了一位图灵奖得主Michael Rabin的课程。他证明传统的NP问题,大合数素因子分解问题,用概率算法是多项式可解的。而其中最为核心的方法来自有限域论。这再度使我坚信纯粹数学在计算机科学中的威力。在我为博士论文选题的时候,恰逢计算机图形卡的兴起,这使得所谓曲面参数化成为图形学的中心论题之一。当时一些学者已经提出了单连通带边界曲面的保角参数化方法。对于拓扑复杂的曲面,曲面需要先被分割成许多单连通的碎片来处理。我突然想到陈省身将局部微分几何推广到全局的方法,因而意识到曲面参数化应该存在全局方法。丘先生告诉我而这一方法的理论基础在于黎曼面理论和指标定理。

    黎曼面理论的精髓之一在于所谓的单值化定理:大千世界,各种形状千变万化,但却能万宗归一。所有的曲面都可以保角地变换为三种标准曲面:球面,平面或双曲面。这一大一统的理论令我久久赞叹,深深迷恋。在那个年代,黎曼面理论只是一门抽象的纯粹数学理论,根本不存在计算方法。发展一套切实可行的计算方法来实现曲面的单值化成为我难以忘却的梦想。

    经过了将近二十年的探索,和众多世界一流的数学家合作,我终于实现了这一梦想,从而将黎曼面理论转换为一门计算科学。这一计算方法的核心之一恰是用于证明庞加莱猜测的里奇曲率流。我用几何的方法理解了问题,又用计算机的方法将抽象变成现实。当在人类的历史上,一种数百年来只在数学家的脑海里出现过的几何实在终于由我的算法所揭示,而第一次显现在我的电脑屏幕上的时候,我终于体会到了丘成桐先生所说的天人合一的境界。一切挫折苦楚,一切尘世喧嚣,刹那间都微不足道了。

    二十年后回头再想,我之所以能够用通过两种途径来触摸和感受亘古不变的自然真理,这一切完全归功于在清华所受的教育。深深地感谢清华的老师们和同学们,特别是理论教研组和数学系的各位教授,他们教会我几何和计算机的知识和技巧,更教会我做人的道理。

    更为深邃的自然真理依然横亘在眼前,前方的道路愈加艰辛。但是我无所畏惧,因为我时刻铭记着清华的校训:君子自强不息

    4 计算共形几何实例:曲面单值化,由离散里奇曲率流算出。

    4 学术交流

    内容来自:合肥工业大学新闻文化网《顾险峰教授应邀来我校作报告》发布日期2015-11-02

    111日,美国纽约州立大学石溪分校计算机系终身教授顾险峰应邀来校,为我校师生作了题为“Computational conformal geometry,theory, algorithm and applications”的报告。报告会由数学学院党委副书记、副院长江平主持。数学学院2014级、2015级全体学生到场聆听报告。

    报告会上,顾险峰教授结合自身经历,分析了当前计算机在国际发展过程中前进的契机。他将专业知识与实际应用相结合,深入浅出地向同学们展示了他对计算机共形几何的研究,并通过3D动画、人脸识别等例子向同学们详细介绍了计算机共形几何的理论、算法和应用。最后,他还分享了自己与数学的不解之缘,鼓励同学们努力学习数学专业知识,建议同学们脚踏实地学习理论知识,为将来的发展奠定基础。报告会后,顾教授对同学们提出的问题进行了详细解答。[3]

    5 房虹姣/  房虹姣/图,编辑:刘红平

    词条统计:浏览8029次,编辑2历史版本,最近更新:2018-01-14,创建者:88heaven[4]


    -END-

     

    参考文献(253)

    1. 顾险峰.深度学习的几何观点(1 - 流形分布定律.[EB/OL] https://mp.weixin.qq.com/s?__biz=MzA3NTM4MzY1Mg==&mid=2650814452&idx=1&sn=3312f0134032a3094eb9c4043842f5472018-06-04

    2. 顾险峰.深度学习的几何理解(2 - 学习能力的上限.[EB/OL] https://mp.weixin.qq.com/s?__biz=MzA3NTM4MzY1Mg==&mid=2650814456&idx=1&sn=1f0dc7373488347077d54603b765dff32018-06-11

    3. 顾险峰.计算机应用中存在性证明的代数拓扑方法.[EB/OL]https://mp.weixin.qq.com/s?__biz=MzA3NTM4MzY1Mg==&mid=2650814376&idx=1&sn=dbf99314b1cd933815b912af6c6018902018-04-16

    4. 清华大学官网.几何之恋——顾险峰 - 清华大学计算机科学与技术系.[EB/OL] http://www.tsinghua.edu.cn/publish/cs/8207/2014/20140305132115249838379/20140305132115249838379_.html2014-03-05

    5. 合肥工业大学新闻文化网.顾险峰教授应邀来我校作报告.[EB/OL]http://xq70.hfut.edu.cn/index.php?m=content&c=index&a=show&catid=161&id=290372015-11-02

    6. 百度百科.顾险峰.[EB/OL]https://baike.baidu.com/item/%E9%A1%BE%E9%99%A9%E5%B3%B0/2018-01-14

    x.秦陇纪.数据科学与大数据技术专业概论;人工智能研究现状及教育应用;纯文本数据神经网络训练;大数据简化之技术体系[EB/OL].数据简化DataSimp(微信公众号)http://www.datasimp.org2017-06-06

     

    深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰简历(16210字)

    秦陇纪

    简介:深度学习的几何观点:1流形分布定律、2学习能力的上限。(公号回复深度学习流形分布,文末阅读原文可下载5520公式420k26PDF) 蓝色链接数据简化DataSimp关注后下方菜单项有文章分类页,欢迎转发、赞赏、支持社区。作者:顾险峰,美国纽约州立大学石溪分校计算机系终身教授。译者主编:秦陇纪,数据简化社区、科学Sciences、知识简化新媒体创立者,数据简化OS设计师、C/Java/Python/Prolog程序员,IT教师。来源:顾险峰教授微信公号授权、数据简化社区秦陇纪微信群聊公众号,引文出处请看参考文献。版权声明:科普文章仅供学习研究,公开资料©版权归原作者,请勿用于商业非法目的。秦陇纪2018数据简化DataSimp综合汇译编,投稿合作,或出处有误、侵权、错误或疏漏(包括原文错误)等,请联系DataSimp@126.com沟通、指正、授权、删除等。欢迎转发数据简化DataSimp科学Sciences知识简化新媒体聚集专业领域一线研究员;研究技术时也传播知识、专业视角解释和普及科学现象和原理,展现自然社会生活之科学面。秦陇纪发起未覆盖各领域,期待您参与~~ 强烈谴责超市银行、学校医院、政府公司肆意收集、滥用、倒卖公民姓名、身份证号手机号、单位家庭住址、生物信息等隐私数据!

     

    Appx(626).数据简化DataSimp社区简介

    信息社会之数据、信息、知识、理论持续累积,远超个人认知学习的时间、精力和能力。应对大数据时代的数据爆炸、信息爆炸、知识爆炸,解决之道重在数据简化(Data Simplification)简化减少知识、媒体、社交数据使信息、数据、知识越来越简单,符合人与设备的负荷。数据简化2018年会议(DS2018)聚焦数据简化技术(Data Simplification techniques)对各类数据从采集、处理、存储、阅读、分析、逻辑、形式等方ose 做简化,应用于信息及数据系统、知识工程、各类数据库、物理空间表征、生物医学数据,数学统计、自然语言处理、机器学习技术、人工智能等领域。欢迎投稿数据科学技术、简化实例相关论文提交电子版(最好有PDF格式)填写申请表加入数据简化DataSimp社区成员,应至少一篇数据智能、编程开发IT文章:①高质量原创或翻译美欧数据科技论文;②社区网站义工或完善S圈型黑白静态和三彩色动态社区LOGO图标论文投稿、加入数据简化社区,详情访问www.datasimp.org社区网站,网站维护请投会员邮箱DataSimp@163.com。请关注公众号数据简化DataSimp”留言,或加微信QinlongGEcai(备注:姓名/单位-职务/学校-专业/手机号),免费加入投稿群科学Sciences学术文献读者微信群等。长按下图识别图中二维码关注三个公众号(搜名称也行,关注后底部菜单有文章分类页链接):

    数据技术公众号数据简化DataSimp

    科普公众号科学Sciences

    社会教育知识公众号知识简化

    (转载请写出处:©秦陇纪2010-2018汇译编,欢迎技术、传媒伙伴投稿、加入数据简化社区!数据简化DataSimp科学Sciences知识简化投稿反馈邮箱DataSimp@126.com。)

    普及科学知识,分享朋友圈

    转发/留言/打赏后阅读原文下载PDF

    微信扫一扫
    关注该公众号

    展开全文
  • 内容简介 人工智能领域正在以超乎人们想象的速度发展,本书赶在人工智能彻底占领世界之前完成编写,实属万幸。 书中收录了超过 100 道机器学习算法工程师的面试题目和解答,其中大部分源于 Hulu 算法研究岗位的...

    内容简介

    enter image description here

    人工智能领域正在以超乎人们想象的速度发展,本书赶在人工智能彻底占领世界之前完成编写,实属万幸。

    书中收录了超过 100 道机器学习算法工程师的面试题目和解答,其中大部分源于 Hulu 算法研究岗位的真实场景。本书从日常工作、生活中各种有趣的现象出发,不仅囊括了机器学习的基本知识,而且还包含了成为出众算法工程师的相关技能,更重要的是凝聚了笔者对人工智能领域的一颗热忱之心,旨在培养读者发现问题、解决问题、扩展问题的能力,建立对机器学习的热爱,共绘人工智能世界的宏伟蓝图。

    “不积跬步,无以至千里”,本书将从特征工程、模型评估、降维等经典机器学习领域出发,构建一个算法工程师必-备的知识体系;见神经网络、强化学习、生成对抗网络等新科研进展之微,知深度学习领域胜败兴衰之着;“博观而约取,厚积而薄发”,在末一章为读者展示生活中各种引领时代的人工智能应用。

    本书内容

    推荐序

    很荣幸有机会推荐清华大学计算机系 1991 级校友诸葛越和她的团队写的新书《百面机器学习:算法工程师带你去面试》。

    毋庸置疑,人工智能现在正在蓬勃兴起,就像生机勃发的春天,就其热度而言,说它处在夏天也十分贴切,但我更愿意把它比作收获的金秋。目前席卷全球的人工智能大潮,实际上是机器学习二三十年来理论和算法研究厚积薄发的结果(当然,还要加上与大数据和强大计算能力的风云际会),其本质属于“弱人工智能”范畴。这一波大潮恣肆到极致后一旦消退,我们期望的下一波大潮必然将是“强人工智能”所催发的,但由于其理论探索的高度困难性,尚难以设想下一波大潮什么时候才会再次奔涌而至。所以当下的我们,一定要把握住这难得的机遇,抓紧收获“弱人工智能”慷慨馈赠的足够丰硕的“果实”。可以想象,形形色色的人工智能应用将在近一两年走进千家万户,会像互联网一样,给人们的生活,给社会和经济带来深远的影响。

    然而,收获并不是唾手可得的,只有有能耐摘取“果实”的人才能尽享丰收的喜悦—这就是在一线从事人工智能和机器学习工作的人们(通常也被称作算法工程师)。正是这些人,针对不同的实际应用,在不断地尝试新的方法,不断地实现新的算法。他们了解需求、收集数据、设计算法、反复实验并持续优化。他们是人工智能新一代技术的“弄潮儿”和推动者。

    那么,你是否想成为他们中的一员呢?你又如何能快速成为他们中的一员呢?

    也许这本书可以帮你前进一步。在人工智能技术如火如荼的时代,大批优秀的研究员和程序员正辛勤致力于解决人工智能和机器学习的实际应用问题,市场上急需这方面的技术实操书。而本书刚好填补了这方面的空白。它的内容由简至繁依次展开,涵盖了机器学习各个实用领域,并采取了举例和问答的形式,生动活泼,使每个读者既能了解人工智能从业者所需要的技能,又能学会掌握这些技能。

    我从事人工智能研究已有三十余年了,研究兴趣比较广泛,涵盖了自然语言理解、机器学习、社会人文计算等,与这个领域相知相行。我认识诸葛越多年,她是我们系有名的“学霸”,曾经获得美国计算机学会数据库专业委员会十年最佳论文奖(ACM SIGMOD Test of Time Award)。回国后她也常常来系里参加活动。我了解到她的团队中的每一位成员都有非常优秀的背景。本书是工业界每天从事机器学习工作的数据科学家一起撰写的著作,它一定不会让你失望。

    希望更多的朋友通过读这本书,成为更好的算法工程师、数据科学家和人工智能的实践者。我带领的研究小组最近研制了一个“九歌”古诗自动写作系统,2017 年登录央视大型科学挑战类节目《机智过人》,它在节目中的表现初步达到了与人类诗人难分伯仲的程度,而其基本框架正是得益于本书讲述了的长短期记忆网络和 Seq2Seq 模型。这里我姑且借用“九歌”写作的一首五绝集句诗,祝本书的所有读者都能在这个激动人心的技术新时代更上一层楼:

    更上一层楼《登鹳雀楼》唐 • 王之涣

    蝉声满树头《闲二首》唐 • 元稹

    春光无限好《感皇恩 • 春水满池塘》宋 • 叶景山

    月涌大江流《旅夜书怀》唐 • 杜甫

    孙茂松

    清华大学计算机系教授,博导,前系主任,前党委书记

    2018 年 6 月 2 日于清华园

    前 言

    人工智能的三次浪潮

    2018 年年初,招聘季正如火如荼地进行,而“数据科学家”和“算法工程师”绝对算得上热门职业。

    “人工智能”“机器学习”“深度学习”“建模”“卷积神经网络”等关键词,不仅仅是人们茶余饭后的谈资,而且更会像“数据结构”“排序”和“链表”一样,成为软件工程师的必备技能。

    人工智能技术正在对社会结构、职场、教育等带来革命性的变化。未来几年是人工智能技术全面普及化的时期,也是该技术的相关人才最为稀缺的时期。所以,我们希望能够通过这本书,帮助对人工智能和机器学习感兴趣的朋友更加深入地了解这个领域的基本技能,帮助已经有计算机技术基础的同行们,成为驾驭人工智能和机器学习的高手。

    写在书的前面,我先简单介绍一下我了解的人工智能和机器学习的背景和历史,解释为什么现在是学习机器学习算法的大好时机。

    ■ 我与人工智能

    我的本科专业是人工智能。当年我上大学时,清华大学的计算机系每个年级有 6 个班,入学的时候就把每个班的专业分好。我们三班的专业是人工智能。所以在本科的时候,我就接触到许多当时人工智能领域的前沿技术。我的人工智能入门课的导师是可亲可敬的林尧瑞教授,也是《人工智能导论》的作者。这门课被我们戏谑为“猴子摘香蕉”,因为最开始的问题就是一只智能的猴子,如何自己组合积木去拿到天花板上挂着的香蕉。

    当时清华大学的本科是 5 年制,正要开始改革,有少部分学生可以在四年级的时候开始接触研究生的一些活动,6 年可以拿到硕士学位。我有幸被选为这几个学生之一,在本科四年级的时候,我进入了清华大学的人工智能实验室,师从张钹老师,做一些简单的研究。从张老师和高年级的同学们那里,我学到人工智能领域不少当时国际先进的知识。

    刚刚进入斯坦福的时候,去听一个小型的午餐讲座(Brown Bag),也就是一二十个人吧。那位同学讲到一半,教室门突然被打开,大胡子的约翰 · 麦卡锡(John McCarthy)教授走了进来,大声地问:“听说这里有不要钱的午饭?” 然后他走到房间的前面,抓了两个三明治,大摇大摆地走出去了。主持讲座的老师愣了一下,说:“欢迎大家来到斯坦福——世界上最著名的科学家会走进你们的教室来抢你们食物的地方!”

    或许你不知道,“人工智能”(Artificial Intelligence)这个词,就来自约翰 · 麦卡锡。

    因为本科是人工智能专业,所以我对人工智能一直比较感兴趣,在斯坦福又去学了一次人工智能课 CS140。当时教这个课的是尼尔斯 · 尼尔森 (Nils Nilsson)教授。他是另外一位人工智能的学科创始人和世界级专家,写作了被广泛引用的经典之作——《对人工智能的探索》(The Quest for Artificial Intelligence)。尼尔森教授的课非常有趣,我还跟他做了一个小的项目,规划一个扫地机器人的路径。至今,我还保留了这门课的笔记。

    说实话,我年轻的时候每天做作业、做课题,没有意识到,能和这些顶级科学家同堂是多么幸运的事,也未必知道自己正在见证某个技术领域的世界前沿。最顶尖的技术,开始都是只有小众才能理解和欣赏的。

    然而,我的博士论文并没有专攻人工智能,反而做的是大数据方向,做了最早的数据仓库和数据挖掘工作。现在看来,我这几次和人工智能以及人工智能大咖的偶遇,刚好和人工智能的三次浪潮有关。第一次人工智能的浪潮就是约翰 · 麦卡锡那一代人。他们从 20 世纪 50 年代开始,打下了计算机学科和人工智能的理论基础。第二次是我在清华大学期间,研究者们看到了一些人工智能应用的可能性,比如机械手、机器人、专家系统。最近,基于大数据、机器学习的人工智能再次兴起,可以称为人工智能的第三次浪潮。

    ■ 人工智能的三次浪潮

    我来简单定义和解释一下本书用到的概念。

    人工智能泛指让机器具有人的智力的技术。这项技术的目的是使机器像人一样感知、思考、做事、解决问题。人工智能是一个宽泛的技术领域,包括自然语言理解、计算机视觉、机器人、逻辑和规划等,它可以被看作计算机专业的子领域,除了和计算机相关,它还和心理学、认知科学、社会学等有不少交叉。

    机器学习指计算机通过观察环境,与环境交互,在吸取信息中学习、自我更新和进步。大家都了解计算机程序是怎么回事,一个程序是计算机可以执行的一系列的指令,比如打印一张图。那么机器学习跟我们熟知的程序的本质区别是什么呢?你可以想象,某个程序是机器写的,而不是一个程序员写的。那么机器怎么知道如何写这个程序呢?这个机器就是从大量的数据当中学到的。

    简单地说,大多数机器学习算法可以分成训练(training)测试(testing)两个步骤,这两个步骤可以重叠进行。训练,一般需要训练数据,就是告诉机器前人的经验,比如什么是猫、什么是狗、看到什么该停车。训练学习的结果,可以认为是机器写的程序或者存储的数据,叫模型(model)。总体上来说,训练包括有监督(supervised learning)无监督(unsupervised learning)两类。有监督好比有老师告诉你正确答案;无监督仅靠观察自学,机器自己在数据里找模式和特征。深度学习(deep learning)是机器学习的一种方法,它基于神经元网络,适用于音频、视频、语言理解等多个方面。

    我们先来短暂地回顾一下人工智能的三次浪潮。它们有什么特点?又有什么不同?它们又是怎样互相联系,如何在前一次的基础之上建立的?

    第一次人工智能浪潮大约在 20 世纪 50 年代。1956 年,在达特茅斯的人工智能研讨会上,约翰 · 麦卡锡正式提出“人工智能”这个概念,被公认是现代人工智能学科的起始。麦卡锡与麻省理工学院的马文 · 明斯基(Marvin Minsky)被誉为“人工智能之父”。

    在计算机被发明的早期,许多计算机科学家们就认真地思考和讨论这个人类发明出来的机器,和人类有什么根本区别。图灵机和图灵测试,就是这个思考的一个最典型结果。最初的那批思考人工智能的专家,从思想和理论上走得非常前沿,内行的专家很早就看到了计算机的潜力。我们现在所问的这些问题,他们其实都问过了。比如,什么叫“推理(reasoning),机器如何推理;什么叫“懂得”(understanding),机器如何懂得;什么叫知识(knowledge),机器如何获取和表达知识;什么时候,我们无法分辨出机器和人。这个阶段产生了许多基础理论,不仅是人工智能的基础理论,也是计算机专业的基石。

    从技术上来说,第一次人工智能的大发展,主要是基于逻辑的。1958 年麦卡锡提出了逻辑语言 LISP。从 20 世纪 50 年代到 20 世纪 80 年代,研究者们证明了计算机可以玩游戏,可以进行一定程度上的自然语言理解。在实验室里,机器人可以进行逻辑判断、搭积木;机器老鼠可以针对不同的路径和障碍做出决定;小车可以在有限的环境下自己驾驶。研究者们发明了神经网络,可以做简单的语言理解和物体识别。

    然而,在人工智能的前二三十年里,它虽然是一个硕果累累的科研领域,人们实际生活中的用处却几乎没有。20 世纪 80 年代初,人工智能因为缺乏应用而进入“冬季”。到 80 年代末和 90 年代初,在我刚入大学的那段时间里,人工智能科学家们决定另辟蹊径,从解决大的普适智能问题,转向解决某些领域的单一问题。“专家系统”这个概念被提了出来,它让这些研究成果找到了第一个可能的商业出路。

    计算机技术经过了 30 年左右的发展,数据存储和应用有了一定的基础。研究者们看到人工智能和数据结合的可能性,而结合得最好的应用就是“专家系统”。如果我们能把某一个行业的数据,比如说关于心脏病的所有数据,都告诉一个机器,再给它一些逻辑,那这个机器岂不是就成了“心脏病专家”,如果我们要看病,是否就可以问它?

    看病、预报天气等各行各业的专家系统,听起来非常有希望、有意义,也确实有实际的应用场景,所以当时学术界对人工智能又掀起了一阵热潮。然而,比较有意思的是,当我们想要用这些专家系统来做一些聪明的诊断的时候,我们发现遇到的问题并不是如何诊断,而是大部分的数据在当时还不是数字化的。病人的诊断历史还停留在看不懂的医生手写处方上。有些信息就算是已经开始数字化,也都是在一些表格里面,或者是在一些不互相连接的机器里面,拿不到,用不了。

    于是,我们这一批想去做自动诊断的人,反而去做了一些基础的工作。这个基础的工作用一句话说,就是把世界上所有的信息数字化。

    在一批人致力于把世界上每一本书、每一张图、每一个处方都变成电子版的时候,互联网的广泛应用,又把这些信息相互联接了起来,成了真正的大数据。同时,摩尔定律(Moore’s law)预测的计算性能增加一直在起作用。随着计算能力的指数增长,那些只能在实验室里或有限场景下实现的应用,离现实生活越来越近了。1997 年,“深蓝”打败当时的世界象棋冠军 Garry Kasparov,和 2017 年 AlphaGo 围棋打败李世石一样,被公认是一个里程碑。其实,随着计算能力的提高,在这些单一的、有确定目标的事情上机器打败人,都只是个时间问题。

    第三次的人工智能浪潮就是基于另外两个技术领域的大发展,一个是巨大的计算能力,一个是海量的数据。巨大的计算能力来自于硬件、分布式系统、云计算技术的发展。最近,专门为神经网络制作的硬件系统(neural-network-based computing)又一次推动了人工智能软硬件结合的大进步。海量的数据来源于前几十年的数据积累和互联网技术的发展。比如,2001 年上市的 GPS 系统,带来前所未有的大量出行数据;智能手机带来了前所未有的人们生活习性的数据,等等。计算能力和数据的结合,促进、催化了机器学习算法的飞跃成长。

    这次的人工智能浪潮起始于近 10 年。技术的飞跃发展,带来了应用前所未有的可能性。最近这次人工智能浪潮和前两次最基本的不同是它的普遍应用和对普通人生活的影响。也就是说,人工智能离开了学术实验室,真正走进大众的视野。

    ■ 人工智能全面逼近人类能力?

    为什么这次人工智能浪潮如此凶猛?人工智能真的全面逼近了人类的能力吗?人工智能技术现在发展到什么阶段?我们先来看 3 个简单的事实。

    首先,历史上第一次,计算机在很多复杂任务的执行上超过人类或者即将超过人类,比如图像识别、视频理解、机器翻译、汽车驾驶、下围棋,等等。这些都是人们容易理解的,一直由人类完成的任务。所以,人工智能取代人类的话题开始出现在各种头条。

    其实,在单一技术方面,许多计算相关的技术早已超过人类的能力,而且被广泛应用,比如导航、搜索、搜图、股票交易。不少人已经习惯于用语音给简单指令操作。但是,这些相对单纯的技术主要是“完成一个任务”,计算机没有过多地涉猎人的感知、思考、复杂判断,甚至于情感。

    然而,近几年来机器完成的任务,从复杂性和形式越来越逼近人类。比如,基于机器学习的自动驾驶技术已经趋于成熟,这项技术不仅会对人们的出行方式有革命性的影响,而且会影响到城市建设、个人消费、生活方式。人们也许再也不需要拥有汽车,再也不需要会开车。大家对这类新技术的快速到来既兴奋又恐惧,一方面享受技术带来的便利,另一方面又对太快的变化有些手足无措。

    另外,计算机的自学习能力不断增强。现代机器学习算法,尤其深度学习类机器学习算法的发展,使机器的行为不再是相对可预测的“程序”或者“逻辑”,而更像“黑盒思考”,有了近乎人类的难以解释的思考能力。

    然而,仔细看来,虽然在不少特殊领域中,人工智能有了突飞猛进的发展,但是距离人工智能的鼻祖们在第一次浪潮时研究的通用智能(general purpose intelligence)其实还相差非常远。这是第二个事实。机器还是被放在特定情况下完成特定任务,只不过任务更复杂了。机器还是缺少一些最基本的人的智能,比如常识。人工智能仍然无法理解哪怕是简单的情感,比如害怕。对两三岁的孩子来说非常简单的帮忙、合作,机器都是做不到的。好比有人开玩笑说:“它们还是不会炒鸡蛋。”

    第三个事实,是这次人工智能和机器学习的应用场景非常宽广。近几年人工智能和机器学习应用的大发展,这个曾经是学术研究领域的概念一时间进入大众视野,成为和未来相关的必谈话题。计算机视觉、深度学习、机器人技术、自然语言理解,都被提到应用层。算法类的应用走出学术界,深入社会的各个角落, 渗入人们生活的方方面面。大家熟知的有人脸识别、自动驾驶、医疗诊断、机器助手、智慧城市、新媒体、游戏、教育等,还有并不常被谈论的比如农业生产的自动化、老人和儿童的护理、危险情景的操作、交通调度,等等。我们很难想象社会的哪一个方面,不会被这次浪潮所波及。

    向前看十年,人工智能和机器学习的大发展,在于这些技术的普及和应用。大批的新应用将会被开发,人工智能基础设施会迅速完善,原有的传统软件和应用需要被迁移使用新的算法。所以,现在是成为一个人工智能和机器学习专家的良机。

    ■ 这本书是如何写成的

    无论海内海外,媒体行业一直都走在人工智能应用的最前沿,因为媒体往往接触上千万甚至上亿的用户;有千变万化的用户每天离不开的内容,比如新闻、体育、电影;有丰富多彩的内容与用户的结合场景;还有丰厚的有创意的商机。

    Hulu 是一家国际领先的视频媒体公司,提供优质电影、电视剧点播和直播节目。Hulu 技术架构最为先进的一点是人工智能和机器学习算法的广泛应用,用在个性化内容推荐、搜索、视频内容理解、视频传输和播放、广告预测和定向、安全检测、决策支持,甚至视频编辑和客服系统。机器学习算法的背后是专门打造的大规模数据处理系统。“算法无处不在”是 Hulu 当今和未来技术架构的定位。可以说,Hulu 是未来的互联网技术公司,全面“算法化”的一家带头公司。

    为了支持各类的人工智能算法应用,Hulu 在北京的创新实验室集合了大批人工智能和机器学习的顶尖人才。Hulu 的数据科学家、算法工程师和软件工程师都工作在同一个团队,每天解决用户的实际问题,积累了大量实用的经验。Hulu 北京的学习气氛也相当浓厚。除了定期的机器学习专题研讨和大数据及机器学习公开课,Hulu 也在内部开设了深度学习课程。

    2017 年年底,人民邮电出版社的俞彬编辑问我能否写一本关于人工智能和机器学习算法实操的书。目前市场上有关人工智能的书可以分为两类,一类是非常系统的教科书,还有一类是关于人工智能和人类未来的社科类图书。我们能否写一本实操类的书,介绍一个真正的计算机从业人员需要掌握的技能呢?

    抱着试一试的心理,我让公司里的同事自愿报名参加这个集体项目。一共有 15 位资深研究员和算法工程师参与了这本书的内容创作,这是个成功的合作案例。我们先学习了一下现有的相关书籍,然后头脑风暴了一番,觉得我们可以做一个问答集,以比较有趣的问答形式,集中当前算法工程师和研究员感兴趣的话题,用问答引出这个行业的基本概念。

    在互联网行业,敏捷开发都是以最快的速度,做一个“最小化产品”,让用户的反馈来带领产品的方向。我们写这本书也是如此。为了让大家能够落笔写出没有错误、通俗易懂的问答,为了收集读者的反馈,也为了不把写一本大部头书列为第一天的目标,我们先在 Hulu 的微信公众号上,以每周发两个问答的形式,从 2017 年 11 月到 2018 年 3 月期间,一共发出了 30 篇“机器学习问答”系列文章。这些文章受到了业界好评,也收到各种问题和反馈,成了我们这本书的核心内容。

    关于书的章节组织,我们也进行过仔细的讨论。人工智能和机器学习算法范围很大,我们的理念是要涵盖该领域最基本的内容,介绍基本概念,同时,跟上算法发展的最新步伐。所以本书介绍了传统机器学习算法,比如逻辑回归、决策树等,同时花了比较大的篇幅介绍近几年流行的最新算法,包括各种神经网络(深度学习)、强化学习、集成学习等,还会涉猎学术界正在讨论中的新领域和新算法。同时,本书强调了实现一个企业里真正实用的算法系统所需要的技能,比如采样、特征工程、模型评估。因为机器学习算法往往需要比较深的背景知识,所以在每个问题和解答之前,会对该领域做简单的背景介绍。每个问答有不同的难度,以供读者自我衡量。

    在核心的机器学习算法问答内容之外,我们增加了两个部分,一是“机器学习算法工程师的自我修养”,介绍业界典型的算法工程师的工作内容和要求。这些实例可以帮助广大的读者了解掌握机器学习技能以后的工作和去向。二是“人工智能热门应用”,相信不少读者都听说过这些应用的故事,比如无人驾驶车、AlphaGo 等。我们希望从内行人的角度,解释一下这些超级应用背后的原理是什么。当你读完本书,掌握了机器学习技能以后,你也可以在幕后操作这些热门的智能应用了。

    本书信息量很大,涉猎人工智能和机器学习的各个子领域。每个公司、每个业务、每个职位,不一定会用到全部的技能。所以关于阅读这本书,我有以下几个建议。

    (1)顺读法:从头至尾阅读。如果你能读懂全部内容,所有的题目都会解答,欢迎你到 Hulu 来申请工作吧!

    (2)由简至难法: 每道题的旁边都标明了难度。一星最简单,五星最难。在本书中,还提供了一个题目的列表。一颗星的题目,主要是介绍基本概念,或者是为什么要做某一件事,比如 “什么是 ROC 曲线?”“为什么需要对数值类型的特征做归一化?”。如果你是机器学习的入门学习者,可以从背景知识和简单的题目出发,循序渐进。

    (3)目标工作法:不是所有的公司、所有的职位都需要懂得各类算法。如果你目前的工作或者想去的工作在某个领域,它们可能会用到某几类算法。如果你对某个新的领域很感兴趣,比如循环神经网络,那你可以专攻这些章节。不过无论用哪类算法,特征工程、模型评估等基本技能都是很重要的。

    (4)互联网阅读法:一本书很难把广泛的领域讲得面面俱到,尤其是题目和解答,可以举一反三有很多花样。所以,我们在很多章节后都有总结和扩展。对某个领域感兴趣的朋友们,可以以这本书为起点,深入到扩展阅读,成为这一方面的专家。

    (5)老板读书法:如果你是一个技术管理者,你需要解决的问题是算法可能对你现有的技术体系有什么帮助,和怎么找到合适的人,帮你做出智能的产品。建议你可以粗略地浏览一下本书,了解机器学习的各个技术领域,找到合适的解决方案。然后,你就可以用本书作面试宝典了。

    这本书出版的目的,是让更多的人练习和掌握机器学习相关的知识,帮助计算机行业人员了解算法工程师需要的实际技能,帮助软件工程师成为出色的数据科学家,帮助公司的管理者了解人工智能系统需要的人才和技能,帮助所有对人工智能和机器学习感兴趣的朋友们走在技术和时代的前沿。

    人工智能和机器学习的算法还在日新月异地发展中,这本书也会不断更新,不断地出新版本。希望得到读者朋友们的悉心指正,让我们一起跟上这个技术领域的进步步伐。

    2018 年 4 月 10 日

    机器学习算法工程师的自我修养

    通往机器学习算法工程师的进阶之路是崎岖险阻的。《线性代数》《统计学习方法》《机器学习》《模式识别》《深度学习》,以及《颈椎病康复指南》,这些书籍将长久地伴随着你的工作生涯。

    除了拥有全面、有条理的知识储备,我认为,想成为一名优秀的算法工程师,更重要的是对算法模型有着发自心底的热忱,对研究工作有一种匠心精神。这种匠心精神,直白来讲,可以概括为:发现问题的眼光、解决问题的探索精神,以及对问题究原竟委的执着追求。这里,我想给大家分享一个小故事,也是发生在本书作者身边真实的情景。

    在微信红包占领家家户户年夜饭的那个时代,我们的小伙伴也没有例外。一群心有猛虎、细嗅蔷薇的算法研究员深切意识到自己不仅手速慢,运气也可谓糟糕。在埋头疯点手机屏幕的间隙,他们查阅了抢红包策略的相关文献,发现国内外对这一理论框架的探究极度匮乏。知识拯救命运,他们决定将红包机制的公平性提升到理论高度。通过大量的模拟实验,统计在不同顺位领到红包的大小。数据分析显示,越后面领到红包的人,虽然红包金额的期望(均值)和前面的人相同,但方差会更大,这也意味着他们更容易获得一些大额红包。从此,掌握这一规律的研究员们在各个群中“屡试不爽”,再也没有抢到过红包,留下的只有“手慢了,红包派完了”几个大字。

    新年钟声敲响的时分临近,Boss 级别的人物往往会在群里发一些超级大额的红包。最夸张的一次有一位幸运儿在 10 人红包中领到 2 角钱,还没来得及在心中完成“老板真抠门”的碎碎念,抬头定睛一看,最佳手气 500 多元。判若云泥的手气虽没有埋下同事关系间的芥蒂,却让这帮算法工程师们产生了新的思考——如果把大额红包分成多份给大家抢,会减小“人品”因素带来的“贫富差距”吗?理论结合实际,他们不仅通过数学推导确认这一结论,还设计了一系列实验证明了多个红包的确会缩小不同人领到红包金额之间的差异性(方差)。从此,他们组的 Leader 在发大红包的时候都会刻意平均分成几份,既增加了大家抢红包的乐趣,又避免了有人因运气不佳而扼腕兴叹的愤懑。

    当然,故事不止于此。他们还利用红包的特性编写了一系列面试题,筛选着一批又一批的机器学习算法工程师,例如,“用红包产生随机数”“用红包随机选出 n 个候选人”,诸如此类源自生活的小问题在本书后续章节中亦不难寻其踪迹。

    这种探究问题的匠心精神充斥着他们生活的各个角落。每天下楼吃饭等电梯的时候,因担心上厕所错过电梯,他们建立多个模型分析不同时段电梯平均等待时间对应厕所时机的最优选择;在夕阳的余晖下欣赏湖光塔影时,他们会思考为何粼粼波光成了图像编码中的棘手难题;打开购物 APP 看着目不暇接的喜欢抑或不喜欢的商品,他们反思自己搭建的推荐系统是否也会让用户有着相同的无奈或是欣喜。每一件小事,因为对研究有了热爱,都可以成为工作的一部分,成为开启机器学习大门的钥匙。

    工作中的算法工程师,很多时候,会将生活中转瞬即逝的灵感,付诸产品化。组里的一位同事在看某国产剧的时候,发现可以非常方便地跳过片头和片尾。从消费者的角度出发,这的确是一个大有裨益的产品特征,于是他仔细统计了我们自己平台的视频源数据,发现只有一部分视频含有片头、片尾的时间点信息,而且都是人为标记的。试想,对于一家具有百万量级内容源的视频公司,在所有的剧集上人为标记片头、片尾信息有如天方夜谭。通过广泛的背景调研、方法尝试,攫取前人工作之精华,不断加以创新,依据自己的数据特点量体裁衣,他们的团队设计出了一种基于深度神经网络与浅层特征融合的片尾自动检测模型。经过反复的迭代与充分的实验,得到了令人满意的结果。这一工作也申请了美国发明专利,并一步步走向产品化。

    将算法研究应用到工作中,与纯粹的学术研究有着一点最大的不同,即需要从用户的角度思考问题。很多时候,你需要明确设计的产品特征、提升的数据指标,是不是能真正迎合用户的需求,这便要求算法工程师能在多个模型间选择出最合适的那个,然后通过快速迭代达到一个可以走向产品化的结果。这种创新精神与尝试精神便是“匠心”一词在工作中的体现。

    当然,匠心精神诚可贵,知识储备作为成功的根底亦必不可少,这也是我们写作这本书的初衷。扎实的数学基础、完整的算法体系、深入的模型理解,是我们想传达给读者的精华之所在。本书前几章内容,如特征工程、模型评估、经典模型等,是机器学习领域的基石,是每个算法工程师应该融会贯通,内化于自己知识体系中的。而想成为一个研究专业或是应用领域的专家,则需要在技能树中的某几个分支不断生长发展。或许大家都听过啤酒与尿布的小故事,但搭建一个成熟、稳定的推荐系统,不仅需要通晓降维(第 4 章)、优化算法(第 7 章),更要对神经网络(第 9 章、第 10 章)、强化学习(第 11 章)等新生代模型不断钻研、深入理解,将学术前沿与产品形态紧密结合。例如,若是在技能树中专攻马尔可夫模型、主题模型(第 6 章),建立完整的概率图模型知识网络,并将循环神经网络(第 10 章)的理论体系融会贯通,形成自己独到的理解和感悟,便可以在机器翻译、语音聊天助手等自然语言处理的应用场景中驾轻就熟,游刃有余。

    成为机器学习算法工程师的道路固然崎岖,却充满着旖旎和壮阔。你需要做的只是,想清自己真正想成为的那个角色,踏踏实实地在本书中汲取足够多的养分,然后,静静合上书页,在生活中体会种种细节,感受机器学习的璀璨多姿。

    葫芦娃

    2018 年4 月



    问题页码难度级笔记
    第 1 章 特征工程
    为什么需要对数值类型的特征做归一化?002★☆☆☆☆
    怎样处理类别型特征?004★★☆☆☆
    什么是组合特征?如何处理高维组合特征?006★★☆☆☆
    怎样有效地找到组合特征?009★★☆☆☆
    有哪些文本表示模型?它们各有什么优缺点?011★★☆☆☆
    如何缓解图像分类任务中训练数据不足带来的问题?016★★☆☆☆
    Word2Vec 是如何工作的?它和隐狄利克雷模型有什么区别与联系?013★★★☆☆
    第 2 章 模型评估
    准确率的局限性。022★☆☆☆☆
    精确率与召回率的权衡。023★☆☆☆☆
    平方根误差的“意外”。025★☆☆☆☆
    什么是 ROC 曲线?027★☆☆☆☆
    为什么要进行在线 A/B 测试?037★☆☆☆☆
    如何进行线上 A/B 测试?038★☆☆☆☆
    过拟合和欠拟合具体是指什么现象?045★☆☆☆☆
    如何绘制 ROC 曲线?028★★☆☆☆
    如何计算 AUC?030★★☆☆☆
    为什么在一些场景中要使用余弦相似度而不是欧氏距离?033★★☆☆☆
    如何划分实验组和对照组?038★★☆☆☆
    模型评估过程中的验证方法及其优缺点。040★★☆☆☆
    能否说出几种降低过拟合和欠拟合风险的方法?046★★☆☆☆
    ROC 曲线相比 P-R 曲线有什么特点?030★★★☆☆
    余弦距离是否是一个严格定义的距离?034★★★☆☆
    自助法采样在极限情况下会有多少数据从未被选择过?041★★★☆☆
    超参数有哪些调优方法?043★★★☆☆
    第 3 章 经典算法
    逻辑回归相比线性回归,有何异同?058★★☆☆☆
    决策树有哪些常用的启发函数?062★★☆☆☆
    线性可分的两类点在 SVM 分类超平面上的投影仍然线性可分吗?051★★★☆☆
    证明存在一组参数使得高斯核 SVM 的训练误差为 0。054★★★☆☆
    加入松弛变量的 SVM 的训练误差可以为 0 吗?056★★★☆☆
    用逻辑回归处理多标签分类任务的一些相关问题。059★★★☆☆
    如何对决策树进行剪枝?067★★★☆☆
    训练误差为 0 的 SVM 分类器一定存在吗?055★★★★☆
    第 4 章 降维
    从最大方差的角度定义 PCA 的目标函数并给出求解方法。074★★☆☆☆
    从回归的角度定义 PCA 的目标函数并给出对应的求解方法。078★★☆☆☆
    线性判别分析的目标函数以及求解方法。083★★☆☆☆
    线性判别分析与主成分分析的区别与联系086★★☆☆☆
    第 5 章 非监督学习
    K 均值聚类算法的步骤是什么?093★★☆☆☆
    高斯混合模型的核心思想是什么?它是如何迭代计算的?103★★☆☆☆
    K 均值聚类的优缺点是什么?如何对其进行调优?094★★★☆☆
    针对 K 均值聚类的缺点,有哪些改进的模型?097★★★☆☆
    自组织映射神经网络是如何工作的?它与 K 均值算法有何区别?106★★★☆☆
    怎样设计自组织映射神经网络并设定网络训练参数?109★★★☆☆
    以聚类算法为例,如何区分两个非监督学习算法的优劣?111★★★☆☆
    证明 K 均值聚类算法的收敛性。099★★★★☆
    第 6 章 概率图模型
    写出图 6.1(a)中贝叶斯网络的联合概率分布。118★☆☆☆☆
    写出图 6.1(b)中马尔可夫网络的联合概率分布。119★☆☆☆☆
    解释朴素贝叶斯模型的原理,并给出概率图模型表示。121★★☆☆☆
    解释最大熵模型的原理,并给出概率图模型表示。122★★☆☆☆
    常见的主题模型有哪些?试介绍其原理。133★★☆☆☆
    如何确定 LDA 模型中的主题个数?136★★☆☆☆
    常见的概率图模型中,哪些是生成式的,哪些是判别式的?125★★★☆☆
    如何对中文分词问题用隐马尔可夫模型进行建模和训练?128★★★☆☆
    如何用主题模型解决推荐系统中的冷启动问题?137★★★☆☆
    最大熵马尔可夫模型为什么会产生标注偏置问题?如何解决?129★★★★☆
    第 7 章 优化算法
    有监督学习涉及的损失函数有哪些?142★☆☆☆☆
    训练数据量特别大时经典梯度法存在的问题,如何改进?155★☆☆☆☆
    机器学习中哪些是凸优化问题?哪些是非凸优化问题?145★★☆☆☆
    无约束优化问题的求解。148★★☆☆☆
    随机梯度下降法失效的原因。158★★☆☆☆
    如何验证求目标函数梯度功能的正确性?152★★★☆☆
    随机梯度下降法的一些变种。160★★★☆☆
    L1 正则化使得模型参数具有稀疏性的原理是什么?164★★★☆☆
    第 8 章 采样
    如何编程实现均匀分布随机数生成器?174★☆☆☆☆
    简述 MCMC 采样法的主要思想。185★☆☆☆☆
    举例说明采样在机器学习中的应用。172★★☆☆☆
    简单介绍几种常见的 MCMC 采样法。186★★☆☆☆
    MCMC 采样法如何得到相互独立的样本?187★★☆☆☆
    简述一些常见的采样方法的主要思想和具体操作。176★★★☆☆
    如何对高斯分布进行采样?180★★★☆☆
    如何对贝叶斯网络进行采样?190★★★☆☆
    当训练集中正负样本不均衡时,如何处理数据以更好地训练分类模型?194★★★☆☆
    第 9 章 前向神经网络
    写出常用激活函数及其导数。207★☆☆☆☆
    神经网络训练时是否可以将参数全部初始化为 0?217★☆☆☆☆
    多层感知机表示异或逻辑时最少需要几个隐层?200★★☆☆☆
    为什么 Sigmoid 和 Tanh 激活,函数会导致梯度消失的现象?208★★☆☆☆
    写出多层感知机的平方误差和交叉熵损失函数。212★★☆☆☆
    解释卷积操作中的稀疏交互和参数共享及其作用。223★★☆☆☆
    一个隐层需要多少隐节点能够实现包含 n 元输入的任意布尔函数?203★★★☆☆
    多个隐层实现包含 n 元输入的任意布尔函数最少需要多少个节点和网络层?205★★★☆☆
    ReLU 系列的激活函数的优点是什么?他们有什么局限性以及如何改进?209★★★☆☆
    平方误差损失函数和交叉熵损失函数分别适合什么场景?214★★★☆☆
    为什么 Dropout 可以抑制过拟合?简述它的工作原理和实现?218★★★☆☆
    批量归一化的基本动机与原理是什么?在卷积神经网络中如何使用?220★★★☆☆
    常用的池化操作有哪些?池化的作用是什么?225★★★☆☆
    卷积神经网络如何用于文本分类任务?227★★★☆☆
    ResNet 的提出背景和核心理论是什么?230★★★☆☆
    根据损失函数推导各层参数更新的梯度计算公式。212★★★★☆
    第 10 章 循环神经网络
    循环神经网络与前馈神经网络相比有什么特点?236★☆☆☆☆
    循环神经网络为什么会出现梯度消失或梯度爆炸?有哪些改进方案?238★★☆☆☆
    LSTM 是如何实现长短期记忆功能的?243★★☆☆☆
    什么是 Seq2Seq 模型?它有哪些优点?247★★☆☆☆
    在循环神经网络中能否使用 ReLU 作为激活函数?241★★★☆☆
    LSTM 里各模块分别使用什么激活函数?可以用其它的激活函数吗?245★★★☆☆
    Seq2Seq 模型在解码时有哪些常用的方法?249★★★☆☆
    Seq2Seq 模型引入注意力机制是为了解决什么问题?为什么选用双向循环神经模型?251★★★★☆
    第 11 章 强化学习
    强化学习中有哪些基本概念?258★☆☆☆☆
    从价值迭代来考虑,如何找到图中马里奥的一条最优路线?260★★☆☆☆
    从策略迭代来考虑,如何找到图中马里奥的一条最优路线?261★★☆☆☆
    什么是深度强化学习?它与传统的强化学习有什么不同?264★★★☆☆
    在智能体与环境的交互中,什么是探索和利用?如何平衡探索与利用?272★★★☆☆
    什么是策略梯度下降?与传统 Q-learning 有什么不同?有什么优势?268★★★★☆
    第 12 章 集成学习
    集成学习分哪几种?它们有何异同?278★☆☆☆☆
    常用的基分类器是什么?285★☆☆☆☆
    集成学习有哪些基本步骤?请举几个集成学习的例子。282★★☆☆☆
    可否将随机森林中的基分类器由决策树替换为线性分类器或 K- 近邻?286★★☆☆☆
    什么是偏差和方差?287★★☆☆☆
    GBDT 的基本原理是什么?291★★☆☆☆
    梯度提升和梯度下降的区别和联系是什么?293★★☆☆☆
    GBDT 的优点和局限性有哪些?294★★☆☆☆
    如何从减小方差和偏差的角度解释 Boosting 和 Bagging 的原理?289★★★☆☆
    XGBoost 与 GBDT 的联系和区别有哪些?295★★★☆☆
    第 13 章 生成式对抗网络
    简述 GAN 的基本思想和训练过程。300★☆☆☆☆
    GANs 如何避开大量概率推断计算?304★★☆☆☆
    如何构建一个生成器,生成一串文字组成的序列来代表一个句子?328★★☆☆☆
    GANs 的值函数。302★★★☆☆
    原 GANs 中存在哪些问题会成为制约模型训练效果的瓶颈?308★★★☆☆
    在生成器和判别器中应该怎样设计深层卷积结构?314★★★☆☆
    如何把一个生成网络和一个推断网络融合在 GANs 框架下?320★★★☆☆
    GANs 最小化目标函数过程中会遇到的问题?305★★★★☆
    WGAN 针对前面问题做了哪些改进?什么是 Wasserstein 距离?310★★★★☆
    怎样具体应用 Wasserstein 距离实现 WGAN 算法?311★★★★★
    设计一种制造负样本的生成器来采样一些迷惑性强的负样本。324★★★★★
    训练一个序列生成器的优化目标通常是什么?GANs 框架下这个优化目标有何不同?329★★★★★
    有了 GANs 下生成器的优化目标,怎样求解目标函数对生成器参数的梯度?331★★★★★
    第 1 章 特征工程
    第 2 章 模型评估
    第 3 章 经典算法
    第 4 章 降维
    第 5 章 非监督学习
    第 6 章 概率图模型
    第 7 章 优化算法
    第 8 章 采样(上)
    第 8 章 采样(下)
    第 9 章 前向神经网络
    第 10 章 循环神经网络
    第 11 章 强化学习
    第 12 章 集成学习
    第 13 章 生成式对抗网络
    第 14 章 人工智能的热门应用 (上)
    第 14 章 人工智能的热门应用(下)
    后记
    参考文献

    阅读全文: http://gitbook.cn/gitchat/geekbook/5c6d1b2e7fa9074fde9da548

    展开全文
  • 收集了这么多开源的PDF,也许会帮到一些人,现在里面的书籍还不是很多,我也在一点点的上传,才上传不到一半,没办法,库存太多了 地址:...
  • 经典825篇英文IT文章及其网址推荐 (公号回复“英文IT文章”可下载PDF典藏版资料) 原创: 秦陇纪 数据简化DataSimp 今天 数据简化DataSimp导读:A.2016年英文IT文章列表;B.640篇英文IT文章列表;...
  • 机器之心整理参与:张倩、蛋酱从 2016 年起,机器之心每年都会盘点全年的精华教程。去年就有小伙伴留言说要在 2019 年上半年把 2018 年的教程合集「啃下来」。现在都 2020 了...
  • 戴森

    2019-08-07 16:35:40
    著名数学家弗里曼·戴森的演讲译文:鸟和青蛙 编辑按: 弗里曼•戴森 (Freeman Dyson)1923年12月15日出生,美籍英裔数学物理学家,普林斯顿高等研究院自然科学学院荣誉退休教授。 戴森早年在剑桥大学追随著名的...
  • [转]程序员资料整理

    2017-05-09 17:17:54
    前言一些主流技术资源整理。目录 资料篇 技术站点 ...大数据处理/数据分析/分布式工具 Web前端 语言篇 Scala Java Python Swift .NET C & C++ 其他 游戏开发相关 日志聚合,分布式日志收集 RTP,实时传输
  • 技术站点 Hacker News:非常棒的针对编程的链接聚合网站Programming reddit:同上MSDN:微软相关的官方技术集中地,主要是文档类infoq:企业级应用,关注软件开发领域OSChina:开源技术社区,开源方面做的不错哦...
  • 目录如下:├─AAAAAA课件及相关资料│ ├─相关资料│ │ ├─100本最棒前端开发图书│ │ │ │ 05-jQuery权威指南.pdf│ │ │ │ 06-《Web开发典藏大系:jQuery网页开发实例精解》.pdf│ │ │ │ 07-AngularJS...
  • 计算机应用中存在性证明的代数拓扑方法(附顾险峰教授简历,公号回复“代数拓扑”、“顾险峰”可下载PDF资料,欢迎赞赏转发支持社区) ...
  • 先说明一下个人基本情况,本硕东南自动化,实验室主要是做一些图像处理相关的项目,后面发现自己对算法并没有太大的热情,于是转向了C++后台开发,在秋招过程中,投递了大概10+家公司(基本都在7月份完成投递),...
  • www.feiku.com飞库  www.pashu.net爬书网  www.ssreader.com超星数字图书馆  www.isoshu.com爱搜书  www.abada.cn TXT小说下载第一站  www.txtxz.com TXT电子书论坛  www.wjshuw.cn万卷书网 ... ww
  • 计算机编程书籍大全

    2016-04-09 09:50:50
    MFC程序开发参考大全 USB应用开发技术大全 HTML参考大全 Java范例开发大全 Java开发技术大全 Java 2参考大全 Java Web开发典型模块大全 Java Web开发技术大全 精通Java Web整合开发 ...Java We
  • java电子书资源

    2019-05-27 08:36:45
    Java经典编程300例 PDF扫描版[78MB] http://pan.baidu.com/s/1gdGirZ1 面向对象软件工程:使用UML、模式与 Java(第3版)完整版PDF[59MB] http://pan.baidu.com/s/1eREAA9k Java语言规范:基于Java SE 8 中文完整pdf...
  • 本文转载至:http://www.cricode.com/3282.html
  • 码农周刊分类整理

    2016-09-21 17:08:40
    码农周刊的类别分的比较大,不易于后期查阅,所以我把每期的内容按语言或技术进行了分类整理。 ...一些不熟悉的领域分类可能不准确,请见谅 15期为图书推荐,请直接浏览原地址 56期为14年最受欢迎列表,请直接浏览原...
  • 2018年过去一半了~又到了盘点的时间~感谢长时间来各位好友的关注,我们的成长与你们的爱护是分不开的。更感谢各位老师的投稿,支撑起了我们的这个社区,让更多R语言的爱好者和...
1 2 3 4 5 ... 12
收藏数 232
精华内容 92
关键字:

图像处理的数学修养pdf