【吴恩达 Deep Learning】 第一课 Week 3 学习笔记

第一课 week3

3.1 神经网络概览

使用方括号上标 [ i ] ^{[i]} [i] 表示对应的层。

在神经网络中也有反向计算。

在这里插入图片描述

3.2 神经网络表示

输入层,隐藏层,输出层。

计算层数的时候不考虑输入层,将其称之为第 0 0 0 层。

使用 a [ 0 ] a^{[0]} a[0] 来表示输入特征,即 x x x ,其中 a a a 表示激活的意思。

隐藏层可以表示为 a [ 1 ] a^{[1]} a[1] ,隐藏层的第一个节点可以表示为 a 1 [ 1 ] a^{[1]}_1 a1[1] a [ 1 ] a^{[1]} a[1] 是一个 4×1 的矩阵。

在这里插入图片描述

在这个例子中我们会看到是 w [ 1 ] w^{[1]} w[1] 一个4×3的矩阵,而 b [ 1 ] b^{[1]} b[1] 是一个4×1的向量,第一个数字4源自于我们有四个结点或隐藏层单元,然后数字3源自于这里有三个输入特征,我们之后会更加详细地讨论这些矩阵的维数。相似的输出层也有一些与之关联的参数,从维数上来看, w [ 2 ] w^{[2]} w[2] b [ 2 ] b^{[2]} b[2] 的规模分别是1×4以及1×1。1×4是因为隐藏层有四个隐藏层单元而输出层只有一个单元。

3.3 计算神经网络的输出

用圆圈表示神经网络的计算单元,逻辑回归的计算有两个步骤,首先计算出 z = w T x + b z=w^Tx+b z=wTx+b,然后以 s i g m o i d sigmoid sigmoid 函数为激活函数计算 a = σ ( z ) a=\sigma(z) a=σ(z)

隐藏层的第一个神经元和第二个神经元计算如下:

在这里插入图片描述

将隐藏层的计算结果列出来,如果执行神经网络的程序,用for循环来做这些看起来真的很低效。所以接下来我们要做的就是把这四个等式向量化。向量化的过程是将神经网络中的一层神经元参数纵向堆叠起来。

在这里插入图片描述

在这里插入图片描述

下图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就相当于一个逻辑回归的计算单元。当有一个包含一层隐藏层的神经网络,需要去实现以计算得到输出的是右边的四个等式。计算出隐藏层的四个逻辑回归单元和整个隐藏层的输出结果,可以看成向量化的计算过程,如果编程实现需要的也只是这四行代码。

在这里插入图片描述

3.4 多个例子中的向量化

逻辑回归是将各个训练样本组合成矩阵,对矩阵的各列进行计算。神经网络是通过对逻辑回归中的等式简单的变形,让神经网络计算出输出值。这种计算是所有的训练样本同时进行的,以下是实现它具体的步骤:

注: a [ 2 ] ( i ) a^{[2](i)} a[2](i) 中的 ( i ) (i) (i) 指的是训练样本 i i i

在这里插入图片描述

矩阵横向对应了不同的训练样本,矩阵竖向对应神经网络里的不同节点。
在这里插入图片描述

3.5 向量化实现的解释

在这里插入图片描述
在这里插入图片描述

3.6 激活函数

g ( z ) g(z) g(z) 可以是非线性函数,不一定非是 σ \sigma σ 函数。

t a n h tanh tanh 函数是 s i g m o i d sigmoid sigmoid 的向下平移和伸缩后的结果,介于 ( − 1 , 1 ) (-1,1) (1,1)使用 t a n h tanh tanh 效果总是优于 s i g m o i d sigmoid sigmoid 函数,因为 t a n h tanh tanh 值域在 ( − 1 , 1 ) (-1,1) (1,1),其均值是更接近 0 0 0 的。在训练一个算法模型时,如果使用 t a n h tanh tanh 代替 s i g m o i d sigmoid sigmoid 函数,会产生类似数据中心化的效果,使数据均值更接近 0 0 0 而不是 0.5 0.5 0.5,这可能便于下一层去学习。

