当前位置: 首页 > news >正文

深度学习入门:神经网络基础知识

在人工智能飞速发展的当下,深度学习作为机器学习领域的重要分支,已成为推动图像识别、自然语言处理等诸多前沿技术发展的核心动力。如果你是刚踏入深度学习领域的新手,不必担心,这篇博客将带你从基础概念出发,逐步揭开深度学习的神秘面纱,深入了解神经网络的构造、损失函数、正则化以及训练方法等关键内容。

一、深度学习的定位:机器学习的重要分支

深度学习(DL, Deep Learning)并非独立于机器学习(ML, Machine Learning)的全新领域,而是机器学习领域中一个新兴且极具活力的研究方向。它与机器学习、神经网络之间存在着紧密的包含关系,具体可理解为:机器学习是人工智能的重要组成部分,而神经网络是实现机器学习的一种重要模型,深度学习则是基于深层神经网络的机器学习方法,三者层层递进,共同构成了人工智能技术体系的重要基石。

(一)神经元模型:神经网络的基本单元

神经元是神经网络的基本功能单元,其工作原理可通过数学公式进行描述。

通过线性组合与非线性激活这两个步骤,神经元完成了对输入信号的处理,并将处理结果(即激活值)传递给下一层神经元,从而实现信息在神经网络中的传递与处理。

  1. 线性组合过程:一个神经元会接收多个输入信号,每个输入信号都对应一个权重参数。假设输入信号为 x1,x2,x3........,xn,对应的权重为 w1,w2,w3.......,wn,同时神经元还存在一个偏置项b(为了方便计算,可将偏置项表示为1*w(n+1),其中w(n+1)=b,输入项为1)那么神经元首先会对输入信号进行线性组合,计算得到这一过程可通过矩阵乘法简洁表示为Z = W *X(其中W为权重矩阵,X为输入向量)。
  2. 非线性激活过程:经过线性组合得到的z值会被输入到一个非线性激活函数中,激活函数的作用是为神经网络引入非线性因素,使其能够拟合复杂的非线性数据关系。常用的激活函数之一是 sigmoid 函数,其表达式为它能将输入值映射到[0,1]区间,模拟神经元的 “激活” 状态(输出值越接近 1,代表神经元越活跃;越接近 0,代表神经元越不活跃)。

二)网络结构:从简单到复杂的层级架构

神经网络按照层级结构可分为输入层、隐藏层和输出层,不同层级具有不同的功能定位,各层级之间通过神经元的连接形成一个完整的网络体系。

  1. 输入层的节点数与特征的维度匹配
  2. 输出层的节点数:与目标的维度匹配。
  3. 中间层的节点数:目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。

  1. 输入层:输入层是神经网络接收外部数据的 “入口”,其节点数量与输入数据的特征维度严格匹配。例如,若输入数据是一张尺寸为28*28的灰度图像,那么输入层的节点数就为 28*28-784 (每个像素点代表一个特征),它的主要作用是将原始数据直接传递给下一层,自身不进行任何复杂的计算处理。
  2. 隐藏层:隐藏层位于输入层和输出层之间,是神经网络进行复杂特征提取和数据处理的核心区域。与输入层和输出层不同,隐藏层的节点数量没有固定的理论标准,通常需要根据具体的任务需求、数据规模以及实验经验来确定。一般的做法是预先设定多个候选的节点数(如 32、64、128 等),然后通过实验对比不同节点数下模型的预测性能,最终选择效果最佳的节点数。

隐藏层的层数也是神经网络 “深度” 的体现,随着隐藏层层数的增加,神经网络能够处理的特征复杂度也随之提高。例如,在图像识别任务中,浅层隐藏层通常用于提取图像的边缘、纹理等简单特征,而深层隐藏层则能进一步将这些简单特征组合成物体的形状、结构等复杂特征,从而实现对图像内容的准确识别。

3. 输出层:输出层是神经网络产生预测结果的 “出口”,其节点数量与模型的预测目标维度相匹配。在回归任务中(如预测房屋价格),由于预测目标是一个连续的数值,输出层通常只需要 1 个节点;在二分类任务中(如判断一张图片是否为猫),输出层一般设置 1 个节点,通过激活函数将输出值映射到\([0,1]\)区间,以此表示属于某一类别的概率;在多分类任务中(如识别手写数字 0-9),输出层的节点数则等于类别的数量(此处为 10 个),每个节点对应一个类别的预测概率,方便直接得到各类别的概率分布情况。

此外,在神经网络的每个层级中(除输出层外),都会默认存在一个偏置节点。偏置节点本质上是一个只具备存储功能且存储值恒为 1 的单元,它没有输入(即前一层中没有箭头指向它),其主要作用是为神经网络提供一个可调节的偏移量,从而提高模型的拟合能力。在绘制神经网络结构图时,为了简洁明了,通常不会明确画出偏置节点,但在实际的模型计算和训练过程中,偏置节点的作用不可或缺。

(三)感知器与多层感知器:从线性到非线性的跨越

  1. 感知器:感知器是最简单的神经网络模型,它由输入层和输出层两层神经元组成。感知器的工作原理是通过对输入信号进行线性组合,并经过一个简单的激活函数(如符号函数)处理后,得到输出结果。由于感知器的决策边界是线性的,因此它只能处理线性可分的数据问题,对于非线性可分的数据(如异或问题),感知器无法给出准确的分类结果。
  2. 多层感知器:为了解决感知器无法处理非线性问题的局限性,人们在感知器的基础上增加了隐藏层,从而形成了多层感知器(MLP)。多层感知器通过隐藏层的非线性变换,能够将输入空间中的非线性可分数据映射到一个新的特征空间中,使其在新的特征空间中变得线性可分,进而实现对非线性问题的有效解决。

