Andrew Ng 深度学习笔记-01-week3-课程

一、专业词汇

 a hidden layer of the neural network   神经网络的隐藏层

 a single hidden layer     单隐藏神经网络

 activation function       **函数

 the linear activation function   线性**函数

 the identity activation function  恒等**函数      

 rectified linear unit        修正线性单元ReLU

 the leaky  ReLU            带泄露的ReLU

 number of hidden units  隐藏单元数

 initialize the weights       初始化权重

 w prime                          w'

 a sub gradient of the activation function g(Z)   **函数g(z)的次梯度

 gradient descent  working  梯度下降算法

 initialize the weights   初始化权重

 completely symmetric  完全对称

 partial derivative terms 偏导项

二、编程技巧

()表示是第几个样本

 [ ] 表示是处于第几层(layer)

第一层的a[1]用于第二层的输入:

Andrew Ng 深度学习笔记-01-week3-课程

 

 np.sum(dZ^[2],axis=1,keepdims=true):keepdims=true 开启,保证不会输出那些秩为1的数组

logistic 回归,可以将权重初始化为0;但将神经网络的各参数数组全部初始化为0,再使用梯度下降算法,将完全无效:

下面情况会导致两个(多个)隐藏单元计算一样的函数,不管进行多少次梯度下降,导致多个隐藏单元在此并没有真正的意义:

Andrew Ng 深度学习笔记-01-week3-课程

 

而我们需要的是通过不同的隐藏单元,去计算不同的函数,所以需要随机初始化所有参数:

通常将权重矩阵初始化成非常小的随机值(非常小的原因是将Z的值避开非常平缓的地方,不让其值过大或者过小,使的梯度下降更快,学习的更快):

当训练的神经网络很深时,可能要选择0.01以外的数

W^[1]=np.random.randn((2,2))*0.01

Andrew Ng 深度学习笔记-01-week3-课程

 

三、思维

在神经网络中,需要多次计算,反复计算z和a的值,最后计算loss函数

一个神经网络包括:输入层(input layer)表示第0层、隐藏层(hidden layer)有多个节点、 输出层(output layer)只有一个节点,输出预测值y^,一般不把输入层看作一个标准的层,隐藏层和输出层是带有参数的,隐藏层中包含w^[1] b^[1],输出层包含w^[2] b^[2],

在有监督学习中,可以看到输入和输出,在训练集中,看不到中间节点的真正数值

用a^[0]表示输入、a代表activations(**),意味着网络中不同层的值会传递给后面的层,即 输入层将x的值传递给隐藏层,隐藏层同样也会产生activations,将其记做a^[1],这里的a^[1]代表的是多维向量,在下面的例子中:

w^[1]是4*3的矩阵,4表示隐藏层中有4个节点,3表示有3个输入

b^[1]是4*1的矩阵

w^[2]是1*4的矩阵,1表示这一层有一个输出,4表示隐藏层中有4个节点

详细解释:

Andrew Ng 深度学习笔记-01-week3-课程

 

将四个等式向量化:

Andrew Ng 深度学习笔记-01-week3-课程

 

 

 

进一步得到:(在已知的单个训练样本中,计算神经网络的预测值)

 Andrew Ng 深度学习笔记-01-week3-课程

将不同训练样本向量化:

Andrew Ng 深度学习笔记-01-week3-课程

将双下标的进行横向堆叠:

针对A[1]:

              竖向扫描对应的不同的隐藏单元(不同的输入特征):

                 第一行第一个元素代表  第一个训练样本对应的第一个隐藏单元的**函数

                 第二行第一个元素代表  第一个训练样本对应的第二个隐藏单元的**函数

                 第三行第一个元素代表  第一个训练样本对应的第三个隐藏单元的**函数

                .............

              横向扫描对应不同的训练样本:

                第一行第二个元素代表   第二个训练样本对应的第一个隐藏单元的**函数

                第一行第m个元素代表    第m个训练样本对应的第一个隐藏单元的**函数

                .............

  左边即为在单个训练样本中实现正向传播算法:

Andrew Ng 深度学习笔记-01-week3-课程

 对几个样本进行正向传播计算:

为简化,将b的值设置为0

Andrew Ng 深度学习笔记-01-week3-课程

Andrew Ng 深度学习笔记-01-week3-课程

对于不同种类的**函数的选择,大部分可以尝试使用ReLU,但是具体的什么函数更加适合,可以在我们的保留交叉验证数据集和开发集上跑一跑,看看哪个参数效果更好,就用哪个:

非线性的**函数有:

sigmoid:

Andrew Ng 深度学习笔记-01-week3-课程

 

tanh():

Andrew Ng 深度学习笔记-01-week3-课程

 

tanh()的范围是-1到1,所以通过它得到的最终的结果的平均值更接近0,达到更佳的数据中心化的效果

在后续的例子中,除非结果是非0即1的二元分类的输出层的时候,输出层会选择sigmoid作为**函数,其他情况一般不会选择sigmoid

每一层(layer)的**函数可以不同,用[]上标加以区分

当z的值特别大或者特别小的时候,图像的斜率会接近于0,这样会拖慢梯度下降算法,更常用的是ReLU(默认的时候使用,或者不确定隐藏层用什么的时候使用),使用ReLU的好处在于:对于很多z空间,**函数的导数、斜率和0相差很远,在实践中使用ReLU能使我们的神经网络的学习速度更快

ReLU: 

Andrew Ng 深度学习笔记-01-week3-课程

 

the leaky  ReLU:

Andrew Ng 深度学习笔记-01-week3-课程

 

为何一定要用非线性函数:假如用线性函数,则最后的a^[2]只是把输入的线性组合再次输出,假如第一个隐藏层都用线性**函数,输出层用sigmoid,整个模型的复杂度和没有任何隐藏层的标准逻辑logistic回归是一样的。即线性隐层没有任何意义。

只有输出结果是一个实数的时候(比如房价),最后的输出层可以使用线性**函数,隐藏层里面必须使用非线性**函数

Andrew Ng 深度学习笔记-01-week3-课程

**函数的导数:

sigmoid:

 Andrew Ng 深度学习笔记-01-week3-课程

 

 tanh() :

Andrew Ng 深度学习笔记-01-week3-课程

 

ReLU::

Andrew Ng 深度学习笔记-01-week3-课程

 

 leaky ReLU:

等于0跟着谁是无关紧要的:

Andrew Ng 深度学习笔记-01-week3-课程

神经网络梯度下降:

Andrew Ng 深度学习笔记-01-week3-课程

神经网络的正向传播与反向传播:

Andrew Ng 深度学习笔记-01-week3-课程