乐趣区

关于深度学习:深度学习教程-深层神经网络

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/35
  • 本文地址:http://www.showmeai.tech/article-detail/215
  • 申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容


本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在 这里 查看。

引言

在 ShowMeAI 前一篇文章 浅层神经网络 中咱们对以下内容进行了介绍:

  • 神经网络的根本构造(输出层,暗藏层和输入层)。
  • 浅层神经网络前向流传和反向流传过程。
  • 神经网络参数的梯度降落优化。
  • 不同的激活函数的优缺点及非线性的起因。
  • 神经网络参数随机初始化形式

本篇内容咱们将探讨 深层神经网络

1. 深层神经网络

咱们在后面提到了浅层神经网络,深层神经网络其实就是蕴含更多隐层的神经网络。下图别离列举了不同深度的神经网络模型构造:

咱们会参考「隐层个数」和「输入层」对齐命名。如上图逻辑回归能够叫做1 layer NN,单隐层神经网络能够叫做2 layer NN,2 个隐层的神经网络叫做3 layer NN,以此类推。所以当咱们提到L layer NN,指的是蕴含 \(L-1\) 个隐层的神经网络。

上面咱们来理解一下神经网络的一些标记写法。以如下图的 4 层神经网络为例:

① 总层数用 \(L\) 示意,\(L=4\)

  • 输出层是第 \(0\) 层,输入层是第 \(L\) 层

② \(n^{[l]}\) 示意第 \(l\) 层蕴含的单元个数,\(l=0,1,\cdots,L\)

  • 下图模型中,\(n^{[0]}=n_x=3\),示意三个输出特色 \(x_1\)、\(x_2\)、\(x_3\)
  • 下图模型中 \(n^{[1]}=5\),\(n^{[2]}=5\),\(n^{[3]}=3\),\(n^{[4]}=n^{[L]}=1\)

③ 第 \(l\) 层的激活函数输入用 \(a^{[l]}\) 示意,\(a^{[l]}=g^{[l]}(z^{[l]})\)

④ \(W^{[l]}\) 示意第 \(l\) 层的权重,用于计算 \(z^{[l]}\)

⑤ 输出 \(x\) 记为 \(a^{[0]}\)

⑥ 输入层 \(\hat y\) 记为 \(a^{[L]}\)

留神,\(a^{[l]}\) 和 \(W^{[l]}\) 中的上标 \(l\) 都是从 1 开始的,\(l=1,\cdots,L\)。

2. 深层神经网络前向运算

上面咱们来推导一下深层神经网络的前向流传计算过程。仍旧是下面提到的 4 层神经网络,咱们以其为例来做解说。

2.1 单个样本的计算

对于单个样本,咱们有:

2.2 m 个样本的批量计算

对于 \(m\) 个训练样本的状况,咱们以向量化矩阵模式来并行计算:

以此类推,对于第 \(l\) 层,其前向流传过程的 \(Z^{[l]}\) 和 \(A^{[l]}\) 能够示意为:

$$
Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
$$

$$
A^{[l]}=g^{[l]}(Z^{[l]})
$$

其中 \(l=1,\cdots,L\)

3. 向量化状态下的矩阵维度

在单个训练样本的场景下,输出 \(x\) 的维度是 \((n^{[0]},1)\) 神经网络的参数 \(W^{[l]}\) 和 \(b^{[l]}\) 的维度别离是:

  • \(W^{[l]}: (n^{[l]},n^{[l-1]})\)
  • \(b^{[l]}: (n^{[l]},1)\)

其中,

  • \(l=1,\cdots,L\)
  • \(n^{[l]}\) 和 \(n^{[l-1]}\) 别离示意第 \(l\) 层和 \(l-1\) 层的所含单元个数
  • \(n^{[0]}=n_x\),示意输出层特色数目

对应的 反向流传 过程中的 \(dW^{[l]}\) 和 \(db^{[l]}\) 的维度别离是:

  • \(dW^{[l]}:\ (n^{[l]},n^{[l-1]})\)
  • \(db^{[l]}:\ (n^{[l]},1)\)
  • 留神到,\(W^{[l]}\) 与 \(dW^{[l]}\) 维度雷同,\(b^{[l]}\) 与 \(db^{[l]}\) 维度雷同。这很容易了解。

正向流传过程中的 \(z^{[l]}\) 和 \(a^{[l]}\) 的维度别离是

  • \(z^{[l]}:\ (n^{[l]},1)\)
  • \(a^{[l]}:\ (n^{[l]},1)\)
  • \(z^{[l]}\) 和 \(a^{[l]}\) 的维度是一样的,且 \(dz^{[l]}\) 和 \(da^{[l]}\) 的维度均与 \(z^{[l]}\) 和 \(a^{[l]}\) 的维度统一。

对于 \(m\) 个训练样本,输出矩阵 \(X\) 的维度是 \((n^{[0]},m)\)。须要留神的是 \(W^{[l]}\) 和 \(b^{[l]}\) 的维度与只有单个样本是统一的:

  • \(W^{[l]}:\ (n^{[l]},n^{[l-1]})\)
  • \(b^{[l]}:\ (n^{[l]},1)\)

