01 深度学习基础及前向神经网络

什么是深度学习

深度学习(deep learning)、机器学习(machine learning)、神经网络(neural network)以及人工智能(artificial intelligence),这几个概念在我们日常海量的信息来源中常常容易被混淆。我认为以下这幅图能够较为清晰地阐明它们之间的关系:

(截图自Trask, Andrew W. Grokking Deep Learning. Shelter Island, New York: Manning, 2019.)
其中,人工智能是一个较为宽泛的概念,其研究目的往往与通用人工智能(generalized artificial intelligence)紧密相关,即让机器能够像人一样思考,这在影视和文学作品中屡见不鲜。

在工业领域,我们探讨得更多的是机器学习。我们期望通过数据驱动的方式,使机器从已知数据中 “学习” 到某种规律,进而帮助我们对未知数据进行 “预测”。在这一过程中所应用的某些技术,或许会为我们通向最终的通用人工智能奠定基础。然而,更多时候还是侧重于利用现有的算力,去解决工业生产中具体的、特定的问题。

深度学习属于机器学习的一个子课题,它受生物神经系统的启发,是运用深度神经网络架构的一类机器学习方法。

能解决什么问题

我们通过两个具体的例子,来理解机器学习的应用过程。

实例一:房价预测
以房子的面积、朝向、楼层、房龄、所在学区、周边商区情况以及交通状况等因素作为依据,来预测一套房子的价格。
实例二:图片中猫的识别
给定一张图片,判断图片中是否存在猫。

当我们让机器处理上述问题时,不会采用指令驱动的方式,即不会将问题拆解为一系列精准且可执行的指令,然后向机器明确每一步的操作。相反,我们采用数据驱动的方式,并不告知机器具体的执行办法,而是让机器从海量数据中自主学习模式与规律,自动探寻数据之间的内在联系,并运用这些联系对未知数据展开预测。

在房价预测问题上,我们将大量房屋信息作为输入数据,房屋价格作为输出数据,让机器在这些已知的输入与输出数据中挖掘规律。如此一来,当输入一组全新的房屋数据时,机器便能协助我们预测房价。同样,针对图片中猫的识别,我们把大量图片以及每张图片中是否有猫的信息作为已知条件,让机器从中找寻规律。这样,当输入一张新图片时,机器就能告知我们图片中是否存在猫。

这种使机器自动在大量数据中探寻关系与规律的过程,便是所谓的 “学习” 过程。而机器所找到的规律,会以知识(knowledge)的形式留存于机器中,以便未来用于对未知数据的 “预测”。

这里我们主要讨论的是有监督学习(Supervised machine learning),在这种学习模式下,模型的输入和输出数据均为已知,或者说每组数据都带有标签(labeled)。
与之相对的是无监督学习(Unsupervised machine learning),这类学习所处理的数据没有标签,只有输出数据,其目的在于挖掘数据之间的关联,常用于数据聚类。不过,对于众多实际应用场景而言,很难理解和诠释无监督学习所发现的模式,需要深厚的领域知识以及后续深入分析来解读,且缺乏明确的参照标准用以判定这些模式的正确性与有效性。因此,为便于快速理解深度学习基础概念,我们主要聚焦于有监督学习。

如何理解“规律”(模式pattern、联系correlation)

上面说到我们希望机器找到数据之间的规律,这个规律具体是什么呢?

用房价的例子来说,如果我们把数据以table的形式储存起来,每一列是房子的一个feature,比如面积,朝向等等。每一行则是一套房子的样本(sample)或者记录(record)。我们把房子的面积、朝向、楼层、房龄、学区、商区、交通作为输入features,把需要预测的房价作为输出。

值得注意的是,这里的输入features不是决定的,房价不一定就必须是输出,实际上,我们完全可以把房价等信息当作输入,去判断房子所属的学区属性。也就是说,对于一组特征而言,哪些充当输入,哪些作为输出,是依据我们的实际需求来灵活分配的。

寻找输入数据和输出数据之间的关联,如何把输入数据映射到输出数据上,这种“关联”在数学上,就叫做函数(function),在机器学习领域,我们则将其称作 “模型(model)”。

所以,我们就是要找到一个函数f,实现将输入数据x映射到输出数据 y = f(x)上,这个通过数据驱动找函数f的过程,就是机器学习训练的过程。

现在,我们可以从数学的角度来理解这个问题了。

最简单的函数 y = wx + b

这大概是最简单的函数关系了。这里,我们的输入是x,输出是y。w和b是参数(parameters)。

用常见的机器学习教材上的示意图来表示这个方程,应该是这样的:

注意这个图示里面没有明确体现偏置项b,这主要是为了图示简化作用,这样我们在大型的神经网络架构中可以更清晰的掌握整体的架构。

在我们已知的数据集中,有大量的一一对映的输入x和输出y的样本数据,通过这些数据去“训练”这个函数模型f。那么训练最终得到的是什么呢?其实就是一组参数w,b,这组参数能够让函数 y=wx+b 最大程度契合已知数据集中所蕴含的规律,所以这个过程也可以理解为函数的拟合(fitting)过程。我们所得到的规律,就保存在了w和b这两个参数里,这就是我们从这些数据中学习到的规律与知识。

从简单函数扩展开来

