李宏毅课程

李宏毅课程

李宏毅 深度学习

  1. 预测模型函数不确定,好的预测模型函数,能够更好的进行预测,模型函数验证方法可参见第5条,下面给出两个模型函数的例子:

y=w1x1+w2x2+w3x3+....+b1 y=w_1x_1+w_2x_2+w_3x_3+....+b_1

y=w1x12+w2x22+w3x32+....+b2 y=w_1x_1^2+w_2x_2^2+w_3x_3^2+....+b_2

  1. 数据需要预处理,如:feature scaling(特征归一化)、PCA(主成分分析)……

    (1)深度学习中的数据预处理方法

    (2)机器学习(深度学习)中数据问题的处理方法

  2. 梯度下降的局限(Limitations of Gradient Decedent)(真实应用中,可以忽略):

    • 局部最小值(local minima)
    • 鞍点(saddle point)

李宏毅课程

  1. Error来源:Bias and Variance

李宏毅课程

​ 怎样判断是bias大还是variance大?

  • 如果模型函数不能拟合数据(欠拟合),则是bias大,这里的bias不要简单的理解为模型函数中加的偏置常数:b。这里的bias可以理解为模型最优值。

    • 考虑重新设计模型函数,考虑更多的特征点,一次式换成多次式等
  • 如果模型在训练数据上可以得到小的错误,但在测试集上有大的错误(过拟合),说明variance大。在机器学习算法中,我们常常将原始数据集分为三部分:training data、validation data,testing data。这个validation data是什么?它其实就是用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。因此,training data的作用是计算梯度更新权重,validation data如上所述,最终我们在testing data进行准确率的判断,testing data也就成为了一个网络能不能泛化的判断标准。

    • 更多的数据:自然数据、人为扩展数据(旋转角度、弹性扭曲、语音识别中可以增加不同的背景噪声等)

    • 正则化也叫规范化(Regularization)、权重衰减(weight decay)、L2规范化:有可能使bias增大:

李宏毅课程

点我了解规范化防止过拟合

  • 提前停止训练(early stopping)

  • 弃权(dropout):随机的、临时的删除隐藏层中的神经元、输入数据。

  1. 模型选择:交叉验证( cross valiation)、N-fold cross valiation

李宏毅课程

  1. 逻辑回归与线性回归

李宏毅课程

  1. Deep lerning无非是多了几个隐藏层。但一个项目中,具体该用几层?每层又有几个神经元?超参数怎么调?没有具体的答案,只能在实践中去尝试,去总结经验。

    李宏毅课程

  2. 反向传播(Backpropagation):链式法则(chain rule),由后往前逐步向前求导,如下图所示,找到损失函数与权值(ww)和偏置(bb)的关系。然后进行参数调整(如公式所示),使代价函数逐步降低。

w2=w1ηyw1 w_2=w_1-\eta\frac{\partial y}{\partial w_1}

b1=b1ηyb1 b_1=b_1-\eta\frac{\partial y}{\partial b_1}

​ 其中 η\eta 是学习率,是一个大于0的正数。

李宏毅课程

  1. 异常侦测(Anomaly Detector):可用于网络攻击探测、银行卡盗刷、癌细胞检测等。

李宏毅课程

异常检测中高的正确率,并不能代表系统的好坏。如下图所示,当门限值 λ=0.2\lambda=0.2 时,五张异常图片全部判断 错误,但它的正确率依然在 95% 以上。我们可以通过调整门限值 λ\lambda 的大小,来增加检测出异常的可能性,但与 此时虚警(错判)的概率也增加了。但是在军事领域、医疗领域等,虚警的代价往往要高于漏检的代价。针对 此类检测好坏判断指标有很多,ROC是其中一种。

李宏毅课程

  1. 卷积神经网络(CNN):

李宏毅课程

