深度学习

深度学习

AI/ML/DL的基本概念

人工智能(Artificial Intelligence)—— 是指是设计和构建智能代理,从环境中感知并采取行动,最大限度地提高实现目标的机会。但目前的科研工作都集中在弱人工智能这部分,强人工智能还遥遥无期。

机器学习(Machine Learning)—— 使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。

深度学习(Deep Leaning)—— 最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。

三者的关系如下图所示,三者之间是包含和被包含的关系。

感知机——神经网络的雏形

感知机(Perceptron) 是神经网络的起源算法,由两层神经元组成,如下图所示,

  • 输入层接收外界输入信号后传递给输出层

  • 输出层是M-P神经元

感知机(Perceptron)是一种简单的二分类线性分类模型,由Frank Rosenblatt在1957年提出。它是神经网络和支持向量机的基础模型之一。感知机通过学习输入数据的特征,找到一个超平面将数据分为两类。

基本结构

感知机的基本结构包括:

  1. 输入层:接收输入特征向量 x=(x1,x2,,xn)x=(x1,x2,…,xn)
  2. 权重:每个输入特征对应一个权重 w=(w1,w2,,wn)w=(w1,w2,…,wn)
  3. 偏置:一个额外的参数 bb,用于调整模型的输出。
  4. 激活函数:通常使用阶跃函数(Step Function)作为激活函数,输出二分类结果。

数学模型

感知机的输出 yy 可以表示为:

y=f(i=1nwixi+b)y = f\left( \sum_{i=1}^{n} w_i x_i + b \right)

其中,ff 是激活函数。对于二分类问题,激活函数通常定义为:

