AI 入门 30 天挑战 - Day 8 费曼学习法版 - 神经网络初探

张开发
2026/4/15 23:50:23 15 分钟阅读

分享文章

AI 入门 30 天挑战 - Day 8 费曼学习法版 - 神经网络初探
完整项目和代码本教程是AI 入门 30 天挑战系列的一部分GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-ChallengeCSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐欢迎 Star 支持欢迎来到 Week 2今天学习神经网络从生物神经元到人工智能每个概念都解释每行代码都说明白预计时间2-3 小时含费曼输出练习 第 1 步快速复习 Week 1 的内容25 分钟费曼输出 #0考考你合上教程尝试回答□ 监督学习和无监督学习的本质区别是什么用至少 2 个生活例子说明 □ KNN、决策树、SVM 各有什么特点分别适合什么场景 □ 精确率和召回率如何选择举例说明 □ 什么是过拟合如何用生活中的例子解释 □ 混淆矩阵的 TP/TN/FP/FN 各代表什么⏰ 时间20 分钟如果能答出 80% 以上我们开始今天的深度学习之旅如果不够花 5 分钟快速翻阅 Week 1 的笔记。 第 2 步为什么需要神经网络35 分钟故事时间 想象你在教小孩认猫传统方法机器学习你告诉小孩规则 - 有胡须 → 可能是猫 - 有尖耳朵 → 可能是猫 - 会喵喵叫 → 可能是猫 - 有尾巴 → 可能是猫 - ... 问题 ❌ 如果没有胡须呢 ❌ 如果不会叫呢 ❌ 规则太多小孩记不住 ❌ 有些规则还会冲突神经网络方法给小孩看 1000 张猫的图片 - 不告诉他具体规则 - 让他自己观察和总结 - 小孩的大脑自动学习规律 结果 ✅ 看到新的猫也能认出来 ✅ 就像人的直觉一样 ✅ 不需要明确的规则Week 1 vs Week 2Week 1传统机器学习 ✓ 需要人工设计特征 ✓ 规则相对明确 ✓ 适合结构化数据表格 ✗ 处理复杂任务困难如图像识别 Week 2神经网络 ✓ 自动学习特征 ✓ 像人脑一样思考 ✓ 擅长处理复杂任务 ✓ 适合非结构化数据图像、声音、文本 费曼输出 #1解释为什么需要神经网络任务 1向小学生解释场景有个小朋友问你为什么要学神经网络要求不用特征工程、非线性、端到端这些专业术语用学习、游戏、成长等生活场景比喻让小学生能听懂参考模板传统方法就像______ 需要你______。 神经网络就像______ 让它自己______。 就像你学______一样 不是背规则而是______。⏰ 时间15 分钟 卡壳检查点如果你在解释时卡住了□ 我说不清楚传统 ML 和神经网络的本质区别 □ 我不知道如何解释自动学习特征 □ 我只能说更强大但不能说明为什么强大这很正常标记下来回去再看上面的内容然后重新尝试解释提示传统 ML 老师教你做题给公式神经网络 题海战术自己做多了就会了 第 3 步从生物神经元到人工神经元50 分钟你的大脑是如何工作的生物神经元你的大脑细胞树突接收信号 ↓ ┌─────────────┐ │ 细胞体 │ ← 处理信号 └─────────────┘ ↓ 轴突传递信号 ↓ 突触连接下一个 你有大约 860 亿个这样的神经元 每个神经元连接几千个其他神经元 这就是你思考的基础人工神经元模拟生物神经元生活中的例子决定是否去吃火锅影响因素输入 - 天气冷吗x₁ 1冷或 0不冷 - 有钱吗x₂ 1有或 0没有 - 有人陪吗x₃ 1有或 0没有 每个因素的重要程度权重 - 天气w₁ 0.3不太重要 - 钱w₂ 0.5比较重要 - 人w₃ 0.2不重要 计算过程 总分 x₁×w₁ x₂×w₂ x₃×w₃ 如果总分 0.5 → 去吃输出 1 否则 → 不去输出 0 这就是神经元的工作方式关键概念解释输入x → 接收的信号 → 就像树突接收信息 权重w → 每个输入的重要性 → 就像你心中的天平 → 重要的事权重大 偏置b → 基础倾向 → 就像你的默认选择 → 负数表示倾向于不去 激活函数 → 决定最终输出 → 就像做决定的门槛 → 超过阈值才行动 费曼输出 #2深入理解神经元任务 1创造多个比喻场景 A向厨师解释用做菜的例子 输入 食材 权重 食材重要性 偏置 基础口味 激活函数 出锅标准场景 B向音乐老师解释用音乐的例子 输入 音符 权重 音符重要性 偏置 基础音调 激活函数 和谐标准场景 C向体育教练解释用运动的例子 输入 动作要素 权重 要素重要性 偏置 基础分 激活函数 达标标准要求每个场景都要详细说明任务 2解释权重的意义思考题1. 权重为负数意味着什么 2. 权重很大意味着什么 3. 权重为 0 意味着什么 4. 偏置的作用是什么⏰ 时间25 分钟 卡壳检查点□ 我解释不清权重的物理意义 □ 我说不明白偏置的作用 □ 我不能用生活中的例子说明提示权重 重要性越大越重要负权重 反对因素越大越不应该偏置 默认倾向正数偏向同意激活函数 决定门槛 第 4 步动手实现第一个神经元60 分钟完整代码实现import numpy as np import matplotlib.pyplot as plt print( * 50) print( 我的第一个人工神经元) print( * 50) # # 第 1 步定义神经元参数 # print(\n【神经元的配置】) # 权重每个输入的重要性 weights np.array([0.3, 0.5, 0.2]) print(f权重{weights}) print(f - 天气冷的权重{weights[0]}) print(f - 有钱的权重{weights[1]}) print(f - 有人陪的权重{weights[2]}) # 偏置基础倾向 bias -0.5 print(f\n偏置{bias}) print(负数表示倾向于不去) # 激活函数决定输出 def step_function(x): 阶跃函数大于 0 输出 1否则输出 0 就像开关达到阈值就开否则就关 return 1 if x 0 else 0 # # 第 2 步测试不同的输入情况 # print(\n * 50) print( 测试不同情况) print( * 50) # 情况 1天气冷、有钱、有人陪 print(\n【情况 1】天气冷 有钱 有人陪) inputs1 np.array([1, 1, 1]) weighted_sum1 np.dot(inputs1, weights) bias output1 step_function(weighted_sum1) print(f加权和{weighted_sum1:.2f}) print(f输出{去吃火锅✅ if output1 1 else 不去吃 ❌}) # 情况 2天气不冷、有钱、有人陪 print(\n【情况 2】天气好 有钱 有人陪) inputs2 np.array([0, 1, 1]) weighted_sum2 np.dot(inputs2, weights) bias output2 step_function(weighted_sum2) print(f加权和{weighted_sum2:.2f}) print(f输出{去吃火锅✅ if output2 1 else 不去吃 ❌}) # 情况 3天气冷、没钱、没人陪 print(\n【情况 3】天气冷 没钱 没人陪) inputs3 np.array([1, 0, 0]) weighted_sum3 np.dot(inputs3, weights) bias output3 step_function(weighted_sum3) print(f加权和{weighted_sum3:.2f}) print(f输出{去吃火锅✅ if output3 1 else 不去吃 ❌}) # 情况 4天气不冷、有钱、没人陪 print(\n【情况 4】天气好 有钱 没人陪) inputs4 np.array([0, 1, 0]) weighted_sum4 np.dot(inputs4, weights) bias output4 step_function(weighted_sum4) print(f加权和{weighted_sum4:.2f}) print(f输出{去吃火锅✅ if output4 1 else 不去吃 ❌}) # # 第 3 步可视化神经元的工作原理 # print(\n * 50) print( 神经元工作原理可视化) print( * 50) # 创建图表 fig, axes plt.subplots(2, 2, figsize(16, 12)) # 图 1神经元结构 ax1 axes[0, 0] ax1.axis(off) # 画输入节点 input_positions [(0.2, 0.7), (0.2, 0.5), (0.2, 0.3)] for i, (x, y) in enumerate(input_positions): circle plt.Circle((x, y), 0.08, colorlightblue, ecblack) ax1.add_patch(circle) ax1.text(x-0.15, y, fx{i1}, fontsize12, hacenter, vacenter) ax1.text(x0.12, y, f{inputs1[i]}, fontsize10, haleft, vacenter) # 画神经元 neuron_circle plt.Circle((0.5, 0.5), 0.15, colorlightgreen, ecblack) ax1.add_patch(neuron_circle) ax1.text(0.5, 0.5, 神经元, fontsize10, hacenter, vacenter) # 画连接线 for i, (x, y) in enumerate(input_positions): ax1.plot([x0.08, 0.35], [y, 0.5], gray, linewidth2, linestyle--) ax1.text((x0.35)/2, (y0.5)/2, fw{weights[i]}, fontsize8, hacenter, vacenter, bboxdict(boxstyleround, facecolorwhite)) # 画输出 output_circle plt.Circle((0.8, 0.5), 0.08, coloryellow, ecblack) ax1.add_patch(output_circle) ax1.text(0.8, 0.5, fy{output1}, fontsize12, hacenter, vacenter) ax1.plot([0.65, 0.72], [0.5, 0.5], gray, linewidth2) ax1.set_xlim(0, 1) ax1.set_ylim(0, 1) ax1.set_title(神经元结构示意图, fontsize14) # 图 2加权求和过程 ax2 axes[0, 1] categories [天气\n因素, 金钱\n因素, 陪伴\n因素, 偏置] values [inputs1[0]*weights[0], inputs1[1]*weights[1], inputs1[2]*weights[2], bias] colors [#FF6B6B, #4ECDC4, #45B7D1, #FFA07A] bars ax2.bar(categories, values, colorcolors, alpha0.7) ax2.axhline(y0, colorblack, linewidth1) ax2.set_title(加权求和过程, fontsize14) ax2.set_ylabel(贡献值) ax2.grid(True, alpha0.3, axisy) # 标注数值 for bar, value in zip(bars, values): ax2.text(bar.get_x() bar.get_width()/2., bar.get_height() 0.02, f{value:.2f}, hacenter, vabottom, fontsize10) # 图 3激活函数 ax3 axes[1, 0] x_vals np.linspace(-1, 1.5, 100) y_vals [step_function(x) for x in x_vals] ax3.plot(x_vals, y_vals, b-, linewidth2) ax3.axvline(x0, colorgray, linestyle--, linewidth1) ax3.axhline(y0, colorgray, linestyle--, linewidth1) ax3.set_title(激活函数阶跃函数, fontsize14) ax3.set_xlabel(加权和) ax3.set_ylabel(输出) ax3.grid(True, alpha0.3) ax3.set_ylim(-0.2, 1.2) # 标记当前点 ax3.scatter(weighted_sum1, output1, colorred, s100, zorder5) ax3.annotate(f当前点\n({weighted_sum1:.2f}, {output1}), xy(weighted_sum1, output1), xytext(weighted_sum10.1, output1-0.3), arrowpropsdict(arrowstyle-, colorblack), fontsize10, colorred) # 图 4所有测试情况对比 ax4 axes[1, 1] all_inputs [inputs1, inputs2, inputs3, inputs4] all_outputs [output1, output2, output3, output4] labels [情况 1\n(冷有有), 情况 2\n(好有有), 情况 3\n(冷无无), 情况 4\n(好有无)] colors_out [#FF6B6B if out 1 else #95A5A6 for out in all_outputs] bars ax4.bar(range(len(all_outputs)), all_outputs, colorcolors_out, alpha0.7) ax4.set_xticks(range(len(all_outputs))) ax4.set_xticklabels(labels, fontsize9) ax4.set_title(所有测试情况对比, fontsize14) ax4.set_ylabel(输出1去0不去) ax4.set_ylim(0, 1.2) ax4.grid(True, alpha0.3, axisy) plt.tight_layout() plt.show() # # 第 4 步总结神经元的工作原理 # print(\n * 50) print( 神经元工作原理总结) print( * 50) print( ╔═══════════════════════════════════════════════════╗ ║ ║ ║ 人工神经元工作流程 ║ ║ ║ ╠═══════════════════════════════════════════════════╣ ║ ║ ║ 第 1 步接收输入 ║ ║ x₁, x₂, x₃, ..., xₙ ║ ║ 多个信号 ║ ║ ║ ║ 第 2 步加权求和 ║ ║ 总和 x₁×w₁ x₂×w₂ ... xₙ×wₙ ║ ║ 重要的信号权重大 ║ ║ ║ ║ 第 3 步加上偏置 ║ ║ 最终值 总和 b ║ ║ 基础倾向 ║ ║ ║ ║ 第 4 步激活函数 ║ ║ 如果最终值 0 → 输出 1 ║ ║ 否则 → 输出 0 ║ ║ 做决定 ║ ║ ║ ║ 本质 ║ ║ 多因素 → 加权 → 判断 → 输出 ║ ║ ║ ║ 就像你做决定的过程 ║ ║ ║ ╚═══════════════════════════════════════════════════╝ ) print(\n 恭喜你理解了人工神经元) print( * 50)按 Shift Enter 运行 费曼输出 #3解释代码含义逐行解释给小白听任务假装你在教一个完全不懂编程的人要解释清楚1. np.array() 创建的是什么为什么用数组 2. weights 和 bias 的物理意义是什么 3. np.dot() 在做什么运算 4. step_function 的作用是什么 5. 为什么要可视化要求不用向量、点积、激活函数等术语用生活化的比喻每行代码都要说明白参考思路np.array() 就像是______ weights 就像是______bias 就像是______ np.dot() 就像是______ step_function 就像是______ 可视化就像是______⏰ 时间25 分钟 卡壳检查点□ 我解释不清 np.dot() 的计算过程 □ 我说不明白激活函数的作用 □ 我不能用生活中的例子说明各个概念提示np.array() 一排数字盒子np.dot() 对应相乘再相加step_function 开关函数可视化 画图帮助理解 第 5 步探索不同的激活函数40 分钟为什么需要激活函数生活中的例子你的手机音量调节 阶跃函数今天学的 │ ┌────── │ │ │ │ │ │ │ │ └─┴────── 达到阈值就最大声否则静音 Sigmoid 函数下节课学 │ ╱──── │ ╱ │ ╱ │╱ └─────── 平滑过渡音量逐渐增大 ReLU 函数最常用 │ ╱ │ ╱ │ ╱ │ ╱ │ ╱ └─┴────── 小于 0 不要大于 0 线性增长代码演示对比不同激活函数import numpy as np import matplotlib.pyplot as plt print( * 50) print( 探索不同的激活函数) print( * 50) # 定义不同的激活函数 def step_function(x): 阶跃函数 return np.where(x 0, 1, 0) def sigmoid(x): Sigmoid 函数 return 1 / (1 np.exp(-x)) def relu(x): ReLU 函数 return np.maximum(0, x) def tanh(x): Tanh 函数 return np.tanh(x) # 生成测试数据 x np.linspace(-3, 3, 100) # 计算各个函数的输出 y_step step_function(x) y_sigmoid sigmoid(x) y_relu relu(x) y_tanh tanh(x) # 可视化对比 plt.figure(figsize(16, 12)) # 图 1阶跃函数 plt.subplot(2, 2, 1) plt.plot(x, y_step, b-, linewidth2) plt.title(阶跃函数Step Function, fontsize12) plt.xlabel(输入) plt.ylabel(输出) plt.grid(True, alpha0.3) plt.axhline(y0.5, colorgray, linestyle--, linewidth1) plt.axvline(x0, colorgray, linestyle--, linewidth1) plt.text(-2, 0.8, 特点\n• 非 0 即 1\n• 像开关\n• 不够平滑, bboxdict(boxstyleround, facecolorlightblue)) # 图 2Sigmoid 函数 plt.subplot(2, 2, 2) plt.plot(x, y_sigmoid, g-, linewidth2) plt.title(Sigmoid 函数, fontsize12) plt.xlabel(输入) plt.ylabel(输出) plt.grid(True, alpha0.3) plt.axhline(y0.5, colorgray, linestyle--, linewidth1) plt.axvline(x0, colorgray, linestyle--, linewidth1) plt.text(-2, 0.8, 特点\n• 输出 0-1 之间\n• 平滑连续\n• 像渐变, bboxdict(boxstyleround, facecolorlightgreen)) # 图 3ReLU 函数 plt.subplot(2, 2, 3) plt.plot(x, y_relu, r-, linewidth2) plt.title(ReLU 函数最常用, fontsize12) plt.xlabel(输入) plt.ylabel(输出) plt.grid(True, alpha0.3) plt.axhline(y0, colorgray, linestyle--, linewidth1) plt.axvline(x0, colorgray, linestyle--, linewidth1) plt.text(-2, 2, 特点\n• 负数为 0\n• 正数线性增长\n• 计算简单, bboxdict(boxstyleround, facecolorlightcoral)) # 图 4Tanh 函数 plt.subplot(2, 2, 4) plt.plot(x, y_tanh, m-, linewidth2) plt.title(Tanh 函数, fontsize12) plt.xlabel(输入) plt.ylabel(输出) plt.grid(True, alpha0.3) plt.axhline(y0, colorgray, linestyle--, linewidth1) plt.axvline(x0, colorgray, linestyle--, linewidth1) plt.text(-2, 0.8, 特点\n• 输出 -1 到 1\n• 中心对称\n• 收敛快, bboxdict(boxstyleround, facecolorplum)) plt.tight_layout() plt.show() print(\n各种激活函数的应用场景) print(\n1. 阶跃函数) print( ✓ 简单的二分类问题) print( ✗ 不能用于梯度下降不可导) print(\n2. Sigmoid) print( ✓ 输出概率0-1 之间) print( ✓ 早期神经网络常用) print( ✗ 容易梯度消失) print(\n3. ReLU推荐) print( ✓ 现代神经网络首选) print( ✓ 计算简单快速) print( ✓ 不容易梯度消失) print( ✗ 负数区域梯度为 0) print(\n4. Tanh) print( ✓ 数据中心化-1 到 1) print( ✓ 收敛比 Sigmoid 快) print( ✗ 也会梯度消失) print(\n结论) print(→ 实际应用中优先使用 ReLU) print(→ 理解原理从阶跃函数开始) print(→ 不同场景选择不同的激活函数) print(\n 恭喜你了解了不同的激活函数) 费曼输出 #4对比激活函数任务向朋友解释不同激活函数的特点场景你的朋友问你为什么要学这么多激活函数要覆盖的内容1. 每种激活函数的形状和特点 2. 各自的优缺点 3. 适用场景 4. 为什么 ReLU 最常用方式 写一篇 500 字左右的对比文章 录一段 5 分钟的讲解视频 找个朋友讲给他听要求用至少 2 个生活化的比喻画出函数图像对比说明选择的理由⏰ 时间20 分钟 卡壳检查点□ 我解释不清为什么 ReLU 最常用 □ 我说不明白梯度消失的问题 □ 我不能用生活中的例子说明提示阶跃函数 开关太生硬Sigmoid 渐变太平滑ReLU 折线刚刚好Tanh 对称特殊场景 今日费曼总结30 分钟⭐完整的费曼学习流程第 1 步回顾今天的内容5 分钟□ 为什么需要神经网络 □ 生物神经元 vs 人工神经元 □ 神经元的数学原理 □ 激活函数的种类第 2 步合上教程尝试完整教授15 分钟⭐任务假装你在给一个完全不懂的人上第八堂课要覆盖神经网络的优势至少 2 个例子神经元的工作原理用生活例子权重、偏置、激活函数的含义不同激活函数的对比方式 写一篇 800 字左右的文章 录一段 10-15 分钟的视频 找个朋友给他讲一遍第 3 步标记卡壳点5 分钟我今天卡壳的地方 □ _________________________________ □ _________________________________ □ _________________________________第 4 步针对性复习5 分钟回到教程中卡壳的地方重新学习然后再次尝试解释 费曼学习笔记模板╔═══════════════════════════════════════════════════╗ ║ Day 8 费曼学习笔记 ║ ╠═══════════════════════════════════════════════════╣ ║ 日期__________ ║ ║ 学习时长__________ ║ ╠═══════════════════════════════════════════════════╣ ║ ║ ║ 1. 我向小白解释了 ║ ║ _______________________________________________ ║ ║ _______________________________________________ ║ ║ ║ ║ 2. 我卡壳的地方 ║ ║ □ _____________________________________________ ║ ║ □ _____________________________________________ ║ ║ ║ ║ 3. 我的通俗比喻 ║ ║ • 神经网络就像 ______ ║ ║ • 神经元就像 ______ ║ ║ • 权重就像 ______ ║ ║ • 激活函数就像 ______ ║ ║ ║ ║ 4. 我还想知道 ║ ║ _______________________________________________ ║ ║ ║ ╚═══════════════════════════════════════════════════╝ 今日总结✅ 你今天学到了1. 神经网络的优势自动学习特征处理复杂任务像人脑一样思考2. 人工神经元输入、权重、偏置加权求和激活函数判断3. 数学原理线性组合z w·x b激活函数a f(z)输出结果4. 激活函数阶跃函数基础Sigmoid平滑ReLU常用Tanh对称5. 费曼输出能力⭐能用比喻解释神经网络能向小白说明神经元能对比不同激活函数 明日预告明天你将学习主题多层神经网络 内容 ✓ 单个神经元的局限性 ✓ 多个神经元组成网络 ✓ 隐藏层的作用 ✓ 前向传播的过程 ✓ 异或问题XOR 需要准备 ✓ 复习今天的神经元知识 ✓ 理解整体大于部分之和 ✓ 保持好奇心 常见问题Q1: 神经元和逻辑回归有什么区别形式上几乎一样 思想上 - 逻辑回归 统计学习方法 - 神经元 模拟生物神经元 神经网络可以堆叠很多层 逻辑回归通常只有一层Q2: 为什么需要偏置偏置 基础倾向 例如 - 即使所有输入都是 0 - 神经元也可能有输出 - 就像你的默认选择 没有偏置 - 原点永远输出 0 - 限制了表达能力Q3: 激活函数必须是非线性的吗是的非常重要 如果激活函数是线性的 - 多层网络 单层网络 - 失去深度学习的优势 非线性激活函数 - 让网络能学习复杂模式 - 是强大的关键 最后的鼓励第八天完成了你已经进入了深度学习的世界 从今天起 ✓ 你理解了神经网络的基础 ✓ 你知道神经元是如何工作的 ✓ 你能用自己的话解释了 ✓ 你创造了生动的比喻 这是质的飞跃 从传统机器学习 到深度学习 你迈出了最关键的一步 继续加油明天学习多层网络 记住 复杂的系统由简单的单元组成 神经元很简单 但无数个神经元组成的网络 就能产生智能 就像你的大脑一样 加油我相信你一定可以的✨ 打卡模板日期___________ 学习时长_______ 小时 费曼输出次数_______ 次 今天学会了 遇到的卡壳点 如何用比喻解释的 明天的目标明天见继续加油✨ 相关链接 项目资源GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-ChallengeCSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐如果觉得有帮助请给 GitHub 仓库 Star 支持本教程属于 AI 入门 30 天挑战 系列 资源汇总完整 30 天教程CSDN 专栏 - AI 入门 30 天挑战完整代码 项目实战GitHub 仓库 ⭐欢迎 Star❓遇到问题GitHub Issues 提问 互动时间思考题今天的知识点中哪个让你印象最深刻为什么欢迎在评论区分享你的想法或疑问❤️ 如果有帮助点赞让更多人看到这篇教程⭐Star GitHub获取完整代码和项目➕关注专栏不错过后续更新分享给朋友一起学习进步明天见继续 Day 9 的学习~

更多文章