Cousera ▶ Deep Learning ▶ 课程笔记 ▶ Week 3
Week 3
神经网络表示 NN Representation
-
输入层,输入单元x
-
隐藏层,进行神经网络内部的数据处理
-
输出层,用于输出估计值
-
“隐藏”的含义:这一层的节点的真实值并没有被观察,数据集中也没有相关表示
-
输入可以看作时原始(第0层)的**输出,一次可以表示成
-
隐藏层则是,隐藏层的每一个节点输出记为
-
输出层是,并有了
-
约定上述网络是一个两层网络(不计入输入层)
神经网络的计算输出 NN Output
-
实质上很像是对逻辑回归的多次重复
-
隐藏层节点输出,即l层的第i个节点的输出
-
对于给出的输入:
多训练实例向量化 Vectorizing
-
对于多个实例,**输出表示为,即第i个实例在第l层的**输出
-
对于多实例,将实例按列排列,即每行为一种特征,每列为一个实例
-
每一层的计算过程的向量化表示:
- ,对于具有n个特征m个实例,对当前第i层,有s个节点,W是一个的矩阵,X是一个的矩阵,b是一个的矩阵(利用python的广播机制扩展),Z是一个的矩阵,对应各个节点的结果
- ,元素级操作,不改变维度11
-
对于上面提到的两层网络计算逻辑,改写为(同时完成上面提到的逻辑的m个实例的同时实现):
**函数 Activation Functions
-
对隐藏层使用怎样的**函数是建立一个NN模型的一个必要选择
-
对一个NN模型,隐藏层和输出层均需要使用**函数
-
在计算逻辑中,可以改写为,函数g是一个非线性函数
-
双曲正切函数,即tanh函数
-
函数值范围在-1到1之间
-
-
数学上是sigmoid函数的一个移位表示
-
由于输出值的均值趋近于0,因此需要中心化数据时,应当使用tanh
-
大多数情况下,tanh严格优于sigmoid函数
-
-
面对二元分类的情况是,仍然应该使用sigmoid函数(此时注意模型中区分g)
-
sigmoid和tanh都有一个缺点,即在z取值非常大或者非常小时,其梯度变得非常小,会导致梯度下降变得十分缓慢
-
线性整流函数,Rectified Linear Unit(ReLU)
- z为正,导数恒为1;z为负,导数恒为0;z为0时,导数不存在(实现时会得到一个极小值)
- 一个更被广泛使用的函数
- 优点:在z的广泛取值内,各点的梯度距离0比较远,梯度下降收敛相对更快
-
Leaky ReLU
- 与ReLU基本相似,但是在z为负时,有一个极小的大于零的斜率
**函数的导数
- sigmoid函数
- tanh函数
- ReLU函数
- KaTeX parse error: No such environment: equation at position 25: …dz}g(z)= \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \left\{ …
- Leaky ReLU函数
- KaTeX parse error: No such environment: equation at position 25: …dz}g(z)= \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \left\{ …
神经网络的梯度下降 GD for NN
- 以两层网络为例
- 对各层节点表示为
- 有参数,维数分别为
- 代价函数
- 在使用梯度下降时,将参数随即在全0附近十分重要
- 对梯度下降,需要计算,并更新各个参数
- 反向传播公式:
随机初始化 Random Initialization
- 如果在神经网络中将所有的权重都初始化成0,那么从最开始的迭代开始,每一个神经元因为参数对称而实现相同的功能,这一情况不会因为多次迭代而改变(对称失效)
- np.random.randn((2,2)) * 0.01
- 初始化值不宜过大,因为在使用sigmoid或tanh这样的函数时,过大的参数会造成结果过大,从而时GD变得非常缓慢