只不过在运算 \(Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\) 中,\(b^{[l]}\) 会被当成 \((n^{[l]},m)\) 矩阵进行运算,这是基于 python numpy 的播送个性,且 \(b^{[l]}\) 每一列向量都是一样的。\(dW^{[l]}\) 和 \(db^{[l]}\) 的维度别离与 \(W^{[l]}\) 和 \(b^{[l]}\) 的雷同。

不过,\(Z^{[l]}\) 和 \(A^{[l]}\) 的维度产生了变动:

  • \(Z^{[l]}:\ (n^{[l]},m)\)
  • \(A^{[l]}:\ (n^{[l]},m)\)
  • \(dZ^{[l]}\) 和 \(dA^{[l]}\) 的维度别离与 \(Z^{[l]}\) 和 \(A^{[l]}\) 的雷同。

4. 为什么须要深度网络

当今大家看到的很多 AI 智能场景背地都是微小的神经网络在撑持,弱小能力很大一部分来源于神经网络足够“深”,也就是说随着网络层数增多,神经网络就更加简单参数更多,学习能力也更强。上面是一些典型的场景例子阐明。

4.1 人脸识别例子

如下图所示的人脸识别场景,训练失去的神经网络,每一层的作用有差异:

  • 第一层所做的事就是从原始图片中提取出 人脸的轮廓与边缘 ,即 边缘检测。这样每个神经元失去的是一些边缘信息。
  • 第二层所做的事件就是 将前一层的边缘进行组合 ,组合成 人脸一些部分特色,比方眼睛、鼻子、嘴巴等。
  • 后续档次逐层把这些 部分特色组合起来,交融成人脸的模样。

