第三章 浅层次神经网络
1 结构
输入层
隐藏层(隐藏意味着在训练中,节点的真实值是不知道的)
输出层
输入层为第0层,所以有一个隐藏层的神经网络称为双层神经网络
2 计算输出(forward propagation正向传播过程)
符号说明
a[0]=X :特征值,放入输入层a[1] :隐藏层参数,包含参数w[1] 、b[1] a[2]=y^ :输出层参数
*a取activate(**)的首字母
2.1 一维特征向量
2.1 m维特征向量
Z[1].shape=(4,m) W[1].shape=(4,3) X.shape=(3,m) b[1].shape=(4,m) A[1].shape=(4,m) Z[2].shape=(1,m) W[2].shape=(1,4) b[2].shape=(1,m) A[2].shape=(1,m)
3 **函数的选择
3.1 sigmoid函数
在解决输出为{0,1}的二分类问题时,可以考虑用在输出层
3.2 tanh函数(双曲正切函数)
定义:
tanh函数是sigmoid函数向下平移一个单位的结果,有数据中心化的效果,比sigmoid函数的应用更广。
3.3 ReLU函数
定义:
ReLU是rectified linear unit(修正线性单元)的简写。
优点在于学习速度快,没有函数斜率接近0时,学习速度减慢的效应。
3.4 *leaky ReLU函数
定义:
3.5 结论
尝试不同的选择搭配找出效果最好的模型。
4 选择非线性函数作为**函数的意义
线性组合再进行线性组合得到的仍为线性组合,用线性函数做隐藏层**函数与无隐藏层的效果时相同的。
5 **函数的导数
令
5.1 sigmoid函数
5.2 tanh函数
5.3 ReLU函数
5.4 leaky ReLU函数
6 浅层网络的参数训练(back propagation反向传播过程)
一维特征值反向传播过程(红色箭头):
m维特征值正反向传播算法(输出层**函数
*
*axis=1 表示将矩阵水平相加,得到一个单列
*keepdims=True 用于防止得出维数为
Z[1].shape=(n[1],m) W[1].shape=(n[1],n[0]) X.shape=(n[0],m) b[1].shape=(n[1],m) A[1].shape=(n[1],m) Z[2].shape=(1,m) W[2].shape=(1,n[1]) b[2].shape=(1,m) A[2].shape=(1,m) dZ[2].shape=(1,m) dW[2].shape=(1,n[1]) db[2].shape=(1,1) dZ[2].shape=(1,m) dZ[1].shape=(n[1],m) dW[1].shape=(n[1],n[0]) db[1].shape=(n[1],1)
7 随机初始化
7.1 为什么要随机而不都初始化为0
对于b的初始化不存在这个问题,而对于w,当w都初始化为0或者相同的数字时,会发现反复迭代后w的数值都是对称的,即对不同特征向量的权重是相同的,所以模型没有意义,反复迭代也没有意义。
7.2 为什么要乘0.01
这个问题针对sigmoid函数和tanh函数,因为当w太大时,得到的z值会太小或太大,结果是z会落在g的变化平缓的部分,使得学习速度变慢。