深度学习入门——用python从轮子开始造神经网络(2)

本文是深度学习入门的第二部分,通过Python构建包含输入层、隐藏层和输出层的2层神经网络,并介绍误差反向传播算法,包括Affine层、Sigmoid层和softmax_loss层的实现。文章详细阐述了如何利用链式法则提高梯度计算效率,并展示了神经网络的拼装过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习入门——用python从轮子开始造神经网络(2)

作者:时棋

话接上期——上期我们造了一个极简风格的原始网络,跑不动的那种。那么问题出在哪里呢?之前仅仅只是用“效率过低”简单概括了下,那么具体是哪里的效率过低拖慢了整体速度呢?经笔者测试,上期的示例代码在计算梯度时,执行一步梯度下降并计算出新梯度需要将近一分钟,而我们的程序要求多次执行梯度下降算法,这样的时间消耗是不可接受的。而且实际上,上期构筑的网络忽略了许多要素,简化的同时可能会丢失许多重要的因素,因此,这期我将在采用更高效的计算梯度的算法的基础上,构筑一个含有完整的输入层、中间层、输出层的2层神经网络,同时加入偏置。

注意,这一期数学推导的占比较大

神经网络流程示意

我们依然以MNIST数据集为例,从训练集中抽取100个作为一轮学习的单元,建立一个中间层含50个神经元的神经网络。

首先,输入层为 X ( 100 ∗ 784 的 数 组 ) X(100*784的数组) X(100784),后经过Affine层(加权和与加偏置的操作对应几何中的仿射变换), X ⋅ W 1 + B 1 ( W 1 为 784 ∗ 50 的 数 组 , B 1 为 100 ∗ 50 的 数 组 ) X\cdot W_1+B_1(W_1为784*50的数组,B_1为100*50的数组) XW1+B1(W178450,B110050) ,经过激活函数(这里以Sigmoid函数为例)处理得矩阵 Y ( 100 ∗ 50 的 数 组 ) Y(100*50的数组) Y(10050),再经过一层Affine层, Y ⋅ W 2 + B 2 ( W 2 为 50 ∗ 10 的 数 组 , B 2 为 100 ∗ 10 的 数 组 ) Y\cdot W_2+B_2(W_2为50*10的数组,B_2为100*10的数组) YW2+B2(W25010,B210010),经过输出层激活函数(这里使用softmax函数),得到最终的预测矩阵,同时为神经网络的学习需要,计算交叉熵误差作为损失函数值。

在这里插入图片描述
在这里插入图片描述

以上为简略示意图

而在代码实现的过程中,我们实际上是要创建以下几个层:Affine层、sigmoid层、softmax_loss层

误差反向传播算法

那么我们进入正题,如何快速求出梯度?从我们原始的方法开始分析,在上期的代码中,我们是怎么求梯度的?

实际上,我们采取了原始的数值微分方法,通过上下小幅度改变权重矩阵中元素的值,再次计算损失函数,然后相减除以差分。这相当于把正向的流程走了两遍。由于每个元素都要走两遍,那么一共就是784乘10乘2等于15680次,如果是我们这次要建的2层网络,那就是784乘50乘2加上50乘10乘2等于79400次!

这还深度学个啥呀……

有没有办法一遍就能把梯度求出来呢?显然光靠计算机是不行的,求数值解过于耗费算力,如果人工能求出解析解公式,那便会轻松很多,相当于求一个嵌套函数的导数。链式法则实在太适合这 一应用场景了!在前向传播中,每一层都可以有“记忆”,有了记忆,反过去求导数就不用再计算一遍了,同时矩阵中的元素也不需要单独计算偏导了。以上述示意图为例,即为:
∂ z ∂ W 1 = ∂ z ∂ Y 1 ⋅ ∂ Y 1 ∂ Y ⋅ ∂ Y ∂ X 1 ⋅ ∂ X 1 ∂ W 1 \frac{\partial z}{\partial W_1}=\frac{\partial z}{\partial Y_1}\cdot\frac{\partial Y_1}{\partial Y}\cdot\frac{\partial Y}{\partial X_1}\cdot\frac{\partial X_1}{\partial W_1} W1z=Y1zYY1X1YW1X1
W 2 , B 1 , B 2 W_2,B_1,B_2 W2,B1,B2同理

简而言之,现在我们的每一层作为对象所能实现的方法不仅包括前向传播,还有反向传播。

让我们一层层来:

Affine层

这一层最需要理解的就是矩阵的求导,从简单的例子来看一下推导过程:

