首页 / 第一章
01走进人工智能
在写下第一行代码之前,我们先回答三个问题:究竟什么是"智能"?人工智能从哪里来、又走到了哪里? 为什么今天几乎所有的人工智能实现,都选择了 Python 这门语言? 本章将搭建好整个旅程的认知地图与开发环境。
1.1 什么是人工智能
"人工智能"(Artificial Intelligence,AI)一词由麦卡锡(John McCarthy)等人于 1956 年达特茅斯会议上正式提出。 但要给它下一个精确的定义并不容易——困难不在于"人工"(Artificial),而在于"智能"(Intelligence)本身。 人的智能包含感知、记忆、思维、学习、自适应、行为决策等一系列能力,至今没有公认的统一定义。
Russell 与 Norvig 在经典教材《人工智能:一种现代方法》中,从两个维度把 AI 的定义划分为四类:
| 思考方式 | 以人为范本 | 以理性为标准 |
|---|---|---|
| 像人一样思考 | 认知建模方向:研究人类心智的运作规律,并用计算机模拟,如认知科学、神经网络。 | 思维法则方向:以形式逻辑刻画正确的推理过程,如逻辑主义 AI。 |
| 像人一样行动 | 图灵测试方向:行为与人类不可区分即视为有智能。 | 理性智能体方向:在环境中感知并采取使期望性能最大化的行动(现代 AI 主流视角)。 |
◈ 定义
人工智能是一门研究如何构造智能机器(智能计算机)或智能系统,使它能模拟、延伸、扩展人类智能的学科。 它是计算机科学的一个分支,同时又是哲学、数学、神经科学、语言学、经济学、控制论等多学科交叉的前沿领域。
1.1.1 图灵测试
1950 年,图灵(Alan Turing)在论文《计算机器与智能》中提出了著名的"模仿游戏",后人称为图灵测试: 让一个人类提问者通过文字与两个对象(一个人、一台机器)交谈,如果提问者无法可靠地区分谁是机器,就认为该机器具有了智能。
图灵测试回避了"智能是什么"的哲学纠缠,直接以外在行为作为判据,影响深远。它也引出了若干著名的反方论证:
- 中文房间(Searle,1980):一个不懂中文的人靠规则手册也能给出地道的中文回答——语法操作不等于真正理解(语义)。
- 大语言模型时代,机器已能在多数开放对话中"骗过"人类,促使学界重新审视图灵测试的有效性。
1.1.2 弱人工智能、强人工智能与超人工智能
弱 AI(ANI)
Artificial Narrow Intelligence。面向特定任务的智能,如下棋、人脸识别、语音助手、大模型聊天。今天所有的 AI 都属于此类。
强 AI(AGI)
Artificial General Intelligence。具备与人类同等的、跨领域通用的智能,拥有自我意识与真正的理解能力,尚未实现。
超 AI(ASI)
Artificial Superintelligence。在所有方面都远超人类智能水平的智能,目前仅存在于未来学讨论中。
1.2 人工智能的发展历程
人工智能六十余年的历史并非一条直线,而是经历了多次"高潮—寒冬—复苏"的螺旋。
| 时期 | 阶段 | 标志性事件 |
|---|---|---|
| 1956 之前 | 孕育期 | 布尔代数、图灵机(1936)、McCulloch-Pitts 神经元模型(1943)、Hebb 学习规则(1949)。 |
| 1956–1970 | 形成期 | 达特茅斯会议(1956)正式命名 AI;Newell 与 Simon 的逻辑理论家、通用问题求解器 GPS; perceptron 感知机(1958)。 |
| 1970–1980 | 第一次寒冬 | 机器翻译与感知机能力被高估,资金撤离;Minsky 证明单层感知机不能解决异或问题。 |
| 1980–1987 | 专家系统兴盛 | MYCIN、XCON 等专家系统商业化成功;反向传播算法(BP,1986)被重新发现,连接主义复兴。 |
| 1987–1993 | 第二次寒冬 | 专家系统维护困难、通用性差,桌面机崛起,专用 AI 硬件市场崩溃。 |
| 1993–2010 | 稳健发展 | IBM "深蓝"战胜国际象棋冠军(1997);支持向量机、随机森林等统计学习方法成为主流。 |
| 2011–至今 | 深度学习与大模型时代 | AlexNet(2012)引爆深度学习;AlphaGo(2016);Transformer(2017);GPT 系列与生成式 AI(2020 起)。 |
"我们对人工智能的估计,往往在短期内过于乐观,在长期内又过于保守。"——AI 发展中的"阿莫拉韦茨悖论"也提醒我们: 人类觉得难的高级推理(下棋)对机器很容易,而人类觉得最简单的感知运动(走路、认猫)对机器却极难。
1.3 人工智能的三大学派
在 AI 的研究路线上,长期存在三种范式,它们对"智能的本质是什么、应该用什么方法实现"给出了不同回答。
① 符号主义(Symbolism)
又称逻辑主义、计算机学派。认为认知的基元是符号,认知过程就是符号表示下的符号运算。 其方法论是物理符号系统假设:任何一个系统,如果它能表现出智能,就必定能执行对符号结构的输入、输出、存储、复制、条件转移等六种操作;反之亦然。 代表成果:定理证明、专家系统、知识工程、Prolog 语言。本书第 2、3、8 章主要属于这一路线。
② 连接主义(Connectionism)
又称仿生学派、生理学派。认为思维的基元是神经元,智能是大量简单神经元通过连接(权重)并行活动的涌现结果, 不需要显式的符号与规则。代表成果:感知机、反向传播、CNN/RNN、深度学习与大模型。本书第 6、7、9 章大量涉及。
③ 行为主义(Actionism)
又称进化主义、控制论学派。认为智能取决于感知和行动,是在与环境的交互、反馈与进化中逐步形成的, 不需要知识、不需要表示、不需要推理。代表成果:Brooks 的机器人智能体、强化学习、进化计算、群体智能。本书第 6、10 章与之相关。
| 对比维度 | 符号主义 | 连接主义 | 行为主义 |
|---|---|---|---|
| 基本出发点 | 符号与逻辑 | 神经元连接 | 感知—行动 |
| 知识来源 | 人工编码规则 | 从数据中学习 | 环境交互进化 |
| 代表方法 | 谓词逻辑、专家系统 | 神经网络、深度学习 | 强化学习、遗传算法 |
| 可解释性 | 强 | 弱(黑箱) | 中 |
| 擅长领域 | 推理、诊断 | 感知、生成 | 控制、决策 |
1.4 人工智能研究的基本内容
- 知识表示:把世界中的事实、关系、经验变成计算机能存储与处理的数据结构。是符号主义 AI 的基础(第 2 章)。
- 机器感知:使机器具有视觉、听觉、触觉等感知能力,如图像识别、语音识别。
- 机器思维:对感知信息和内部知识进行推理、搜索、规划的过程(第 3、4、5 章)。
- 机器学习:让系统从数据和经验中自动获取知识、改进性能(第 6、7、9 章的核心)。
- 机器行为:智能系统作用于环境的能力,如自然语言生成、机器人运动控制、多智能体协作(第 10 章)。
1.5 人工智能的主要应用领域
计算机视觉
图像分类、目标检测、人脸识别、自动驾驶环境感知、医学影像分析。
自然语言处理
分词、机器翻译、问答系统、文本生成、信息检索、大语言模型(第 9 章)。
语音处理
语音识别 ASR、语音合成 TTS、声纹识别、实时语音对话。
推荐系统
电商推荐、内容信息流、广告点击率预估,核心是协同过滤与排序学习。
智能决策
博弈、路径规划、量化交易、供应链调度、智慧交通。
专家系统
医疗诊断、故障诊断、法律咨询,把领域专家经验沉淀为知识库(第 8 章)。
智能机器人
工业机器人、服务机器人、无人系统,融合感知、规划与控制。
生成式 AI
文本/图像/音视频生成、代码助手、AI Agent,基于大模型的新一代应用形态。
1.6 Python 与人工智能开发环境
1.6.1 为什么 AI 选择了 Python
- 语法简洁、接近伪代码:研究者可以把精力集中在算法本身,而非语言细节。
- 生态极其丰富:NumPy / SciPy / pandas / scikit-learn / PyTorch / TensorFlow / HuggingFace 一应俱全。
- "胶水语言"特性:底层由 C/C++/CUDA 实现保证性能,上层用 Python 调用保证开发效率。
- 社区与人才:几乎所有前沿论文都首先提供 Python 实现,形成了正向循环。
1.6.2 安装 Python 并配置虚拟环境(Windows)
从官网下载 Python 3.10 及以上版本安装时,务必勾选 "Add Python to PATH"。安装完成后打开 PowerShell 验证:
python --version # 查看 Python 版本,应输出 Python 3.x.x
# 进入项目目录后,创建并激活虚拟环境(强烈建议)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# 若提示脚本执行被禁止,可先执行(仅当前会话):
# Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
# 安装本书常用的第三方库
pip install numpy pandas scikit-learn matplotlib
pip install torch # 第 6、7 章深度学习部分(CPU 版即可学习)
# 国内用户可切换清华镜像加速下载
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
✦ 提示
本书绝大多数代码仅依赖 Python 标准库和 NumPy,目的是让你看清算法内部的每一步。 建议先跟着手写实现,再去对比 scikit-learn 等库的调用方式——"先造轮子,再用轮子"是理解算法最扎实的路径。
1.6.3 常用开发工具
- VS Code:免费轻量,安装 Python 插件后体验优秀,适合本书全部示例。
- Jupyter Notebook:以单元格方式运行代码、即时查看图表,做数据分析与算法实验极其方便。
- PyCharm:功能强大的专业 Python IDE,社区版免费。
1.7 Python 语法速览
本节用一段完整代码快速回顾阅读本书所需的 Python 语法。已有基础的读者可直接跳到 1.8 节。
# ========== 1. 基本数据类型 ==========
x = 3 # int 整数
pi = 3.14159 # float 浮点数
name = "人工智能" # str 字符串(Python 3 中字符串默认 Unicode,支持中文)
flag = True # bool 布尔值:True / False
nothing = None # None 表示"空"
print(type(x), type(pi), type(name)) # type() 查看类型
print(name[0], name[-1], len(name)) # 字符串索引与长度:人 能 4
print(f"圆周率约为 {pi:.2f}") # f-string 格式化输出
# ========== 2. 容器 ==========
# 列表 list:可变、有序
fruits = ["苹果", "香蕉", "橙子"]
fruits.append("葡萄")
print(fruits[1:3]) # 切片 ['香蕉', '橙子']
# 字典 dict:键值对
scores = {"张三": 90, "李四": 85}
scores["王五"] = 78
print(scores.get("赵六", "查无此人")) # 键不存在时返回默认值
# 元组 tuple:不可变;集合 set:无序不重复
point = (3, 4)
uniq = set([1, 1, 2, 3, 3])
print(point, uniq) # (3, 4) {1, 2, 3}
# ========== 3. 控制流(注意用缩进表示代码块,通常 4 个空格)==========
for i in range(3): # range(3) 产生 0,1,2
if i % 2 == 0:
print(f"{i} 是偶数")
else:
print(f"{i} 是奇数")
# 列表推导式:简洁地构造列表
squares = [i ** 2 for i in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# ========== 4. 函数 ==========
def sigmoid(z):
"""逻辑斯蒂函数,神经网络中最常用的激活函数之一。"""
import math
return 1.0 / (1.0 + math.exp(-z))
print(sigmoid(0)) # 0.5
print(sigmoid(2)) # 约 0.8808
def greet(name, greeting="你好"): # 默认参数
return f"{greeting},{name}!"
print(greet("同学"))
print(greet("同学", greeting="晚上好")) # 关键字参数
# ========== 5. 类与面向对象 ==========
class Animal:
def __init__(self, name, sound): # 构造方法,self 指向实例自身
self.name = name
self.sound = sound
def speak(self):
return f"{self.name} 发出 {self.sound} 的声音"
class Dog(Animal): # 继承 Animal
def __init__(self, name):
super().__init__(name, "汪汪") # 调用父类构造
def speak(self): # 方法重写(多态)
return f"{self.name} 摇着尾巴说:{self.sound}!"
d = Dog("旺财")
print(d.speak())
# ========== 6. 模块与文件 ==========
import random
print(random.randint(1, 6)) # 模拟掷骰子
# with 语句自动关闭文件;encoding="utf-8" 避免中文乱码
with open("demo.txt", "w", encoding="utf-8") as f:
f.write("第一行:知识就是力量\n")
with open("demo.txt", "r", encoding="utf-8") as f:
print(f.read())
<class 'int'> <class 'float'> <class 'str'>
人 能 4
圆周率约为 3.14
['香蕉', '橙子']
查无此人
(3, 4) {1, 2, 3}
0 是偶数
1 是奇数
2 是偶数
[0, 1, 4, 9, 16]
0.5
0.8807970779778823
你好,同学!
晚上好,同学!
旺财 摇着尾巴说:汪汪!
第一行:知识就是力量
1.8 NumPy 基础——AI 计算的基石
NumPy(Numerical Python)提供了高性能的多维数组对象 ndarray。
神经网络中的一批图像、词表中的一批词向量,本质上都是多维数组;
后续章节几乎所有算法的底层运算都由 NumPy 承担。
1.8.1 创建数组
import numpy as np
# 从列表创建
a = np.array([1, 2, 3, 4], dtype=np.float64)
print(a, a.shape, a.dtype) # [1. 2. 3. 4.] (4,) float64
# 常用快捷创建
print(np.zeros((2, 3))) # 2行3列全 0
print(np.ones((2, 2))) # 2行2列全 1
print(np.eye(3)) # 3阶单位矩阵
print(np.arange(0, 10, 2)) # [0 2 4 6 8]
print(np.linspace(0, 1, 5)) # [0. 0.25 0.5 0.75 1. ]
print(np.random.rand(2, 3)) # 2x3 的 [0,1) 均匀随机数
print(np.random.randn(2, 3)) # 2x3 的标准正态随机数
# 固定随机种子,使结果可复现(做实验的好习惯)
rng = np.random.default_rng(seed=42)
print(rng.integers(0, 10, size=5))
1.8.2 形状、索引与切片
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(m.shape) # (3, 3)
print(m[0, 0]) # 第1行第1列:1
print(m[1]) # 第2行:[4 5 6]
print(m[:, 0]) # 第1列:[1 4 7]
print(m[0:2, 1:3]) # 前2行、第2~3列
# [[2 3]
# [5 6]]
print(m[m > 5]) # 布尔索引:[6 7 8 9]
m2 = m.reshape(1, 9) # 改形状(不改变数据)
print(m2.shape) # (1, 9)
print(m.T) # 转置
# 向量的点积与矩阵乘法
v = np.array([1, 2, 3])
print(np.dot(v, v)) # 点积:14
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A @ B) # @ 是矩阵乘法运算符
# [[19 22]
# [43 50]]
1.8.3 逐元素运算与广播
import numpy as np
a = np.array([1.0, 2.0, 3.0, 4.0])
# 逐元素运算(比 Python 循环快几十倍)
print(a + 10) # [11. 12. 13. 14.]
print(a * 2) # [2. 4. 6. 8.]
print(np.exp(a)) # 每个元素取 e^x
print(np.sqrt(a))
print(1 / (1 + np.exp(-a))) # 对整个数组做 sigmoid!
# 聚合运算
print(a.sum(), a.mean(), a.max(), a.std()) # 10.0 2.5 4.0 1.118...
X = np.array([[1, 2, 3],
[4, 5, 6]])
print(X.sum(axis=0)) # 沿第0轴(跨行)求和:[5 7 9]
print(X.sum(axis=1)) # 沿第1轴(跨列)求和:[ 6 15]
# 广播(broadcasting):形状不同的数组自动扩展后运算
W = np.ones((3, 4)) # 3x4
b = np.array([10, 20, 30, 40]) # 形状 (4,),自动扩展为 3x4
print(W + b) # 每一行都加上 b
◈ 为什么强调向量化
Python 的 for 循环较慢,而 NumPy 把整个数组的循环放到了 C 语言层执行。
后面实现神经网络时,"一个样本一个样本地算"与"整批样本一次性矩阵相乘",速度可能相差百倍。
能用数组运算解决的问题,尽量不要手写 Python 循环。
1.9 第一个有"学习"味道的程序
最后,我们用 NumPy 写一个最小的"学习器":假设房屋面积 x 与价格 y 近似满足直线关系
y = w·x + b,我们事先不知道 w 和 b,
让程序通过梯度下降从数据中自己"学"出这两个参数。这正是第 6、7 章所有神经网络训练的雏形。
更新规则:w ← w − η·∂L/∂w, b ← b − η·∂L/∂b
import numpy as np
# ---------- 1. 准备"观测数据" ----------
# 真实关系是 y = 2x + 1 加一点噪声(模拟现实中的测量误差)
rng = np.random.default_rng(0)
X = np.linspace(0, 10, 50)
y = 2 * X + 1 + rng.normal(0, 1.0, size=X.shape)
# ---------- 2. 初始化参数(随便猜) ----------
w = 0.0
b = 0.0
lr = 0.01 # 学习率 η
n = len(X)
# ---------- 3. 梯度下降:反复修正 w 和 b ----------
for epoch in range(200):
y_pred = w * X + b # 前向:用当前参数做预测
error = y_pred - y # 预测误差
loss = (error ** 2).mean() # 均方误差 MSE
grad_w = (2 / n) * (error * X).sum() # 损失对 w 的偏导
grad_b = (2 / n) * error.sum() # 损失对 b 的偏导
w -= lr * grad_w # 更新参数
b -= lr * grad_b
if epoch % 40 == 0:
print(f"第 {epoch:3d} 轮 | 损失 {loss:8.4f} | w={w:.3f} b={b:.3f}")
print(f"\n学习结果:w = {w:.3f}(真值 2),b = {b:.3f}(真值 1)")
# ---------- 4. 用学到的模型做预测 ----------
for area in [3.0, 7.5, 12.0]:
print(f"面积 {area:5.1f} → 预测价格 {w * area + b:.2f}")
第 0 轮 | 损失 151.2368 | w=1.351 b=0.201 第 40 轮 | 损失 2.2689 | w=2.073 b=0.398 第 80 轮 | 损失 1.3561 | w=2.027 b=0.720 第 120 轮 | 损失 1.1176 | w=2.000 b=0.898 第 160 轮 | 损失 1.0553 | w=1.986 b=0.991 学习结果:w = 1.980(真值 2),b = 1.038(真值 1) 面积 3.0 → 预测价格 6.98 面积 7.5 → 预测价格 15.89 面积 12.0 → 预测价格 24.80
程序一开始把 w、b 猜成 0,损失很大;随着一轮轮沿梯度方向修正,
参数逐渐逼近真实值 (2, 1),损失持续下降。"定义目标 → 计算误差 → 沿梯度修正参数 → 循环",
这四步就是"学习"的全部秘密。从第 6 章的 BP 网络到第 7 章的大模型训练,骨架都是它。
本章小结
- 人工智能研究用机器模拟、延伸人类智能,可从"像人/理性 × 思考/行动"四个角度定义;图灵测试以行为判智能。
- AI 经历了两次寒冬与三次浪潮,当前正处在深度学习与大模型驱动的第三次高潮。
- 三大研究学派:符号主义(符号与逻辑)、连接主义(神经网络)、行为主义(感知行动与进化)。
- 研究内容包括知识表示、机器感知、机器思维、机器学习、机器行为五个方面。
- 掌握 Python 基础语法、面向对象与 NumPy 向量化运算,是后续全部章节的工具准备。
- 梯度下降演示揭示了学习的本质:从数据中迭代修正参数以最小化误差。