01 AI入门
1.1 与人类大脑的联系
人工智能旨在让计算机具备类似人脑的功能,但其核心并非全方位复制大脑结构,而是通过逆向工程解析大脑机制并在抽象层面仿真——如同Mac仿真旧计算机时跳过硬件细节、仅实现功能等效,AI算法(如神经网络)或模拟神经元交互,或聚焦输入输出逻辑,而非复现神经生物学细节。大脑可视为由神经信号连接的“黑箱”,通过输入信号(感官刺激)、输出响应(肌肉控制)和内部状态(环境经验) 与世界交互,这一模型与多数AI算法(基于数据输入、内部参数和输出指令)高度相似。“缸中之脑”思想实验更揭示二者共性:大脑的“真实认知”依赖神经信号仿真,而AI的“现实建模”亦基于数据驱动,尽管现有AI缺乏人脑的通用性,但其逻辑本质均为通过信号处理实现对环境的适应性响应。
1.2 对问题建模
掌握将真实世界建模为机器学习算法的方法至关重要。针对不同的问题有不同的算法,在最抽象的层面,你可以按以下4种方式之一为你的问题建模:
- 数据分类
- 回归分析
- 聚类问题
- 时序问题
当然有时也需要综合多种方式来对问题进行建模。
1.2.1 数据分类
分类问题是指通过算法将输入数据归为特定类别,通常属于监督学习范畴——需要用户提供带标签的训练数据(输入特征与预期输出类别)。在监督学习中,算法基于已知标签数据学习规律,训练期间通过对已知数据的分类准确率评估性能,目标是实现对未知数据的正确分类。
鸢尾花数据集是经典的分类问题案例,常用于评估机器学习算法性能。该数据集包含鸢尾花的4项特征(数值型)和1项类别标签(非数值型),典型数据格式如下(CSV格式):
"Sepal Length","Sepal Width","Petal Length","Petal Width","Species"
5.1,3.5,1.4,0.2,"setosa"
4.9,3.0,1.4,0.2,"setosa"
...
7.0,3.2,4.7,1.4,"versicolor"
...
6.3,3.3,6.0,2.5,"virginica"
- 特征维度:花萼长度、花萼宽度、花瓣长度、花瓣宽度(均为数值型输入)。
- 分类标签:种属("setosa"、"versicolor"、"virginica"三类)。
算法的任务是通过学习4项特征与种属的映射关系,实现对新样本种属的预测。需注意:
- 类别非数值性:标签“种属”是离散类别,需通过编码(如独热编码)转换为算法可处理的数值型向量。
- 类别局限性:训练好的算法仅能识别训练集中已定义的类别(如3种鸢尾花),无法对未包含的类别(如“玫瑰”)进行分类。
1.2.2 回归分析
在机器学习中,除分类问题外,回归分析是另一类重要任务,其目标是通过算法预测连续数值型输出。例如,在预测汽车燃油效率的场景中,需基于发动机规格、车身重量等输入特征,计算出具体的燃油效率数值(如“mpg”),这类问题即属于回归分析范畴。
以MPG数据集为例,其典型数据格式如下(CSV格式):
"mpg","cylinders","displacement","horsepower","weight","acceleration","model year","origin","car name"
18.0,8,307.0,130.0,3504.,12.0,70,1,"chevrolet chevelle malibu"
15.0,8,350.0,165.0,3693.,11.5,70,1,"buick skylark 320"
...
- 目标变量(输出) :
mpg(燃油效率,数值型)。 - 有效特征(输入) :
cylinders(气缸数)、displacement(排量)、horsepower(马力)、weight(重量)、acceleration(加速度)、model year(车型年份)等数值型数据,这些特征与燃油效率直接相关。 - 无效特征:
car name(车型名称,文本型且与燃油效率无关)、origin(产地,虽为数值型但与燃油效率关联性较弱且数据粒度较粗),通常在回归分析中会被排除。
回归分析的核心是通过训练数据拟合输入特征与输出数值之间的函数关系。例如,利用上述数据集训练算法时,需忽略无关列,仅使用有效特征构建模型,使算法能够根据新输入的汽车参数,预测其燃油效率。这与分类问题的本质区别在于:分类输出是离散类别,回归输出是连续数值。
1.2.3 聚类问题
聚类问题与分类问题具有相似性,二者均需计算机对输入数据进行编组。但聚类问题的核心特点在于:训练前无需指定数据的目标类别,而是由程序员预先设定簇的数目,算法基于输入数据的特征相似性将关联度高的样本归为同一簇。由于缺乏明确的预期输出,聚类算法属于非监督学习范畴。
以1.2.2节的汽车数据为例,若使用聚类算法将车型分为4组,算法会自动分析“气缸数”“排量”“重量”等特征,将特性相近的车型划入同一簇。例如:高油耗、大排量的车型可能被归为一组,而低油耗、轻量化的车型则形成另一组。
聚类与分类的本质区别:
-
标签依赖性:
- 分类问题依赖已知类别标签(如鸢尾花的“setosa”“versicolor”),属于监督学习;
- 聚类问题无需标签,算法自主从数据中挖掘潜在分组规律。
-
新数据处理逻辑:
- 分类算法可直接基于训练好的模型对新数据进行类别预测;
- 聚类算法中,若向现有分组添加新数据,必须重新计算全量数据的相似性并重新划分簇,无法直接复用历史分组结果。
简言之,聚类算法赋予机器更大的自主性,适用于探索未知数据结构(如用户分群、异常检测);而分类算法侧重模式匹配与泛化能力,适用于目标明确的标签预测场景。两者分别从“无监督发现”和“有监督学习”的维度,构成机器学习中数据分组的核心方法。
1.2.4 时序问题
机器学习算法的工作原理类似于数学中的函数,核心是将输入值映射为特定输出值。若算法无内部状态(即不存储历史计算信息),则给定相同输入数据集时,输出必然完全一致——这类算法的映射逻辑仅依赖当前输入,与历史数据无关。例如,传统的逻辑回归模型在处理汽车分类问题时,会基于全量数据拟合分类边界,而非仅依赖最后输入的几条数据。
然而,时序信息在机器学习中扮演着差异化角色:
- 非时序敏感场景:如汽车类型分类、鸢尾花种属预测等问题,数据的先后顺序不影响特征本质(花的萼片长度与采样时间无关),因此无需考虑时序。
- 时序敏感场景:如股票价格预测,单天股价的价值有限,而连续多日的价格波动序列(如5日均价趋势)才能反映潜在规律。此时,时序成为影响输出的关键因素。
对于不支持时序的算法(如随机森林),需通过预处理将时间序列数据转换为静态输入特征。常见方法是采用滑动窗口技术,将历史时序数据编码为算法可接受的多维向量。例如:
- 若需预测第N天的股价,可将第N-5至N-1天的收盘价作为5个独立输入维度,形成输入向量
[x₁, x₂, x₃, x₄, x₅],其中每个元素对应前序交易日的价格数据。 - 这种转换将时序信息转化为空间维度上的特征组合,使非时序算法能够捕捉数据的时间依赖性。
简言之,算法的“内部状态”决定了其对历史信息的记忆能力,而时序的处理逻辑则取决于任务特性——通过合理的特征工程,非时序算法也能有效处理时间序列数据,核心在于将动态时序模式转化为静态特征向量。
1.3 对输入/输出建模
在本章前面部分提到过,机器学习算法实际上就是给定输入、产生输出的过程,而输出会受到算法本身长短期记忆的影响。图机器学习算法抽象图示展示了机器学习算法中长短期记忆如何参与产生输出的过程。