上图是一个典型的卷积神经网络,主要由卷积层、全连接层构成。卷积层主要包括特征提取、池化,下面也将进行介绍。我们知道计算机对颜色没有任何感知能力,任何图片在计算机看来都是一些数字,如下图所示。各种彩色的图片也是有RGB三种颜色不同的比例调和而成。他们本质上都是些数值矩阵(map data)。灰度图片只有一个map data。而彩色图片相对麻烦些,需要分解成R、G、B三个通道的map data,进行特征提取。

李宏毅课程

李宏毅课程

特征提取与池化本质上来说都是对图片数据进行压缩。特征提取需要一个叫做卷积核(filter)的矩阵,如下图黄色部分,它也是一个数值矩阵。filter中的数值与map data中对应位置的数值相乘再相加,便形成右边粉红色部分的一个数值。filter根据步长,移动位置(图中步长stride=1,所以每次移动一列,步长不一样形成的新的矩阵的大小有所不同),形成了一个新的矩阵(feature map),这就是特征提取卷积的过程。有时,为了提取图片边缘部分的信息,在原始图片外围部分补充一些矩阵(padding,如第二个蓝色动图),这些补充部分填充数值0即可。为了更好的对图片特征提取,一张图片会设置多张不同filters,每一个filter卷积之后,都会形成一张新的feature map。至于filter中的数值,我们只要给它赋初值,由反向传播、梯度下降法,filter中的数值会自我调整与更新,使损失函数降低。而彩色图片每一次进行特征提取,会同时考虑R、G、B三通道,如果第一次特征提取卷积有25个filters,将会形成25个新的feature map,然后对它们池化。假如第二次卷积也有25个filters,那么形成的feature map依然是25,不是25*25。因为每一个filter会同时考虑宽度、高度、深度,第一次特征提取卷积,每一个filter会同时提取3通道(R、G、B即深度)的特征,形成25个feature map。而第二次特征提取卷积,每一个filter会同时提取25个(第一次特征提取卷积之后的结果)深度,形成新的25个feature map。

李宏毅课程

李宏毅课程

而池化分为最大池化和平均池化,而最大池化在实际运用中最为常见。池化层一般放在特征提取之后,所以池化的对象是特征提取卷积之后的数据。如下图所示,一个4*4的矩阵被分为四个2*2的小矩阵。从每一个小矩阵中提取最大值,形成新的矩阵,这就是最大池化的过程。而平均池化是提取每一个小矩阵的平均值。池化层也有padding的选项,但跟特征提取卷积一样,在外围补0,然后再池化。分享一个大神制作的基于卷积神经网络的手写数字识别3D建模

李宏毅课程

全连接层,就是把卷积层提取压缩之后的数据拉平(flatten),如下图所示,然后送入全连接网络。

李宏毅课程

什么时候用卷积神经网络CNN?

  • Some patterns are much smaller than the whole image:比整体小的多的部分也含有信息李宏毅课程

  • The same patterns appear in different regions:同样的信息可能出现在不同区域

李宏毅课程

  • Subsampling the pixels will not change the object:池化不改变对象。(Alpha Go没有使用池化,在围棋中不适用)
  1. Tips for trainning
  • deep learning 中过拟合不易发生。在训练集中得到好的结果,但在测试集结果不理想,这是过拟合,所以要在测试集中检测有没有过拟合。However,Do not always blame Overfitting.网络层数多,不一定工作的越好,有可能数据训练中出现了问题。
  • 训练数据使用dropout时,测试数据No dropout。
    • 如果在训练时,弃权(dropout)率是p%,在测试时,所有权重乘倍数(1-p)%
    • 假设弃权(dropout)率是50%,如果训练时一个权重w=1,测试时w=1*(1-0.5)=0.5
  1. Explainabl ML:可以查看模型判断的依据,哪些部分是做出决定的重要依据。

下面给个列子,用卷积模型区分神奇宝贝数码宝贝

李宏毅课程

两者相似度很高,人类也难以分辨。下面搭建神经网络进行分类。

李宏毅课程

但是通过深度学习却可以获得极高的准确率,邻人难以置信。通过Explainabl ML观察模型做出判断的依据:

