模型、训练、算法这几个概念是机器学习和深度学习的最基础,现在看来有必要说明一下。 以下所有解释均仅限于人工智能领域。
模型
模型是什么? 通常 形容AI语境下的模型一词时,比较多的情况会类比数学领域的函数。 不过个人感觉,那样比较容易跑偏,不如我们先姑且将它理解成是“一个程序”吧。
模型这种“程序”接受输入,经过一系列内部处理,给出输出——在这一点上它和 普通意义上的程序 一样。
模型和普通程序不一样的是:后者是人类直接编写出来的,而前者则是经有另外一个人类编写的训练程序训练出来的。
从某种意义上可以说, 模型是程序产生的程序 。
训练程序和算法这个训练模型的程序(简称训练程序),一般情况下是实现了某一种训练算法,这个算法接受输入的数据,进行某些运算,运算的结果就形成了模型。
训练程序运行的过程就叫做训练, 模型是 训练程序的输 出,训练的结 果 。
概念间的关系说到这里,我们已经涉及到了四个概念:A.普通程序;B. 模型;C. 训练程序;和D.算法。
它们之间的关系见下图:
普通程序、模型和训练程序的 共性 是:接受输入数据;内部处理输入的数据后生成输出数据;输出输出数据。
但是它们仨又有所 不同 :
1. A(普通程序)和C(训练程序)都是人类编写出来的;而B(模型)则是C运行的结果(输出)。
2. A和B对输入输出的处理是静态的; 而C对输入输出的处理是动态的 。
静态 vs 动态关于 不同之处的第2点 ——“静态处理输入输出”和“动态处理输入输出”的区别,我们需要特别解释一下。
静态是指:对于A(普通程序)和B(模型)而言,给它们一个特定的输入,它们就会给出一个特定的输出。
A和B能够处理的数据非常多,但就算是各自接受一百万份输入,每份输入对应的输出都是既定的,并不会因为A或B之前已经处理了其他的数据而产生不同的输出。
而 动态 则是说:C(训练程序)在获得不同的输入后会输出不同的B(模型)。
训练、训练数据与模型
“ 训练程序在获得不同的输入数据后输出不同的模型 ” ——这是什么意思?
来看个例子:
我们用某个训练程序 c0 训练了包含2M样本的数据集Dataset_1,生成了一个模型b1。
后来,我们又获得了包含另外1M样本的数据集Dataset_2。 既然又有了新数据,自然就想把Dataset_2也用于 c0 的训练。 那么我们可以:
方式 i)用Dataset_2从头开始训练,可以获得模型b2;
或者, 方式 ii) 将b1作为预训练模型,在它的基础上,用Dataset_2继续训练,获得模型b1’。
按照上述两种方式,c0同样是处理Dataset_1+ Dataset_2共3M的样本数据,但因为具体的训练方式(运行c0的方式)不同,输出的结果是不同的。
方式 i)输出的两个模型:b1是基于2M样本获得的,b2是基于1M样本获得的。
方式 ii)输出的两个模型:b1基于2M样本,而b1 ’ 则是基于3M样本!
两种方式中的b1是一样的,b2和b1’ 却差距颇大。
b 2仅具备从Dataset_2中学习到的知识;而 b 1 ’ 除了Dataset_2,还学习了Dataset_1中的知识——这一部分不是通过直接的训练,而是通过已经训练出来的b1间接得到的。相当于b1先学习了Dataset_1中蕴含的知识,再移交(transfer)给了b1 ’ .
顺便说一下,方式 ii)又叫做 迁移学习(Transfer Learning) ,是不是有点耳熟?
造成这样差异的原因不是数据,也不是训练程序本身,而是训练的方式不同。这就是训练程序的特色啦!
训练算法及其实现A,B和C虽然有所不同,但基本上还是同一个层次的概念——都是程序嘛。
D和它们又有什么关系呢?
简单来说,D(算法)是C(训练程序)的灵魂;或者说,D是C的原理,而D是C的具体实现。
如果你还要继续问:什么是原理,什么又是实现?
原理就是从抽象层面上来讲一件事情应该怎么做,而实现则是指在现实中把这件事情做出来。
原理是策略、方法、流程;而实现是落实执行。
上一篇
2021漫画大赏介绍
有话要说...