tensorflow2学习笔记 6网络优化部分概念

时间复杂度和空间复杂度

  • 空间复杂度
    层数 = 隐藏层 + 输出层
    总参数:所有w和b的个数
  • 时间复杂度
    乘加运算次数

学习率

  • 指数衰减学习率
    先使用较大学习率接近较优解,在逐步减小学习率
    指数衰减学习率 = 初始学习率 * 学习率衰减率^(当前轮数/多少轮衰减一次)

激活函数

多层线性函数组合多层依旧是线性函数,模型缺乏表达力
激活函数:对输出在使用非线性函数进行处理

  • 优秀激活函数的特征
    1.非线性:增强模型的表达力,使得多层网络不能被单层的线性网络替代
    2.可微性:便于梯度下降算法进行计算
    3.单调性:保证单层网络的损失函数是凸函数,易收敛
    4.近似恒等性:即f(x)与x近似相等,模型更稳定
  • 激活函数特性
    1.输出值为有限值间更稳定
    2.输出数值为无限数值,应当减小学习率

常用激活函数

  • sigmoid
    f(x) = 1/(1 + e^-x)
    问题:
    1.导数值域在0到0.25,多层网络求导,多个小数相乘将导致梯度消失
    2.均值非零收敛慢
    3.计算复杂度大
  • tanh
    f(x) = (1-e-2x)/(1+e-2x)
    问题:
    1.梯度消失
    2.计算复杂度大
  • relu
    f(x) = max(x,0)


    relu.png

优点:
1.正区间无梯度消失
2.计算快
3.收敛较快
缺点:
1.均值非0
2.随机参数负数过多导致输出一直是0,神经元死亡

  • leaky relu
    f(x) = max(ax,x)
    无神经元死亡问题

工程选取激活函数注意事项

1.首选relu
2.学习率设置为较小数值
3.对输入参数进行标准化:使输入满足以0为均值,以1为标准差正态分布
4.初始参数中心化:使随机参数以0为均值,以(2/当前层输入特征个数)^(1/2)为标准差正态分布

损失函数

预测值和标签的差距

常用损失函数

  • 均方误差


    均方误差.png

    tensorflow中的使用方法

loss = tf.reduce_mean(tf.square(y_ - y))
  • 交叉熵
    表征两个概率分布之间的距离
    H(y_,y) = -sum(y_*ln y)
    tensorflow中的使用方法
tf.losses.categorical_crossentropy(y_,y)

常用工程实现:
先用softmax进行归一化,再用交叉熵计算损失函数

tf.nn.softmax_cross_entropy_with_logits(y_,y)
  • 自定义
    用建模方式表征损失,网络参数最终的优化目标是使得loss = 0

你可能感兴趣的:(tensorflow2学习笔记 6网络优化部分概念)