Towards Data Science

Neural Networks, Explained for Beginners: Start Here If They’ve Confused You

8.5内容质量

TL;DR · AI 摘要

神经网络通过激活函数建模复杂数据,本文用简单数据集解释其工作原理。

核心要点

  • 使用简单数据集可以更清晰地理解神经网络的内部机制。
  • 线性回归无法捕捉非线性数据关系,激活函数是解决此问题的关键。
  • 神经网络通过多层结构和激活函数建模复杂模式。

结构提纲

按章节快速跳转。

  1. 文章旨在通过简单数据集解释神经网络的基本原理。

  2. 使用学生考试成绩与学习时间的数据集展示线性回归的局限性。

  3. 线性回归无法建模非线性数据关系,需要引入激活函数

  4. 通过构建简单神经网络解释其如何通过多层结构和激活函数建模复杂模式。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 神经网络原理
    • 数据与问题
      • 学生考试成绩与学习时间数据集
    • 线性回归的不足
      • 无法建模非线性数据关系
    • 神经网络的构建
      • 多层结构
      • 激活函数

金句 / Highlights

值得收藏与分享的关键句。

#神经网络#深度学习#激活函数#机器学习
打开原文

为初学者解释神经网络:如果你感到困惑,从这里开始 | Towards Data Science

深度学习

为初学者解释神经网络:如果你感到困惑,从这里开始

神经网络背后的直觉以及为什么它们需要激活函数。

Nikhil Dasari

2026年6月22日

20分钟阅读

分享

照片由David Bartus通过Pexels提供

如今,每个人都在谈论最新的技术,如大型语言模型、代理AI、多模态系统,以及诸如RAG之类的技术。

这些技术到底是什么?

它们是如何构建的?

我了解到,大型语言模型(LLMs)是建立在经过大量训练的神经网络上的先进人工智能系统。

我也想了解这些技术。

由于神经网络是这些最新技术的基础,我想先理解神经网络到底是什么。

但当我遇到诸如隐藏层、激活函数、图像数据和文本数据等术语时,我感到非常困惑。

继续学习神经网络变得困难。

我了解到,当我们处理如图像和文本等复杂数据时,主要使用深度学习和神经网络。

然而,我觉得使用如此复杂的数据可能会使理解神经网络的基本原理变得困难。

我开始思考如何让这个过程变得更简单。因此,我决定不从复杂的数据开始,而是使用简单数据,以首先详细理解神经网络内部到底发生了什么。

因此,本文的主要目的是理解神经网络到底是什么,以及它们如何通过使用一个简单的数据集从数据中学习。

在本文中,我们将从零开始构建一个简单的神经网络,并理解它的运作方式。

我们将看到神经元内部发生了什么,不同层是如何协同工作的,为什么仅仅添加更多的线性神经元仍然不够,以及激活函数如何帮助神经网络在数据中建模复杂的模式。

当一条直线不够用时

你可能已经见过类似的图表,显示神经网络的基本结构。

作者提供的图像

让我们逐层理解这个结构。

但在我们理解它是如何运作之前,我们需要一些数据。让我们考虑这个简单的数据集,显示学生的考试成绩和他们学习的小时数。

#### 数据:

现在,让我们绘制这些数据。

#### 代码:

code
import matplotlib.pyplot as plt

hours_studied = [1, 2, 3, 4, 5, 6, 7, 8, 9]
exam_scores = [55, 70, 80, 85, 87, 88, 87, 85, 80]

plt.scatter(hours_studied, exam_scores, color='darkcyan', s=80)

plt.xlabel("Hours Studied")
plt.ylabel("Exam Score")
plt.title("Hours Studied vs Exam Score")

plt.show()

#### 图表:

现在,我们需要根据学习的小时数预测考试成绩。让我们将简单的线性回归应用到这些数据上。

从上面的图表中,我们可以观察到简单的线性回归不足以很好地建模这些数据,因为数据集中的关系似乎是非线性的。

换句话说,我们可以认为,一条直线无法捕捉数据中的潜在模式。

现在,我们该怎么办?

但我们的目标是理解神经网络是如何构建以及如何工作的。

为什么要使用一个巨大的图像或文本数据集来学习这些概念,为什么不从一个简单的数据集开始呢?

可以这样想,如果你想要学习如何驾驶,你会选择一辆基础的汽车还是一辆功能强大的冒险车呢?

大多数人会选择一辆基础的汽车。

如果我们一开始就使用一辆功能强大的汽车,我们可能会被它的强大功能所压倒,无法控制它。