如果我们的输入不止有一项,而是多项呢,比如我们有三个输入,这时候函数就变成了
image

引入向量点乘来表达:
image

示意图如下:
image

如果我们的输出也不止一项,而是两个
image

引入向量和矩阵来表达:
image

image

示意图
image

注意这里的每一个输出都要和每一个输入之间用权重相连,表明其之间的关系。
这里的输入个数和输出个数都是由具体的应用决定的,比如房价预测中,房价作为唯一需要预测的量,输出就只有一个。而图片作为输入,其个数就由像素点个数决定,如果是28x28的图像,则输入就有784个。

为什么是加权求和?

为什么我们在多个输入到输出的映射中,使用的是加权和呢?为什么不用比如
image

这样复杂的函数形式呢?
原因有以下几点:

  1. 神经网络的idea来源于生物神经系统,在生物神经元中,众多的突触连接会将不同的输入信号传递到神经元胞体,这些输入信号在神经元内进行整合,本质上就是一种加权求和的过程,突触连接强度(权重)决定了每个输入信号对神经元最终输出的贡献程度。
  2. 加权求和可以通过调整权重来灵活地组合输入数据,能够表示输入特征的各种线性关系。并且可以通过多层非线性激活函数的叠加来逼近任意复杂的非线性函数,具有很强的泛化能力。
  3. 加权求和的计算相对简单,只涉及乘法和加法运算,在计算机硬件上可以高效地实现。基于加权求和的运算形式使得误差反向传播算法能够有效地计算梯度。
  4. 从直观的角度看,加权能很好地表现数据之间的关系,权重的大小能直接反映该输入对输出的重要程度或贡献大小。权重大的feature,它做一点微小的变动,都会使得输出发生巨大变化。相对的,权重小的feature,那么它变化再大,都不会对输出有什么太大影响。权重为0的feature,则表明他对输出不产生任何影响,不管它变化多大,输出都不会发生任何变化。

多层网络结构

以上我们看到的都是两层简单网络,包含输入层和输出层。以及他们之间的联系(correlation),用权重来表达。如果两层网络结构不足以表达输入和输出之间的关系,我们可以在中间添加隐藏层(hidden layer)来表达更加复杂的关联关系。一个典型的多层网络结构应该是这样的:
image

这里L0层,也就是输入层的数据通过加权得到L1层的数据,把L1层的数据再做为输入进行加权得到L2层的数据,也就是输出层。这里的隐藏层可以继续添加下去,这也就是deep learning中deep的由来。

跟上面一样,我们引入矩阵来表达运算:
image

线性模型的局限性

在引入矩阵表达后,我们会发现一个问题,把h带入到y中得到:
image

也就是说,经过矩阵乘法的结合律化简,原本以W1、b1,W2、b2为参数的两次变换,和以W = W1W2,b=b1W2+b2为参数的一次变换是等效的。一个三层的网络结构“退化”成了两层网络结构。

如果增加了一层网络结构,而增加后的网络结构的表达能力和原来是一样的,那么增加层数有什么意义呢?如果整个神经网络都只用加权和的线性模型,那么无论网络有多少层,最终整个网络都等价于一个单层的线性模型。

对于实际的任务来说,数据往往都是复杂的非线性的,单一的线性模型无法捕捉到数据中的复杂模式和特征,导致模型性能很差,无法完成复杂任务。

此时,我们就需要引入激活函数(activation function)了。

在隐藏层和输出层的节点上,使用激活函数把节点的输出进行非线性变换,如此我们便可以向整个模型中引入非线性关系,模型的表达能力得到增强。

比如我们可以向隐藏层引入这样一个函数
image

这个就是最常见的ReLU(Rectified Linear Unit)函数。

此时模型变成这样:
image
当然,激活函数不止有ReLU函数这一项,还有许多其他经典的激活函数,他们各自有不同的能力,不同的运用场景。后续文章中会有详细介绍。

前向传播 forward propagation

结合上述内容,前向传播本质上是输入数据在神经网络中逐层传递的过程。在每一层,数据都会经历特定运算(加权求和与激活函数变换等),最终产生输出。这一过程,其实就是神经网络所表达函数的计算过程。

如果用上面的三层网络结构的例子,其计算过程如下:
image

本质上就是几层函数的复合运算。

这个过程在两个地方可以体现:

  1. 在模型的训练阶段,前向传播将已知输入数据进行层层运算,从而得到预测值。随后,该预测值会与真实观测数据进行比对,再借助反向传播算法对模型进行优化训练,调整模型参数以提升预测准确性。
  2. 在模型的实际应用阶段,前向传播用于对未知数据进行预测,输出预测结果供实际决策参考 。

无论神经网络结构多么复杂,其核心都是函数的复合运算。从加权求和、激活函数,到后续需要掌握的如 Dropout 等技术,本质上都遵循这一原理。

至此,我们已经搭建好了一个简单的神经网络结构,并且已经知道如何通过输入数据进行一系列运算得到预测输出。之前已经提到,”学习“过程就是寻找输入数据与输出数据之间关联函数的过程。如何找到这个最优的关联函数,如何确保找到的这个函数的预测输出,与实际测得的观测输出误差最小?现在,我们将进入模型训练的关键第二步 —— 反向传播过程。

posted @   王乐Levi  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示