在二元分类问题中,如果期望输出是介于 ( 0 , 1 ) (0,1) (0,1),则会使用 s i g m o i d sigmoid sigmoid 函数作为输出层。

t a n h tanh tanh 函数和 s i g m o i d sigmoid sigmoid 函数都有一个缺点,当 z z z 非常大或非常小时,导数的梯度或说该函数的斜率会非常小(接近0)。

因此可以选择使用 R e L U ReLU ReLU 函数,在 z = 0 z=0 z=0 时不可导,导数取 0 / 1 0 / 1 0/1都可以。

在这里插入图片描述
在这里插入图片描述

3.7 为什么使用非线性激活函数

使用线性激活函数时,神经网络只是把输入线性组合之后再输出。

除了与压缩有关的非常特殊的情况,线性激活函数的使用非常少见。
在这里插入图片描述

3.8 激活函数的导数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.9 神经网络梯度下降算法

单隐层神经网络有参数 w [ 1 ] 、 b [ 1 ] 、 w [ 2 ] 、 b [ 2 ] w^{[1]}、b^{[1]}、w^{[2]}、b^{[2]} w[1]b[1]w[2]b[2],还有 n x n_x nx ,有时候使用 n x n_x nx n [ 0 ] n^{[0]} n[0] 表示输入特征的个数, n [ 1 ] n^{[1]} n[1] 表示隐藏单元个数, n [ 2 ] n^{[2]} n[2] 表示输出单元个数,在之前的例子中, n [ 2 ] = 1 n^{[2]}=1 n[2]=1

矩阵 w [ 1 ] w^{[1]} w[1] 的维度就是 ( n [ 1 ] , n [ 0 ] ) (n^{[1]},n^{[0]}) (n[1],n[0]) , $b^{[1]} $就是 n [ 1 ] n^{[1]} n[1] 维向量,可以写成 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1) 的列向量。 矩阵 w [ 2 ] w^{[2]} w[2] 的维度就是 ( n [ 2 ] , n [ 0 ] ) (n^{[2]},n^{[0]}) (n[2],n[0]) , $b^{[2]} $是 n [ 2 ] n^{[2]} n[2] 维向量。

在这里插入图片描述

反向传播过程对所有样本进行向量化, Y Y Y 1 × m 1×m 1×m 的矩阵。

axis=1表示水平相加求和,keepdims是防止python输出秩为1的数组 ( n , ) (n,) (n,),加上这个确保阵矩阵这个向量输出的维度为 ( n , 1 ) (n,1) (n,1)

d Z [ 1 ] = W [ 2 ] T d Z [ 2 ] × g [ 1 ] ′ ( Z [ 1 ] ) dZ^{[1]}=W^{[2]T}dZ^{[2]} × g^{[1]'}(Z^{[1]}) dZ[1]=W[2]TdZ[2]×g[1](Z[1])中,前后的维度都是 ( n [ 1 ] , m ) (n^{[1]},m) (n[1],m),计算过程相当于逐个元素求积。

在这里插入图片描述

3.10 直观理解反向传播

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.11 随机初始化

对于逻辑回归,把权重初始化为 0 0 0 是可以的。但是对于一个神经网络,如果将权重或者参数都初始化为 0 0 0,那么梯度下降将不会起作用。

全初始化为 0 0 0 会导致隐藏单元 a 1 [ 1 ] a_1^{[1]} a1[1] a 2 [ 1 ] a_2^{[1]} a2[1] 是完全对称的(completely symmetric),经过每次训练的迭代,这两个隐含单元仍然是计算完全一样的函数。因此 d W dW dW 的每一行内容会变成相同的。

我们需要不同的隐藏单元去计算不同的函数,因此需要随机初始化所有参数。

在这里插入图片描述

随机初始化后乘上一个非常小的数,而不是非常大的。乘上一个较大的数可能导致 z z z 落在 t a n h tanh tanh s i g m o i d sigmoid sigmoid 函数较为平缓的部分,梯度的斜率非常小,梯度下降速度会非常慢。

训练较深的神经网络时,需要尝试0.01以外的数。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值