李宏毅课程
李宏毅 深度学习
- 预测模型函数不确定,好的预测模型函数,能够更好的进行预测,模型函数验证方法可参见第5条,下面给出两个模型函数的例子:
-
数据需要预处理,如:feature scaling(特征归一化)、PCA(主成分分析)……
-
梯度下降的局限(Limitations of Gradient Decedent)(真实应用中,可以忽略):
- 局部最小值(local minima)
- 鞍点(saddle point)
- 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):随机的、临时的删除隐藏层中的神经元、输入数据。
- 模型选择:交叉验证( cross valiation)、N-fold cross valiation
- 逻辑回归与线性回归
-
Deep lerning无非是多了几个隐藏层。但一个项目中,具体该用几层?每层又有几个神经元?超参数怎么调?没有具体的答案,只能在实践中去尝试,去总结经验。
-
反向传播(Backpropagation):链式法则(chain rule),由后往前逐步向前求导,如下图所示,找到损失函数与权值()和偏置()的关系。然后进行参数调整(如公式所示),使代价函数逐步降低。
其中 是学习率,是一个大于0的正数。
- 异常侦测(Anomaly Detector):可用于网络攻击探测、银行卡盗刷、癌细胞检测等。
异常检测中高的正确率,并不能代表系统的好坏。如下图所示,当门限值 时,五张异常图片全部判断 错误,但它的正确率依然在 95% 以上。我们可以通过调整门限值 的大小,来增加检测出异常的可能性,但与 此时虚警(错判)的概率也增加了。但是在军事领域、医疗领域等,虚警的代价往往要高于漏检的代价。针对 此类检测好坏判断指标有很多,ROC是其中一种。
- 卷积神经网络(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没有使用池化,在围棋中不适用)
- 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
- Explainabl ML:可以查看模型判断的依据,哪些部分是做出决定的重要依据。
下面给个列子,用卷积模型区分神奇宝贝
与数码宝贝
两者相似度很高,人类也难以分辨。下面搭建神经网络进行分类。
但是通过深度学习却可以获得极高的准确率,邻人难以置信。通过Explainabl ML观察模型做出判断的依据:
saliency:显著;特征
通过图像可以看出,判断是神奇宝贝和数码宝贝的依据主要根据图形的边缘部分。与宝贝主体没有关系。为什么会这样??
从上图可以看出,并不是真正的区分神奇宝贝与数码宝贝,利用Explainabl ML可以看出是“真分类”,还是“假分类”。
- 权重初始化。
-
创建神经网络之后,我们需要进行权重和偏置的初始化。之前的方式就是根据独立高斯随机变量来选择权重和偏置,其被归一化为均值为0,标准差1。
-
上种方式获得了不错的效果。但有没有更好的方式。我们会使用均值为0,方差为的高斯随机分布初始化这些权重。其中表示有个输入权重的神经元。此种方法可以加快网络的训练,有时在准确率性能上有很大的提升。而偏置可以继续使用均值为0,标准差为1的高斯分布进行初始化。
- 值的选取
- :我们选择在训练数据上的代价立即开始下降的 作为估计的阈值。如果代价 时就开始震荡或者增加,那就尝试 ,直到你找到代价在开始回合就下降的设定。这种方法可以对 的量级进行估计。毫无疑问 取值要小于阈值,如果 的值重复使用很多回合的话,你应该使用稍微小一点的值,例如阈值一半的的选择。这样的选择能够允许你训练更多的回合,不会减慢学习速度。
- 我们⼀直都将学习速率设置为常量。但是,通常采用可变的学习速率更加有效。在学习的前期,权重可能非常糟糕。所以最好是使用⼀个较大的学习速率让权重变化得更快。越往后,我们可以降低学习速率,这样可以作出更加精良的调整。
- 规范化参数
- 建议开始时不包含规范化()确定 的值。使用确定出来的 ,我们可以使用验证数据来选择好的 。从尝试 开始,然后根据验证集上的性能按照因子10增加或减少其值。⼀旦我已经找到⼀个好的量级,你可以改进 的值。这⾥搞定后,你就可以返回再重新优化
- 小批量数据大小(minibatch)
- 小批量数据大小的选择其实是相对独立的⼀个超参数(网络整体架构外的参数),所以你不需要优化那些参数来寻找好的小批量数据大小。因此,可以选择的方式就是使用某些可以接受的值(不需要是最优的)作为其他参数的选择,然后进行不同小批量数据大小的尝试,像上面那样调整 。画出验证准确率的值随时间(非回合)变化的图,选择那个得到最快性能的提升的小批量数据大小。得到了小批量数据大小,也就可以对其他的超参数进行优化了。
- 梯度消失:在某些深度神经网络中,在我们在隐藏层BP的时候梯度倾向于变小。这意味着在前⾯的隐藏层中的神经元学习速度要慢于后面的隐藏层。
- 更改**函数可以用来解决梯度消失的问题,如:ReLu替代Sigmoid
- 深度神经网络中基于梯度的学习方法具有不稳定性。结果表明了**函数的选择,权重的初始化,甚至是学习算法的实现方式也扮演了重要的角色。当然,网络结构和其他超参数本身也是很重要的。因此,太多因子影响了训练神经网络的难度,理解所有这些因⼦仍然是当前研究的重点。
- 特征粒度
- 稀疏编码
-
自动编码器(功能有点类似主成分分析PCA)
-
正向RNN、反向RNN、双向RNN