模型训练框架
type
status
date
slug
summary
tags
category
icon
password
好长时间没有更新了,因为最近太多太多的事情要忙。
今天终于有时间,总结一下最近的学习成果。
最近在做“弱监督视频显著性目标检测”的研究,接触到了大量AI的知识,
之前在印象中高大上的内容,
如今看来的确十分有难度,
但是用心学习也并不是无迹可寻。
今天总结一下模型训练的基本框架。
如今大多数的训练都是用的这个框架,一些特殊的训练框架会有出入。
基本训练步骤
训练的基本流程可以浓缩为:
- 准备数据和模型。
- 前向传播。
- 计算损失。
- 后向传播。
- 参数更新。 循环以上步骤直到训练完成。
这个放在最上面,下面我会解释这个过程。
一个有趣的比喻
在学习的过程中,我将机器看作一个学生,将训练看作一个学生不断刷题成为学霸的过程。
这样一来,一些概念可以映射到这个比喻之中,方便我们理解。
机器→学生
数据集→试卷
标签label→答案
模型→做题套路
参数→做题套路的细节
前向传播→做题
损失函数loss→批阅试卷进行扣分
后向传播→根据错题对做题套路的细节进行更改
学习率→更改做题套路细节的细节的幅度
一个学生,通过不断刷题,改进做题方法,最终轻松取得高分,所谓的机器学习是否通俗易懂了呢?
一个完整的模型训练,包括什么?
训练集+模型→参数集
得到了参数集,要做测试的话。
参数集+模型+测试集→测试结果
拿到了测试结果,再进行数学分析,就可以得到这个模型的性能。
总而言之,我们的训练就是得到这么一个参数集的过程,
在训练之外,如何设计模型,以及得到参数集的方法,是我们要研究的方向,
这里我不展开讲后者,只是介绍一下训练过程中是如何得到这个参数集的。
已经有了一个模型,如何得到参数集?
无论是卷积还是注意力,都是模型的一部分。
前向传播
模型的参数,在模型的初始化时,会有一个初始值。
训练集+模型+参数集→测试结果
这个过程叫做前向传播。
后向传播
但是测试的结果恐怕会与我们的label有差异,这里的差异,经过一些数学运算可以得到,也就是损失函数。
事实上,损失函数意味着我们期望模型达到一个什么样的要求,所以损失函数也叫损失约束。
得到了loss,就可以通过loss反过来优化参数集:
loss+参数集+优化器→优化后的参数集
这个过程叫做后向传播。
loss下降的过程,叫做下降。
值得注意的是,在整个参数集的变化上,loss的变化并不是一定的,而是不确定的,有时上升,有时下降。
而如何得到最低loss对应的参数集,以及如何最速的下降,是我们要研究的。
在后向传播的过程中,我们有一个学习率的概念,也就是优化参数集的幅度,学习率过小,会导致训练速度慢,而学习率过大,可能会错过最佳的结果。
(这也告诉我们在学习过程中,步子不要太小,这样效率太低,步子也不要太大,容易囫囵吞枣,达不到最好的效果。)
事实上,我们更多的采用动态学习率,一开始大,然后逐渐减小。
这样一来,我们就有了优化一个参数集的完整逻辑。
代码示例:
Loading...