深度学习初步与神经网络模型介绍

适用于有python语言基础的深度学习小白入门教程(一)

1. 什么是深度学习?

请添加图片描述

深度学习(Deep Learning,DL)是机器学习(Machine Learning,ML)领域中的一个研究方向,作用是帮助机器学习项目更接近于人工智能。

简单来说,深度学习就像是让计算机学会像人脑一样思考,能自己从图像、声音、文字等数据中找出规律。它通过把简单的特征一层层组合,最终识别出更复杂的模式,比如识别人脸、理解语音等。
请添加图片描述

请添加图片描述

深度学习从字面理解包含两个意思,分别是“深度”和“学习”。

1.1 学习

简单来说,学习就是从不知道到知道的过程,比如看到伸出一根手指代表“1”,两根手指代表“2”,我们就通过观察和归纳学会了这个规则。

那“深度学习”跟这种学习有什么关系呢?我们可以把人学习的过程看作是有策略和方法的。

不同的人学得好坏,往往取决于他们怎么理解、思考和总结问题。

科学家们试图让计算机也能像人一样去“思考”和“学习”,于是就设计了模拟人脑的“神经网络”。

这个“神经网络”是借鉴人脑中大量神经元互相连接的结构,虽然目前还不能完全复制人脑的思考方式,但它已经能在某些方面,比如识别图片、理解语言等,表现得越来越聪明了。

1.2 深度

简单来说,“深度”指的是把复杂问题分成多个步骤,一层一层地处理。

比如算 1 + 1 + 1,我们通常会先算 1 + 1 = 2,再算 2 + 1 = 3。这个分步骤的过程,其实就是“分层”的思维方式。

请添加图片描述

输入层是我们提供给计算机的信息,比如数字、图片、文字等。

输出层是我们想得到的结果,比如计算答案或识别一张图片。

中间的每一层(隐藏层)就像是一步步的处理过程,每层都对数据进行一点加工。

所以,“深度”其实就是这些中间处理层很多、结构更复杂,就像人解难题时会分步骤思考一样,计算机也是通过分层来逐步理解和处理数据的。

层越多,模型处理复杂问题的能力就越强。


2. 深度学习核心步骤

深度学习虽然听起来复杂,但其核心流程可以概括为三个主要步骤。

请添加图片描述

2.1 步骤一:建立模型

一开始,我们先不管细节,先搭建一个非常复杂的函数(网络结构),它的内部有很多未知数(参数)。

我们把数据输进去,让它给出一个结果(预测值),然后和真实值对比,算出误差。

根据这个误差,我们反过来调整函数里的参数,让它的预测越来越准。

经过不断地练习和调整,最终从输入得到正确的输出,这个过程训练出的系统,就是我们说的“模型”,模型里的参数叫做权重

“建立模型”主要是指设计和构建神经网络的结构,相当于定义一个包含许多可能函数的“函数集合”。

2.1.1 选择网络结构

我们应该选择什么样的网络结构?

网络应该有多少层?

每层应该包含多少神经元?

请添加图片描述

AlexNet (2012) : 8层网络,在ImageNet竞赛中取得突破,错误率为16.4%

请添加图片描述

VGG (2014) : 19层网络,结构相对简单统一,错误率降至7.3%

请添加图片描述

GoogLeNet (2014) : 22层网络,引入了Inception模块,注重计算效率,错误率降至6.7%

请添加图片描述

Residual Net (ResNet) (2015) : 高达152层,通过引入“残差连接”解决了深度网络训练困难的问题,错误率显著降低至3.57%

一般来说,更深、更复杂的网络结构通常具有更强的表达能力,能够学习到更复杂的特征表示。

2.1.2 引入激活函数

为了增强网络的表达能力,我们需要激活函数来将线性函数变为非线性函数

如果没有激活函数,多层神经网络本质上等同于单层线性网络(因为多层线性变换的叠加仍然是线性变换)。

激活函数需要有连续性,大多数优化算法(如梯度下降)依赖于梯度的计算,连续的函数才可导,才可以得出最优解。

在这里插入图片描述

