# 第二篇:数学与编程基础 本篇从函数式视角理解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)