在从语言分析和语言生成这个角度开始,机器学习是什么呐?
监督学习的主要特征是用到了大量的“标记数据”,也就是说需要学习的内容都通过学习者能够理解的方式做了标记,于是我们才能够把未知信息与已知信息一一对应起来,然后再往陌生的、更复杂的情况去推导。
比如我们知道“time”是时间的意思,“fly”是飞翔的意思,那么当我们看到“time files very fast”这种高级的。没见过的用法的时候就可以推广,分析出他的含义是“时光荏苒”。用有限的知识解决无限的问题。
那除了这种“监督学习”,我们可能得不到单词表那样明确知道就像刚出生、我们连中文都不会的时候,或者是上世纪很多老哥外语也没怎么学就闯出去挣外汇,但这两种情况最后大家都能适应下来,那这种情况是怎么学的呐?
这时候就只能通过阅读、听力或者观察语言在日常生活中的使用来进行学习,在这种情况下,我们可能开始识别模式,比如某些词汇总是在类似的情境下反复出现,或者某些词似乎具有相似的结构或者音韵特征,比如“shit”、“fuck”的发音都很有力量,通过对这些情景的判断,我们就可以逐渐摸索出一套潜在的规则和分类,比如自然而然的把词汇分成动词。名词和形容词,即使没人明确告诉我们他们的分类,这就叫做无监督学习。
这两个一起,监督学习和无监督学习就构成了机器学习领域的两个基本类型就构成了机器学习领域的两个基本类型,还有一些列诸如半监督学习、自监督学习这些混合学习模式。但归根结底,这些方法都是为了让机器能够像人一样学习,随着时间和练习不断提高知识和技能,让计算机能够通过算法自行找出数据之间的关系和模式,而不需要人类直接编程具体的步骤来执行这一任务。这一概念正是机器学习与传统编程的根本区别所在。
他的深远意义在于,只要我们找到一套能有效学习到东西的算法,他就可以广泛的适用到不同的任务中了。
机器学习本质上就是构建一套神经网络模型,让模型从大量数据中学习,那怎么获取到足够多而高质量的数据,怎么构建一个能力强、学习效率高的模型就成了影响学习效果的关键,整个机器学习的研究史,也就基本上围绕这两点进行展开的。
而在机器学习领域呢,可以把模型看作一个函数,再直白点呢,就是一个有输入有输出的黑盒子,这个黑盒子的内部结构呢,可能无比复杂,但咱们不用管,咱们只关心它能不能针对输入给出正确的输出。一个简单的多层神经网络模型呢,包含一个输入层,两个隐藏层和一个输出层,前面说过了模型本质上就是个能读进来输入,然后输出准确答案的黑盒子。
预测值和实际情况有了偏差的时候,这个偏差该怎么衡量呢,这就要用到损失函数了。损失函数的结果呢,永远是一个非负数值,它不能小于零,而这个数呢就会用来衡量模型的判断和实际情况的偏差有多大,比如说呢,咱们用绝对误差,那这个模型的输出和我的实际兴奋值的偏差呢,就是0.38,那要怎么让这个偏差缩小?让模型呢,真正做到看到一个游戏画面就能准确的知道我有没有兴奋呢?首先,我们知道这个模型的输入输出之间的关系完全呢,是由权重数值决定的,同样的输入,这些权重一变输出呢就会完全不一样,可是这些权重该怎么改呢?这时候呢,我们就可以把这个偏差看成是一个关于这些权重值的函数,也就是刚说的损失函数,我们希望找到的呢,就是损失函数变化最快的方向,也就是梯度。梯度呢,可以看作是一个函数在特定点上的斜率或者坡度,它呢,总是指向函数增长最快的方向,咱们现在想象你站在某座山上梯度呢,告诉你的就是往哪个方向走?那么最快的上升,那相应的呢,加个负号原地转180°,就是下山最快的方向,一直让权重数值沿着这个方向走损失函数的值,也就是模型输出的实际情况的偏差呢,就会越来越小。
我觉得最重要的一个超参数呢,是学习率。学习率决定的是模型参数的更新幅度,前面咱们说梯度能指出偏差,减小最快的那个方向,但这只是基于损失函数,这一刻所在的这一个点,你要是一步迈大了,反而可能一下子跳到更高的地方上去了早也下不去,但你如果步子老是非常小的,也不好,一方面呢,你移动的速度会特别慢。
在机器学习里面泛化,指的是模型,遇到从未见过的数据的时候够适应陌生的数据环境。它是衡量模型性能的一个关键指标。一个具有良好方法能力的模型呢,应该能够适应陌生的数据环境,而不仅仅只是在训练数据上表现出色,因为真实世界的变化呢,是无穷无尽的,只有真正从数据里面学到了底层的规律,才能推而广之,解决更多的同类问题。
那怎么来评估一个模型的泛化能力呢?我们会把数据划分为训练集,验证集和测试集来做,训练集呢,就像是平常的作业和习题,模型通过学习训练集上的数据来识别模式和规律。验证级呢,就像是模拟考试。用来阶段性的评估模型表现模型,通过训练阶段数据更新内部的权重值,然后经过验证及检测能力检测出来,发现效果不好的话呢,我们就调整超参数,或者是修改网络结构,直到它在验证及这个模拟考试上能拿到高分,这时候呢就到测试集了。测试集就是最终的高考,他评估的就是模型,未来放到真实世界之后,最终的性能大概会是什么样?在之前的过程里呢,模型只学习训练机,然后通过对训练过程的调整呢,他又做到了能把规律推广到验证集上,但测试集它是从来没沾过边的。如果测试集它也能搞定了,那它就大概率成了,然而当大模型时代到来之后呢,一个超级超级大参数几百上千亿的模型,把这个泛化的概念呢,又给颠覆了,由于这种模型真的太大了,即使是一个装了互联网全部文字的数据集,它都有能力给完全背下来。那最终他表现出来的能力到底是因为真的理解了人类知识,还是在机械的照搬的背下来的文字呢,因此呢,也就有人质疑,就是说目前大模型呢,并没有真正体现智能和学习能力,只是背东西比较猛而已,关于这个话题的探讨还有待深入。但无论如何,今天这种从小型专用模型到大型通用模型的转变,标志着深度学习进入了一个重要的发展阶段。