若输出值为一个常数 L L L,求 L L L关于一维数组 X X X的导数矩阵,则 ∂ L ∂ X = ( ∂ L ∂ x 1 , ∂ L ∂ x 2 , … , ∂ L ∂ x n ) \frac{\partial L}{\partial X}=(\frac{\partial L}{\partial x_1},\frac{\partial L}{\partial x_2},\dots,\frac{\partial L}{\partial x_n}) XL=(x1​</

<think>嗯,用户这次聚焦在人工智能学习难度上,看来ta对计算机专业细分领域的学习成本有具体担忧。之前讨论就业前景时提到过AI是高端方向,但用户现在更关心入门门槛。用户引用的资料很有意思:[1]和[4]强调AI应用的广泛性,[2]指出机器学习是当前主流,[3]则揭示深度学习代理的复杂性。这些正好构成难度分析的三个维度:知识广度、技术深度、实践要求。注意到用户可能是零基础学习者,因为ta特意提到“入门必看”。需要避免学术化表述,把数学要求这类敏感点拆解明白——引用[2]里Python学习路线提到过数学是分水岭,这点必须强调。 上次回复的“金字塔顶端稀缺”现象在这里也适用。可以设计个学习难度金字塔:底层Python编程(易)→中层机器学习(中)→高层深度学习(难),呼应引用[3]提到的推理机制复杂度。数学公式要控制在必要的最小集,比如损失函数用$L(\theta)$展示即可。用户没提具体方向(CV/NLP等),所以按通用路径设计。实践部分要突出引用[4]强调的GPT-3等大模型资源,降低试错成本——这可能是用户没明说的痛点:怕学完用不上。最后生成的问题要引导用户细化目标,比如区分“想调库应用”还是“从零轮子”,这直接影响难度评估。</think>人工智能学习的难度呈现**阶梯式上升**特征,其挑战与知识结构密切相关。以下是关键维度的分析(结合引用资料): --- ### 一、**难度核心构成** #### 1. **数学基础要求高** - **核心数学工具**: $$ \text{线性代数} \quad (矩阵运算) + \text{概率论} \quad (贝叶斯理论) + \text{微积分} \quad (梯度优化) $$ 例如梯度下降需理解偏导数$\frac{\partial L}{\partial w}$,神经网络依赖矩阵乘法$WX+b$[^2][^3] - **学习建议**:掌握基础即可入门,但高阶研究需数学推导能力 #### 2. **技术栈复杂度分层** | 层级 | 内容 | 难度 | 案例 | |---|---|---|---| | **基础层** | Python编程/数据处理 | ★★☆ | Pandas数据清洗[^2] | | **核心层** | 机器学习算法 | ★★★ | SVM分类/决策树[^2] | | **进阶层** | 深度学习框架 | ★★★★ | PyTorch构建CNN[^3] | | **尖端层** | 大模型原理 | ★★★★★ | Transformer架构解析[^4] | #### 3. **实践资源依赖性强** - 需要GPU算力训练模型(如BERT需数百GPU小时[^4]) - 真实数据集获取困难(医学影像/金融数据需合规权限) --- ### 二、**关键难点突破策略** #### 1. **数学短板补救** - **聚焦实用模块**:优先掌握概率分布、矩阵求导,跳过抽象证明 - **工具替代推导**:用`scipy`库实现数值计算,避免手解方程[^2] #### 2. **学习路径优化** ```mermaid graph LR A[Python基础] --> B[Scikit-learn机器学习] B --> C[TensorFlow/PyTorch] C --> D[预训练模型微调] D --> E[论文复现] ``` - 初期避开底层实现,直接调用`sklearn`和`Hugging Face`API[^4] #### 3. **实践资源替代方案** - 使用Kaggle开源数据集+免费GPU资源[^2] - 微调现有模型(如用BERT做文本分类)降低算力需求[^4] --- ### 三、**不同目标下的难度差异** | 学习目标 | 所需时长 | 关键挑战 | |----------|----------|----------| | **应用开发** <br>(调用AI API) | 1-3月 | 接口文档理解、业务逻辑设计 | | **模型调优** <br>(微调预训练模型) | 3-6月 | 参数调整策略、过拟合控制 | | **算法研发** <br>(设计新网络结构) | 1-3年 | 数学创新能力、大规模实验验证[^3] | > **关键结论**: > 入门**应用层开发**(如使用GPT-4 API)难度可控(需编程基础+文档阅读能力),但深入**算法创新层**需跨越数学、算力、工程化三重门槛,符合$$ \text{难度} \propto \text{技术深度}^2 $$的规律[^3][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值