f(z)={1if z00if z<0f(z) = \begin{cases} 1 & \text{if } z \geq 0 \\ 0 & \text{if } z < 0 \end{cases}

学习过程

感知机的学习过程通过迭代更新权重和偏置来实现,目标是使分类错误最小化。具体步骤如下:

  1. 初始化:随机初始化权重 ww 和偏置 bb

  2. 计算输出:对于每个训练样本 (x,d)(x,d),计算感知机的输出 yy

  3. 更新权重:如果输出 yy 与真实标签 dd不一致,则更新权重和偏置:

    wiwi+η(dy)xibb+η(dy)w_i \leftarrow w_i + \eta (d - y) x_i b \leftarrow b + \eta (d - y)

    其中,ηη 是学习率,控制更新的步长。

  4. 重复:重复上述步骤,直到所有训练样本被正确分类或达到最大迭代次数。

优缺点

优点

  • 简单易懂,易于实现。
  • 在线学习,可以逐步更新模型。

缺点

  • 只能处理线性可分的数据。
  • 对于非线性问题,无法有效分类。

扩展

感知机是单层神经网络的基础。多层感知机(MLP)通过引入隐藏层和非线性激活函数,可以解决非线性分类问题,并成为深度学习的重要组成部分。

神经网络

神经网络(Neural Networks)是一类受到生物神经系统启发的机器学习模型,用于模拟人类或动物的大脑神经元之间的连接和信息处理方式。它是深度学习的核心结构之一,广泛应用于图像识别、自然语言处理、推荐系统等领域。

神经网络的基本组成

  1. 神经元(Neurons):神经网络的基本单元,模拟生物神经元的功能。每个神经元接收输入信号,通过激活函数处理后,输出结果。

    • 细胞体是神经元的主体,它包括细胞核、细胞质和细胞膜三部分
    • 树突主要接受来自其他神经元的信号,是接受器
    • 轴突用来输出细胞体产生的电脉冲信号,是发射器
    • 轴突的末端形成许多分支,称作神经末梢,每条神经末梢与其他神经元通过突触相连并传递信号
    • 髓鞘是包裹在神经细胞轴突外面的一层膜

    神经元的工作过程 :其他神经元的信号(输入信号)通过树突传递到细胞体(也就是神经元本体)中,细胞体把从其他多个神经元传递进来的输入信号进行合并加工,然后再通过轴突前端的突触传递给别的神经元。神经元就是这样借助突触结合而形成网络的。

    如果输入信号之和超过神经元固有的边界值(阈值),细胞体就会做出反应,向与轴突连接的其他神经元传递信号,这称为点火。

    点火时神经元输出的信号大小是固定的。即便从邻近的神经元接收到很大的刺激,或者轴突连接着多个神经元,这个神经元也只输出固定大小的信号。点火的输出信号是由"0" 或 "1"表示的数字信息:

    无输出信号,y=0
    有输出信号,y=1

    1943年, [McCulloch and Pitts, 1943] 将神经元的工作过程抽象为上图所示的简单模型,这就是一直沿用至今的 "M-P神经元模型" 。

    在这个模型中,神经元接收到来自 mm 个其他神经元传递过来的输入信号,这些输入信号通过带权重(weights)的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过"激活函数" (activation function) 处理以产生神经元的输出。神经元在信号之和超过阈值时点火,不超过阈值时不点火。

    所以点火的函数可以表示为:y=φ(ω1x1+ω2x2+ω3x3+...+ωmxmb)y=\varphi(\omega_1x_1+\omega_2x_2+\omega_3x_3+...+\omega_mx_m-b)

    其中,φ(z)\varphi(z)称为激活函数。理想中的激活函数是下图所示的阶跃函数,它将输入值映射为输出值 "0" 或 "1" ,显然,

    • "1" 对应于神经元兴奋(点火成功)
    • "0" 对应于神经元抑制(点火不成功)

    然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数。

  2. 层(Layers)

    神经网络由多层神经元组成,每一层的神经元通过权重和偏置连接,并通过激活函数引入非线性。通常包括:

    • 输入层(Input Layer):接收输入数据。
    • 隐藏层(Hidden Layers):位于输入层和输出层之间,通过非线性变换提取特征。负责数据的特征抽象和转换。神经网络的深度(深度学习)指的就是隐藏层的数量。
    • 输出层(Output Layer):生成最终的输出结果。
  3. 权重(Weights)和偏置(Biases):神经元之间的连接通过权重来调整输入信号的强度,偏置项则用于调整输出的基准。

  4. 激活函数(Activation Function):决定神经元是否激活的函数。常见的激活函数有:

    • Sigmoid:将输出限制在0到1之间,适用于二分类问题。
    • ReLU (Rectified Linear Unit):输出为输入的正部分,负部分为0,适用于隐藏层。
    • Softmax:常用于多分类问题,输出一个概率分布。

神经网络的工作原理

前向传播(Forward Propagation):

前向传播是指输入数据通过神经网络的每一层,通过权重和偏置加权求和,再通过激活函数处理,最终得到输出的过程。

对于第 ll 层的输出 a(l)a^{(l)},计算公式为:

z(l)=W(l)a(l1)+b(l)a(l)=f(z(l)) z^{(l)} = W^{(l)} a^{(l-1)} + b^{(l)} a^{(l)} = f(z^{(l)})

其中:

  • W(l)W^{(l)} 是第 ll 层的权重矩阵。
  • b(l)b^{(l)} 是第 ll 层的偏置向量。
  • ff 是激活函数(如 ReLU、Sigmoid、Tanh 等)。
  • a(l1)a^{(l-1)} 是第 l1l-1层的输出(即第 ll 层的输入)。

最终输出 y^\hat{y} 是输出层的激活值 a(L)a^{(L)},其中 LL 是神经网络的层数。

损失函数(Loss Function):

损失函数用于衡量模型预测值 y^\hat{y}与真实值yy 之间的差距。常见的损失函数包括:

  • 均方误差(MSE)(用于回归问题):

    L=1Ni=1N(yiy^i)2L = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2

  • 交叉熵损失(Cross-Entropy Loss)(用于分类问题):

    L=1Ni=1N[yilog(y^i)+(1yi)log(1y^i)]L = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

反向传播(Backpropagation)

神经网络通过反向传播算法来优化参数(权重和偏置)。反向传播通过梯度下降等优化方法来减少损失函数值,逐步调整网络中的参数。

反向传播是通过链式法则计算损失函数对每个参数的梯度,从而更新权重和偏置的过程。

梯度计算

对于第ll层的权重 W(l)W^{(l)}和偏置b(l)b^{(l)},梯度计算如下:

  1. 计算输出层的误差 δ(L){\delta^{(L)}}

    δ(L)=La(L)f(z(L))\delta^{(L)} = \frac{\partial L}{\partial a^{(L)}} \cdot f'(z^{(L)})

  2. 计算第ll 层的误差 δ(l)\delta^{(l)}

    δ(l)=((W(l+1))Tδ(l+1))f(z(l))\delta^{(l)} = \left( (W^{(l+1)})^T \delta^{(l+1)} \right) \cdot f'(z^{(l)})

  3. 计算权重和偏置的梯度:

    LW(l)=δ(l)(a(l1))TLb(l)=δ(l)\frac{\partial L}{\partial W^{(l)}} = \delta^{(l)} (a^{(l-1)})^T \frac{\partial L}{\partial b^{(l)}} = \delta^{(l)}

参数更新

使用梯度下降法更新参数:

W(l)W(l)ηLW(l)b(l)b(l)ηLb(l)W^{(l)} \leftarrow W^{(l)} - \eta \frac{\partial L}{\partial W^{(l)}} b^{(l)} \leftarrow b^{(l)} - \eta \frac{\partial L}{\partial b^{(l)}}

其中,η\eta 是学习率。

训练过程

神经网络的训练过程通常包括以下步骤:

  1. 初始化参数:随机初始化权重和偏置。
  2. 前向传播:计算网络的输出。
  3. 计算损失:通过损失函数衡量预测值与真实值的差距。
  4. 反向传播:计算梯度并更新参数。
  5. 重复迭代:重复上述步骤,直到损失函数收敛或达到最大迭代次数。

输出层设计

神经网络输出层的设计是神经网络架构中的关键部分,它直接影响模型的预测能力和适用场景。输出层的设计需要根据具体任务(如分类、回归、生成等)来确定。以下是输出层设计的详细说明,包括数学公式和代码示例。


1. 输出层的作用

输出层的主要作用是将隐藏层的输出映射到最终的预测结果。具体设计取决于任务类型:

  • 分类任务:输出类别概率或类别标签。
  • 回归任务:输出连续值。
  • 生成任务:输出生成的数据(如图像、文本等)。

2. 输出层的常见设计

2.1 分类任务

二分类任务

  • 输出层神经元数量:1 个神经元。

  • 激活函数:Sigmoid 函数,将输出映射到 [0, 1] 区间,表示概率。

    σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

  • 损失函数:二元交叉熵损失(Binary Cross-Entropy Loss)。

    L=1Ni=1N[yilog(y^i)+(1yi)log(1y^i)]L = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

多分类任务

  • 输出层神经元数量:等于类别数量 ( C )。

  • 激活函数:Softmax 函数,将输出映射为概率分布。

    Softmax(zi)=ezij=1Cezj\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}}

  • 损失函数:交叉熵损失(Cross-Entropy Loss)。

    L=1Ni=1Nj=1Cyijlog(y^ij)L = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{C} y_{ij} \log(\hat{y}_{ij})


