1.常见激活函数
1.1.ReLU激活函数(经常用,隐层遇事不决用)
该激活函数为非线性激活函数,如果函数的输入值小于0,则映射为0;如果函数的输入值大于0,则映射为本身,主要作用为减少计算量、解决梯度消失问题和缓解过拟合问题。函数的图像如下:
1.2.Sigmoid激活函数(二元分类用)
该激活函数又被称为压缩函数,因为任何输入值都会被函数映射在(0,1)之间,在神经网络中有着广泛的用途,但是当网络过深时会出现梯度爆炸和消失的情况。函数的图像如下:
导数:
1.3.tanh激活函数(经常用)
输出为(-1,1),中心化数据,让数据平均值更接近0,多数情况下效果比sigmoid函数效果好。r如下图:
导数:
需要注意:不使用非线性激活函数,神经网络就失去了意义!!!(只有线性回归问题才使用线性激活函数)(“权值*数据+偏置”本身已经表示线性组合了,再使用线性激活函数无法处理复杂问题)
2.如何理解网络维度
新手在接触神经网络时,常常想理解网络的结构(维度),但是看到专业的介绍又看不懂,这里我给大家简单分析一下:
上图所写的g(z)表示激活函数的输出,也就是每层神经元的输出。
3.新手训练神经网络的技巧
3.1.随机初始化
不能将W初始化为全0矩阵,否则所有的节点计算均一样,多隐层节点就失去了意义。建议随机初始化(这种方式还有改进,待熟练后可以掌握Xavier初始化):
生成的W为高斯分布的(m,n)随机数*0.01(通常将随机值设为较小的数,否则计算出来的值太大,对于tanh激活函数来说就落到了平滑部分,梯度下降时学习速率太慢),b可以初始化为0。
3.2.向量化
使用向量化数据减少for循环,提高算法效率,如,向量化后使用python代码表示为np.dot(w.T,x)+b。
广播机制:python在处理维度不一致的矩阵运算时会做出处理保证能在维度一致的情况下进行矩阵运算(加减乘除运算)