TensorFlow2 notebook: Class2 神经网络的优化方法, 学习率,激活函数,损失函数和正则化的使用, 用Python语言写出5种反向传播优化器(SGD, Momentum, Adagrad, RMSProp, Adam).
In summary
2.1 预备知识
tf.where(条件语句, 真返回A, 假返回B)
np.random.RandomState.rand()
, 返回一个[0,1)之间的随机数np.vstack()
, 将两个数组按照垂直方向叠加np.mgrid[起始值:结束值:步长, 起始值:结束值:步长]; [起始值:结束值)
.ravel()
, 将x变为一维数组,把.前变量拉直np.c_[]
, 使得返回的间隔数值点配对
2.2 神经网络复杂度
- 神经网络(NN)复杂度:多用NN层数和NN参数的个数表示
- 空间复杂度, 层数 = 隐藏层的层数 + 1个输出层
- 时间复杂度, 乘加运算次数
- 指数衰减学习率
- 初始学习率 * 学习率衰减率 ^ (当前轮数 / 多少轮衰减一次)
2.3 激活函数
-
非线性函数
-
大大提升列模型的表达力
-
优秀的激活函数特征
- 非线性, 多层神经网络可逼近所有函数
- 可微性, 优化器大多用梯度下降更新参数
- 单调性, 保证单层网络的损失函数是凸函数
- 近似恒等性: f(x)≈x, 神经网络更稳定
-
Sigmoid函数
1 2 3 4 5 6 7
tf.nn. sigmoid(x) Tanh函数 tf.math. tanh(x) Relu函数,对于初学者首选该函数 tf.nn.relu(x) Leaky Relu函数 tf.nn.leaky_relu(x)
2.4 损失函数
-
预测值(y)与已知答案(y_)的差距
-
NN 优化的终极, 重点目标, 使得loss最小
- MSE
1
loss_mse = tf.reduce_mean()
-
自定义
1
tf.reduce_sum(tf.where(tf.greater())
-
CE
1
tf.losses.categorical_crossentropy()
-
案例
- 预测酸奶日销量y,x1、x2是影响日销量的因素
- 没有真实数据集,现通过随机生成来拟造
2.5 缓解过拟合
- 欠拟合, 学习不够彻底
- 增加输入特征项
- 增加网络参数
- 减少正则化参数
- 过拟合, 缺乏泛化力
- 数据清洗,减少集中噪声
- 增大训练集
- 采用正则化
- 增大正则化参数
2.6 优化器更新网络参数
- 优化器
- 引导神经网络更新参数的工具
- 待优化参数𝒘, 损失函数loss, 学习率𝒍r, 每次迭代一个batch(2^n), t表示当前batch迭代的总次数.
- 一阶动量:与梯度相关的函数
- 二阶动量:与梯度平方相关的函数
- 优化器
- SGD(无momentum), 常用的梯度下降法
- SGDM(含momentum的SGD), 在SGD基础上增加一阶动量
- Adagrad,在SGD基础上增加二阶动量
- RMSProp,SGD基础上增加二阶动量
- Adam, 同时结合SGDM一阶动量和RMSProp二阶动量
Attach is the file of TensorFlow2class2.ipynb, or view it via the link.
Show me the code