例如,对于异或问题,单层感知器无法找到一条直线将两类数据准确分开,而多层感知器通过隐藏层的处理,可以将输入数据转换到一个更高维度的特征空间,在这个新的空间中,能够轻松找到一条线性边界将两类数据正确分类。因此,隐藏层是神经网络能够处理非线性问题的关键所在,它使得神经网络具备了更强的拟合能力和泛化能力。

三、模型训练:让神经网络 “学会” 预测

神经网络的构造只是基础,要让其能够准确地对未知数据进行预测,还需要通过模型训练不断优化网络参数。模型训练的核心目标是找到一组最优的权重参数,使得神经网络的预测结果与真实结果之间的误差最小。下面将从损失函数、正则化、梯度下降和反向传播四个方面,详细介绍神经网络的训练方法。

损失函数:衡量预测误差的 “标尺”

损失函数是用于衡量神经网络预测结果与真实结果之间误差大小的函数,它是模型训练过程中的 “指挥棒”,指导着网络参数的优化方向。常用的损失函数主要有以下几种:

  1. 0-1 损失函数:0-1 损失函数是一种最简单的损失函数,它的定义为:当预测值与真实值相等时,损失值为 0;当预测值与真实值不相等时,损失值为 1。0-1 损失函数直观地反映了模型预测的对错情况,但由于其不具有连续性和可导性,在实际的梯度下降优化过程中难以使用,因此更多地用于理论分析,而较少在实际模型训练中直接采用。
  2. 均方差损失函数(MSE):均方差损失函数的计算公式为其中N为样本数量,\(y_i\)为第i个样本的真实值,\(\hat{y}_i\)为第i个样本的预测值。均方差损失函数通过计算预测值与真实值之间差值的平方和的平均值,来衡量模型的预测误差。由于其具有良好的连续性和可导性,并且对误差的惩罚具有平方放大效应(即较大的误差会受到更严重的惩罚),因此均方差损失函数广泛应用于回归任务中(如预测股票价格、房屋面积等连续型变量)。
  3. 平均绝对差损失函数(MAE):平均绝对差损失函数的表达式为它通过计算预测值与真实值之间绝对差值的平均值来衡量误差。与均方差损失函数相比,平均绝对差损失函数对异常值的鲁棒性更强(即受极端异常数据的影响较小),但由于其在预测值等于真实值处不可导,在某些优化算法的应用中会受到一定限制,常用于对异常值不敏感的回归任务。
  4. 交叉熵损失函数:交叉熵损失函数主要用于分类任务,其核心思想是通过衡量模型预测的概率分布与真实的概率分布之间的差异,来计算损失值。对于多分类任务,交叉熵损失函数的计算公式为,其中M为类别的数量,为符号函数(若第i个样本的真实类别为c,则,否则为第i个样本属于类别c的预测概率。

在实际的模型训练中,需要根据具体的任务类型(回归任务或分类任务)、数据特点(是否存在异常值、类别分布是否均衡等)选择合适的损失函数,只有选择了恰当的损失函数,才能有效地指导模型参数的优化,提高模型的预测性能。

在实际的模型训练中,需要根据具体的任务类型(回归任务或分类任务)、数据特点(是否存在异常值、类别分布是否均衡等)选择合适的损失函数,只有选择了恰当的损失函数,才能有效地指导模型参数的优化,提高模型的预测性能

http://www.xdnf.cn/news/1374913.html

相关文章:

  • lesson47:Linux常用软件使用指南:远程连接、远程拷贝、Vim与Nginx
  • VESA时序检测模块设计verilog实现
  • Ubuntu 24 Server 如何设置无线网络
  • imx6ull-驱动开发篇45——Linux 下 SPI 驱动框架简介
  • d435i相机读取镜头内参和相对之间的外参
  • 艾体宝新闻 | 98%好评率!KnowBe4 连续5年蝉联第一,现开放免费钓鱼测试等你解锁
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 遗传算法:模拟自然选择的优化智慧
  • Spring Boot项目集成日志系统使用完整指南
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 嵌入式开发学习 C++:day01
  • 动态规划:硬币兑换(有趣)
  • LeetCode - 739. 每日温度
  • 线性回归原理推导与应用(十一):多重共线性
  • 获取服务器指标的信息
  • bin log 和 redo log有什么区别
  • Mybatis总结
  • 【如何解决Java中的ClassCastException类转换异常问题】
  • 基于Matlab结合肤色检测与卷积神经网络的人脸识别方法研究
  • 基于MATLAB/Simulink的单机带负荷仿真系统搭建
  • 分布式2PC理论
  • 使用 html2canvas + jspdf 实现页面元素下载为pdf文件
  • UE5 查找组件
  • 云原生安全架构设计与零信任实践
  • 预测模型及超参数:1.传统机器学习:SVR与KNN
  • 工业网络安全:保护制造系统和数据
  • HIVE的Window functions窗口函数【二】
  • 【Hadoop】Zookeeper、HBase、Sqoop
  • 全球位置智能软件CR10为73%,市场集中度高
  • Java中高效获取IP地域信息方案全解析:从入门到生产实践