【公众号文章】——反向传播算法

链接:
https://mp.weixin.qq.com/s/YBOHt1WKuA1-NaqRtbimxA
原文:
http://www.cnblogs.com/pinard/p/6422831.html


1、DNNs反向传播算法要解决的问题

在了解DNNs的反向传播算法前,我们先要知道DNNs反向传播算法要解决的问题,也就是说,什么时候我们需要这个反向传播算法?

回到监督学习的一般问题中,假设我们有m个训练样本:
( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) {(x_1, y_1), (x_2, y_2), ..., (x_m, y_m) } (x1,y1),(x2,y2),...,(xm,ym)
其中x为输入向量,特征维度为n_in,而y为输出向量,特征维度为n_out。我们需要利用这m个样本训练出一个模型,当有一个新的测试样本(X_test, ?)来到时, 我们可以预测(Y_test, ?)向量的输出。

如果我们采用DNNs的模型,算上输入层n_in和输出层n_out的神经元,再加上若干隐藏层的神经元。此时我们需要找到适合所有隐藏层和输出层对应的线性系数矩阵W,偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或很接近样本输出。怎么找到合适的参数呢?

如果大家对传统的机器学习的算法优化过程熟悉的话,这里就很容易联想到我们可以用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,对应的一系列线性系数矩阵W,偏倚向量b即为我们的最终结果。

在DNNs中,损失函数优化极值求解的过程最常见的一般是通过梯度下降法来一步步迭代完成的,当然也可以是其他的迭代方法比如牛顿法与拟牛顿法。如果大家对梯度下降法不熟悉,建议阅读有关梯度下降(Gradient Descent)的相关知识。

总而言之,对DNNs的损失函数用梯度下降法进行迭代优化求极小值的过程即为我们的反向传播算法。


2、DNN反向传播算法的基本思路

在进行DNNs反响传播算法前,我们需要选择一个损失函数来度量训练样本计算出的输出和真实的训练样本输出之间的损失。那么,训练样本计算出的输出是怎么得来的呢?

这个输出是随机选择一系列W和b,是通过前向传播算法计算出来的。即通过一系列的计算如下,计算到输出层第L层对应的前向传播算法对应输出:
a t = δ ( z t ) = δ ( W t a t − 1 + b l ) a^t = δ(z^t) = δ(W^ta^{t-1}+b^l) at=δ(zt)=δ(Wtat1+bl)

回到损失函数,DNNs可选择的损失函数有不少,为了专注算法,这里使用最常见的均方差来度量损失。即对于每一个样本,期望最小化下列式子:
J ( W , b , x , y ) = 1 2 ∣ ∣ a L − y ∣ ∣ 2 2 J(W,b,x,y) = \frac12||a^L-y||^2_2 J(W,b,x,y)=21aLy22其中y和 a L a^L aL为特征维度的n_out向量,而||S||2为2的L2范数。

损失函数有了,现在我们开始用梯度下降法迭代求解每一层的W和b

首先是输出层L,注意到W和b满足以下式子:
a L = δ ( a L ) = δ ( W L a L − 1 + b L ) a^L = δ(a^L) = δ(W^La^{L-1}+b^L) aL=δ(aL)=δ(WLaL1+bL)这样对于输出层的参数,我们损失函数变为: J ( W , b , x , y ) = 1 2 ∣ ∣ a L − y ∣ ∣ 2 2 = 1 2 ∣ ∣ δ ( W L a L − 1 + b L ) − y ∣ ∣ 2 2 J(W,b,x,y) = \frac12||a^L-y||^2_2 = \frac12||δ(W^La^{L-1}+b^L)-y||^2_2 J(W,b,x,y)=21aLy22=21δ(WLaL1+bL)y22

这样求解W,b的梯度就显得简单了许多,计算过程略。