如图机器学习算法抽象图示所示,算法接受输入,产生输出。大多数机器学习算法的输入和输出是完全同步的——只有给定输入,才会产生输出,这与人类大脑不同:人脑既可以对输入做出响应,偶尔也能在没有输入的情况下自行产生输出。
到目前为止,我们一直在抽象地谈论输入/输出模式,你一定很好奇它们的具体形态。实际上,输入和输出都是向量形式,而向量本质上是一个浮点数组,例如:
Input: [-0.245, 0.283, 0.0]
Output: [0.782, 0.543]
绝大多数机器学习算法的输入和输出数目是固定的,类似计算机程序中的函数——输入数据可视为函数参数,输出则是函数返回值。以上例为例,算法接受3个输入值,返回2个输出值,且这些数目通常不会变化,这意味着特定算法的输入/输出模式元素数量是固定的。
要使用这类算法,必须将具体问题的输入转化为浮点数数组,问题的解也会以浮点数数组形式呈现。从本质上讲,大多数机器学习算法的核心功能就是将一个数组转换为另一个数组。
在传统编程中,许多模式识别算法类似映射键值对的哈希表,而哈希表与字典高度相似——二者均通过“条目-含义”的方式存储数据。典型的哈希表结构如下:
"hear" -> "to perceive or apprehend by the ear";
"run" -> "to go faster than a walk";
"write" -> "to form (as characters or symbols) on a surface with an instrument (as a pen)"。
这个哈希表实现了单词到定义的映射(字符串键到字符串值):给定一个键(单词),哈希表返回对应的值(定义)。这一机制与大多数机器学习算法的工作原理相似。
从程序设计角度看,哈希表由键值对组成,机器学习算法输入层的输入模式可类比为哈希表的“键”,输出层的返回模式可类比为“值”——二者的核心区别在于:机器学习算法比简单哈希表复杂得多。
值得注意的是,若向上述哈希表传入未映射的键(如“wrote”),哈希表会返回空值或提示键不存在。而机器学习算法不会返回空值,而是返回最接近的匹配项或匹配概率。例如,向算法传入“wrote”,可能返回“write”的对应值。
机器学习算法不仅能查找最接近匹配项,还能微调输出以适应缺失值。但在上述示例中,由于仅包含3个实例,算法缺乏足够数据进行输出调整,此时“最接近匹配项”的实际意义有限。
上述映射关系引出一个关键问题:对于接受浮点数组并返回浮点数组的算法,如何处理字符串形式的输入?一种常用方法是词袋算法,该算法通过统计单词出现次数将字符串编码为向量,具体步骤如下:
以字符串集合为例:
Of Mice and Men
Three Blind Mice
Blind Man's Bluff
Mice and More Mice
首先提取不重复单词构建“字典”:
Input 0 : and
Input 1 : blind
Input 2 : bluff
Input 3 : man's
Input 4 : men
Input 5 : mice
Input 6 : more
Input 7 : of
Input 8 : three
然后对每行字符串进行编码(初始编码仅记录单词对应的字典索引):
Of Mice and Men [0, 4, 5, 7]
Three Blind Mice [1, 5, 8]
Blind Man's Bluff [1, 2, 3]
Mice and More Mice [0, 5, 6]
最后用0填充字典中未出现的单词,得到定长向量:
Of Mice and Men [1, 0, 0, 0, 1, 1, 0, 1, 0]
Three Blind Mice [0, 1, 0, 0, 0, 1, 0, 0, 1]
Blind Man's Bluff [0, 1, 1, 1, 0, 0, 0, 0, 0]
Mice and More Mice [1, 0, 0, 0, 0, 2, 1, 0, 0]
需要注意的是,由于字典包含9个单词,所有向量均为长度9的定长数组。向量元素值表示对应单词的出现次数,元素索引对应字典中的单词顺序。由于每个字符串仅包含字典的部分单词,向量中大部分值为0。
如上例所示,将问题建模为定长浮点数组是机器学习程序的核心特征之一。接下来的小节将通过具体案例进一步演示这种建模方法。
1.3.1 简单例子
如果你读过机器学习相关资料,一定见过 XOR(即 逻辑异或,eXclusive OR)这个运算符。模仿异或操作的程序堪称人工智能领域的“Hello World”——尽管本书包含比XOR更复杂的内容,但它仍是最佳入门案例。我们将从XOR入手,首先将其视作一个哈希表。若对XOR运算符不太熟悉,可类比AND和OR运算符,三者工作原理相似,均接受二元输入并产生布尔值输出:
- AND运算符:仅当两个输入均为真时,输出为真;
- OR运算符:只要一个输入为真,输出即为真。
对于 XOR运算符,仅当两个输入值互异时,输出为真。其真值表如下:
False XOR False = False
True XOR False = True
False XOR True = True
True XOR True = False
若将真值表转换为机器学习算法常见的输入输出映射(用浮点数表示布尔值,0.0代表False,1.0代表True),可表示为哈希表形式:
[0.0, 0.0] -> [0.0]
[1.0, 0.0] -> [1.0]
[0.0, 1.0] -> [1.0]
[1.0, 1.0] -> [0.0]
以上映射清晰展现了算法输入与理想预期输出的对应关系。
1.3.2 燃油效率
机器学习问题常需处理一组数据,通过计算对输出进行预测或对行为进行决策。以一个包含如下字段的汽车数据库为例:
- 汽车重量
- 发动机排量
- 气缸数
- 功率
- 混合动力或常规动力
- 燃油效率
若已收集到这些字段对应的数据,便可建立模型,基于其余属性值对某一属性值进行预测。例如,预测汽车的燃油效率。
首先需将问题归化为:将输入浮点数组映射到输出浮点数组,且每个数组元素取值范围需在 0~1 或 -1~1,这一步操作称为 归一化(归一化将在后续章节详细介绍)。
以汽车数据库为例,共有6个字段属性,需用其中5个预测第6个属性,因此算法需包含 5个输入 和 1个输出,结构如下:
输入1:汽车重量
输入2:发动机排量
输入3:气缸数
输入4:功率
输入5:混合动力或常规动力
输出1:燃油效率
归一化的核心是:为每个值选定合理区间,在保持相对大小不变的前提下,将其转换为 (0, 1) 区间内的值。以下是各字段的示例区间(范围较大,便于未来扩展):
- 汽车重量:45~2268千克
- 发动机排量:0.1~10升
- 气缸数:2~12个
- 功率:0.736~736千瓦
- 混合动力或常规动力:“真”(混合动力)或“假”(常规动力)
- 燃油效率:0.425~212.6千米/升
以 900千克的汽车重量 为例演示归一化过程:
- 计算区间大小:
2268 - 45 = 2223千克 - 计算目标值与最小值的差值:
900 - 45 = 855千克 - 计算相对占比:
855 / 2223 ≈ 0.385
最终,该重量归一化后的值为 0.385,满足 (0, 1) 区间要求。
对于 混合动力或常规动力 字段(布尔值),采用以下映射规则:
- 混合动力(真) → 1
- 常规动力(假) → 0
通过此方式,可将布尔值快速归一化为 0或1 的数值型输入。
通过上述归一化处理,可将原始数据转换为适合机器学习算法的输入格式,为后续模型训练奠定基础。
1.3.3 向算法传入图像
图像是算法的常见输入源,本节将介绍一种归一化图像的方法——尽管该方法不算高级,但实际效果颇为理想。
以 300像素×300像素的全彩图像 为例:每个像素包含RGB三个色彩通道,总像素量为 300×300=90,000个,通道总数则为 90,000×3=270,000个。若将每个像素直接作为输入,270,000个输入量对大多数算法而言过于庞大。因此,降采样 成为必要步骤——如图一幅全分辨率图像所示的全分辨率图像,需通过降采样压缩为 32像素×32像素 的尺寸。


