人工智能从1950年图灵测试提出到现在也经历了几十年的发展了,直到最近大语言模型展现出的惊艳效果才再次将人工智能推到了风口。网上的资料铺天盖地,但是要想对一项技术有自己的判断,还是需要学习一下技术本身的基础知识。本文正是基于这个目的而来。
2017年的时候由于对机器学习的兴趣,我也曾经学习过一段时间,那个时候深度学习还不是很火热,那时候学习的主要还是支持向量机,推荐算法这些。最近一年的时间我重拾机器学习,发现技术真的是发生了很大的变化,现在讲的已经不是算法的巧妙,模型的数学原理,而是算力。
0x0. 区分几个概念
人工智能这个领域的水很深,毕竟也发展了几十年了。这期间提出了很多数学模型,算法。上面这个图针对各个领域方法间的包含关系做了个划分。我们现在常说的机器学习其实只是人工智能里面的一个流派而已。
机器学习:通过学习的手段,让机器获得智能。
人工智能的发展经历了推理,知识,学习。推理方法论最著名的就是专家系统,通过知识来实现最著名的就是知识图谱。不管是推理还是知识都存在一个问题,就是这里面注入了太多的人类智慧。简单来说就是就是将人类智慧转换为规则。
机器学习则是设计一个模型,让机器自主的根据数据去学习。具体做法我们后面再讲。深度神经网络是机器学习方法里面的翘楚,通过简单的模型实现无穷大的力量。现在的大语言模型可以说真的是大力出奇迹🐶
0x1. 机器学习如何学习
机器学习根据数据是否有标签(也就是上图中的Ground Truth),可以分为
- 监督学习:数据是有标签的,也就是输入是有对应的预期输出的
- 无监督学习:只有输出,没有预期的输出。最常见的就是聚类算法,一开始并不知道要聚成哪几类。
- 变种:半监督学习, 自监督学习等等,顺便一提现在的大语言模型在预训练的时候用的是自监督学习,其实也可以理解为监督学习。
目前大部分任务还是监督学习比较多,如无特殊说明本文说的机器学习指的是监督学习。
让我们把视角回到上图中,上图展示的是机器学习一个通用处理过程:
- 收集输入输出数据
- 定义模型:简单理解就是一个函数,给定一个输入,给出一个输出。这个函数是有未知参数的,这些参数是需要机器去学习的。
- 定义模型的学习目标:目标显然就是让模型的输出和我们期望的输出是一样的,转换为数学含义就是我们需要定义一个函数,这个函数的输入为模型输出和期望输出,函数的输出为模型输出和期望输出的差异。这个函数称之为损失函数。
- 模型参数学习:一般用的就是大名鼎鼎的梯度下降法
问题阐述
下面我们一个简单的例子来说明这个过程。假设我们有这样一个问题,我希望预测掘金文章的阅读数,直觉上来说这个阅读数和展现数应该有很大的一个关系。
收集数据
收集历史数据,假设收集了最近一年数据:,为展现数,为对应的阅读数
定义模型
假设阅读数和展现数是一个线性的关系,那么我们可以定义一个模型函数如下:
定义损失函数
我们肯定是希望模型的预测结果和预期结果一模一样的。
模型参数学习
找到一个参数对(a,b)使得损失函数最小,或者足够小。这个怎么找有一套数学方法,可以先不用管。
0x2. 神经网络
每个神经元会获取前一层神经元的输出作为输入,然后生成一个输出。
activeF称为激活函数。
神经网络为什么有用
神经网络这个模型是有数学原理支撑的,理论上只要神经元足够多,该模型能够拟合所有的曲线。称之为万能近视定理。可以看下图获得一个直观的理解。
假设我们要拟合的是这条曲线,按照微分的思想,曲线我们是可以用无数多的分段直线去拟合的,而这些分段的直线都可以用这种形式来表示。即对应激活函数。可以看到这个形式和上面的神经网络模型是一个东西。下图描述的是虽然是二维平面的,但是只要把自变量变成一个向量,就可以扩展到高维上面。