将 11 个目录下的 26 个子章节文件合并到对应的父文件中, 用 --- 分隔各子章节,移除冗余的章节目录索引。 每个篇章现在是独立的单文件,结构更简洁。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
17 KiB
第二篇:数学与编程基础
本篇从函数式视角理解AI,介绍神经网络的基本原理和Python编程工具,为后续学习打下基础。
篇章导读
理解AI不需要高深的数学背景。核心理念是:神经网络就是由简单函数组合而成的复杂函数。
从Excel的线性回归到深度神经网络,本质上是同样的思想:用函数来描述和预测世界。
本篇将: - 从函数式视角理解AI - 介绍多层感知机的基本原理 - 讲解Python编程工具和AI辅助编程
学习目标
理解"Functions Describe the World"的核心理念
掌握从Excel到神经网络的演进逻辑
理解函数组合与层级抽象的思想
核心理念:函数描述世界
从物理定律说起
物理学用简洁的函数描述复杂现象:
现象 函数 发现者
自由落体 h = ½gt² 伽利略
万有引力 F = Gm₁m₂/r² 牛顿
电磁感应 ε = -dΦ/dt 法拉第
这些函数的共同特点:用数学关系描述客观规律
AI的函数观
AI延续了这一传统:用函数从数据中学习规律
数据`` → ``函数`` → ``预测``/``决策
x → f(x) → y
从Excel到神经网络
线性回归:y = ax + b
在Excel中,我们经常做线性拟合:
房价`` ≈ 0.015 × ``面积`` + 50``万
y = a × x + b
这就是一个最简单的"AI模型":单变量线性函数
多元回归:y = a₁x₁ + a₂x₂ + ... + b
增加更多特征:
房价`` ≈ 0.01 × ``面积`` + 0.5 × ``卧室数`` + 0.3 × ``地段评分`` - 20``万
这就是单层神经元的数学形式!
函数组合:层级嵌套
现实世界的关系往往是非线性的,需要函数组合:
h₁ = f₁(x) # ``第一层:提取特征
h₂ = f₂(h₁) # ``第二层:组合特征
y = f₃(h₂) # ``第三层:输出结果
这就是多层神经网络的本质!
函数组合的威力
为什么需要多层?
单层函数只能学习简单的线性关系
多层函数可以学习任意复杂的非线性关系
直观例子:识别圆形
输入:像素点灰度值
↓
第一层:检测边缘(梯度变化)
↓
第二层:组合边缘成弧线
↓
第三层:判断是否闭合`` → ``圆形
每一层都是一个函数,层层组合形成复杂能力。
数据驱动 vs 规则驱动
规则驱动
# ``传统编程:人工编写规则
def`` ``is_circle``(image):
edges ``=`` ``detect_edges``(image)
``if`` ``edges.is_closed``() ``and`` ``edges.is_round``():
``return`` ``True
``return`` ``False
问题:规则难以穷举,无法处理复杂情况
数据驱动
# AI``:从数据中学习函数
f ``=`` ``neural_network``()
train(f, ``thousands_of_examples``)
result ``=`` f(``new_image``) ``# ``自动判断
优势:自动发现规律,适应复杂情况
神经网络的函数本质
数学表示
一个L层神经网络:
y = ``f_L``(f_{L-``1}(``...f_₂(f₁(x))))
其中每一层:
h = ``σ(``Wx`` + b)
W:权重矩阵(可学习参数)
b:偏置向量(可学习参数)
σ:激活函数(引入非线性)
视觉理解
输入层`` ``隐藏层`` ``输出层
x ``h₁,h₂,h``₃ y
● ──────────→ ○ ──────────→ ●
│ ○ │
● ──────────→ ○ ──────────→ ●
│ ○ │
● ──────────→ ○ ──────────→ ●
``权重``W₁ ``权重``W₂
箭头上的权重就是函数的参数,通过学习自动确定。
思考与练习
1.列举3个日常生活中"用函数描述世界"的例子
2.为什么单层函数无法学习异或(XOR)问题?
3.思考:设计中有哪些问题可以用"数据驱动函数"的思路解决?
关键术语
中文 英文 说明
线性回归 Linear Regression y = ax + b 形式的函数拟合
多元回归 Multiple Regression 多输入变量的线性模型
权重 Weight 神经网络中的可学习参数
偏置 Bias 调整输出基准的参数
非线性 Non-linearity 无法用直线表示的关系
延伸阅读
Neural Networks and Deep Learning - 在线书籍
学习目标
理解MLP的基本结构
掌握前向传播的计算过程
了解激活函数的作用和类型
理解反向传播的基本思想
MLP结构
什么是MLP
MLP (Multi-Layer Perceptron):多层感知机,是最基础的神经网络结构。
网络架构
输入层`` ``隐藏层`` ``输出层
┌─────────┐ ┌─────────────┐ ┌─────────┐
│ x₁ │ │ h₁ │ │ y₁ │
│ x₂ │───→│ h₂ │───→│ y₂ │
│ x₃ │ │ h₃ │ │ y₃ │
│ ... │ │ ... │ │ ... │
│ xₙ │ │ hₘ │ │ yₖ │
└─────────┘ └─────────────┘ └─────────┘
│ │ │
└───────────────┴────────────────┘
``全连接(每个神经元相连)
层次说明
层类型 作用 神经元数量
输入层 接收原始数据 取决于特征数
隐藏层 特征变换与组合 自由设计
输出层 产生最终结果 取决于任务
前向传播
单个神经元
# ``线性部分
z ``=`` ``w₁x``₁ ``+`` ``w₂x``₂ ``+`` ... ``+`` ``wₙx``ₙ ``+`` b
# ``激活函数
h ``=`` σ(z)
完整网络
对于L层网络:
# ``第``1``层
h₁ ``=`` σ``₁(``W₁x`` ``+`` b₁)
# ``第``2``层
h₂ ``=`` σ``₂(``W₂h``₁ ``+`` b₂)
# ...
# ``第``L``层
y = σₗ(Wₗh_{l-1} + bₗ)
数据流动
输入向量`` x₀
│
├─→ W₁, b₁ ──→ z₁ = ``W₁x``₀ + b₁
│ │
│ └─→ σ₁(z₁) = h₁
│ │
└──────────────────────────────├─→ W₂, b₂ ──→ z₂ = ``W₂h``₁ + b₂
│ │
└─→ σ₂(z₂) = h₂
│
└─→ ... → y
激活函数
为什么需要激活函数?
没有激活函数,多层网络就等价于单层线性变换:
y = W₂(``W₁x``) = (W₂W``₁)x`` = ``W'x
激活函数引入非线性,使网络能够学习复杂模式。
常用激活函数
激活函数 公式 特点 应用场景
Sigmoid σ(z) = 1/(1+e⁻ᶻ) 输出(0,1) 二分类输出层
ReLU ReLU(z) = max(0,z) 简单高效 隐藏层首选
Softmax softmax(zᵢ) = eᶻⁱ/Σeᶻʲ 输出和为1 多分类输出层
Tanh tanh(z) = (eᶻ-e⁻ᶻ)/(eᶻ+e⁻ᶻ) 输出(-1,1) 循环网络
视觉对比
ReLU``: Sigmoid: Tanh:
↑ ___ ___
│ / ╲
│ / ╲
│____ / ╲___
│ ______ / │
└──────── / └──
-``∞ 0`` +∞ -∞ 0 +∞ -∞ 0 +∞
损失函数与优化
损失函数
损失函数衡量模型预测与真实值的差距:
任务 损失函数 公式
回归 均方误差 MSE = Σ(ŷ-y)²/n
二分类 交叉熵 CE = -y·log(ŷ)
多分类 交叉熵 CE = -Σyᵢ·log(ŷᵢ)
优化目标
最小化损失函数:
min L(f(x; θ), y)
其中`` θ = {W₁, b₁, W₂, b₂, ...} ``是所有可学习参数
梯度下降
重复直到收敛:
θ = θ - α·∇L(θ)
其中:
θ``:参数
α``:学习率
∇L(θ)``:损失函数的梯度
反向传播
核心思想
从输出层向输入层反向计算梯度:
输出层误差`` → ``隐藏层误差`` → ... → ``输入层误差
链式法则
∂L/∂W₁ = (∂L/∂y) · (∂y/∂h₂) · (∂h₂/∂z₂) ·
`` (``∂z₂/∂h₁) · (∂h₁/∂z₁) · (∂z₁/∂W₁)
直观理解
1.前向传播:计算每个神经元的输出
2.计算误差:比较输出与真实值
3.反向传播:将误差反向传递
4.更新权重:根据误差调整参数
MLP vs 传统模型
特性 MLP 传统机器学习
特征工程 自动学习 人工设计
非线性能力 强 中/弱
数据需求 大量 中等
可解释性 低 高
训练时间 长 短
思考与练习
1.为什么隐藏层越多,网络表达能力越强?
2.ReLU为什么比Sigmoid更适合隐藏层?
3.如果所有权重初始化为0,会发生什么?
关键术语
中文 英文 说明
前向传播 Forward Pass 数据从输入到输出的计算过程
反向传播 Backpropagation 计算梯度的算法
损失函数 Loss Function 衡量预测误差的函数
梯度下降 Gradient Descent 优化算法
学习率 Learning Rate 参数更新的步长
延伸阅读
Neural Networks and Deep Learning - Chapter 1
Yes you should understand backprop # 01.3 编程工具与Vibe Coding
学习目标
掌握Python AI开发环境配置
了解核心科学计算库
理解Vibe Coding的AI辅助编程新模式
Python环境配置
Anaconda vs Miniconda
工具 大小 特点 适用场景
Anaconda ~500MB 预装常用库 初学者推荐
Miniconda ~50MB 仅含conda 精简安装
安装步骤
1.下载安装
o访问 https://www.anaconda.com/download
o选择Python 3.x版本
o按提示安装
2.创建虚拟环境
conda`` create ``-n`` ai-env python=3.10
conda`` activate ai-env
3.安装核心库
conda`` install ``numpy`` pandas ``scipy
pip`` install torch ``torchvision
核心科学计算库
NumPy:数值计算基础
import`` ``numpy`` ``as`` np
# ``创建数组
x ``=`` ``np.array``([``1``, ``2``, ``3``, ``4``])
# ``矩阵运算
W ``=`` ``np.random.randn``(``4``, ``3``) ``# 4×3``权重矩阵
h ``=`` np.dot(x, W) ``# ``矩阵乘法
# ``激活函数
relu`` ``=`` ``np.maximum``(``0``, h) ``# ``ReLU
Pandas:数据处理
import`` pandas ``as`` pd
# ``读取数据
df`` ``=`` ``pd.read_csv``(``'data.csv'``)
# ``数据清洗
df`` ``=`` ``df.dropna``()
df`` ``=`` ``df`` normalized ``=`` (``df`` ``-`` ``df.mean``()) ``/`` ``df.std``()
# ``统计分析
df.describe``()
SciPy:科学计算
from`` ``scipy`` ``import`` optimize
from`` ``scipy.spatial`` ``import`` distance
# ``优化问题
result ``=`` ``optimize.minimize``(``loss_func``, x0)
# ``距离计算
dist`` ``=`` ``distance.euclidean``(point1, point2)
开发工具选择
VSCode
特点: - 微软开源,免费 - 丰富的插件生态 - 轻量级,启动快
AI开发常用插件: - Python - Jupyter - Pylance - Copilot
Cursor
特点: - AI原生IDE - 代码补全与生成 - 自然语言编程
使用场景: - 快速原型开发 - 代码重构 - 学习新API
Jupyter Notebook
特点: - 交互式编程 - 可视化友好 - 文档即代码
使用场景: - 数据探索 - 算法实验 - 教学演示
Vibe Coding:AI辅助编程
什么是Vibe Coding
传统编程:明确需求 → 设计算法 → 编写代码
Vibe Coding:模糊想法 → AI辅助 → 迭代完善
工作流程
1. 描述意图(自然语言)
"``帮我创建一个简单的神经网络``"
2. AI``生成代码
→ 自动生成完整代码框架
3. ``运行测试
→ ``发现问题或需要调整
4. ``迭代优化
"``把隐藏层改成``128``个神经元``"
→ AI``自动修改代码
5. ``理解学习
→ 阅读AI生成的代码,学习最佳实践
实践技巧
技巧 说明
明确需求 详细描述输入输出
分步实现 复杂功能拆解为小任务
验证结果 检查生成的代码
学习思考 理解AI为什么这样写
工具推荐
工具 特点 适用场景
GitHub Copilot 代码补全 日常开发
Cursor 对话式编程 快速原型
ChatGPT/Claude 代码生成与解释 学习咨询
Replit Agent 端到端开发 小型项目
开发工作流
项目结构
project/
├── data/ # ``数据文件
├── notebooks/ # ``Jupyter``笔记本
├── ``src``/ # ``源代码
│ ├── models/ # ``模型定义
│ ├── utils/ # ``工具函数
│ └── train.py # ``训练脚本
├── requirements.txt # ``依赖列表
└── README.md # ``项目说明
典型工作流
# 1. ``创建环境
conda`` create ``-n`` ``myproject`` python=3.10
conda`` activate ``myproject
# 2. ``安装依赖
pip`` install ``-r`` requirements.txt
# 3. ``开发迭代
# - ``在``notebook``中实验
# - ``整理到``src``/``目录
# - ``运行测试
# 4. ``保存环境
conda`` env export ``>`` ``environment.yml
思考与练习
1.对比Anaconda和Miniconda,什么时候该用哪个?
2.尝试用Cursor/Copilot生成一个简单的神经网络代码
3.Vibe Coding如何改变传统的编程学习方式?
关键术语
中文 英文 说明
虚拟环境 Virtual Environment 隔离的Python运行环境
依赖管理 Dependency Management 管理项目所需的库
代码补全 Code Completion 自动补全正在输入的代码
原型开发 Prototyping 快速构建可运行版本