Learning Rate – 学习率
学习率(Learning Rate,LR)决定了模型参数的更新幅度,学习率越高,模型参数更新越激进,即相同 Loss 对模型参数产生的调整幅度越大,反之越越小。
如果学习率太小,会导致网络loss下降非常慢;如果学习率太大,那么参数更新的幅度就非常大,产生振荡,导致网络收敛到局部最优点,或者 loss 不降反增。
Batch Size
Batch size表示1次传递给模型用以训练的(样本)数据量。比如总共有1000个数据,如果设置batch_size=100,那么模型首次会使用数据集中的1~100个来训练模型,训练结束更新权重,再使用第101-200的个数据训练以此类推。
Batch size越大,模型一次处理的数据量越大,能够更快的运行完一个Epoch, 反之运行完一个Epoch越慢。
epoch:表示模型训练过程中数据集的完整遍历次数
由于模型一次是根据一个Batch Size的数据计算Loss,然后更新模型参数,如果Batchsize过小,单个Batch 可能与整个数据的分布有较大差异,会带来较大的噪声,导致模型难以收敛。
与此同时,Batch size 越大,模型单个 Step 加载的数据量越大,对于GPU显存的占用也越大,当 GPU 显存不够充足的情况下,较大的 Batch size 会导致 OOM,因此,需要针对实际的硬件情况,设置合理的 Batch size 取值。
在合理范围内,更大的 Batch size 能够:
• 提高内存利用率,提高并行化效率;
• 一个 Epoch 所需的迭代次数变少,减少训练时间;
• 梯度计算更加稳定,训练曲线更平滑,下降方向更准,能够取得更好的效果;
对于传统模型,在较多场景中,较小的 Batch size 能够取得更好的模型性能;对于大模型,往往更大的 Batch size 能够取得更好的性能。
激活函数
激活函数用途
线性函数是一次函数的别称,则非线性函数即函数图像不是一条直线的函数。非线性函数包括指数函数、幂函数、对数函数、多项式函数等等基本初等函数以及他们组成的复合函数。
激活函数是多层神经网络的基础,保证多层网络不退化成线性网络。
线性模型的表达能力不够,激活函数使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
常见激活函数
- sigmoid
- softmax & tanh
- ReLU
- Swish
目前大模型在使用Swish。
损失函数
损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度(损失值)的运算函数,它是一个非负实值函数。
损失函数仅用于模型训练阶段,得到损失值后,通过反向传播来更新参数,从而降低预测值与真实值之间的损失值,从而提升模型性能。
整个模型训练的过程,就是在通过不断更新参数,使得损失函数不断逼近全局最优点(全局最小值) 。
不同类型的任务会定义不同的损失函数,例如回归任务重的MAE、MSE,分类任务中的交叉熵损失等
损失函数分类
- MSE & MAE
- 交叉熵损失 – 经典且常用
- 二分类
- 多分类
交叉熵损失函数与激活函数之使用总结
对于不同的分类任务,交叉熵损失函数使用不同的激活函数(sigmoid/softmax)获得概率输出:
二分类
使用sigmoid和softmax均可,注意在二分类中,Sigmoid函数,我们可以当作成它是对一个类别的“建模”,另一个相对的类别就直接通过1减去得到。而softmax函数,是对两个类别建模,同样的,得到两个类别的概率之和是1。
单标签多分类
交叉熵损失函数使用softmax获取概率输出(互斥输出)。
多标签多分类
交叉熵损失函数使用sigmoid获取概率输出。