目录
1、神经网络表示
2、计算神经网络的输出
3、多个样本的向量化
4、激活函数
5、激活函数的导数
6、神经网络的梯度下降法
1、神经网络表示
2、计算神经网络的输出
- 小圆圈代表了计算的两个步骤。
- 第一步,计算1 [1] , 1 [1] = 1 [1] + 1 [1]。
- 第二步,通过激活函数计算1 [1] , 1 [1] = (1 [1] )。
- 隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到2[1]、3[1]、4 [1]
- 向量化计算:如果你执行神经网络的程序,用 for 循环来做这些看起来真的很低效
- 如上图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就
相当于一个逻辑回归的计算单元。当你有一个包含一层隐藏层的神经网络,你需要去实现以
计算得到输出的是右边的四个等式,并且可以看成是一个向量化的计算过程,计算出隐藏层
的四个逻辑回归单元和整个隐藏层的输出结果,如果编程实现需要的也只是这四行代码。
3、多个样本的向量化
- [2](),()是指第个训练样本而[2]是指第二层
- 证明:[1] 是一个矩阵,(1) , (2) , (3)都是列向量,矩阵乘以列向量得到列向量,下面
将它们用图形直观的表示出来
- 所以从图中可以看出,当加入更多样本时,只需向矩阵中加入更多列
4、激活函数
- 在前面的神经网路的前向传播中, [1] = ( [1] )和 [2] = ( [2] )这两步会使用到 sigmoid 函数。 sigmoid 函数在这里被称为激活函数,但是,有时其他的激活函数效果会更好
- 选择激活函数的经验法则:
如果输出是 0 、 1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单
元都选择 Relu 函数。
这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会
使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当 是负值的
时候,导数等于 0 。
这里也有另一个版本的 Relu 被称为 Leaky Relu 。
当 是负值时,这个函数的值不是等于 0 ,而是轻微的倾斜。
尽管在实际中 Leaky ReLu 使用的并不多,但是这个函数通常比 Relu 激活函数效果要好
-
sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
tanh 激活函数: tanh 是非常优秀的,几乎适合所有场合。
ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu 或者
Leaky ReLu
-
why:在神经网络中使用非线性激活函数的主要原因是,如果不使用非线性激活函数,多层神经网络就相当于单层线性模型,而无法捕捉复杂的非线性关系。因此,通过使用非线性激活函数,神经网络可以学习更加复杂和抽象的模式,从而提高其预测和分类能力。
-
此外,非线性激活函数还可以解决梯度消失的问题。在深层神经网络中,当使用线性激活函数时,每一层的输出都是前一层输出的线性组合,这种线性组合对梯度的贡献非常小,导致梯度在反向传播时逐渐消失。而非线性激活函数可以引入非线性变换,增加梯度的大小,从而避免梯度消失问题。 因此,使用非线性激活函数是神经网络能够充分发挥其优势的重要因素之一
- 因此,不能在隐藏层用线性激活函数,可以用 ReLU 或者 tanh 或者 leaky ReLU 或者其他的非线性激活函数,唯一可以用线性激活函数的通常就是输出层
5、激活函数的导数
1 ) sigmoid activation function
2) Tanh activation function
3)Rectified Linear Unit (ReLU)
4)Leaky linear unit (Leaky ReLU)
6、神经网络的梯度下降法
-
单隐层神经网络会有[1], [1] , [2] , [2] 这些参数,还有个 表示输入特征的个
数, [1] 表示隐藏单元个数, [2]表示输出单元个数。
-
矩阵 [1] 的维度就是 ( [1] , [0]), [1]就是 [1] 维向量,可以写成( [1] , 1) ,就是一个的列
向量。 矩阵 [2] 的维度就是( [2] , [1] ), [2]的维度就是( [2] , 1) 维度
- Cost function
- 训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初
始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:
- 反向传播方程如下: 这些都是针对所有样本进行过向量化,是1 × 的矩阵;这里 np.sum 是 python 的 numpy 命令,axis=1 表示水平相加求和,keepdims 是防止python 输出那些古怪的秩数(, ),加上这个确保阵矩阵 [2]这个向量输出的维度为(, 1)这样标准的形式。
- 开始计算反向传播时,需要计算隐藏层函数的导数,输出在使用 sigmoid 函数进行二元分类。这里是进行逐个元素乘积,因为[2] [2]和( [1] )这两个都为( [1] , )矩阵