____tz_zs学习笔记

第三周 浅层神经网络

3.1 神经网络概览

本节课带你大概了解一下神经网络长什么样,以及流程。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.2 神经网络表示

这是一个双层神经网络,因为我们不把输入层看作一个标准的层。

“隐藏层”这个名字的含义是:在训练集中,这些中间节点的真正数值我们是不知道的,在训练集中你看不到他们的数值(训练集只有输入值和输出值),所谓的“隐藏层”仅仅只是表示你无法在训练集中看到。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.3 计算神经网络的输出

每个节点的计算

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

将同一层的计算向量化

向量化时的一条经验法则:当我们在一层中有不同的节点,那就纵向堆叠起来。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

·

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.4 多个例子中的向量化

多个训练样本正向传播过程的向量化

老师语:详细了解线性代数的细节在深度学习领域是很重要的,能帮助你快速正确的实现这些算法。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

横向堆叠起来,堆叠到矩阵各列里,构成大矩阵。

横向指标对应了不同的训练样本,竖向指标对应了神经网络里的不同节点。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.5 向量化实现的解释

本节课讲述了3.4中向量化的正确性

规律:如果将输入成列向量堆叠,那么在方程运算之后,你也能得到成列堆叠的输出。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

·

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.6 **函数

本节课帮助你对如何在你的网络里选择**函数有所理解。

tanh函数(或者叫双曲正切函数),在数学上,这实际上是σ函数平移后的版本。

tanh函数几乎在所有场合都比σ函数表现好,因为tanh函数输出介于-1和1之间**函数的平均值更接近0,使用tanh函数而不是σ函数也有类似数据中心化的效果。

老师说:几乎不使用σ函数了,tanh函数几乎在所有场合都更优越,一个例外场合是二元分类中的输出层,使用σ**函数作为输出层。

tanh函数和σ函数都有一个缺点是,如果z很大或者很小,那么导数的梯度或者说这个函数的斜率可能就很小,这样会拖慢梯度下降算法。

选择**函数的经验法则:如果输出值是0和1,在做二元分类,那么σ函数很适合作为输出层的**函数。然后其他单元都用ReLU,ReLU(修正线形单元)已经是**函数的默认选择了,当不确定隐藏层选什么**函数时,就用ReLU作为**函数。

ReLU的缺点:z为负时,导数等于0。

ReLU和带泄漏的ReLU好处在于,对于很多z空间,**函数的导数和0差很远。没有那种斜率接近0时,减慢学习速度的效应。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

·

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

深度学习的其中一个特点是:在建立神经网络时经常有很多不同的选择。(比如,隐藏单元数、**函数、初始化权重)


3.7 为什么需要非线性**函数?

如果使用线性**函数,或者没有**函数,那么无论有多少隐藏层,你一直在做的只是计算线性**函数。

因为两个线性组合的组合本身就是线性函数。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.8 **函数的导数

神经网络的反向传播时,需要计算**函数的斜率或者导数。

sigmoid**函数的导数

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


tanh**函数的导数

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


ReLU和带泄漏的ReLU**函数的导数

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)


3.9 神经网络的梯度下降法

本节课为梯度下降算法(反向传播)的具体实现,要能够正确的执行正向和反向传播运算,学会所需要的导数,学会用梯度下降法来学习神经网络的参数。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

下图为正向传播和反向传播的步骤及其公式,证明和推导过程将在下一节课学习。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

stackoverflow上关于keepdims的问答:what the role of keepdims in python


3.10 (选修)直观理解反向传播

下图为回顾logistic回归的梯度计算

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

神经网络反向传播

注意:1、这里和2.14节logistic回归梯度计算公式的区别是,2.14节的是单个参数w,这里的是大写的矩阵W。大写的矩阵W是单个的w成列堆叠成大矩阵后转置得到的。

2、实现反向传播有个技巧:确保矩阵的维度互相匹配。——这样就已经能消除很多bug了。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

回顾前面课程中前向传播的多样本向量化

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

反向传播的多样本过程的总结

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

初始化参数,不要全零,而是随机初始化,对于训练你的神经网络很重要。


3.11 随机初始化

如果你将所有W初始化为0,那么因为两个隐藏单元一开始就在做同样的计算,两个隐藏单元对输出单元的影响也一样大,那么在一次迭代后,同样的对称性依然存在,无论你迭代多少次,两个隐藏单元仍然在计算完全一样的函数。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

初始化参数一般都很小,如果W很大,那么可能一开始就落在z很大的区域,tanh函数或者sigmoid函数梯度的斜率很小,导致减慢学习速度。

吴恩达deeplearning.ai课程《神经网络和深度学习》____学习笔记(第三周)

·

相关文章: