神经网络复杂度
NN复杂度:多用NN层数和NN参数的个数表示
层数 = 隐藏层的层数+1个输出层
总参数 = 总w + 总b
空间复杂度:即为总参数个数
时间复杂度:即为乘加运算次数
学习率
指数衰减学习率
先用较大的学习率,快速得到较优解,然后逐步减小学习率,使模型在训练后期稳定。公式如下:
1 |
|
激活函数
优秀的激活函数
- 非线性:激活函数非线性时,多层神经网络可逼近所有函数
- 可微性: 优化器大多用梯度下降更新参数
- 单调性: 当激活函数是单调的,能保证单层网络的损失函数是凸函数
- 近似恒等性: f(x)≈x 当参数初始化为随机小值时,神经网络更稳定
Sigmoid函数
f(x)=11+e−x
特点:
(1)易造成梯度消失
(2)输出非0均值,收敛慢
(3)幂运算复杂,训练时间长
Tanh函数
特点
(1)输出是0均值
(2)易造成梯度消失
(3)幂运算复杂,训练时间长
Relu函数(用的最多)
f(x)=max(x,0)
优点:
(1)解决了梯度消失问题 解决了梯度消失问题 (在正区间)
(2)只需判断输入是否大于 只需判断输入是否大于0,计算速度快
(3)收敛速度远快于 收敛速度远快于sigmoid 和tanh
缺点:
(1)输出非0均值,收敛慢
(2)Dead Relu问题:某些神经元永远不会被激活,导致相应的参数永远不会被更新
Leaky Relu函数
激活函数的使用
1、首选relu激活函数
2、学习率设置较小值
3、输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;
4、初始参数中心化,即让随机生成的参数满足以0为均值,2当前层特征个数 为标准差的正态分布
损失函数
神经网络的优化目标就是使得损失函数最小
自定义损失函数
可以根据具体的项目自定义损失函数
均方误差(MSE)
很好理解,平时最基本的曲线拟合就是用的均方误差的损失函数。
MSE(y,y)=∑ni=1(y−y2)n
交叉熵损失函数(Cross Entropy)
H(y,y)=−∑y∗lny
用来表征两个概率分布之间的距离,常与softmax函数结合
输出先进行softmax函数,再计算y与y_的交叉熵损失函数
1 |
|
正则化
正则化一般用于缓解过拟合(训练准确性和测试准确性之间的差距代表过度拟合 ),即在损失函数中引入模型复杂度指标,利用给W加权值,弱化了训练数据的噪声
L1正则化
lossL1(w)=∑i|x|
L1正则化大概率会使很多参数变为0,因此该方法可通过稀疏参数,即减少参数的数量降低复杂度
L2正则化
lossL1(w)=∑i|x2|
L2正则化会使参数很接近零但不为零,因此该方法可通过减小参数值的大小降低复杂度。