我们可能会认为驾驶太难了,从而在学习基础知识之前就放弃了。

同样地,如果我们一开始就使用一个包含数百个输入的图像数据集,我们可能会感到不知所措,难以理解神经网络的基本原理。

因此,我们在这里使用这个简单的数据集,并不是因为神经网络只能解决这类问题,而是为了建立对它们工作原理的理解。

之后,我们可以基于所学到的知识,进一步理解那些能够从数据中学习复杂模式的更复杂的神经网络。

是时候了解神经网络了

让我们再次看一下我们数据集的散点图。

我们已经知道,单条直线不足以捕捉这些数据中的模式。

因此,我们需要一个更灵活的函数来建模这些模式。建模这些模式的一种方法是使用神经网络。

首先,让我们看一下一个神经元。它实际上做了什么呢?

你可能会惊讶地发现,神经元所做的事情是我们已经知道的。

它从数据中获取输入,将其乘以一个权重并加上偏置。

我们可以用方程的形式写成:

$$ z = wx + b $$

我们之前已经见过这个方程,对吧?

这不过是一条直线的方程,如果我们将其与简单的线性回归进行比较,我们可以将 $w$ 看作斜率,$b$ 看作截距。

在这里,我们只考虑了一个输入特征,神经元计算的是:

$$ z = wx + b $$

然而,在现实世界的问题中,我们通常会有多个输入特征。在这种情况下,神经元计算的是:

$$ z = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b $$

用矩阵形式,我们可以将相同的方程写成:

$$ z = \mathbf{w}^{T}\mathbf{x} + b $$

其中

$$ \mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \\ \cdots \\ w_n \end{bmatrix} $$

是权重向量,

$$ \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{bmatrix} $$

是输入特征向量,$b$ 是偏置项。

在这里,$z$ 表示神经元产生的线性输出。

最终,我们可以认为,一个神经元计算的是其输入的线性函数。

现在我们已经了解了一个单个神经元实际上做了什么,让我们再次看一下这个基本的图表。

输入层

首先,让我们关注输入层。

它很简单。输入层只是保存数据并将其传递给下一层,它不执行任何其他操作。

在这里,对于我们的数据集,我们有一个特征,即学习时间,因此输入层中有一个神经元。

输入层中的神经元数量取决于我们数据集中特征的数量。

隐藏层

现在我们对输入层有了一个基本的了解,接下来让我们进入神经网络中最重要的层,隐藏层。

在这里,我们正在构建一个神经网络,它可以包含任意数量的隐藏层。

我们可以根据我们解决的问题来决定在神经网络中包含多少个隐藏层。

在这里,为了简单起见,我只想在我们的神经网络中包含一个隐藏层。

现在,下一个问题是:我们的隐藏层中应该有多少个神经元?

这也是我们可以选择的内容,就像隐藏层的数量一样。

在这里,我考虑使用 2 个神经元,因此可以说我们的神经网络使用了一个包含 2 个神经元的隐藏层。

到目前为止,我们的神经网络看起来是这样的:

有趣的部分来了。我们已经讨论过,单个神经元计算的是其输入的线性函数。

这里需要注意的是,我们为每个神经元随机初始化权重和偏置。

通过一个例子,我们可以更清楚地理解这一点。

假设对于隐藏层神经元 1,我们随机初始化了 $ w_1 = 1 $ 和 $ b_1 = -5 $,而对于隐藏层神经元 2,我们随机初始化了 $ w_2 = -1 $ 和 $ b_2 = 7 $。

这里只有一个斜率,因为我们只有一个特征(学习时间)。

现在,让我们将数据从输入层传递到隐藏层。

让我们看看此时神经网络的外观。

分解隐藏层

现在,让我们关注隐藏神经元 1。

当数据从输入层传递到隐藏神经元 1 时,它会计算:

$$ z_1 = w_1x + b_1 $$

我们为隐藏神经元 1 随机初始化了权重和偏置为:

$$ w_1 = 1 $$

$$ b_1 = -5 $$

将这些值代入神经元方程,我们得到:

$$ z_1 = (1)x + (-5) $$

$$ z_1 = x - 5 $$

这个方程代表了隐藏神经元 1 产生的线性函数。

现在,让我们看看当第一个数据点进入神经元时会发生什么。

对于第一个学生:

$$ x = 1 $$

将这个值代入方程:

$$ z_1 = 1 - 5 $$

因此,

$$ z_1 = -4 $$

