fac0133db5
将 11 个目录下的 26 个子章节文件合并到对应的父文件中, 用 --- 分隔各子章节,移除冗余的章节目录索引。 每个篇章现在是独立的单文件,结构更简洁。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
630 lines
17 KiB
Markdown
630 lines
17 KiB
Markdown
# 第二篇:数学与编程基础
|
||
|
||
本篇从函数式视角理解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](http://neuralnetworksanddeeplearning.com/) - 在线书籍
|
||
|
||
---
|
||
|
||
### 学习目标
|
||
|
||
理解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](http://neuralnetworksanddeeplearning.com/chap1.html)
|
||
|
||
[Yes you should understand backprop](https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b) \# 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 快速构建可运行版本
|
||
|
||
迭代优化 Iterative Refinement 逐步改进代码
|
||
-----------------------------------------------------------
|
||
|
||
## 延伸阅读
|
||
|
||
[Anaconda官方文档](https://docs.anaconda.com/)
|
||
|
||
[NumPy快速入门](https://numpy.org/doc/stable/user/quickstart.html)
|
||
|
||
[Cursor使用指南](https://cursor.com/docs)
|