(三)神经网络

神经网络是对人脑神经系统的模拟。

  • 人脑神经系统由神经元组成,每个神经元都是独立的处理单位,具有输入与输出结构。每个神经元都接受其它神经元的信息,并向其他神经元输出信息,神经系统是由无数个神经元相互连接,通过电脉冲交流的网络。

  • 神经网络模型正是如此,每个神经元(激活单元)接受特征作为输入,经本身模型处理后调整参数,输出特征,经过无数次的学习后,最终输出的结果要优于线性回归和逻辑回归。

  • 同时,神经网络具有不同层级,每一层的输出变量都是下一层的输入变量。

    • 第一层是输入层:负责接收和标准化原始数据,并将其分发到下一层,其中,每个神经元代表输入数据的一个特征。

    • 中间层是隐藏层:对数据进行特征提取、组合、抽象,是模型内部的学习表示。网络的“深度”由隐藏层的数量决定,隐藏层越多,神经网络越深,其处理能力越高级和抽象。

    • 最后一层是输出层:接收隐藏层最终传递的信息,并将其转化为任务所需的输出形式。每个神经元代表输出数据的一个特征,回归一般只需要一个神经元,分类需要多个神经元。

  • 使用步骤:

    • 选择网络结构,即决定选择多少层以及决定每层分别有多少单元

      • 第一层的单元数即我们训练集的特征数量

      • 最后一层的单元数是我们训练集结果的类的数量

      • 如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

      • 我们真正要决定的是隐藏层的层数和每个中间层的单元数。

    • 训练神经网络:

      • 参数的随机初始化(通常初始参数为正负𝜀之间的随机值)

      • 利用正向传播方法计算所有的ℎ𝜃(𝑥)

      • 编写计算代价函数 𝐽 的代码

      • 利用反向传播方法计算所有偏导数

      • 利用数值检验方法检验这些偏导数

      • 使用优化算法来最小化代价函数

算法:

  • 前向传播:从左到右的算法,数据从“输入层 -> 隐藏层1 -> 隐藏层2 -> ... -> 隐藏层N -> 输出层”。

  • 反向传播:

    • 目的:高效地计算损失函数对每一个参数的梯度,从而告诉我们该如何调整这些参数才能使模型变得更好。

    • 原理:前向传播输出的预测可能是错误的,我们需要以“损失”(Loss)来量化错误,而反向传播回答的是:网络中的每一个权重和偏置,对这种损失值应负多少“责任”?随后根据不同权重的责任大小进行微调,使下次预测的损失更小。

  • 梯度检验

    • 背景:梯度下降算法虽然可以带来代价的减小,但最终结果可能不是最优解。

    • 解决:梯度检验通过估计梯度值来检验我们计算的导数值是否真的是我们要求的

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