2.2 回归任务

  • 输出层神经元数量:等于输出值的维度(通常为 1)。

  • 激活函数:无激活函数(线性输出),或使用 ReLU 等非线性函数(如果输出为非负值)。

  • 损失函数:均方误差(Mean Squared Error, MSE)。

    L=1Ni=1N(yiy^i)2L = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2


2.3 生成任务

  • 输出层神经元数量:取决于生成数据的维度。例如:
    • 生成图像:输出像素值,神经元数量等于图像宽度 × 高度 × 通道数。
    • 生成文本:输出词汇表中每个词的概率,神经元数量等于词汇表大小。
  • 激活函数
    • 生成图像:通常使用 Tanh(输出范围 [-1, 1])或 Sigmoid(输出范围 [0, 1])。
    • 生成文本:通常使用 Softmax。
  • 损失函数
    • 生成图像:均方误差(MSE)或对抗损失(如 GAN 中的判别器损失)。
    • 生成文本:交叉熵损失。

3. 输出层设计的注意事项

  1. 任务类型:根据任务类型(分类、回归、生成)选择合适的输出层结构和激活函数。
  2. 输出范围:确保输出层的激活函数能够满足任务的需求(如概率值在 [0, 1] 区间)。
  3. 损失函数:选择与任务匹配的损失函数,确保模型能够正确优化。
  4. 多任务学习:如果模型需要同时完成多个任务(如分类和回归),可以为每个任务设计独立的输出层。

4. 总结

  • 分类任务:使用 Sigmoid(二分类)或 Softmax(多分类)作为激活函数,配合交叉熵损失。
  • 回归任务:使用线性输出(无激活函数),配合均方误差损失。
  • 生成任务:根据生成数据的类型选择合适的激活函数和损失函数。

通过合理设计输出层,可以使神经网络更好地适应不同的任务需求。

神经网络的分类

  1. 前馈神经网络(Feedforward Neural Networks, FNN):最基本的神经网络结构,信息从输入层传递到输出层,中间没有循环。
  2. 卷积神经网络(Convolutional Neural Networks, CNN):主要用于处理图像数据,通过卷积层提取局部特征,广泛应用于计算机视觉领域。
  3. 循环神经网络(Recurrent Neural Networks, RNN):适用于处理时间序列数据(如语音、文本)。它通过循环连接保持记忆,能够处理序列信息。
  4. 生成对抗网络(Generative Adversarial Networks, GAN):由生成器和判别器两部分组成,通过对抗训练生成逼真的样本,广泛用于图像生成、数据增强等任务。

神经网络的优势

  • 自适应学习:神经网络能够从数据中自动学习特征,不需要手动提取特征。
  • 强大的表达能力:特别是深度神经网络(深度学习)具有强大的拟合能力,能处理复杂的非线性关系。
  • 通用性:神经网络能够应用于多种任务,如图像分类、语音识别、自然语言处理等。

神经网络的挑战

  • 训练时间长:深度神经网络需要大量的数据和计算资源进行训练,训练时间可能非常长。
  • 过拟合:如果模型过于复杂,可能会在训练数据上表现得很好,但在未见过的测试数据上表现差。通常需要通过正则化、早停等技术来避免。
  • 解释性差:神经网络通常被认为是“黑箱”模型,难以解释它们做出决策的具体原因。

优化算法

为了提高训练效率和效果,通常会使用一些优化算法:

  • 随机梯度下降(SGD):每次更新使用一个样本或一个小批量样本。
  • 动量法(Momentum):引入动量项加速收敛。
  • Adam:结合动量和自适应学习率的优化算法。

总结

神经网络通过模仿人类大脑神经元之间的连接方式,能够学习和抽象复杂的模式和关系,广泛应用于各种领域。随着计算力的提升和大数据的可获得,神经网络(尤其是深度学习)在多个领域取得了显著的成功。


监督学习一般方法

深度学习一般方法

作者

sonder

发布于

2025-02-08

更新于

2025-02-14

许可协议