目录
Tenh: tanh 函数是 sigmoid 的向下平移和伸缩后的结果
Leaky Relu:当𝑧是负值时,这个函数的值不是等于0,而是轻微的倾斜.
浅层神经网络
神经网络概述
神经网络的表示
我们有输入特征𝑥1、𝑥2、𝑥3,它们被竖直地堆叠起来,这叫做神经网络的输入层。它包含了神经网络的输入;然后这里有另外一层我们称之为隐藏层。"隐藏"的意义:无法在训练集中看到的层;在本例中最后一层只由一个结点构成,而这个只有一个结点的层被称为输出层
神经网络的输出
逻辑回归的计算有两个步骤,首先你按步骤计算出𝑧,然后在第二步中你以 sigmoid 函数为激活函数计算z。
向量化实现
激活函数 Activation function
Sigmoid
ReLU
Tenh: tanh 函数是 sigmoid 的向下平移和伸缩后的结果
在不同的神经网络层中,激活函数可以不同。
sigmoid 函数和 tanh 函数两者共同的缺点是,在𝑧特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于0,导致降低梯度下降的速度。
Leaky Relu:当𝑧是负值时,这个函数的值不是等于0,而是轻微的倾斜.
两者的优点是:
第一,在𝑧的区间变动很大的情况下,激活函数的导数或者激活函数的斜率都会远大于0,在程序实现就是一个 if-else 语句,而 sigmoid 函数需要进行浮点四则运算,在实践中,使用 ReLu 激活函数神经网络通常会比使用 sigmoid 或者 tanh 激活函数学习的更快。
第二,sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,而 Relu 和 Leaky ReLu 函数大于 0 部分都为常数,不会产生梯度弥散现象。(同时应该注意到的是,Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性,而 Leaky ReLu 不会有这问题)
𝑧在 ReLu 的梯度一半都是 0,但是,有足够的隐藏层使得 z 值大于 0,所以对大多数的训练数据来说学习过程仍然可以很快。
为什么需要非线性激活函数
如果使用线性激活函数或者没有使用一个激活函数,那么无论神经网络有多少层一直在做的只是计算线性函数,所以不如直接去掉全部隐藏层。此时无法解决非线性问题。
激活函数的导数
Sigmoid
ReLU
Leaky Relu
Tenh
神经网络的梯度下降
反向传播公式如下:
随机初始化
为什么要随机初始化?
如果你把权重都初始化为0,那么由于隐含单元开始计算同一个函数,所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同的,即隐含单元仍是对称的。通过推导,两次、三次、无论多少次迭代,不管你训练网络多长时间,隐含单元仍然计算的是同样的函数。
我们通常倾向于初始化为很小的随机数,这样经过激活函数计算的值会很小,计算出来的梯度会较大,学习速度较快。