以上是常用的激活函数及其导数,其中ReLU计算简单高效,能有效缓解梯度消失问题,是目前最常用的激活函数之一。

2.1.3 前向计算

前向计算是指数据从输入层开始,逐层通过网络,经过加权求和与激活函数处理,最终在输出层得到预测值的过程。

在这里插入图片描述

每个神经元会拿输入做加权计算(乘上某些数字 + 偏置),再通过激活函数处理。

图中每一层的1​和0​、0​和0​、-2​和2​表示偏置。

偏置(Bias)是神经网络中每个神经元独有的一个额外参数,它和权重一起参与计算。

能让模型更灵活,能更好地学习和拟合数据。

2.2 步骤二:定义损失函数

定义了模型之后,我们需要一个标准来衡量模型预测的好坏。

这个标准就是损失函数(Loss Function),它量化了模型预测值与真实值之间的差异。

模型就根据这个反馈去调整内部的参数,让下一次预测得更准。

常用损失函数:

  1. 均方误差 (Mean Squared Error, MSE)

常用于回归问题,计算预测值与真实值之差的平方的均值

在这里插入图片描述

其中N​是样本数量,Y​是真实值,f(X)​是预测值

  1. 交叉熵损失函数 (Cross-Entropy Loss)

常用于分类问题(如二分类或多分类),衡量两个概率分布之间的差异

在这里插入图片描述

其中单个输出ai,真实标签yi

2.3 步骤三:参数学习

有了模型和评估标准,接下来的目标就是找到一组最优的模型参数(权重w​和偏置b​),使得损失函数的值最小。

这个过程就是模型的训练或优化。

2.3.1 梯度下降

梯度下降是最常用的优化算法之一。

通过计算损失函数对模型参数的梯度(导数),然后沿着梯度的反方向更新参数,从而逐步减小损失值。

在这里插入图片描述

神经网络里有很多“连接”,每一层的神经元连接到下一层

每条连接上都有一个权重 w w w

每个神经元也有一个 偏置 b b b

所有的 w w w b b b 加起来,就是神经网络的参数集合 θ = { w 1 , w 2 , . . . , b 1 , b 2 , . . . } \theta = \{w_1, w_2, ..., b_1, b_2, ...\} θ={w1,w2,...,b1,b2,...}

步骤:

  1. 选择一个初始值:

    我们需要先给这些权重 w w w、偏置 b b b 一个起点。

    一般是随机初始化,也可以使用预训练集。

  2. 计算梯度(∂L/∂w):

    我们输入数据让模型做预测,算出每个参数的梯度,也就是计算损失函数 L 关于每个参数 w 的偏导数(写作 ∂ L ∂ w \frac{\partial L}{\partial w} wL)。

    梯度能告诉我们如果改动这个参数,会让损失变大还是变小。

  3. 更新参数:
    在这里插入图片描述

    η \eta η 是学习率,它控制了每次更新的步长。

    学习率的选择非常重要,太小会导致收敛过慢,太大则可能导致震荡或无法收敛。

    −η * (∂L/∂w) 表示参数更新的量和方向,梯度是“往错误方向爬”,我们要沿着反方向下坡,所以有个负号。

  4. 迭代: 重复步骤2和3,直到 ∂L/∂w 非常小(即损失函数几乎不再下降,达到收敛状态),或者达到预设的迭代次数。

2.3.2 反向传播算法

那我问你,如何计算梯度值呢?

直接计算大规模神经网络中损失函数对于所有参数的梯度 (∂L/∂w) 是非常复杂的。

反向传播算法是一种高效计算这些梯度的方法。

其核心思想是利用链式法则从网络的输出层开始,逐层向后计算梯度。
在这里插入图片描述

上图例子是一个sigmoid 函数,它对一个线性组合 z = w 0 x 0 + w 1 x 1 + w 2 z = w_0x_0 + w_1x_1 + w_2 z=w0x0+w1x1+w2 取sigmoid输出。

f ( w , x ) = 1 1 + e − ( w 0 x 0 + w 1 x 1 + w 2 ) f(w, x) = \frac{1}{1 + e^{-(w_0x_0 + w_1x_1 + w_2)}} f(w,x)=1+e(w0x0+w1x1+w2)1

