深度神经网络

深度神经网络

  1. 这是一个深度神经网络

    https://cdn.acwing.com/media/article/image/2024/11/13/181746_df42f583a1-deepneuralnetwork.png

    L=4 表示神经网络层数,用 n[l] 表示第 l 层神经元数量,有 n[1]=n[2]=5n[3]=3n[4]=n[L]=1n[0]=nx=3

    对于前向传播有:

    z[l]=ω[l]a[l1]+b[l]a[l]=g[l](z[l])

    向量化实现:

    Z[l]=ω[l]A[l1]+b[l]A[l]=g[l](Z[l])

    前向传播需要输入 A[l1] ,输出 A[l],缓存 Z[l]ω[l]b[l]

    对于反向传播有:

    dz[l]=da[l]g[l](z[l])dw[l]=dz[l]a[l1]db[l]=dz[l]da[l1]=w[l]Tdz[l]dz[l]=w[l+1]Tdz[l+1] g[l](z[l])

    向量化实现:

    dZ[l]=dA[l]g[l](Z[l])dω[l]=1mdZ[l]A[l1]Tdb[l]=1mdZ[l]dA[l1]=ω[l]TdZ[l]

    dbl = 1. / m * np.sum(dZl, axis=1, keepdims=True)

    反向传播需要输入 dA[l]和缓存的数据,输出 dω[l]db[l]dA[l1]

  2. 当实现深度神经网络的时候,一个常用的检查代码是否有错的方法就是过一遍算法中矩阵的维数。

    ω[l]Rn[l]×n[l1]A[l1]Rn[l1]×mb[l]Rn[l]×mZ[l]=ω[l]A[l1]+b[l]Z[l]Rn[l]×mA[l]Rn[l]×mA[l]=g[l](Z[l])

    dA[l]Rn[l]×mZ[l]Rn[l]×mdZ[l]=dA[l]g[l](Z[l])dZ[l]Rn[l]×mA[l1]Rn[l1]×mdω[l]Rn[l]×n[l1]dω[l]=1mdZ[l]A[l1]Tdb[l]Rn[l]×1db[l]=1mdZ[l]ω[l]Rn[l]×n[l1]dZ[l]Rn[l]×mdA[l1]Rn[l1]×mdA[l1]=ω[l]TdZ[l]

  3. 深度神经网络通过多层的隐藏单元逐步从输入数据中提取特征。每一层的神经元负责学习不同级别的特征,随着层数的增加,网络可以逐步从简单的局部特征(如图像中的边缘)学习到更复杂的全局特征(如面部各个部位或对象的整体结构)。

    在人脸检测中,网络的逐层学习过程:

    1. 第一层(低级特征探测)
      在输入层之后,第一层的神经元主要负责捕捉输入数据中的低级特征。例如,在图像处理中,第一层的神经元可以学习到图像中的边缘(如垂直或水平的边缘)。这类似于你提到的“边缘探测器”或“特征探测器”。
    2. 中间层(组合低级特征):
      后续的层开始将这些低级特征组合成更复杂的局部特征。例如,第二层或第三层的神经元可能将边缘结合起来,识别图像中的某些面部特征,如眼睛、鼻子等。这些层捕捉的是数据的“中级特征”。
    3. 高层(高级特征和全局理解)
      在深层的网络中,神经元将前面学到的局部特征组合起来,形成对整个对象的理解。在人脸识别任务中,这些层可能将眼睛、鼻子、嘴巴等组合起来,最终识别出整张面部图像。

    在网络中,深度指的是神经网络的层数。更深的网络可以捕捉到更多的层级特征,逐步构建出复杂的表示。宽度指的是每一层的神经元数量。在深层网络中,层数相对较多,但每一层的神经元数量相对较少;如果要用浅层网络来模拟深层网络,通常需要大幅增加每一层的神经元数量,甚至达到指数级增长。

    深度神经网络的强大之处在于它可以从简单的特征(如边缘)开始,逐层学习到更复杂的模式。通过这种逐步的特征提取,网络能够有效地解决复杂的任务,如人脸识别、语音识别等。

  4. 在机器学习中,超参数是指那些在训练过程中不能通过模型自我学习得到的参数,而是由开发者手动设置的参数。这些参数的选择对模型的性能有重要影响。常见的超参数包括:

    • 学习率 (Learning Rate):决定每次参数更新的幅度。如果学习率过高,模型可能会错过最优解;如果学习率过低,模型可能会收敛过慢。
    • 梯度下降法的循环轮数 (Epochs):指模型训练时完整遍历数据集的次数。更多的训练轮数通常有助于提高模型的准确度,但也可能导致过拟合。
    • 隐藏层数目 (Number of Hidden Layers):决定了神经网络的深度。更深的网络可以学习更复杂的特征,但也可能增加计算复杂度和过拟合的风险。
    • 每层神经元的数量 (Number of Neurons in Each Layer):影响每层的表示能力。更多的神经元可以增强模型的表达能力,但也增加了计算量和可能的过拟合问题。
    • 激活函数 (Activation Function):决定了每一层神经元输出的非线性特征。常见的激活函数包括ReLU、Sigmoid、Tanh等,选择合适的激活函数有助于网络的有效学习。

    这些超参数通常是通过手动设置的,并且会影响到模型的训练效果和最终的性能,因此它们被称作超参数。

  5. 寻找超参数的最优值通常不是通过简单的公式计算得到,而是依赖于大量的实验和调试。一般来说,超参数优化的过程可以概括为一个 Idea — Code — Experiment — Idea 的迭代循环。

    • Idea:根据问题的需求和经验,提出一组超参数的初步选择。比如选择合适的学习率、隐藏层数、激活函数等。
    • Code:根据初步的超参数选择,编写和实现模型。
    • Experiment:运行模型并观察它的表现,通常通过验证集上的性能来衡量模型是否有效。根据实验结果,你可能会发现模型没有达到预期的效果,或者存在过拟合、欠拟合等问题。
    • Idea:根据实验结果调整超参数。可能是尝试不同的学习率、增加或减少隐藏层数量、选择不同的激活函数等,以改善模型的性能。

    然后再进入下一轮循环。每一轮的实验和反馈都帮助你更精确地选择最优的超参数组合。

    在实践中,为了高效寻找最优的超参数组合,可以使用一些自动化的方法,比如:

    • 网格搜索 (Grid Search):通过穷举不同超参数的所有可能组合,找到最优的超参数。
    • 随机搜索 (Random Search):在超参数的空间内随机选择组合,进行多次实验,虽然可能不如网格搜索精确,但计算成本较低。
    • 贝叶斯优化 (Bayesian Optimization):使用概率模型来选择超参数,逐步调整以优化目标函数,通常能在较少的实验次数内找到好的超参数。
  6. 在计算前向传播时,我们需要使用for循环计算1到L层,要记住range是左开右闭区间。

    for i in range(1, L+1)

posted @   钰见梵星  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示