首页 / 第一章

01

走进人工智能

在写下第一行代码之前,我们先回答三个问题:究竟什么是"智能"?人工智能从哪里来、又走到了哪里? 为什么今天几乎所有的人工智能实现,都选择了 Python 这门语言? 本章将搭建好整个旅程的认知地图与开发环境。

1.1 什么是人工智能

"人工智能"(Artificial Intelligence,AI)一词由麦卡锡(John McCarthy)等人于 1956 年达特茅斯会议上正式提出。 但要给它下一个精确的定义并不容易——困难不在于"人工"(Artificial),而在于"智能"(Intelligence)本身。 人的智能包含感知、记忆、思维、学习、自适应、行为决策等一系列能力,至今没有公认的统一定义。

Russell 与 Norvig 在经典教材《人工智能:一种现代方法》中,从两个维度把 AI 的定义划分为四类:

思考方式以人为范本以理性为标准
像人一样思考 认知建模方向:研究人类心智的运作规律,并用计算机模拟,如认知科学、神经网络。 思维法则方向:以形式逻辑刻画正确的推理过程,如逻辑主义 AI。
像人一样行动 图灵测试方向:行为与人类不可区分即视为有智能。 理性智能体方向:在环境中感知并采取使期望性能最大化的行动(现代 AI 主流视角)。

◈ 定义

人工智能是一门研究如何构造智能机器(智能计算机)或智能系统,使它能模拟、延伸、扩展人类智能的学科。 它是计算机科学的一个分支,同时又是哲学、数学、神经科学、语言学、经济学、控制论等多学科交叉的前沿领域。

1.1.1 图灵测试

1950 年,图灵(Alan Turing)在论文《计算机器与智能》中提出了著名的"模仿游戏",后人称为图灵测试: 让一个人类提问者通过文字与两个对象(一个人、一台机器)交谈,如果提问者无法可靠地区分谁是机器,就认为该机器具有了智能。

图灵测试回避了"智能是什么"的哲学纠缠,直接以外在行为作为判据,影响深远。它也引出了若干著名的反方论证:

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 人工智能研究的基本内容

  1. 知识表示:把世界中的事实、关系、经验变成计算机能存储与处理的数据结构。是符号主义 AI 的基础(第 2 章)。
  2. 机器感知:使机器具有视觉、听觉、触觉等感知能力,如图像识别、语音识别。
  3. 机器思维:对感知信息和内部知识进行推理、搜索、规划的过程(第 3、4、5 章)。
  4. 机器学习:让系统从数据和经验中自动获取知识、改进性能(第 6、7、9 章的核心)。
  5. 机器行为:智能系统作用于环境的能力,如自然语言生成、机器人运动控制、多智能体协作(第 10 章)。

1.5 人工智能的主要应用领域

计算机视觉

图像分类、目标检测、人脸识别、自动驾驶环境感知、医学影像分析。

自然语言处理

分词、机器翻译、问答系统、文本生成、信息检索、大语言模型(第 9 章)。

语音处理

语音识别 ASR、语音合成 TTS、声纹识别、实时语音对话。

推荐系统

电商推荐、内容信息流、广告点击率预估,核心是协同过滤与排序学习。

智能决策

博弈、路径规划、量化交易、供应链调度、智慧交通。

专家系统

医疗诊断、故障诊断、法律咨询,把领域专家经验沉淀为知识库(第 8 章)。

智能机器人

工业机器人、服务机器人、无人系统,融合感知、规划与控制。

生成式 AI

文本/图像/音视频生成、代码助手、AI Agent,基于大模型的新一代应用形态。

1.6 Python 与人工智能开发环境

1.6.1 为什么 AI 选择了 Python

1.6.2 安装 Python 并配置虚拟环境(Windows)

从官网下载 Python 3.10 及以上版本安装时,务必勾选 "Add Python to PATH"。安装完成后打开 PowerShell 验证:

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 常用开发工具

1.7 Python 语法速览

本节用一段完整代码快速回顾阅读本书所需的 Python 语法。已有基础的读者可直接跳到 1.8 节。

python_basics.py
# ========== 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 创建数组

numpy_1_create.py
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 形状、索引与切片

numpy_2_index.py
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 逐元素运算与广播

numpy_3_ufunc.py
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 章所有神经网络训练的雏形。

损失函数:L(w,b) = (1/2n) Σi ( w·xi + b − yi )2
更新规则:w ← w − η·∂L/∂w, b ← b − η·∂L/∂b
gradient_descent_demo.py
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 向量化运算,是后续全部章节的工具准备。
  • 梯度下降演示揭示了学习的本质:从数据中迭代修正参数以最小化误差。