正向传播(Forward Pass):

  1. 从左到右计算,先算每一项:

    w 0 ⋅ x 0 = 2 ⋅ − 1 = − 2 w_0 \cdot x_0 = 2 \cdot -1 = -2 w0x0=21=2

    w 1 ⋅ x 1 = − 3 ⋅ − 2 = 6 w_1 \cdot x_1 = -3 \cdot -2 = 6 w1x1=32=6

    z = − 2 + 6 + w 2 = − 2 + 6 + ( − 3 ) = 1 z = -2 + 6 + w_2 = -2 + 6 + (-3) = 1 z=2+6+w2=2+6+(3)=1

  2. 然后通过一系列函数:

    乘 -1: − z = − 1 -z = -1 z=1

    取指数: e − 1 ≈ 0.37 e^{-1} \approx 0.37 e10.37

    加 1: 0.37 + 1 = 1.37 0.37 + 1 = 1.37 0.37+1=1.37

    取倒数: 1 / 1.37 ≈ 0.73 1 / 1.37 \approx 0.73 1/1.370.73

最终输出就是:0.73

反向传播(Backward Pass):

我们现在从输出(右边)往回传“误差影响力”或“梯度”

每个小圆圈表示一个操作,我们需要按链式法则:

当前节点的梯度 = 本地梯度 × 上一层传来的梯度

我们看 w 0 ⋅ x 0 w_0 \cdot x_0 w0x0 那一步:

它后面传来的梯度是:0.2

  • 乘法的局部梯度:

    x 0 x_0 x0 而言,梯度是 w 0 = 2 w_0 = 2 w0=2

    w 0 w_0 w0 而言,梯度是 x 0 = − 1 x_0 = -1 x0=1

  • 所以正如图上所示:

    x 0 x_0 x0 2 ⋅ 0.2 = 0.4 2 \cdot 0.2 = 0.4 20.2=0.4

    w 0 w_0 w0 − 1 ⋅ 0.2 = − 0.2 -1 \cdot 0.2 = -0.2 10.2=0.2


3.典型神经网络模型

3.1 卷积神经网络(CNN)

CNN 是一种特别适用于处理网格状数据的深度学习模型,例如图像(2D网格的像素)和时间序列数据(1D网格)。

通常应用在图像分类、目标检测、图像分割、人脸识别、自然语言处理(如文本分类)等。

在这里插入图片描述

CNN 的设计灵感来源于生物视觉系统的层级特征提取。

在人类视觉皮层中,神经元对视野中的小区域敏感,并逐步组合这些信息以识别更复杂的模式。

低层:先看到图像的基本元素,如边缘、角点

中层:再组合这些线条成五官、轮廓等局部特征

高层:组合局部部件形成完整的物体概念,比如“这是张人脸”

CNN 模仿的就是这个从局部到整体的识别过程。

3.1.1 卷积层
  • 卷积运算:卷积层是 CNN 的核心构建块。

    它通过在输入数据上滑动一个或多个卷积核或滤波器的小型矩阵,来找特定特征,比如边缘或纹理。

    卷积核/滤波器:一个小窗口,在图像上滑动,它会检测某种特征。

    不同卷积核能做不同事,有的模糊图像,有的强调边缘,就像各种不同的滤镜。

    局部感受野:每个神经元只看图像的一小部分。

    权值共享:同一个卷积核在整个输入数据上共享其权重。节省参数,并使得网络对物体在图像中的位置具有一定的平移不变性。

  • 卷积参数

    步长 :卷积核每次滑动的像素数,也就是滑动的速度,越大图就越快缩小。

    零填充:在输入数据的边缘添加零值像素,防止边缘信息丢失。
    在这里插入图片描述

滤波器示例:不同的滤波器可以提取不同的图像特征。

在这里插入图片描述

3.1.2 池化层

池化层通常接在卷积层之后,能帮助压缩信息量(降采样) ,保留重要特征,丢掉细节,让处理更高效。

