深度学习笔记(五)——神经网络和深度学习(深层神经网络)

1.深层神经网络

深层神经网络其实就是包含更多的隐藏层神经网络。下图分别列举了逻辑回归、1个隐藏层的神经网络、2个隐藏层的神经网络和5个隐藏层的神经网络它们的模型结构。

命名规则上,一般只参考隐藏层个数和输出层。例如,上图中的逻辑回归又叫1 layer NN,1个隐藏层的神经网络叫做2 layer NN,2个隐藏层的神经网络叫做3 layer NN,以此类推。如果是L-layer NN,则包含了L-1个隐藏层,最后的L层是输出层。

2.深层网络中的前向传播

对于第l层 ,其正向传播过程的Z^{[l]}A^{[l]}可以表示为(此处是m个样本向量化的形式):

A^{[0]}也就是X。向量化也就是将所有训练样本写成列向量,从左到右叠起来。对上式采用for循环计算每层的激活函数等,并且层间计算无法避免使用for循环进行计算。

3.核对矩阵的维数

对于单个训练样本,输入x的维度是(n^{[0]},1),神经网络的参数W^{[l]}b^{[l]}的维度分别是:

                                                      $$\begin{aligned} W^{[l]}:(n^{[l]},n^{[l-1]}) \end{aligned} $$

                                                          b^{[l]}:(n^{[l]},1)

其中,l=1,2,...,L,n^{[l]}n^{[l-1]}分别是第l层和第l-1层的神经元个数。n^{[0]}=n_{x},表示输入层特征个数。

反向传播过程中,dW^{[l]}db^{[l]}的维度分别与W^{[l]}b^{[l]}相同。

正向传播过程中,z^{[l]}a^{[l]}的维度均为(n^{[l]},1),且dz^{[l]}da^{[l]}的维度分别与z^{[l]}a^{[l]}相同。

对于m个样本,输入矩阵X的维度是(n^{[0]},m)。需要注意的是W^{[l]}b^{[l]}的维度与只有单个样本是相同的。但在运算Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}中,由于python的广播性质且b^{[l]}的每一列都是一样的,b^{[l]}会被当作(n^{[0]},m)矩阵进行运算。

dW^{[l]}db^{[l]}的维度分别与W^{[l]}b^{[l]}相同。Z^{[l]}A^{[l]}的维度均为(n^{[l]},m),且dZ^{[l]}dA^{[l]}的维度分别与Z^{[l]}A^{[l]}相同。

4.为什么使用深层表示

下图为人脸识别的例子。经过训练,神经网络第一层从原始图片中提取出人脸的轮廓与边缘,即边缘检测。每个神经元得到一些边缘信息。第二层将前一层的边缘进行组合,组合成人脸的一些局部特征,比如眼睛、鼻子、嘴巴等。再往后面,将这些局部特征组合起来,融合成人脸的模样。随着层数由浅到深,神经网络提取的特征也是从边缘到局部特征再到整体,由简单到复杂。可见,如果隐藏层足够多,那么能够提取的特征就越丰富、越复杂,模型的准确率就会越高。

语音识别模型也是这个道理。浅层的神经元能够检测一些简单的音调,然后较深的神经元能够检测出基本的音素,更深的神经元就能够检测出单词信息。如果网络够深,还能对短语、句子进行检测。神经网络从左到右,神经元提取的特征从简单到复杂。特征复杂度与神经网络层数成正相关。特征越来越复杂,功能也越来越强大。
下面的例子是使用电路理论,计算逻辑输出:

y=x_{1} \oplus x_{2} \oplus x_{3} \oplus...\oplus x_{n}\oplus表示异或。如果使用深度网络,深度网络的结构是每层将前一层的两两单元进行异或,到最后是一个输出,神经网络层数为log_{2}(n),不包含输入层。层数被计为隐藏层数+1。输入层不计在层数内,输出层需要计算。总共使用n-1个神经元。

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

如果不用深层网络,仅仅使用单个隐藏层,那么需要的神经元个数将是指数级别那么大。需要2^{n-1}个神经元。

处理同一逻辑问题,深层网络所需的神经元个数比浅层网络要少很多。这也是深层神经网络的优点之一。但是,对实际问题进行建模时,尽量先选择层数少的神经网络模型,对于比较复杂的问题,再使用较深的神经网络模型。

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]}

神经网络所有层,整体的流程块图正向传播过程和反向传播过程如下所示:

6.前向和反向传播

首先是正向传播过程,令层数为第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]})

反向传播过程,输入是da^{[l]},输出是da^{[l-1]}dw^{[l]}db^{[l]}。其表达式如下:

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

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

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

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

由上述四个公式可以推出:

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

该式反映了dz^{[l+1]}dz^{[l]}的递推关系。

m个训练样本,向量化形式为:

                                                                dZ^{[l]}=dA^{[l]}\ast g^{[l]'}(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]'}(Z^{[l]})

最后一点细节:

                                                              da^{[l]}=-\frac{y}{a}+\frac{(1-y)}{(1-a)}

                     \small dA^{[l]}=(-\frac{y^{(1)}}{a^{(1)}}+\frac{(1-y^{(1)})}{(1-a^{(1)})})+(-\frac{y^{(2)}}{a^{(2)}}+\frac{(1-y^{(2)})}{(1-a^{(2)})})+...+(-\frac{y^{(m)}}{a^{(m)}}+\frac{(1-y^{(m)})}{(1-a^{(m)})})

7.参数VS超参数

该部分介绍神经网络中的参数(parameters)和超参数(hyperparameters)的概念。

神经网络中的参数就是W^{[l]}b^{[l]}。而超参数则是例如学习速率\small \alpha,训练迭代次数N,神经网络层数L,各层神经元个数\small n^{[l]},激活函数\small g(z)等。之所以叫做超参数的原因是它们决定了参数W^{[l]}b^{[l]}的值。

如何设置最优的超参数是一个比较困难的、需要经验知识的问题。通常的做法是选择超参数一定范围内的值,分别代入神经网络进行训练,测试cost function随着迭代次数增加的变化,根据结果选择cost function最小时对应的超参数值。这类似于validation的方法。

8.这和大脑有什么关系?

神经网络实际上可以分成两个部分:正向传播过程和反向传播过程。神经网络的每个神经元采用激活函数的方式,类似于感知机模型。这种模型与人脑神经元是类似的,可以说是一种非常简化的人脑神经元模型。如下图所示,人脑神经元可分为树突、细胞体、轴突三部分。树突接收外界电刺激信号(类比神经网络中神经元输入),传递给细胞体进行处理(类比神经网络中神经元激活函数运算),最后由轴突传递给下一个神经元(类比神经网络中神经元输出)。

但人脑学习的机理至今尚未弄清楚,如今我们尽量减少人脑和深度学习工具的对比。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值