所以,当输入值为 $ x = 1 $ 时,隐藏神经元 1 产生的输出为:

同样地,对于其余的输入值,隐藏神经元 1 产生的输出如下:

$$ x = 2 \quad \Rightarrow \quad z_1 = -3 $$

$$ x = 3 \quad \Rightarrow \quad z_1 = -2 $$

$$ x = 4 \quad \Rightarrow \quad z_1 = -1 $$

$$ x = 5 \quad \Rightarrow \quad z_1 = 0 $$

$$ x = 6 \quad \Rightarrow \quad z_1 = 1 $$

$$ x = 7 \quad \Rightarrow \quad z_1 = 2 $$

$$ x = 8 \quad \Rightarrow \quad z_1 = 3 $$

$$ x = 9 \quad \Rightarrow \quad z_1 = 4 $$

到目前为止,我们已经将数据传递给了隐藏神经元 1,并且它计算了上述值。

现在,让我们绘制隐藏神经元 1 产生的输出。

我们可以看到,隐藏神经元 1 产生了一条直线。我们将在稍后尝试理解这条直线的含义,但在那之前,让我们也看一下隐藏神经元 2。

与隐藏神经元 1 相同,我们现在将相同的输入数据传递给隐藏神经元 2。

当数据从输入层传递到隐藏神经元 2 时,它会计算:

$$ z_2 = w_2x + b_2 $$

我们为隐藏神经元 2 随机初始化了权重和偏置为:

$$ w_2 = -1 $$

$$ b_2 = 7 $$

$$ z_2 = (-1)x + 7 $$

$$ z_2 = -x + 7 $$

这个方程代表了隐藏神经元 2 产生的线性函数。

对于 $ x = 1 $,我们有:

$$ z_2 = -1 + 7 $$

$$ z_2 = 6 $$

所以,当输入值为 $ x = 1 $ 时,隐藏神经元 2 产生的输出为:

同样地,对于其余的输入值,隐藏神经元 2 产生的输出如下:

$$ x = 2 \quad \Rightarrow \quad z_2 = 5 $$

$$ x = 3 \quad \Rightarrow \quad z_2 = 4 $$

$$ x = 4 \quad \Rightarrow \quad z_2 = 3 $$

$$ x = 5 \quad \Rightarrow \quad z_2 = 2 $$

$$ x = 6 \quad \Rightarrow \quad z_2 = 1 $$

$$ x = 7 \quad \Rightarrow \quad z_2 = 0 $$

$$ x = 8 \quad \Rightarrow \quad z_2 = -1 $$

$$ x = 9 \quad \Rightarrow \quad z_2 = -2 $$

现在,让我们绘制隐藏神经元 2 产生的输出。

从上面的图表中,我们可以观察到,隐藏神经元 2 也产生了一条直线。

让我们同时查看这两条线的图表。

这里,我们需要理解的一点是,隐藏的神经元并不是在尝试拟合考试成绩。

我们所做的只是使用随机的权重和偏置值,计算输入的线性组合。

我们将相同的输入提供给两个隐藏的神经元,但由于我们使用了不同的随机权重和偏置值,因此得到了不同的线性变换。

那么,我们现在可以对隐藏层中隐藏神经元生成的这两条线做些什么呢?

如果我们观察隐藏神经元1生成的线,可以看到随着学习时间的增加,隐藏神经元1的输出也在增加。

现在,如果我们观察隐藏神经元2生成的线,可以看到随着学习时间的增加,隐藏神经元2的输出在减少。

我们的目标是建模数据中的曲线模式,现在我们已经有了相同输入的两种不同的线性变换。

当我们查看数据的散点图时,可以观察到在6小时之前,随着学习时间的增加,考试成绩也在增加,之后则开始下降。

这可能会让我们思考,我们是否可以对这两条线进行缩放和组合,从而建模数据中的曲线模式?

这里的“组合”是什么意思?

我们并不是几何地将它们连接起来。相反,我们将隐藏层生成的输出传递给最终的输出层,在那里进行另一次线性变换。

我们通过一个例子来理解这一点。

输出层

现在我们来到了神经网络的最终层,也就是输出层。

在这里,我们试图预测考试成绩,这是一个单一的数字,因此输出层中只有一个神经元。

现在是时候为输出层的随机参数值进行初始化了。

假设 $ w_3 = 2 $, $ w_4 = 3 $ 且 $ b_3 = 10 $。

我们有两个权重,因为输出层接收两个输入,一个来自隐藏神经元1,另一个来自隐藏神经元2。