saliency:显著;特征

李宏毅课程

李宏毅课程

通过图像可以看出,判断是神奇宝贝和数码宝贝的依据主要根据图形的边缘部分。与宝贝主体没有关系。为什么会这样??

李宏毅课程

从上图可以看出,并不是真正的区分神奇宝贝与数码宝贝,利用Explainabl ML可以看出是“真分类”,还是“假分类”。

  1. 权重初始化。
  • 创建神经网络之后,我们需要进行权重和偏置的初始化。之前的方式就是根据独立高斯随机变量来选择权重和偏置,其被归一化为均值为0,标准差1。

  • 上种方式获得了不错的效果。但有没有更好的方式。我们会使用均值为0,方差为1nin\frac{1}{\sqrt{n_{in}}}的高斯随机分布初始化这些权重。其中nin{n_{in}}表示有nin{n_{in}}个输入权重的神经元。此种方法可以加快网络的训练,有时在准确率性能上有很大的提升。而偏置可以继续使用均值为0,标准差为1的高斯分布进行初始化。

  1. η\eta 值的选取
  • η\eta:我们选择在训练数据上的代价立即开始下降的 η\eta 作为估计的阈值。如果代价 η=0.01\eta=0.01 时就开始震荡或者增加,那就尝试 η=0.01,0.0001\eta=0.01,0.0001 ,直到你找到代价在开始回合就下降的设定。这种方法可以对 η\eta 的量级进行估计。毫无疑问 η\eta 取值要小于阈值,如果 η\eta 的值重复使用很多回合的话,你应该使用稍微小一点的值,例如阈值一半的的选择。这样的选择能够允许你训练更多的回合,不会减慢学习速度。
  • 我们⼀直都将学习速率设置为常量。但是,通常采用可变的学习速率更加有效。在学习的前期,权重可能非常糟糕。所以最好是使用⼀个较大的学习速率让权重变化得更快。越往后,我们可以降低学习速率,这样可以作出更加精良的调整。
  1. 规范化参数
  • 建议开始时不包含规范化(λ=0.0\lambda=0.0)确定 η\eta 的值。使用确定出来的 η\eta ,我们可以使用验证数据来选择好的 λ\lambda 。从尝试 λ=1.0\lambda = 1.0 开始,然后根据验证集上的性能按照因子10增加或减少其值。⼀旦我已经找到⼀个好的量级,你可以改进 λ\lambda 的值。这⾥搞定后,你就可以返回再重新优化 η\eta
  1. 小批量数据大小(minibatch)
  • 小批量数据大小的选择其实是相对独立的⼀个超参数(网络整体架构外的参数),所以你不需要优化那些参数来寻找好的小批量数据大小。因此,可以选择的方式就是使用某些可以接受的值(不需要是最优的)作为其他参数的选择,然后进行不同小批量数据大小的尝试,像上面那样调整 η\eta 。画出验证准确率的值随时间(非回合)变化的图,选择那个得到最快性能的提升的小批量数据大小。得到了小批量数据大小,也就可以对其他的超参数进行优化了。
  1. 梯度消失:在某些深度神经网络中,在我们在隐藏层BP的时候梯度倾向于变小。这意味着在前⾯的隐藏层中的神经元学习速度要慢于后面的隐藏层。
    • 更改**函数可以用来解决梯度消失的问题,如:ReLu替代Sigmoid
  2. 深度神经网络中基于梯度的学习方法具有不稳定性。结果表明了**函数的选择,权重的初始化,甚至是学习算法的实现方式也扮演了重要的角色。当然,网络结构和其他超参数本身也是很重要的。因此,太多因子影响了训练神经网络的难度,理解所有这些因⼦仍然是当前研究的重点。
  3. 特征粒度
  4. 稀疏编码

李宏毅课程

  1. 自动编码器(功能有点类似主成分分析PCA)
    李宏毅课程

  2. 正向RNN、反向RNN、双向RNN