神经网络和深度学习——浅层神经网路
这一部分开始正式步入神经网络学习,要稍微细致一些,基础细节理解越深入,后面学习越顺畅。
3.1 神经网络概览
该节主要对比神经网络和逻辑回归,给出神经网络的基本介绍以及个别符号表示。
圆括号上标表示单个样本,中括号上标表示神经网络的层数。
神经网络其实就是重复逻辑回归的计算过程。
3.2 神经网络表示
该节展示了一个双层神经网络(输入层算作0层,不计数),注意都用向量化形式表示,参数W和b维数由当前层单元数以及上一层单元数确定。
3.3 计算神经网络的输出
该节介绍了给定一个特征向量X,如何计算一个双层神经网络的输出。
对于隐藏层中每一个节点来说,就是做一次逻辑回归的变换。
这里看起来很复杂,其实主要注意两点:
- 一是符号标记,右上标表示层数,右下标表示第几个单元。
- 二是向量化的实现。
对于单个样本的情况,各参数维度:
- W:当前层单元数 x 上一层单元数
- b:当前层单元数 x 1
- z:当前层单元数 x 1
- a:保持与同层z一致
3.4 多个例子中的向量化
该节给出多个训练样本情况下的向量化,和上一节基本没区别,只是x变为X,由向量变成矩阵。
3.5 向量化实现的解释
该节直观地解释了对于多个样本的情况,向量化方法的正确性,本质上就是线性代数的相关运算规则,了解即可。
3.6 激活函数
该节介绍了几种常见的激活函数,并分析了利弊。在机器学习网课中,神经网络部分使用的是sigmoid函数,而现在几乎已经不再用,被tanh函数完美替代。
sigmoid函数和tanh函数都有一个缺点:z非常大或非常小时,函数斜率很小接近0,会拖慢梯度下降算法。
四种激活函数:
- sigmoid函数:几乎不用,除非是用在二分类问题的输出层
- tanh函数:sigmoid函数的替代品,根据实际情况选择
- ReLU线性修正单元:目前最常用,尤其是隐藏层
- 泄漏的ReLU线性修正单元:一般不用,根据实际情况选择
目前最普遍的是使用Relu线性修正单元,他能保证大部分z的情况都有一个不接近0的导数值,也能保证学习的速率。
3.7 为什么需要非线性激活函数?
因为如果隐藏层使用线性的或者不使用激活函数,那么神经网络实际上就变成了逻辑回归(输出层也不用则就是线性回归)
只有在回归问题下输出层才可能使用到线性激活函数,隐藏层几乎是不会使用的。
3.8 激活函数的导数
该节就是利用微积分知识对四种激活函数求导,比较基础。
sigmoid函数:
tanh函数:
ReLU函数:
3.9 神经网路的梯度下降法
该节给出了正向传播以及反向传播的计算公式,之前在机器学习网课中一直不明白为什么,这里结合一下上一周逻辑回归的内容就可以知道,其实反向传播这几个公式就是链式求导的过程。只要抓住链式求导,一步一步往前推,就能比较好理解,比较复杂的还是在于向量化过程。
3.10 (选修)直观理解反向传播
该节给出反向传播公式的详细推导,正如上节所说,充分利用链式法则,结合矩阵运算定义,实现反向传播。
上图对应单个样本的情况,利用链式求导即可写出每一个偏导数,注意每个变量的维度,该转置的地方要转置。
上图对应m个样本的情况,向量化实现即可。
3.11 随机初始化
该节介绍了随机初始化,也就是在进行正向传播之前,要给W和b一个初始值,而这个W值不能为全0,如果是全0,那么整个的迭代每个隐藏单元都是一致的,没有意义。
- W值初始化为一个比较小的随机数,便于激活函数使用
- b值初始化为全0即可