Deep Learning

作者: Babus | 来源:发表于2018-04-08 22:42 被阅读0次

    1.机器学习中数学基础

    二次型矩阵:

    https://wenku.baidu.com/view/b3a01ed2b9f3f90f76c61ba2.html

    利用矩阵的写法可以很方便的表示


    image.png

    泰勒级数

    image.png

    梯度相关:https://www.cnblogs.com/pinard/p/5970503.html

    概率部分

    贝叶斯实例:


    image.png

    https://blog.csdn.net/SugarAnnie/article/details/78951033

    特征值与特征向量:
    矩阵部分知识补充:
    http://www.sohu.com/a/154654789_465975
    https://blog.csdn.net/liangjun_feng/article/details/78457377
    https://www.cnblogs.com/Dumblidor/p/5760606.html

    PCA:

    降维为了让剩下的行之间方差尽可能大,让他们的相关性尽可能的小。(目的:让数据量变少,同时也保留住原始的信息)
    https://blog.csdn.net/google19890102/article/details/27969459
    PCA本质:协方差矩阵的对角化

    一般约束优化:

    凸优化问题
    凸函数中的局部最优解便是全局最优解

    2. 从线性分类器到人工神经网络

    线性分类器得分函数:

    image.png
    image.png

    两种损失函数的理解

    感知器

    非线性分割中的优势


    image.png image.png
    image.png

    传递函数

    如果每一层之间都是一些线性的变化,那其实不论多少层其实都可以用一层来表达,所以我们会引入一些非线性的函数。


    image.png image.png

    激活函数:对信号做筛选,看要不要让一些打断你的信号过去。

    BP算法

    需要利用这个算法去传递每一层中的误差来不断修正他。
    正向传播举例:我们需要去做很多题目,根据她的错误等来指导自己的学习。
    反向传播举例:根据得出的结果,去找为什么犯错,去解决这个问题。


    image.png

    把d1-dj看作标准答案。
    利用l2 loss(对应的差值)来判断他们的差值。1/2只是为了计算方便。去掉偏执项b也是为了计算简便。


    image.png image.png

    把这个表示出来之后我们需要去求误差的最小值。

    例子:

    image.png

    我们先自己随便设定值,去看差距(就像先做一套高考题去看我与标准答案的差距再做修正)

    根据求导的链式法则去求导


    image.png
    image.png image.png image.png

    BP算法用来的来偏导,我们利用这个偏导去修正我们的误差。

    百度Tensorflow playground

    损失函数与传递函数一些分类与理解

    https://blog.csdn.net/u012162613/article/details/44239919

    sigmod函数的理解:
    https://blog.csdn.net/u014422406/article/details/52805924

    3.卷积神经网络

    https://blog.csdn.net/qq_25762497/article/details/51052861
    为什么要有卷积神经网络,因为如果不用卷积的话如果我们去处理图像,那么w会非常多,运算量非常大。

    image.png

    全连接层是指,上一层会与下一层中的每个层都有联系(w)


    image.png

    - 数据层

    有关输入数据的几种操作方式:

    1. 归一
    2. 去均值(例如我们去区分很多颜色,如果他主要有偏红的颜色,我们去了均值就有正有负)
    3. PCA/白化
      https://blog.csdn.net/zkp_987/article/details/78684855
    image.png
    一般对于图像而言,我们就只用到第一种。因为不需要去均值。例如2772773(像素点先是277*277的矩阵,3是三个颜色通道RGB)

    数据层处理完毕之后来到CONV层(卷积计算层)

    - 卷积层

    卷积计算层:

    1. depth理解为:有多少人去看了这个图片。要有大家的意见汇总才能有意义才能看到东西。
    2. 步长:每个人看到的是一个窗口,要来利用窗口的滑动,步长指窗口滑动多少。
    3. 填充值:例如我是一个32323 我现在用4*4的窗口来看,不能刚好从最左到最右,所以我们需要去补0.
      不断去滑动。

    5个小朋友,每个人都有一个世界观,第1位小朋友便用她的世界观(她的w)去看第一个3*3的窗口,然后利用窗口


    image.png image.png

    对应区域对应的数相乘加和。(有一些会加一个偏执项)


    image.png
    image.png

    - 激励层

    看卷积层读到的信号是否值得往下传,以及按什么比例往下传。相当于之前是5个下属,他们给你反馈了意见,你不一定全都听,需要判断。


    image.png image.png image.png
    image.png

    - 池化层

    作下采样:往下采样,保存图片中的大量信息。

    相当于找一个小朋友来总结这几个要点,依旧去看每个小块,取出每个小块最重要的东西。依旧是一个窗口在滑动,看你需要降到什么程度。
    1.max:看最大的信息
    2.avg:用平均数据

    - 全连接层

    image.png

    左边是小朋友看的东西,右边是小朋友给的评价。


    image.png

    之后是小朋友的领导去看,依次类推。


    image.png image.png
    image.png image.png

    数据量大可以减缓过拟合。

    正则化与Dropout(?不太明白)

    用来约束和缓解过拟合。l1,l2也是一些正则化方式。

    Dropout是指随机失活,用了之后,比如dropout为0.5


    image.png

    u1生成一个随机数组去取舍,把小于0.5的部分都留下来。下来是他的数学期望。将这些保留下来的数字与H1去做点乘。

    我们需要预测的时候结果快,所以我们预测的时候就不要去算p,把这个p给放在模型训练的时候去。

    image.png

    对于dropout的理解:
    我们需要让神经网络有一定的泛化能力,因为是有一部分的冗余的信息。


    image.png
    image.png

    96个小朋友,按照一个1111的窗口来滑动,拿到5555的数据。

    image.png
    1111的窗口滑动,步长为0,补偿0.下采样池化按照33的块每次滑动2步。
    image.png

    框架示例

    image.png
    image.png

    caffe使用方式

    image.png
    • 数据层
      bottom表示从哪一层读,top表示输出给哪一层。name很重要,很多时候用别人的模型的时候是需要改这个name的。type:指当前层是什么层次,此时是数据层。source指定数据来源,batch-size指每次丢入64张图片做一轮的处理和迭代。scale:相当于归一化,做一个缩放。


      mei yi c
    • 卷积层
      bottom用到data,输出conv1。

    caffe当中学习率有两个,全局学习率和每一层学习率。最终的学习率是由每一层的学习率全局的。因为这层有w和b,有偏执项,相当于是把w和b独立给了这两个blobslr。分别指w和b的学习率。
    numoutput指:相当于上节课的depth,多少个小朋友多少个神经元。有多少的卷积和,相当于有多少的小朋友去看。
    kernelsize:滑动窗口大小5
    %
    stride:滑动步长
    weightfiller与biasfiller是去初始化w和b的权重。定义的是几种初始化的方式。

    image.png
    • 池化层


      image.png
    • 全连接层


      image.png
    • 激励层


      image.png

    有些时候我们用别人的模型的时候可以把前面层次的学习率调低(因为他们已经做得很完善了)我们只需要调整后面的

    在这里去定义全局的学习率。iter和interval分别表示训练集要训练多少轮和验证集需要多少轮。lr-policy表示用什么方式去做优化,此时表示的step,梯度下山法。stepsize:步长,display指多少轮之后做一次信息的展示。snapshot:害怕有服务器断电的情况,保留状态,表示每过1w轮保存一次权重。以方便重新加载。

    image.png image.png

    我们需要修改数据源,改名字,换个数。


    image.png image.png

    finetuning 微调
    一个示例:
    http://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html

    python里面的步骤

    image.png image.png

    在写prototxt。其中lmdb指数据库类型


    image.png

    一个py的预测示例


    image.png

    可视化网络结构


    image.png

    solver、deploy、train_val三个prototxt的一些区别和解释参考
    http://lib.csdn.net/article/aiframework/62856

    Tensorflow使用方式

    image.png image.png

    补充np的一些知识

    import numpy as np
    b = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[0,1,1],[0,5,6],[7,8,9]],[[1,2,1],[1,5,1],[7,8,9]]])
    print(b)
    a=b.shape#指维度,从里面往外面看,看逗号
    print(a)
    c=b.sum(axis=0)
    d=b.sum(axis=1)
    e=b.sum(axis=2)
    print(c)
    print()
    print(d)
    print()
    
    -------------
    [[[1 2 3]
      [4 5 6]
      [7 8 9]]
    
     [[0 1 1]
      [0 5 6]
      [7 8 9]]
    
     [[1 2 1]
      [1 5 1]
      [7 8 9]]]
    
    (3, 3, 3)
    
    [[ 2  5  5]
     [ 5 15 13]
     [21 24 27]]
    
    [[12 15 18]
     [ 7 14 16]
     [ 9 15 11]]
    
    [[ 6 15 24]
     [ 2 11 24]
     [ 4  7 24]]
    axis主要看shape,shape是[2,4,3]
    axis为0是加最外面的2个,得出结果4,3
    axis为1是加最中间的4个,得出结果2,3
    axis为2是加最里面的3个,得出结果2,3
    
    
    image.png

    21的矩阵,12的矩阵没问题,主要是看shape。[[3,3]]最外面是1个,里面2个3

    image.png image.png image.png

    placeholder容器,保存图片数据,参数变量在variable。
    padding指填充。以及Tensorflow里面参数参考见:
    https://blog.csdn.net/jacke121/article/details/78867082

    一般我们把dropout用在全连接层。

    MxNet

    相关文章

      网友评论

        本文标题:Deep Learning

        本文链接:https://www.haomeiwen.com/subject/nxlmhftx.html