|
|
@@ -0,0 +1,98 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="zh-CN">
|
|
|
+<head>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+ <title>1 - 感知机</title>
|
|
|
+ <style>
|
|
|
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 20px; background: #1a1a2e; color: #eaeaea; }
|
|
|
+ h1 { color: #e94560; border-bottom: 2px solid #e94560; padding-bottom: 10px; }
|
|
|
+ h2 { color: #0f3460; background: #16213e; padding: 10px; border-left: 4px solid #e94560; margin-top: 30px; }
|
|
|
+ .module { background: #0f3460; padding: 15px; margin: 20px 0; border-radius: 5px; }
|
|
|
+ .module-title { color: #e94560; font-weight: bold; margin-bottom: 10px; }
|
|
|
+ code { background: #1a1a2e; padding: 2px 6px; border-radius: 3px; color: #f0f6f6; }
|
|
|
+ pre { background: #1a1a2e; padding: 15px; border-radius: 5px; overflow-x: auto; }
|
|
|
+ .symbol-map { background: #16213e; padding: 10px; margin: 5px 0; border-left: 3px solid #0f3460; }
|
|
|
+ .warning { background: #e94560; color: #fff; padding: 10px; border-radius: 5px; margin: 10px 0; }
|
|
|
+ .youtube { background: #ff0000; color: #fff; padding: 10px; border-radius: 5px; display: inline-block; margin: 10px 0; }
|
|
|
+ </style>
|
|
|
+ https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css
|
|
|
+</head>
|
|
|
+<body>
|
|
|
+ <h1>👾 Day 1: 感知机</h1>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">1️⃣【技术债与演进动机】The Technical Debt & Evolution</div>
|
|
|
+ 之前的算法无法处理线性不可分数据,导致泛化能力差。感知机通过引入决策边界,将分类问题转化为优化问题。
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">2️⃣【直觉建立】Visual Intuition</div>
|
|
|
+ 想象一条直线(或超平面)将两类点分开。权重向量 $w$ 决定直线的方向,偏置 $b$ 决定直线的位置。
|
|
|
+ <div class="youtube">🎬 B 站搜索:<code>感知机 直观解释</code></div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">3️⃣【符号解码字典】The Symbol Decoder</div>
|
|
|
+
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$w$</strong> → <code>self.weights</code> (权重向量,shape: [d])
|
|
|
+ </div>
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$b$</strong> → <code>self.bias</code> (偏置标量,shape: [])
|
|
|
+ </div>
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$x$</strong> → <code>input_tensor</code> (输入样本,shape: [d])
|
|
|
+ </div>
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$y$</strong> → <code>label</code> (标签,值域:{-1, +1})
|
|
|
+ </div>
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$\sign(\cdot)$</strong> → <code>np.sign()</code> (符号函数)
|
|
|
+ </div>
|
|
|
+ <div class="symbol-map">
|
|
|
+ <strong>$\xi$</strong> → <code>margin</code> (间隔,用于更新步长)
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">4️⃣【核心推导】The Math</div>
|
|
|
+
|
|
|
+### 感知机预测函数
|
|
|
+
|
|
|
+$$f(x) = w \cdot x + b$$
|
|
|
+
|
|
|
+其中 $\cdot$ 表示向量点积。
|
|
|
+
|
|
|
+### 损失函数( hinge loss 的简化形式)
|
|
|
+
|
|
|
+$$L(w, b) = -\sum_{x_i \in M} y_i (w \cdot x_i + b)$$
|
|
|
+
|
|
|
+$M$ 是误分类点集合。
|
|
|
+
|
|
|
+### 梯度下降更新规则
|
|
|
+
|
|
|
+$$w \leftarrow w + \eta \cdot y_i \cdot x_i$$
|
|
|
+
|
|
|
+$$b \leftarrow b + \eta \cdot y_i$$
|
|
|
+
|
|
|
+其中 $\eta$ 是学习率。
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">5️⃣【工程优化点】The Optimization Bottleneck</div>
|
|
|
+ 全量梯度下降需要遍历所有样本,复杂度 $O(N \cdot d)$。现代框架使用 mini-batch SGD 加速。
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="module">
|
|
|
+ <div class="module-title">6️⃣【今日靶机】The OJ Mission</div>
|
|
|
+ <div class="warning">🎯 任务:<code>cd exercises/ && python3 day1_task.py</code></div>
|
|
|
+ 实现感知机的 forward 和 update 函数,在 XOR 数据集上验证无法收敛(线性不可分)。
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
|
|
|
+ <script>renderMathInElement(document.body);</script>
|
|
|
+</body>
|
|
|
+</html>
|