在这里插入图片描述

池化层对特征图的每个小区域(例如2x2)进行聚合操作。

最大池化:取区域内的最大值。这是最常用的池化方法,因为它能保留最显著的特征。

平均池化:取区域内的平均值

3.1.3 激活函数

在卷积层和全连接层之后,通常会应用一个非线性激活函数,如ReLU,避免梯度消失,训练更顺畅。

3.2 循环神经网络(RNN)

RNN 是一类专门用于处理序列数据(如文本、语音、时间序列)的神经网络。它们通过在网络中引入循环连接,使得信息可以在时间步之间传递和保持。

也就是会记住以前的信息

通常应用在自然语言处理(机器翻译、文本生成、情感分析)、语音识别、时间序列预测、视频分析等。

序列数据是指其元素顺序很重要的数据,比如股票价格(历史价格影响未来预测)、语音信号(声音随时间变化)、文本(词语的顺序决定句子含义)。

3.2.1 RNN基本结构

RNN的核心思想是“记忆”。它有一个内部状态(隐藏状态 h),用于捕获序列中先前时间步的信息。

在每个时间步 t t t,RNN接收当前输入 x t x_t xt和前一时间步的隐藏状态 h t − 1 h_{t-1} ht1,然后计算当前隐藏状态 h t = f ( x t , h t − 1 h_t = f(x_t, h_{t-1} ht=f(xt,ht1)和当前输出 y t y_t yt

在这里插入图片描述

循环连接:隐藏状态的计算依赖于前一个隐藏状态,形成了环路。即每一个时间步都依赖前一个时间步的结果。

不同类型的RNN结构:

类型说明举例
一对多一个输入,多个输出图片 → 文字描述
多对一多个输入,一个输出一段话 → 情绪判断
多对多多个输入,多个输出翻译(英文 → 中文)

在这里插入图片描述

3.2.2 RNN内部计算

在这里插入图片描述

  • 计算隐藏状态的公式: h t = f ( U h t − 1 + W x t + b ) h_t = f(U h_{t-1} + W x_t + b) ht=f(Uht1+Wxt+b)

    W x t W x_t Wxt:处理当前输入的信息

    U h t − 1 U h_{t-1} Uht1:带入上一个时间步的记忆信息

  • 计算输出的公式: y t = g ( V h t + b y ) y_t = g(V h_t + b_y) yt=g(Vht+by)

    V V V:输出权重矩阵

    b y b_y by:输出偏置项

    g g g:输出激活函数,如 softmax (用于分类) 或线性函数 (用于回归)

每一步,它都会用当前的输入 + 上一步的记忆 来更新当前的隐藏状态。

3.2.3 RNN局限性

由于RNN在时间上展开,反向传播时梯度会逐层传递,可能会导致梯度消失或者梯度爆炸。

梯度消失:如果激活函数的导数或权重矩阵的范数持续小于1,梯度在反向传播过程中会指数级衰减,导致模型“忘记了前面的内容”

梯度爆炸:相反,持续大于1,则梯度会指数级增长,导致训练不稳定。

3.2.4 长短期记忆网络(LSTM)

LSTM 是一种特殊的RNN,旨在解决标准RNN的梯度消失/爆炸问题。

在这里插入图片描述

它引入了门控机制,来决定信息的去留:

作用类比
遗忘门忘掉不重要的旧信息像大脑筛选掉无关的记忆
输入门接受重要的新信息记下新的知识点
输出门决定输出什么把有用的想法表达出来

还有一个细胞状态,像一条信息传送带,能让有用的内容一直传下去。

在这里插入图片描述

3.3 深度置信网络(DBN)

是一种早期的深度生成模型,由多个受限玻尔兹曼机(RBM)堆叠组成。

能逐层提取抽象特征,可以应用在图像识别、语音识别、特征提取等(现在已较少使用)。

3.4堆栈自编码器网络(SAE)

SAE是通过堆叠多个自编码器(AE)形成的深层神经网络,用于无监督特征学习。

能在无标签数据中提取有用特征,可以应用在数据降维、图像去噪、异常检测等。


在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值