在继续之前,让我们先看一下此时神经网络的结构。

输出神经元接收两个输入:

$$ z_1 $$

来自隐藏神经元1,以及

$$ z_2 $$

来自隐藏神经元2。

我们随机初始化了输出神经元的权重和偏置为:

$$ w_3 = 2 $$

$$ w_4 = 3 $$

$$ b_3 = 10 $$

输出神经元计算:

$$ \hat{y} = w_3z_1 + w_4z_2 + b_3 $$

代入数值:

$$ \hat{y} = 2z_1 + 3z_2 + 10 $$

这个方程表示输出神经元生成的线性函数。

现在让我们看看当第一个数据点通过整个网络时会发生什么。

来自隐藏神经元1:

$$ z_1 = 1(1) – 5 $$

来自隐藏神经元2:

$$ z_2 = -1(1) + 7 $$

现在,这些值被传递给输出神经元:

$$ \hat{y} = 2(-4) + 3(6) + 10 $$

$$ \hat{y} = -8 + 18 + 10 $$

$$ \hat{y} = 20 $$

因此,当输入值为 $ x = 1 $ 时,神经网络的预测结果为:

同样,对于其余的输入值,输出神经元生成以下预测结果:

$$ x = 2 \quad \Rightarrow \quad \hat{y} = 19 $$

$$ x = 3 \quad \Rightarrow \quad \hat{y} = 18 $$

$$ x = 4 \quad \Rightarrow \quad \hat{y} = 17 $$

$$ x = 5 \quad \Rightarrow \quad \hat{y} = 16 $$

$$ x = 6 \quad \Rightarrow \quad \hat{y} = 15 $$

$$ x = 7 \quad \Rightarrow \quad \hat{y} = 14 $$

$$ x = 8 \quad \Rightarrow \quad \hat{y} = 13 $$

$$ x = 9 \quad \Rightarrow \quad \hat{y} = 12 $$

到目前为止,我们已经完成了对神经网络的一次前向传播。

现在,让我们绘制输出层的输出值。

事情变得有趣起来了

让我们试着理解这里到底发生了什么。

首先,我们得到了两个隐藏神经元产生的两条直线。

然后我们想,让我们把这两条直线进行缩放,再将它们结合起来,从而能够对数据中的曲线模式进行建模。

因此,我们将隐藏神经元1产生的直线乘以2,将隐藏神经元2产生的直线乘以3,然后将它们相加。

然而,将直线相加并不能产生曲线。结果仅仅是一条新的直线,我们可以从上面的图表中看到这一点。

让我们遵循下面的方程,从而完全理解这一点。

首先,我们有隐藏神经元产生的两条直线:

输出神经元使用其权重将这些直线结合起来:

将 $z_1$ 和 $z_2$ 代入:

$$ \hat{y} = 2(x – 5) + 3(-x + 7) + 10 $$

展开各项:

$$ \hat{y} = 2x – 10 – 3x + 21 + 10 $$

合并同类项:

$$ \hat{y} = -x + 21 $$

我们可以看到,最终的输出仍然是以下形式:

$$ \hat{y} = mx + c $$

这是直线的方程。

因此,即使我们结合了多个隐藏神经元的输出,最终的结果仍然是一条直线。

这使我们来到了深度学习和神经网络中最重要的概念:激活函数。

激活函数

在这里,我们的数据遵循非线性模式,但一条直线只能建模线性关系。

无论我们如何组合线性神经元,输出仍然是一个线性函数。

那么,这些神经网络是如何学习像曲线、形状、图像和文本这样的复杂模式的呢?

解决方案出人意料地简单。

到目前为止,我们做了什么?我们直接将两个隐藏神经元的输出传递给了输出层。

但是,隐藏神经元的输出并不是直接传递给输出层,而是首先通过一个称为激活函数的特殊函数进行转换。

但激活函数到底做了什么?

它向网络中引入了非线性,使网络能够学习复杂的模式。

我们有许多激活函数,但在这里,我们先考虑最常用的一种激活函数:ReLU(Rectified Linear Unit)。

ReLU做了什么?

ReLU背后的想法出人意料地简单。

给定一个输入值 $z$,

$$ \text{ReLU}(z) = \begin{cases} 0, & z < 0 \\ z, & z \geq 0 \end{cases} $$

简单来说,如果输入是负数,ReLU输出 $0$。如果输入是正数,ReLU保持其不变。让我们看几个例子:

$$ \text{ReLU}(-5) = 0 $$

