1. 从零开始:理解深度学习的“引擎”与“燃料”
如果你刚接触深度学习,可能会被一堆术语吓到:前向传播、反向传播、激活函数、优化器……听起来像天书。别怕,咱们今天不聊公式,先打个比方。你可以把训练一个深度学习模型想象成教一个小孩认猫。
小孩(模型) 一开始啥也不懂。你给他看一张猫的图片(输入数据),他可能会瞎猜:“这是狗!” 这个瞎猜的过程,就是模型的前向传播——数据从输入层,经过中间层层计算,最终得出一个预测结果。这个结果通常错得离谱。
接着,你告诉他:“不对,这是猫。” 这个“正确答案”就是标签。小孩会想:“哦,我猜错了,错在哪呢?是不是我太关注狗的耳朵形状了?” 然后他会根据错误来调整自己看图的“侧重点”。这个根据错误调整内部“想法”的过程,就是反向传播。反向传播的核心是计算预测值与真实值之间的差距(损失),然后把这个差距一层层往回传,告诉每一层的参数:“你刚才的‘贡献’导致了多大的错误,下次应该往哪个方向调整。”
那么,梯度下降就是调整的具体方法。想象小孩站在一个山谷里(损失函数曲面),山谷最低点就是完全认对猫的地方。他环顾四周,找到坡度最陡的方向(梯度),朝那个方向迈一小步(学习率)。反复重复这个过程,他就能慢慢走到谷底,也就是模型性能最好的地方。
所以,数据是燃料,前向传播是引擎工作,损失函数是性能仪表盘,反向传播是故障诊断报告,而梯度下降则是维修调整的扳手。这套组合拳,就是深度学习能够从数据中“学习”的核心原理。我刚开始学的时候,总想一次性搞懂所有数学细节,结果卡在公式里出不来。后来发现,先建立这样直观的“世界观”,再回头去看那些公式,会顺畅很多。记住,我们的目标不是成为数学家,而是成为能使用这个强大工具的问题解决者。
2. 神经网络的心脏:前向传播与反向传播详解
现在,我们深入看看这个“引擎”和“诊断系统”具体是怎么工作的。我会尽量用代码和例子,让你能亲手“摸到”这个过程。
2.1 前向传播:信息是如何流动的?
前向传播就是数据从输入到输出,一层层被加工的过程。每一层都做两件事:线性加权求和 和 非线性激活。
假设我们有一个极其简单的网络,只有一层(逻辑回归可以看作单层神经网络)。输入是一个像素点,我们要判断图片是不是猫。
import numpy as np
# 模拟一个神经元 (感知机)
def forward_propagation_single(x, w, b):
"""
单神经元的前向传播
x: 输入特征 (比如一个像素值)
w: 权重
b: 偏置
"""
# 1. 线性计算: z = w*x + b
z = np.dot(w, x) + b
# 2. 非线性激活: a = σ(z), 这里用sigmoid函数,把输出压缩到(0,1),可以理解为“是猫的概率”
a = 1 / (1 + np.exp(-z))
return a
# 初始化参数 (通常用随机小值)
w = np.random.randn(1) * 0.01
b = 0
# 输入一个像素值 (比如归一化后的0.5)
x = np.array([0.5])
# 前向传播
prediction = forward_propagation_single(x,


569

被折叠的 条评论
为什么被折叠?