能够看出,随着层数由浅到深,神经网络提取的特色也是 从边缘到部分特色到整体,由简略到简单。暗藏层越多,可能提取的特色就越丰盛、越简单,模型的准确率也可能会随之越高。(具体的人脸识别原理能够查看 ShowMeAI 的文章 CNN 利用:人脸识别和神经格调转换

4.2 语音辨认例子

语音辨认模型也是相似的情理:

  • 浅层的神经元可能检测一些简略的音调
  • 较深的神经元可能检测出根本的音素
  • 更深的神经元就可能检测出单词信息
  • 网络足够深的话,还能对短语、句子进行检测

神经网络从浅到深,提取的特色从简略到简单。特色复杂度与神经网络层数成正相干。特色越来越简单,表达能力和性能也越强。(具体的语音辨认原理常识能够查看 ShowMeAI 的文章 Seq2seq 序列模型和注意力机制

4.3 深度网络其余劣势

除学习能力与特征提取强度之外,深层网络还有另外一个长处,就是可能缩小神经元个数,从而缩小计算量。

上面有一个例子,应用电路实践,计算逻辑输入:

$$
y=x_1\oplus x_2\oplus x_3\oplus\cdots\oplus x_n
$$

  • 下面的计算表达式中,\(\oplus\) 示意「异或」操作。

对于这个逻辑运算,如果应用深度网络实现,每层将前一层的两两单元进行异或,最初到一个输入,如下图右边所示。

这样,整个深度网络的层数是 \(log_2(n)\) (不蕴含输出层)。总共应用的神经元个数为:

$$
1+2+\cdots+2^{log_2(n)-1}=1\cdot\frac{1-2^{log_2(n)}}{1-2}=2^{log_2(n)}-1=n-1
$$

可见,输出个数是 \(n\),这种深层网络所需的神经元个数仅仅是 \(n-1\) 个。

如果不必深层网络,仅仅应用单个暗藏层,如上右图所示,因为蕴含了所有的逻辑位(0 和 1),那么须要的神经元个数 \(O(2^n)\) 是指数级别的大小。

对于其余场景和问题也一样,解决同样的逻辑问题,深层网络所需的神经元个数比浅层网络要少很多。这也是深层神经网络的长处之一。

只管深度学习有着十分显著的劣势,吴恩达老师还是倡议对理论问题进行建模时,尽量先抉择层数少的神经网络模型,这也合乎奥卡姆剃刀定律(Occam’s Razor)。对于比较复杂的问题,再应用较深的神经网络模型。

5. 构建深度网络单元块

上面用流程块图来解释神经网络前向流传和反向流传过程。

如图所示,对于第 \(l\) 层来说,前向流传 过程中,咱们有:

  • 输出:\(a^{[l-1]} \)
  • 输入:\(a^{[l]} \)
  • 参数:\(W^{[l]}\)、\(b^{[l]}\)
  • 缓存变量:\(z^{[l]} \)

反向流传 过程中:

  • 输出:\(da^{[l]} \)
  • 输入:\(da^{[l-1]} \)、\(dW^{[l]} \)、\(db^{[l]}\)
  • 参数:\(W^{[l]}\)、\(b^{[l]}\)

下面是第 \(l\) 层的流程块图,对于神经网络所有层,整体的流程块图前向流传过程和反向流传过程如下所示:

6. 前向流传与反向流传

咱们持续接着上一部分流程块图的内容,推导神经网络正向流传过程和反向流传过程的具体表达式。

6.1 前向流传过程

令层数为第 \(l\) 层,输出是 \(a^{[l-1]}\),输入是 \(a^{[l]}\),缓存变量是 \(z^{[l]}\)。其表达式如下:

$$
z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}
$$

$$
a^{[l]}=g^{[l]}(z^{[l]})
$$

\(m\) 个训练样本 的状态下,向量化 模式为:

$$
Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
$$

$$
A^{[l]}=g^{[l]}(Z^{[l]})
$$

6.2 反向流传过程

输出是 \(da^{[l]}\),输入是 \(da^{[l-1]}\)、\(dW^{[l]}\)、\(db^{[l]}\)。其表达式如下:

$$
dz^{[l]}=da^{[l]}\ast g^{[l]\prime}(z^{[l]})
$$

$$
dW^{[l]}=dz^{[l]}\cdot a^{[l-1]}
$$

$$
db^{[l]}=dz^{[l]}
$$

$$
da^{[l-1]}=W^{[l]T}\cdot dz^{[l]}
$$

由上述第四个表达式可得 \(da^{[l]}=W^{[l+1]T}\cdot dz^{[l+1]}\),将 \(da^{[l]}\) 代入第一个表达式中能够失去:

$$
dz^{[l]}=W^{[l+1]T}\cdot dz^{[l+1]}\ast g^{[l]\prime}(z^{[l]})
$$

该式十分重要,反映了 \(dz^{[l+1]}\) 与 \(dz^{[l]}\) 的递推关系。

\(m\) 个训练样本 的状态下,向量化 模式为:

$$
d Z^{[l]}=d A^{[l]}\ast g^{[l]\prime} (Z^{[l]})
$$

$$
dW^{[l]}=\frac1mdZ^{[l]}\cdot A^{[l-1]T}
$$

$$
db^{[l]}=\frac1mnp.sum(dZ^{[l]},axis=1,keepdim=True)
$$

$$
dA^{[l-1]}=W^{[l]T}\cdot dZ^{[l]}
$$

$$
dZ^{[l]}=W^{[l+1]T}\cdot dZ^{[l+1]}\ast g^{[l]\prime}(Z^{[l]})
$$

7. 参数与超参数

神经网络中有两个大家要重点辨别的概念:参数 (parameters) 和超参数(hyperparameters)。

  • 神经网络中的参数就是咱们相熟的 \(W^{[l]}\) 和 \(b^{[l]}\)。
  • 神经网络的超参数是例如学习率 \(\alpha\),训练迭代次数 \(N\),神经网络层数 \(L\),各层神经元个数 \(n^{[l]}\),激活函数 \(g(z)\) 等。
  • 之所以叫做超参数,是因为它们须要提前敲定,而且它们会决定参数 \(W^{[l]}\) 和 \(b^{[l]}\) 的值。

如何设置最优的超参数是一个比拟艰难的、须要教训常识的问题。通常的做法是抉择超参数肯定范畴内的值,别离代入神经网络进行训练,测试 cost function 随着迭代次数减少的变动,依据后果抉择 cost function 最小时对应的超参数值。这相似于机器学习中的试验验证的办法。(对于机器学习的模型评估详见 ShowMeAI 文章 图解机器学习 | 模型评估办法与准则)

8. 神经网络 vs 人脑

神经网络跟人脑机制到底有什么分割呢?到底有多少的类似水平?

咱们后面看到神经网络实际上能够分成两个局部:前向流传 过程和 反向流传 过程。神经网络的每个神经元采纳激活函数的形式,相似于感知机模型。这种模型与人脑神经元是相似的,然而一种十分简化的人脑神经元模型。

人脑神经元可分为树突、细胞体、轴突三局部。树突接管外界电刺激信号(类比神经网络中神经元输出),传递给细胞体进行解决(类比神经网络中神经元激活函数运算),最初由轴突传递给下一个神经元(类比神经网络中神经元输入)。

人脑神经元的构造和解决形式要简单的多,神经网络模型只是十分简化的模型

人脑如何进行学习?是否也是通过反向流传和梯度降落算法当初还不分明,可能会更加简单。这是值得生物学家摸索的事件。

参考资料

  • 图解机器学习 | 模型评估办法与准则

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读

举荐文章

  • 深度学习教程 | 深度学习概论
  • 深度学习教程 | 神经网络根底
  • 深度学习教程 | 浅层神经网络
  • 深度学习教程 | 深层神经网络
  • 深度学习教程 | 深度学习的实用层面
  • 深度学习教程 | 神经网络优化算法
  • 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
  • 深度学习教程 | AI 利用实际策略(上)
  • 深度学习教程 | AI 利用实际策略(下)
  • 深度学习教程 | 卷积神经网络解读
  • 深度学习教程 | 经典 CNN 网络实例详解
  • 深度学习教程 | CNN 利用:指标检测
  • 深度学习教程 | CNN 利用:人脸识别和神经格调转换
  • 深度学习教程 | 序列模型与 RNN 网络
  • 深度学习教程 | 自然语言解决与词嵌入
  • 深度学习教程 | Seq2seq 序列模型和注意力机制

退出移动版