3.浅层神经网络
浅层神经网络概述
[1]计算出z,α(第一层)
[2]计算出z,α(第二层)
这只是一个简短的描述,接下来的学习希望能够理解神经网络的原理。
神经网络的表示
- 输入特征,成为神经网络的
输入层
- 接下来的一层我们称之为
隐含层
在
监督学习
训练一个数据集时,训练集中既有输入
也有目标输出
,而这一层结点的值是透明的
,训练集中并不包含
其值,所以称为隐藏层。
最后只有一个结点的我们称之为输出层
- a意味着**,也是每一个神经元的
输出
(后所提),以输入层为第0层,上
标[num]表示第几层,下
标num表示该层的第几个结点- 表示第一层第二个结点的**值。
本神经网络的隐藏层有
四
个单元,所以其**值是一个的矩阵
最后输出层将产生某个数值a(一个实
数),所以
输入层
不算入
计算网络的层数
- 隐藏层和输出层都是带
有参数
的,,- 是一个(4,3)的矩阵,4因为有4个结点,3因为上一层有三个输入特征。是个(4,1)的向量
- 是一个(1,4)的矩阵,1因为有1个结点,4因为上一层有4个值输入到此层。是个(1,1)的向量
如前一章所学,在逻辑回归中W是个系数矩阵,而b是一个纠偏的向量或值,在上一章,
WX
是(1,1),所以b是一个值,此处WX
形如(4,1),所以b是一个(4,1)向量,mark
一下,理解有误后期来修正此处。
神经网络的计算在每
个结点计算出假设函数
的值,然后作为变量输入**函数
输出a。
比如在隐藏层:
向量化就是用NumPy来进行的矩阵运算
多样本向量化就是把下标i作为列i,每个都看作是一个抽象矩阵作横向
扩展。
**函数
sigmoid函数:
tanh(双曲正切函数):
- 总体上都
优于
sigmoid函数 - 值域位于
+1和-1
之间 - 经过(0,0)点
- 均值
更接近
于零
均值 - 在二分类问题上,想让介于0和1之间,而不是-1和+1之间,所以需要使用sigmoid**函数。
不同层
可以使用不同
的**函数
?
既然tanh效果好,为什么不用tanh后在进行归一化么?
sigmoid和tanh都会在z特别大或特别小
的时候,导数的梯度或函数的斜率变得特别小
。
修正线性单元的函数(ReLu):
**函数的经验法则
:
- 如果输出是二分类问题,则输出层选择sigmoid函数,然后其他的所有单元都选择ReLu函数
- sigmoid:除了输出层是一个二分类问题基本不会用它
- tanh**函数:tanh是非常优秀的,几乎适合所有场合。
- ReLu函数:最常用的默认函数,如果不确定用哪个**函数,jiuyongReLu或Leaky ReLu
为什么使用非线性**函数?
个人理解:简化一下神经网络结构,假设其都是线性传递,即多层,每层单节点,从输入层到输出层只是在做这样一个计算而已,前面的所有系数矩阵w相乘过后得到的是一个系数矩阵。函数形式没有更复杂,反向传播也一直是等步长
下降,结果还只是一个线性
函数,只是将空间一分为2,而引入非线性函数,虽不能准确说明其形式,但各结点非等步长
进行梯度下降,函数形式明显会变得复杂
,呈现多项式形式或更为复杂精确的函数形式,甚至划分出多区域也是可能的。
sigmoid的导数:
tanh的导数:
ReLu的导数:
Leaky ReLu的导数:
以上都是对z求导
推导用LaTeX真的是太麻烦了…
根据下面此处应该用的是sigmoid**函数。
见上文
其他的大同小异。
随机初始化
初始化为0导致隐含单元在1个以上没有意义,因为各结点对称
(想象一个坐标图,输入与隐含层由于是全相联,系数和偏差一样则映射到同一个点,在该点梯度也一样,进行下降的步长就也一样)
- w随机初始化z
再乘
一个很小
的随机
数,b可初始化为0 - 随机数太大的话,落在梯度平缓区域的概率变大,降低梯度下降的速度
- 选取问题看后续
mark