01.神经网络和深度学习-浅层神经网络

浅层神经网络

3.1 神经网络的概览

image-20200822205231753

注意:左上角使用()来标记的话就是样本数据中的第几个数据,而使用【】来标记的话就是网络的第几层

3.2 神经网络的表示

image-20200822205747095

左边的x1,x2,x3表示神经网络的输入层a[0],而中间表示`隐藏层`a[1]是一个四维向量,因为中间的节点有4个(在训练的过程中是无法得到中间隐藏层的数据的,所以叫做隐藏层),最后的节点表示输出层a1

这是一个两层的神经网络(在计算神经网络的层数的时候,我们是不记录输入层的

在隐藏层拥有两个参数w[1]与b[1],其中w是一个(4*3)的向量,其中4是因为隐藏层有4个节点,而3是有三个输入特征;b2是一个(4*1)的向量,其中4是因为隐藏层有4个节点,而1是有1个b实数

在输出层也是有两个相关的参数w[2]与b[2],其中w是一个(1*4)的向量,其中1是因为输出层有1个节点,而4是隐藏层有四个节点

3.3 单个样本的计算神经网络的输出

基本的计算过程:

image-20200823110610152

通过向量化的方法我们可以:
Z 1 = W 1 ∗ X + b 1 Z^1=W^1*X+b^1 Z1=W1X+b1
最终的向量化过程就是:

image-20200823122118877

3.4 多个样本的神经网络的输出

image-20200824100421435

将多个样本一矩阵的方法来呈现,使用矩阵的形式来替换上面单个样本的式子

3.5 激活函数

sigmoid函数

image-20200626091721862

公式:image-20200626091823960

sigmoid函数的缺点:

1.饱和的神经元会"杀死"梯度,指离中心点较远的x处的导数接近于0,停止反向传播的学习过程:当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的(看图)

2.sigmoid的输出不是以0为中心,而是0.5,这样在求权重w的梯度时,梯度总是正或负的(如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的。这样在反向传播过程中要么都往正方向更新,要么都往负方向更新,导致有一种捆绑效果,使得收敛缓慢。)

3.指数计算耗时。

tanh函数

image-20200626091747896

公式:image-20200626091859158

优点:是一个函数值域在-1 和+1的激活函数,其均值更接近零

使用:tanh 函数在所有场合都优于 sigmoid 函数。
但有一个例外:在二分类的问题中,对于输出层,因为𝑦的值是 0 或 1,所以想让𝑦 ^的数值介于 0 和 1 之间,而不是在-1 和+1 之间。所以需要使用 sigmoid 激活函数,或者可以在隐藏层使用tanh函数,在输出层使用sigmoid函数(一个神经网络的不同层可以使用不同的激活函数

sigmoid 函数和 tanh 函数两者共同的缺点是,在𝑧特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度。

ReLu 函数
image-20200626093307959
Leaky Relu

image-20200626095038760

优点:

1.不需要进行浮点的四则运算,所以学习的速率比sigmoid以及tanh速度要快

2.,sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,而 Relu 和 Leaky ReLu 函数大于 0 部分都为常数,不会产生梯度弥散现象。(同时应该注意到的是,Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性,而 Leaky ReLu 不会有这问题)

选择激活函数的经验法则

如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。
这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当𝑧是负值的时候,导数等于 0。

sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合。
ReLu 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu 或者Leaky ReLu。

3.7 为什么需要非线性激活函数

如果使用线性激活函数的话,那么无论隐藏层有多少层,都是没有用的

如果你在隐藏层用线性激活函数,在输出层用 sigmoid 函数,那么这个模型的复杂度和没有任何隐藏层的标准 Logistic 回归是一样的

3.9 神经网络的梯度下降——反向传播

image-20200626103410059 image-20200626103436979

3.11 随机初始化参数

初始化为0的问题:于隐含单元开始计算同一个函数,
所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同的,即隐含单元仍是对称的。通过推导,两次、三次、无论多少次迭代,不管你训练网络多长时间,隐含单元仍然计算的是同样的函数。

一般将w设为一个接近于0的很小很小的随机数:

np.random.randn((1,2))*0.01

b可以初始化为0

第二门课 改善深层神经网络:超参数调试、 正则化以 及优化

第一周:深度学习的实践层面

1.1训练,验证,测试集

在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的 70%验证集,30%测试集,如果没有明确设置验证集,也可以按照 60%训练,20%验证和 20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。

但是当数据规模较大的时候(百万级),我们不太可能使用20%的数据进行测试,所以使用1万条数据即可,即1%

总结一下,在机器学习中,我们通常将样本分成训练集,验证集和测试集三部分,数据集规模相对较小,适用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的 20%或 10%。

1.2 偏差,方差

高偏差的情况:就是欠拟合:

image-20200718163639130

初始模型训练完成后,我首先要知道算法的
偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能。如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法

方差过高:过拟合:

image-20200718163712239

假定训练集误差是 1%,为了方便论证,假定验证集误差是 11%,可以看出训练集设置得非常好,而验证集设置相对较差,我们可能过度拟合了训练集,在某种程度上,验证集并没有充分利用交叉验证集的作用,像这种情况,我们称之为“高方差”。

1.4 正则化

正则化用于处理过拟合的情况:

image-20200718164846442

1.5 为什么正则化有利于预防过拟合呢

直观上理解就是如果正则化𝜆设置得足够大,权重矩阵𝑊被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。

总结一下,如果正则化参数变得很大,参数𝑊很小, 𝑧也会相对变小,此时忽略𝑏的影响,𝑧会相对变小,实际上,𝑧的取值范围很小,这个激活函数,也就是曲线函数𝑡𝑎𝑛ℎ会相对呈线性,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,并不是一个极复杂的高度非线性函数,不会发生过拟合。

第四门课 卷积神经网络

1.2 边缘检测示例

卷积操作通过卷积核来进行基础的边缘检测的内容

image-20200719152248123

为1的卷积核的列对应的图片左边比较亮,右边比较暗

右边的卷积核则是上面亮下面暗

1.4 卷积的基本操作

卷积:CNN实际上也就是一个不断提取特征,进行特征选择,然后进行分类的过程,卷积在CNN里,就是充当前排步兵,首先对原始图像进行特征提取。

CNN卷积神经网络的主要作用就是通过卷积以及池化来降低网络参数的数量级,再就是参数共享。观察发现,特征检测如垂直边缘检测如果适用于图片的某个区域,那么 它也可能适用于图片的其他区域(不需要将每一块区域都连接到后面的掩藏层上,因为有些特性是可以共用的)

一个典型的卷积神经网络通常有三层,一个是卷积层,我们常常用 Conv 来标注。上一个例子,我用的就是 CONV。还有两种常见类型的层,我们留在后两节课讲。一个是池化层,我们称之为 POOL。最后一个是全连接层,用 FC 表示

padding:在图像的最外面加一层,保证最边上的信息不会丢失

Strided :选择每次进行卷积操作所跨越的步长

1.6 三维卷积

一张图像是有RGB三个颜色通道,是三层,所以这里的卷积就是一个小的长方体在大的长方体中移动进行卷积,至于卷积核的每层是可以不一样的

1.9 池化层

经常使用池化层来缩减模型的大小,提高计算速度,同时提高
所提取特征的鲁棒性

最大池化:

image-20200719154634395

平均池化:选择平均值

最大池化比平均池化更常用。

image-20200719162501586

卷积变换后的输出大小计算方法

目标检测、特征点检测

使用方框标记所需要识别的物品在图中的位置,使用特征点标记眼睛等特征

滑动窗口目标检测算法也有很明显的缺点,就是计算成本太大s

为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层

滑动窗口法的卷积实现:所以该卷积操作的原理是我们不需要把输入图像分割成四个子集,分别执行前向传播,而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算,就像这里我们看到的这个 4 个 14×14 的方块一样。

1.滑窗法:使用一个小窗口遍历搜索整张图片,在每个位置上对滑窗内的图片做物体识别算法。不仅要搜索不同的位置,还要遍历不同的大小

2.候选区域算法:用分割不同区域的办法来识别潜在的物体。

  1. 首先将所有分割区域的外框加到候选区域列表中
  2. 基于相似度合并一些区域
  3. 将合并后的分割区域作为一个整体,跳到步骤1

通过自底向下的方法创建了越来越大的候选区域


  1. 2 ↩︎

  2. 1 ↩︎