$$ \text{ReLU}(-2) = 0 $$

$$ \text{ReLU}(3) = 3 $$

$$ \text{ReLU}(7) = 7 $$

注意发生了什么。所有负值都被转换为零,而正值保持不变。激活之前,一个神经元仅仅产生一个线性输出:

$$ z = wx + b $$

使用ReLU后,神经元现在产生:

$$ a = \text{ReLU}(z) $$

或者等价地,

$$ a = \text{ReLU}(wx + b) $$

其中:

  • $z$ 是神经元的线性输出,
  • $a$ 是激活后的输出,
  • $w$ 是权重,
  • $x$ 是输入,
  • $b$ 是偏置。

这种简单的转换改变了所有的一切。

神经元不再将纯粹的线性输出传递给下一层,而是现在应用了一个非线性转换。

因此,结合多个神经元不再产生另一条直线。

这正是神经网络能够学习复杂非线性模式的原因。

回到隐藏层

现在我们需要回到隐藏层,使用 ReLU 激活函数来转换两个隐藏神经元的输出。

此时,我们的神经网络看起来如下:

我们知道隐藏神经元的输出为:

应用 ReLU 后:

$$ a_1 = \text{ReLU}(z_1) $$

$$ a_2 = \text{ReLU}(z_2) $$

让我们看看不同 $x$ 值下的情况。

$$ \begin{array}{c|c|c|c|c} x & z_1=x-5 & a_1=\text{ReLU}(z_1) & z_2=-x+7 & a_2=\text{ReLU}(z_2) \\ \hline 1 & -4 & 0 & 6 & 6 \\ 2 & -3 & 0 & 5 & 5 \\ 3 & -2 & 0 & 4 & 4 \\ 4 & -1 & 0 & 3 & 3 \\ 5 & 0 & 0 & 2 & 2 \\ 6 & 1 & 1 & 1 & 1 \\ 7 & 2 & 2 & 0 & 0 \\ 8 & 3 & 3 & -1 & 0 \\ 9 & 4 & 4 & -2 & 0 \\ 10 & 5 & 5 & -3 & 0 \end{array} $$

我们可以观察到 ReLU 的作用:

隐藏神经元 1 在 $x$ 达到 5 之前保持不活跃(输出为 $0$)。

当 $x > 5$ 时,隐藏神经元 1 开始产生正输出。

隐藏神经元 2 在较小的 $x$ 值时是活跃的。

一旦 $x$ 超过 7,隐藏神经元 2 就变得不活跃并输出 $0$。

换句话说,ReLU 允许不同的神经元在输入空间的不同区域变得活跃。

这是使神经网络能够学习复杂非线性模式的第一步。

现在,让我们可视化两个隐藏神经元在应用激活函数后的输出。

我们可以清楚地看到两个隐藏神经元的输出在应用 ReLU 后发生了怎样的变化。

在应用 ReLU 之前,两个隐藏神经元都产生简单的直线,它们的输出直接传递到输出层。

现在,它们不再是向两个方向无限延伸的直线。我们称它们为分段线性函数。

应用 ReLU 后,所有负输出都被转换为零,而正输出保持不变。

因此,隐藏神经元的行为发生了显著变化。

让我们看两个例子。

对于

$$ x = 3 $$

隐藏神经元 1 产生

$$ z_1 = 3 – 5 = -2 $$

隐藏神经元 2 产生

$$ z_2 = -3 + 7 = 4 $$

应用 ReLU:

$$ a_1 = \text{ReLU}(-2) = 0 $$

$$ a_2 = \text{ReLU}(4) = 4 $$

注意发生了什么。

隐藏神经元 1 变得不活跃,因为其输出被转换为零,而隐藏神经元 2 保持活跃。

现在考虑另一个输入:

$$ x = 8 $$

$$ z_1 = 8 – 5 = 3 $$

$$ z_2 = -8 + 7 = -1 $$

$$ a_1 = \text{ReLU}(3) = 3 $$

$$ a_2 = \text{ReLU}(-1) = 0 $$

这一次,隐藏神经元 1 保持活跃,而隐藏神经元 2 变得不活跃。

这正是我们在上面的图表中观察到的情况。

对于较小的 $x$ 值,隐藏神经元 2 是活跃的,而隐藏神经元 1 是不活跃的。

对于较大的 $x$ 值,隐藏神经元 1 是活跃的,而隐藏神经元 2 是不活跃的。

换句话说,不同的隐藏神经元在输入空间的不同区域变得活跃。