3、DNNs反向传播算法的过程

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里我们以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。不过区别仅仅在于迭代时训练样本的选择而已。
输入: 总层数L,以及各隐藏层与输出层的神经元个数,激活函数,损失函数,迭代步长α,最大迭代次数MAX与停止迭代阈值ϵ,输入的m个训练样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) {(x_1, y_1), (x_2, y_2), ..., (x_m, y_m) }{(x_1, y_1), (x_2, y_2), ..., (x_m, y_m) } (x1,y1),(x2,y2),...,(xm,ym)(x1,y1),(x2,y2),...,(xm,ym)
输出:各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b
①初始化各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b的值为一个随机值。
②for iter to 1 to MAX:


(1)for i =1 to m:
在这里插入图片描述
(2)for l = 2 to L, 更新第l层的W^l, b^l
在这里插入图片描述
(3)如果所有W,b的变化值都小于停止迭代阈值ϵ,则跳出迭代循环到步骤③


③输出各隐藏层于输出层的先行关系系数矩阵W和偏倚向量b。


<think>嗯,用户之前问过激光雷达的用途,现在转向了深度学习和机器学习的学习路径。这可能意味着他们对技术领域有广泛的兴趣,或者正在考虑进入数据科学或AI领域。我需要确定他们的背景,是学生、转行者还是有其他目的。 首先,用户提到“新手如何学习”,所以需要提供从基础开始的指导。可能他们的主要需求是找到系统化的学习路线,避免在学习过程中感到迷茫。应该包括资源推荐、学习方法以及实践项目的重要性。 考虑到他们之前的问题关于激光雷达,可能对应用场景比较感兴趣,比如在自动驾驶或工业检测中的应用。所以在介绍学习路径时,可以结合这些实际应用案例,增强相关性。 需要区分机器学习和深度学习,虽然深度学习是机器学习的子领域,但初学者可能会混淆两者的学习顺序。应该建议先掌握机器学习基础,再过渡到深度学习,这样有助于建立扎实的理论基础。 用户可能没有明确说明是否有编程基础,但学习这两个领域通常需要Python和数学知识。因此,在回答中需要强调编程和数学的重要性,并提供相应的学习资源。 另外,实践是关键。新手可能会陷入理论学习的泥潭,而缺乏实际项目经验。建议他们通过Kaggle竞赛或开源项目来应用所学知识,同时培养解决问题的能力。 还要注意学习路径的阶段性,分步骤引导,避免信息过载。比如先学Python和数学,再学机器学习基础,接着是深度学习,最后是项目实战。同时,推荐社区和论坛,帮助他们解决学习中的问题,保持学习动力。 最后,可能用户担心学习难度大,需要鼓励他们保持耐心,持续实践,并参与社区交流。同时,提醒他们根据兴趣选择方向,比如计算机视觉、自然语言处理等,以保持学习的热情。</think>好的!对于深度学习和机器学习的新手,学习路径需要结合**理论基础、工具实践**和**项目经验**。以下是一个分阶段的系统化学习指南,结合中文资源和学习建议: --- ### **一、基础准备:数学 + 编程** #### 1. **数学基础** - **线性代数**:矩阵运算、向量空间(推荐《线性代数的本质》系列视频)。 - **概率与统计**:概率分布、贝叶斯定理、假设检验(可参考《统计学导论》)。 - **微积分**:导数、梯度、最优化(重点理解梯度下降原理)。 *🔍 工具辅助*:如果数学薄弱,可用工具库(如NumPy、SymPy)边实践边补基础。 #### 2. **编程能力** - **Python**:掌握基础语法、数据结构(列表/字典/函数),推荐[廖雪峰Python教程](https://www.liaoxuefeng.com/wiki/1016959663602400)。 - **关键库**: - **NumPy**(数值计算)、**Pandas**(数据分析); - **Matplotlib/Seaborn**(数据可视化)。 *📌 目标*:能独立完成数据清洗、简单可视化分析。 --- ### **二、机器学习入门:理论与工具** #### 1. **经典算法理解** - **监督学习**:线性回归、逻辑回归、决策树、SVM、随机森林。 - **无监督学习**:K-Means、PCA、聚类评估。 - **模型评估**:交叉验证、ROC曲线、混淆矩阵、过拟合与正则化。 *📚 推荐书籍*: - 《机器学习》(周志华,西瓜书)——理论扎实,适合反复读; - 《Hands-On Machine Learning》(Scikit-Learn版)——代码实践友好。 #### 2. **工具实战** - **Scikit-Learn**:从调用API开始,理解参数调优(如GridSearchCV)。 - **项目练习**: - Kaggle入门赛(如泰坦尼克生存预测、房价预测); - 使用UCI数据集(如鸢尾花分类、手写数字识别)。 --- ### **三、深度学习进阶:框架与模型** #### 1. **深度学习基础** - **核心概念**:神经网络结构、激活函数、反向传播、损失函数。 - **框架选择**: - **PyTorch**(灵活,适合研究)或 **TensorFlow/Keras**(工程部署友好)。 *🎥 推荐课程*: - 吴恩达《深度学习专项课》(Coursera,中文字幕); - 李沐《动手学深度学习》(B站免费视频+代码)。 #### 2. **经典模型实践** - **计算机视觉**:CNN(LeNet、ResNet)、目标检测(YOLO)。 - **自然语言处理**:RNN、LSTM、Transformer。 - **实战工具**: - PyTorch Lightning(简化训练流程); - Hugging Face(快速调用预训练模型)。 #### 3. **调试技巧** - 学习使用TensorBoard或Weights & Biases可视化训练过程; - 掌握过拟合解决方法(数据增强、Dropout、早停法)。 --- ### **四、项目实战:从模仿到创新** #### 1. **复现经典项目** - 图像分类:CIFAR-10数据集训练ResNet; - 文本生成:用LSTM生成唐诗或新闻标题; - 目标检测:用YOLOv5训练自定义数据集(如检测交通标志)。 #### 2. **参与竞赛** - **Kaggle**:从Featured竞赛中选择感兴趣的主题(如预测、图像分割); - **阿里天池/AI Studio**:国内平台,中文社区支持更友好。 #### 3. **开源贡献** - 在GitHub上复现论文代码(如搜索“PyTorch implementation of XXX”); - 参与开源项目(如Hugging Face模型库的文档优化或Bug修复)。 --- ### **五、持续提升:理论与工程结合** #### 1. **深入理论** - 阅读经典论文(如AlexNet、Transformer、BERT),配合代码实现; - 学习《深度学习》(花书)中的数学推导。 #### 2. **工程化能力** - 模型部署:学习ONNX、TensorRT或Flask/Django构建API; - 性能优化:掌握模型剪枝、量化、蒸馏等轻量化技术。 #### 3. **领域聚焦** - **CV方向**:学习OpenCV、MMDetection; - **NLP方向**:深入Hugging Face库、Prompt Engineering; - **强化学习**:从Gym环境到PPO算法。 --- ### **六、学习资源推荐** #### 1. **中文社区** - **论坛**:知乎(关注李沐、邱锡鹏等大V)、优快云(入门教程多); - **公众号**:AI科技评论、机器之心。 #### 2. **免费课程** - B站:跟李沐学AI、莫烦Python; - 百度AI Studio:提供免费GPU算力。 #### 3. **书籍** - 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》 - 《Python深度学习(第2版)》 --- ### **七、避坑指南** 1. **不要盲目追新**:先掌握经典模型(如ResNet、BERT),再跟进前沿论文。 2. **代码 > 理论**:初期以跑通代码、理解流程为主,数学推导可逐步深入。 3. **学会提问**:遇到报错先查Stack Overflow、GitHub Issues,再向社区求助。 --- ### **总结** 新手学习的关键是**快速建立正反馈**: 1. 从工具(Python+框架)入手,先实现“能跑通代码”; 2. 通过项目理解理论(如反向传播),而非死磕公式; 3. 加入社群,避免闭门造车。保持耐心,半年可入门,1-2年能独立开发模型!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值