压缩至 32×32像素 后,图像呈现网格状模式,可按像素生成算法输入。若算法仅需分辨像素亮度(即黑白二值),输入量为 32×32=1,024个;若需辨识色彩,则需提供每个像素的RGB三通道光强值,此时输入量提升至 32×32×3=3,072个。
通常,RGB值范围为 0~255。为创建算法输入数据,需将光强值除以255进行归一化,得到“光强百分数”。例如:
光强度10 → 10/255≈0.039
在输出处理方面,本例中算法需判断图片内容。常见方案是:为每个待识别的图片类别创建一个 输出通道,训练后的算法会在置信类别对应的通道返回 1.0,其余通道返回接近0的值。
在1.3.4节中,我们将以金融算法为例,继续探讨针对实际问题格式化算法的方法。
1.3.4 金融算法
金融预测是时间算法的常见应用场景。所谓“时间算法”,指接受时变性输入值的算法。若算法支持短期记忆(内部状态) ,则自动兼容输入范围的时变性;若算法不具备内部状态(大多数情况),则需借助输入窗口和预测窗口处理数据。以下以股市预测为例,详解双窗口的应用逻辑。
假设某股票10天收盘价如下:
Day 1:$45
Day 2:$47
Day 3:$48
Day 4:$40
Day 5:$41
Day 6:$43
Day 7:$45
Day 8:$57
Day 9:$50
Day 10:$41
第一步:数据归一化(无论算法是否具备内部状态,此步骤均为必需)。
将每日数据转换为对前一日的同比百分比变化,计算公式为:
(当日价格 - 前一日价格)/ 前一日价格
示例:Day 2的变化值为 (47-45)/45≈0.04(4%涨幅)。
归一化后数据集如下:
Day 2:0.04
Day 3:0.02
Day 4:-0.16
Day 5:0.02
Day 6:0.04
Day 7:0.04
Day 8:0.26(注:原文Day8的0.04应为计算错误,57→45的变化为(57-45)/45≈0.26)
Day 9:-0.12
Day 10:-0.18
第二步:数据编码与窗口划分(针对无内部状态的算法,采用滑动窗口算法)。
若需预测后一天股价,假设以前3天数据为输入窗口,第4天数据为预测窗口,则可构建如下训练样本:
输入(前3天变化值) → 输出(第4天变化值)
[0.04, 0.02, -0.16] → 0.02(Day2-4 → Day5)
[0.02, -0.16, 0.02] → 0.04(Day3-5 → Day6)
[-0.16, 0.02, 0.04] → 0.04(Day4-6 → Day7)
[0.02, 0.04, 0.04] → 0.26(Day5-7 → Day8)
[0.04, 0.04, 0.26] → -0.12(Day6-8 → Day9)
[0.04, 0.26, -0.12] → -0.18(Day7-9 → Day10)
此编码方式要求算法具备 3个输入通道(对应3天数据)和 1个输出通道(对应预测值)。通过滑动窗口遍历历史数据,可生成连续的训练样本集,实现对时序数据的建模与预测。
1.4 理解训练过程
训练的本质是什么?训练是算法拟合训练数据的过程——这一过程不同于前文提及的“内部状态”(短期记忆),可将其视为对模型长期记忆的系统性塑造。以神经网络为例,训练的核心是通过调整其内部的权重矩阵,使模型能够学习训练数据中的模式与规律。例如:在语言模型中,权重矩阵的优化可让模型学会识别句子中词语的语义关联。
训练的触发时机由算法设计决定。通常情况下,算法的训练阶段与实际应用阶段是明确分离的——先基于历史数据完成模型训练,再将训练好的模型部署到实际场景中执行预测或决策任务。但在部分场景(如在线学习、强化学习)中,训练与应用可并行进行,模型在处理实时数据的同时动态更新参数,形成“学习-应用-再学习”的闭环。
1.4.1 评估成果
在学校里,学生学习科目时会被打分,这种评分的核心目的之一是为学习过程提供反馈。类似地,在算法训练阶段,评估算法性能是不可或缺的环节——它既为训练过程提供指引方向,又能反馈训练成果的有效性。
评估的一种常见方式是借助评分函数:该函数基于训练好的算法输出结果进行量化评价,仅返回一个数值化分数。我们的目标是使该分数趋向上限或下限(具体取决于评分函数的设计逻辑:例如,分类任务中“准确率”需最大化,而损失函数值需最小化)。这种评分机制如同学生的考试成绩,通过数值反馈直观反映算法在特定任务上的表现水平,进而指导训练策略的调整与优化。
1.4.2 批量学习和在线学习
批量学习(batch training)和在线学习(online training)是与学习过程类型相关的两种模式,主要在处理训练数据集时发挥作用。在线学习指每输入一个训练样本就进行一次学习更新的模式,类似人类大脑对实时信息的即时处理;而批量学习则是一次性处理特定数量的训练样本,并同步更新算法参数。
在批量学习中,一次性处理的样本数量称为批量大小(通常记为batch_size),其取值范围为1到训练集大小。例如:若训练集包含1000个样本,批量大小设为32,则算法每迭代一次会处理32个样本,直至遍历整个数据集。
在线学习的核心优势在于学习与应用可同步进行,适用于实时数据场景(如流式数据处理),但其对算法的动态更新能力要求较高,因此在传统人工智能领域应用较少。值得注意的是,神经网络由于支持参数的增量式更新,使得在线学习在深度学习场景中较为常见(如实时推荐系统的模型优化)。
两种模式的本质差异在于数据处理的粒度:批量学习通过批量计算提升训练效率,在线学习则通过单样本迭代适应动态数据环境,实际应用中需根据数据特性与任务需求选择合适的训练方式。
1.4.3 监督学习和非监督学习
本章简要介绍了两种截然不同的训练方法:监督学习(supervised learning) 和非监督学习(unsupervised learning) 。当为算法提供明确的预期输出时,这类训练称为监督学习;反之,若不提供预期输出,仅让算法从输入数据中自主挖掘模式,则属于非监督学习。
此外,还存在一种混合训练方法——只需提供部分预期输出即可完成训练,这类方法常用于深度置信网络(Deep Belief Network) 等模型。例如,在半监督学习场景中,算法可利用少量标注数据和大量未标注数据共同优化模型,兼具监督学习的方向性与非监督学习的自主性。
1.4.4 随机学习和确定学习
确定学习(deterministic training) 指算法在给定相同初始状态时,始终以完全一致的方式运行,其过程不引入任何随机数。这意味着无论运行多少次,只要初始条件相同,算法的中间步骤和最终结果都完全可复现。例如,传统的线性回归模型在训练时若不使用随机初始化或随机扰动,即属于确定学习范畴。
随机学习(stochastic training) 则依赖随机数机制(如随机初始化权重、随机采样数据等)。即使初始状态相同,每次运行算法也可能因随机因素产生不同的训练结果。例如,深度学习中常用的随机梯度下降(SGD) 通过随机选取样本批次更新参数,使得每次训练路径存在差异。这种随机性虽导致结果不可复现,却赋予算法更强的探索能力(如跳出局部最优解),在复杂问题中往往能获得更优的泛化性能。
二者对比:
- 确定学习的优势在于可复现性,便于调试和理论分析,但可能因缺乏随机性而陷入固定模式,难以应对高维复杂数据;
- 随机学习虽增加了评估难度(需通过多次独立运行取平均结果),却成为现代机器学习的主流范式——从神经网络的随机权重初始化,到强化学习中的探索策略,随机性均是突破算法性能瓶颈的关键因素。
简言之,确定学习追求“一致性”,随机学习拥抱“多样性”,二者分别适用于对可复现性和灵活性有不同需求的场景。
1.5 本章小结
本章聚焦人工智能领域(尤其是机器学习)的基础知识,探讨如何将实际问题建模为机器学习算法。机器学习算法与生物过程存在微妙相似性,但人工智能的核心目标并非完全模拟人脑机制,而是超越程式化作业逻辑,构建具备智能特性的机器系统。
机器学习算法与人脑的共通点体现在输入、输出和内部状态的结构:输入与内部状态共同决定输出,其中内部状态可视为影响决策的短期记忆。而算法的长期记忆则明确界定了从输入、内部状态到输出的映射关系——训练正是通过调整长期记忆(如神经网络的权重矩阵),使算法生成预期输出的过程。
机器学习算法主要分为两大类:
- 回归算法:基于一个或多个输入,返回数值型输出,本质上是多元函数映射。例如,根据房屋面积、楼层等特征预测房价,输出可为单值(如具体价格)或多值(如价格区间)。
- 分类算法:接受一个或多个输入,返回类别型决策结果。例如,将求职者划分为“优先组”“备选组”“否决组”,算法通过分析简历关键词、工作经验等特征完成分类。
值得注意的是,机器学习算法的输入必须是数值型向量。因此,将问题转化为数值向量的表达形式是算法应用的前提——例如,将图像像素值、文本词频等非结构化数据转换为算法可处理的数值序列。
第2章将深入探讨“归一化”概念:这一预处理技术不仅用于将原始数据转化为算法可接受的输入格式(如将RGB像素值缩放至[0,1]区间),也适用于解析算法输出结果(如将神经网络的概率输出映射为类别标签)。通过归一化,数据的尺度差异得以消除,算法的学习效率与泛化能力可显著提升。