不再是每个隐藏神经元在所有地方都起作用,而是某些隐藏神经元只在它们的输出有用时才起作用。

这个简单的改变将非线性引入网络,这是神经网络能够学习无法用单一直线表示的复杂模式的关键原因。

现在,让我们将这些激活后的输出传递给输出神经元,看看最终的预测如何变化。

返回输出层

我们知道输出神经元计算如下:

$$ \hat{y} = 2a_1 + 3a_2 + 10 $$

$$ a_1 = \text{ReLU}(x-5) $$

$$ a_2 = \text{ReLU}(-x+7). $$

下表展示了网络对不同 $x$ 值的完整计算过程。

$$ \begin{array}{c|c|c|c|c|c} x & a_1=\text{ReLU}(x-5) & a_2=\text{ReLU}(-x+7) & 2a_1 & 3a_2 & \hat{y}=2a_1+3a_2+10 \\ \hline 1 & 0 & 6 & 0 & 18 & 28 \\ 2 & 0 & 5 & 0 & 15 & 25 \\ 3 & 0 & 4 & 0 & 12 & 22 \\ 4 & 0 & 3 & 0 & 9 & 19 \\ 5 & 0 & 2 & 0 & 6 & 16 \\ 6 & 1 & 1 & 2 & 3 & 15 \\ 7 & 2 & 0 & 4 & 0 & 14 \\ 8 & 3 & 0 & 6 & 0 & 16 \\ 9 & 4 & 0 & 8 & 0 & 18 \end{array} $$

最后,我们已经计算了网络的最终预测结果。

让我们来看看最终预测结果的图表。

之前,我们尝试过对直线(由隐藏层中的两个隐藏神经元生成)进行缩放和组合,但我们发现最终输出仍然是一条直线。

现在情况发生了变化。

在应用 ReLU 之后,隐藏神经元生成了分段线性函数。

当输出神经元对这些函数进行缩放和组合时,网络不再局限于一条直线。

这使得网络能够表示无法用一条直线表示的非线性模式。

这是我们在应用 ReLU 后,神经网络生成的函数。

$$ \hat y = 2\,\text{ReLU}(x-5) + 3\,\text{ReLU}(-x+7) + 10 $$

你可能会认为这个函数的拟合效果也不好。没错,你是对的。

这不是我们神经网络最终学习到的函数,也不是我们神经网络最终的输出预测值。

在下一步中,我们将预测的考试成绩与实际的考试成绩进行比较,然后计算均方误差(MSE)。

基于这个误差,学习过程发生。

在这里,我们介绍了深度学习和神经网络中最重要的概念之一:反向传播(Backpropagation)。

这个概念与梯度下降(Gradient Descent)一起工作,用于更新网络的权重和偏置。

到目前为止,我们所做的只是前向传播(Forward Propagation)。

在下一篇文章中,我们将重点介绍神经网络如何使用反向传播和梯度下降进行学习。

总结

在本文中,我们了解到神经元计算的是线性函数。

然后我们构建了一个简单的神经网络,并发现将多个线性神经元组合在一起仍然会得到一个线性函数。

最后,我们介绍了激活函数,并看到了它们如何使神经网络能够建模非线性模式。

我希望这篇博客文章能为你提供一个关于神经网络和深度学习的起点。

我想说的是,如果我们对基础知识有清晰的理解,我们就能轻松地跟进高级主题,而不是感到困惑。

如果你觉得这篇文章有帮助,欢迎与可能需要它的人分享。

如果你有任何疑问或想法,可以在 LinkedIn 上留言。

进一步阅读

由于我们接下来将讨论反向传播,而它与梯度下降密切相关,所以我已经发布了一篇关于梯度下降和随机梯度下降的详细博客文章。

如果你感兴趣,可以在这里阅读。

感谢你读到这里。

这次,我想用一句话来结束。

“任何领域的专家曾经都是一个拒绝放弃的初学者。” —— Helen Hayes

我们下次博客再见,我们将探讨神经网络如何通过反向传播和梯度下降实际进行学习。

谢谢。

作者

查看 Nikhil Dasari 的所有文章

数据科学

,

深入解析

机器学习

神经网络

分享这篇文章

  • 在 Facebook 上分享
  • 在 LinkedIn 上分享
  • 在 X 上分享

Towards Data Science 是一份社区出版物。提交你的见解,以触达我们的全球受众,并通过 TDS 作者支付计划获得收益。

更新 href 为你的实际提交网址

为 TDS 写作

✦ 结束 CTA ✦