【NN_HowToBuild】

本文分享了作者个人经验,概述了从定义神经网络到计算梯度并更新参数的学习步骤,包括感知器、矩阵表示、Pytorch和TensorFlow中的神经网络构造,以及梯度下降算法的不同变体及其应用。

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

Machine Learning | ShareTechnote

如何构建?

如果你对神经网络/深度学习类型的机器学习感兴趣,以至于你想自己实现一个神经网络,你应该熟悉以下流程。但不要试图死记硬背这个流程。就像学习一个新领域的大多数情况一样,机械记忆帮助不大。只要尽可能多地阅读材料和观看相关视频,然后快速浏览一下这个流程,看看每个步骤是否对你来说都很清晰。随着你重复这种实践(即学习/练习,然后再次查看这个流程...一遍又一遍),这个流程将逐渐成为你自然思考过程的一部分。

我自己并不是这个领域的专家,仍然处于学习的早期阶段。当我几个月前刚开始学习这个领域时,这个流程对我来说并不清晰。但是通过几个月的学习和实践(但不是全职...只是作为一种爱好),现在我觉得我逐渐熟悉了这些步骤中的每一步。

我经常在晚上睡觉时让YouTube上的一段关于这个话题的视频播放着...只是听而不是看视频。当我几个月前开始学习这个领域时,它并没有帮助我入睡,因为我总是不得不起床去看视频,因为只听音频对我来说没有多大意义。然而,现在对这个流程越来越熟悉....只是从YouTube上开始有声音对我有意义了。 不观看视频中播放的幻灯片或源代码,我的大脑开始将音频与下面的程序中的相应步骤进行视觉关联。这也帮助我解决了睡眠问题 -:)。

在这个笔记中,我将尝试分享我个人的经验,关于如何/为流程中的每个步骤学习什么。我不认为我的方式是唯一正确的方式,你可能认为按照我的方式学习需要太长时间...这可能是真的,但希望这个笔记可能对某些人有帮助。

学习步骤1:定义神经网络

当我开始学习这个领域(即使是现在2020年11月)时,使用神经网络开发任何应用软件不是我的目标。我的主要动机是尽可能详细地了解它的工作原理。我特别被这个领域吸引,因为我的教育背景是生物学。我对遗传工程和神经科学有特别的的兴趣。尽管我在职业生涯的大部分时间里都在做工程工作,但我对神经科学的关注仍然与我在一起...现在作为业余爱好。

自然地,我对神经元如何在神经网络中实现的兴趣始于如何每个神经元在神经网络中是如何工作的。作为一个前生物学家,我对生物系统中神经元的工作非常熟悉的概念,并想理解生物概念是如何在软件中实现的。通过查阅大量的文件、论文和YouTube,我写下了一些我自己的话和直觉,如下所示。

感知器:展示单个神经元如何工作以及在单个神经元级别上进行学习是如何工作的。
AND / OR / NOR门与感知器:展示如何使用单个感知器构建最简单的神经网络。这是一个幻灯片类型的笔记,展示了神经网络参数在每次迭代中的计算和更新。
用矩阵表示神经网络:我最初写这篇论文是为了展示矩阵的应用。这篇论文将给你关于神经网络(现在称为'全连接'或'密集'网络)如何在线性代数方程中表示的详细信息。
多层感知器(MLP):将几个感知器连接起来执行稍微复杂一些的任务。我在这个例子中使用了Matlab ML包。这篇论文将给你MLP的数学结构的细节。
如果你必须只用一堆感知器和矩阵来构建每一个神经网络,你就不会走得太远,因为很快它就会变得很复杂,让你难以管理。大多数神经网络软件包(如Pytorch、TensorFlow、Matlab NN包等)提供了简单的方式来轻松构建/定义复杂的神经网络。我选择Pytorch和Matlab ML包作为我的首选工具,以下是我自己实践的笔记。

Pytorch nn.Linear:展示由几个神经元组成的简单网络的构造示例,并用插图说明。
Pytorch nn.Sequential:展示如何在网络(在这种情况下,连接网络结构和激活函数)上连接多个组件。
Pytorch nn.Module:基本上与上面的相同,但用Python类做同样的事情。在Pytorch中的大部分神经网络都是以这种方式定义的。
Pytorch nn.Conv2D:这篇笔记是关于一种名为卷积神经网络(CNN)的最流行的神经网络模型之一。CNN主要由两部分组成。卷积部分和神经网络部分(全连接神经网络)。这篇笔记主要是为了展示卷积部分是如何实现的。(注意:如果你想熟悉CNN的总体概念,请参阅这篇笔记)。

学习步骤6,7:计算梯度并更新网络参数

这些步骤是训练网络的关键过程。这一步骤的基本算法是“梯度下降”方法。我认为我对梯度下降的数学概念很熟悉,并为它写了一篇笔记。

然而,仅仅理解梯度下降算法的基本概念对于专业应用是不够的。有许多其他变体的梯度计算,而大多数深度学习包都支持各种算法。例如,在Pytorch中,有多种算法受支持,如下所示。

自适应学习率方法
自适应子梯度方法
Adam算法
AdamW算法
适用于稀疏张量的Lazy版本的Adam算法
基于无穷范数的Adam变体
平均随机梯度下降
L-BFGS算法
RMS prop算法
Resilient backpropagation算法
随机梯度下降
我需要进一步学习的是回答以下问题。

i)为什么原始梯度下降算法不够?(即,为什么我们需要考虑这么多不同变体的算法?)

ii)这些算法之间到底有什么区别?

iii)我们如何确定为特定深度学习应用程序构建的算法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值