您的位置:首页 > 理论基础 > 计算机网络

吴恩达deep learning课程学习重点笔记

2017-12-26 13:51 113 查看

神经网络基础:

梯度下降法指的是在给定一个初始值后,始终沿着当前最陡峭的下降方向进行移动。

代价函数:二次型,交叉熵代价函数(cross-entropy cost)

计算方法:backpropagation 优化方法:SGD随机梯度下降 softmax函数:输出概率化

如果我们选择tanh作为激活函数,由于其平均值更接近于0,可以起到中心化的作用,通常更有利用算法优化。

对于一个二分类问题的输出层的激活函数,由于我们仅希望对其进行是否判断,其实更类似于0,1判断,因此,此时选择sigmod函数是一个更加合理的选择。但是,对于sigmod函数和tanh函数,都有一个共同的问题,即当输入变量特别大或者特别小时,斜率非常小,此时,并不利于梯度下降法进行学习。在机器学习中, 一个非常常用的激活函数叫做ReLU函数(修正线性单元函数)

在使用神经网络时,参数的初始化也是一个重要的工作。一个常用的原则是:使用较小的随机数来对参数进行初始化。里面涉及到两个KeyWords:随机数、较小的数。当你在计算激活函数的值时,如果W很大,会导致sigmod或tanh函数的输入值很大或很小。此时,则位于函数的平缓部分,导致其计算到的梯度下降非常缓慢。而越接近于0时,其梯度越明显,收敛速度也相对更快。因此,我们通常会用一个较小的系数来乘以我们的随机数。

神经网络理论与优化

典型的高偏差的场景,以这种方式进行分类时,明显会表现出欠拟合的状态。此时,说明训练不够充分

典型的高方差的场景。很明显,该模型对于训练样本过于拟合,对于真实场景不具备很好的扩展性,此时,一种常见的方法是扩大训练样本 。那么说明对于训练集,表现的性能很好,但是在验证集中性能并不好。 通常而言,这种场景中是由于对训练集过度拟合造成的。此时,我们称之为高方差。

在解决问题之前,我们首先需要判断当前情况下是否存在高偏差。

如果的确偏差很大,对训练集都不能很好的拟合时,我们通常可以考虑以下思路:

-1. 采用更大的网络 2. 训练更长的时间 3. 换一个新的网络结构 .

通过这些方面的反复试验,首先要保证其偏差降低到一定程度后,再继续后续过程。 当偏差降低到一个可接受的值时,我们将继续考虑其方差的问题。 此时,我们要查看模型在验证集上的性能,如果模型在验证集上表现出的性能并不足够好,我们通常可以考虑一下思路:

-1. 使用更多的数据进行训练 2. 正则化 3. 换一个新的网络结构 .

最终,我们的目标就是通过不断的调试、试验来找出一个具有较低偏差、较低方差的模型。

正则化方式:L1,L2,dropout

对于一个新的数据集的预处理的步骤:1 设计出所要解决问题的维度和形状 2 reshape 数据集,使每个例子成为一个向量大小 3 标准化归一化数据

对于minibatch size: 太小: 没有充分利用矩阵计算的library和硬件的整合的快速计算 ;太大: 更新权重和偏向不够频繁

而当我们是MiniBatch梯度下降法时,由于每次迭代过程中仅仅是针对一小部分数据进行迭代,所以不能保证每次迭代过程中代价函数都是下降的。但是其整体趋势是不断下降的;当batch-size=样本数量m时:该方法实际为Batch梯度下降法。此时,每个Batch为全量的数据集。当batch-size=1时:该方法实际为随机梯度下降法。此时,每个Batch为一个样本。

对于学习率lambda 如果学习率太大, 可能造成越走越高, 跳过局部最低点 ;太小, 学习可能太慢

神经网络难以训练:

神经网络结构: 层数, 每层神经元个数多少

初始化w和b的方法

Cost函数选择

Regularization: L1, L2

Sigmoid输出还是Softmax?

使用Droput?

训练集大小

mini-batch size

学习率(learning rate): η

Regularization parameter: λ

CNN的优点:

用CNN大大减少了参数数量, 用dropout减少了overfitting

用Rectified Linear Units(线性整流函数)代替了sigmoid, 避免了overfitting, 不同层学习率差别大的问题

用GPU计算更快, 每次更新较少, 但是可以训练很多次

第一步:对输入做卷积操作得到输出

第二步:对上面的线性响应做一些非线性的变换

第三步:使用池化函数来修正输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