【AI-21】深度学习框架中的神经网络

神经网络的作用

  1. 特征提取与表示学习
    神经网络能够自动从原始数据中提取有效的特征。在图像领域,卷积神经网络(CNN)可以提取图像的边缘、纹理、形状等特征。例如,在人脸识别任务中,CNN 可以通过卷积层提取人脸的五官轮廓等特征,这些特征比原始像素更具有代表性和区分性。在自然语言处理中,循环神经网络(RNN)或其变体(如长短期记忆网络(LSTM)和门控循环单元(GRU))可以学习单词的语义、句子的语法结构等特征。通过这种自动的特征提取,神经网络能够将原始数据转换为更有利于分类、回归等任务的特征表示。
  2. 复杂函数逼近
    神经网络可以看作是一个复杂的函数逼近器。它能够学习到输入和输出之间的复杂非线性关系。例如,在时间序列预测任务中,如预测股票价格,神经网络可以学习到历史价格数据与未来价格之间的复杂函数关系。通过足够的训练数据和合适的网络结构,神经网络可以逼近几乎任何连续函数,从而实现对各种复杂系统的建模和预测。
  3. 决策与分类任务
    在分类任务中,神经网络可以根据提取的特征对输入数据进行分类。例如,在垃圾邮件识别任务中,神经网络可以学习到垃圾邮件和正常邮件的特征差异,将邮件分为垃圾邮件或正常邮件两类。在图像分类任务中,神经网络可以区分不同种类的物体,如猫、狗、汽车等。通过在大量标注数据上进行训练,神经网络能够在各种分类任务中取得很高的准确率。同时,在决策任务中,神经网络可以根据输入的多种因素做出合理的决策,如在自动驾驶系统中,根据传感器的数据(如摄像头图像、雷达距离等)决定车辆的行驶方向、速度等。

神经网络的运算过程

  1. 前向传播(Forward Propagation)
    (1)输入层接收数据:神经网络的运算从输入层开始,输入层的神经元接收外部数据,这些数据可以是图像的像素值、文本的词向量等各种形式的数据。例如,在一个用于图像分类的卷积神经网络(CNN)中,输入层接收图像的像素矩阵。如果是彩色图像,通常每个像素点有 RGB 三个通道的值,所以输入的维度会根据图像的大小和颜色通道数而定。
    (2)隐藏层进行计算:数据从输入层传入隐藏层,隐藏层中的神经元通过加权求和与激活函数处理输入数据。以一个简单的全连接层为例,每个神经元会对输入数据进行加权求和,假设神经元接收的输入为,对应的权重为,则加权求和的结果为,其中为偏置项。然后,将这个结果通过激活函数(如 Sigmoid、ReLU 等)进行非线性变换,得到神经元的输出。例如,使用 ReLU 激活函数,输出。这种非线性变换是非常关键的,它使得神经网络能够学习到复杂的非线性关系。
    (3)输出层生成结果:经过多个隐藏层的处理后,数据最终到达输出层。输出层的神经元根据任务类型产生相应的输出。在分类任务中,输出层可能会使用 Softmax 函数将神经元的输出转换为类别概率。例如,在一个多类别图像分类任务中有个类别,输出层有个神经元,经过 Softmax 函数处理后,每个神经元的输出代表输入图像属于相应类别的概率,这些概率之和为。在回归任务中,输出层的神经元直接输出预测的数值。
  2. 反向传播(Backward Propagation)
    (1)计算损失函数:在神经网络有了输出之后,需要衡量输出与真实目标之间的差距,这通过损失函数来实现。常见的损失函数有均方误差(MSE)用于回归任务,交叉熵损失(Cross - Entropy Loss)用于分类任务等。例如,在分类任务中,假设真实类别标签为(通常是一个 one - hot 向量,只有对应正确类别的位置为,其他位置为),网络输出的类别概率为,交叉熵损失函数为。
    (2)梯度计算与参数更新:通过反向传播算法,计算损失函数对每个参数(权重和偏置)的梯度。从输出层开始,根据链式法则,逐步计算每个神经元的梯度。例如,对于一个权重,计算其梯度。然后,使用优化算法(如随机梯度下降(SGD)、Adam 等)根据计算得到的梯度更新参数。以随机梯度下降为例,更新公式为,其中为学习率,决定了参数更新的步长。通过不断地重复前向传播和反向传播过程,神经网络逐渐调整参数,使得损失函数的值不断减小,从而提高模型的性能。

前向传播和反向传播

  1. 前向传播(Forward Propagation)
    类比理解:可以把神经网络想象成一个工厂的生产流水线。输入数据就像是原材料,从流水线的开头(输入层)进入。
    具体过程
    输入层接收数据:这些原材料(数据)首先被送到输入层。例如,在一个用于识别手写数字的神经网络中,如果是识别一张 28×28 像素的手写数字图像,那么输入层就有 784 个神经元来接收这 784 个像素点的值。
    隐藏层加工数据:输入层把数据传递给隐藏层,隐藏层的神经元就像是流水线上的工人。每个神经元会对收到的数据进行加工。加工的方式是加权求和(每个输入数据乘以一个权重,再把这些乘积相加),然后通过一个激活函数进行非线性变换。比如,一个神经元收到三个输入数据、、,对应的权重是、、,那么加权求和就是。然后通过激活函数,如 ReLU 函数(如果,输出;如果,输出)得到这个神经元的输出。这样的操作在隐藏层的每个神经元中都会进行,就好像每个工人都在按照自己的规则加工原材料。
    输出层产生结果:经过隐藏层的加工后,数据被送到输出层。输出层会根据任务产生最终的结果。如果是分类任务,比如识别手写数字是 0 - 9 中的哪一个,输出层可能有 10 个神经元,每个神经元的输出代表这个数字是对应数字的概率。例如,输出层第一个神经元输出 0.1,第二个神经元输出 0.05,以此类推,概率最高的那个神经元对应的数字类别就是模型预测的结果。
  2. 反向传播(Backward Propagation)
    类比理解:还是以工厂流水线为例,现在我们要检查最终的产品(输出结果)是否合格。如果不合格,我们需要沿着流水线反向查找是哪个环节出了问题。
    具体过程
    计算损失函数:首先,我们需要一个标准来衡量输出结果的好坏,这就是损失函数。比如在手写数字识别中,如果真实的数字是 5,但是模型预测是 3,那就说明模型有误差。损失函数会根据输出结果和真实结果计算出这个误差的大小。常见的损失函数有均方误差(MSE),如果输出是,真实值是,那么均方误差就是。
    梯度计算与参数更新:计算出损失后,我们要沿着神经网络反向查找是哪些参数(权重和偏置)导致了这个损失。这就像是沿着流水线找是哪个工人的操作有问题。通过链式法则,我们可以计算出损失函数对每个参数的梯度(可以理解为每个参数对损失的 “贡献程度”)。例如,对于一个权重,我们算出它的梯度是(是损失函数)。然后,我们根据这个梯度来更新参数,就好像告诉工人如何调整他们的操作。一般使用像随机梯度下降(SGD)这样的优化算法来更新参数,更新公式是,其中是学习率,它决定了参数调整的步长。通过不断地反向传播和更新参数,神经网络就会逐渐调整自己的参数,让输出结果越来越接近真实结果,就像工厂不断改进生产流程,让产品质量越来越好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503961.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ProtonBase 荣获 Datafun “数智技术最佳探索奖”

2024年,数智领域迎来技术创新的高峰,尖端技术和用户案例呈现井喷式增长,成为引领时代潮流的关键词。DataFun 社区作为数智前沿阵地,汇聚全球数智精英,推动技术革新和知识共享,助力技术加速发展。 由 DataFu…

用豆包MarsCode IDE打造精美数据大屏:从零开始的指南

原标题:用豆包MarsCode IDE,从0到1画出精美数据大屏! 豆包MarsCode IDE 是一个云端 AI IDE 平台,通过内置的 AI 编程助手,开箱即用的开发环境,可以帮助开发者更专注于各类项目的开发。 作为一名前端开发工…

/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景

文章目录 数据结构解释1. 核心功能2. 代码结构分析请求拦截器响应拦截器 3. 改进建议4. 总结 console.log(Intercepted Response:, JSON.stringify(response));{"data": {"code": 0,"msg": "成功","data": {"id":…

LabVIEW调用不定长数组 DLL数组

在使用 LabVIEW 调用 DLL 库函数时,如果函数中的结构体包含不定长数组,直接通过 调用库函数节点(Call Library Function Node) 调用通常会遇到问题。这是因为 LabVIEW 需要与 DLL 中的数据结构完全匹配,而包含不定长数…

课题推荐——基于GPS的无人机自主着陆系统设计

关于“基于GPS的无人机自主着陆系统设计”的详细展开,包括项目背景、具体内容、实施步骤和创新点。如需帮助,或有导航、定位滤波相关的代码定制需求,请点击文末卡片联系作者 文章目录 项目背景具体内容实施步骤相关例程MATLAB例程python例程 …

深入Android架构(从线程到AIDL)_18 SurfaceView的UI多线程02

目录 2、 使用SurfaceView画2D图 范例一 设计GameLoop(把小线程移出来) 范例二 2、 使用SurfaceView画2D图 范例一 以SurfaceView绘出Bitmap图像设计SpriteView类别来实作SurfaceHolder.Callback接口首先来看个简单的程序,显示出一个Bitmap图像。这个图像就构…

Redis Java 集成到 Spring Boot

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Redis 📚本系列文章为个人学习笔…

鸿蒙开发(29)弹性布局 (Flex)

概述 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。 容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方…

LangChain速成课程_构建基于OpenAI_LLM的应用

思维导图 什么是LangChain 特点描述基于语言模型LangChain 是一个专为语言模型(如 GPT-4)设计的开发框架。模型输入/输出支持灵活的模型输入和输出处理,可以适应各种不同的应用需求。数据感知能够将语言模型与其他数据源(如维基百…

将txt转成excel正则化公式的调整

将训练的结果转换成excel是送到画图的关键,但是在转的过程中出现了问题,发现是正则化公式的结果。 使用网站进行调试,最终可以转了。下面是调试的工具以及调试好的代码。 regex101: build, test, and debug regex 上面是正则化公式&#xf…

Linux的proc目录与什么有关?【以及它里面的文件各自记录着什么信息】

在 Linux 系统中,/proc 目录是一个虚拟文件系统,提供了关于内核、进程和系统状态的实时信息。它与系统的 内核 和 进程 运行状态紧密相关,是系统管理员、开发人员和用户了解系统运行状况的重要途径。 /proc 目录的名称来源于 “process”&am…

28、使用StreamPark管理作业中,关于默认环境变量设置和默认动态参数设置的修改

在使用过一段时间的streampark后,发现flink on k8s作业配置过于繁琐了,特别是pod-template.yaml的编写(主要是环境变量设置,环境变量关系着前面的日志插件中通过环境变量获取作业名称),动态参数的编写&…

springboot + vue+elementUI图片上传流程

1.实现背景 前端上传一张图片&#xff0c;存到后端数据库&#xff0c;并将图片回显到页面上。上传组件使用现成的elementUI的el-upload。、 2.前端页面 <el-uploadclass"upload-demo"action"http://xxxx.xxx.xxx:9090/file/upload" :show-file-list&q…

《HeadFirst设计模式》笔记(上)

设计模式的目录&#xff1a; 1 设计模式介绍 要不断去学习如何利用其它开发人员的智慧与经验。学习前人的正统思想。 我们认为《Head First》的读者是一位学习者。 一些Head First的学习原则&#xff1a; 使其可视化将文字放在相关图形内部或附近&#xff0c;而不是放在底部…

TensorRT-LLM中的MoE并行推理

2种并行方式&#xff1a; moe_tp_size&#xff1a;按照维度切分&#xff0c;每个GPU拥有所有Expert的一部分权重。 moe_ep_size: 按照Expert切分&#xff0c;每个GPU有用一部分Expert的所有权重。 二者可以搭配一起使用。 限制&#xff1a;二者的乘积&#xff0c;必须等于模…

GoChina备案管家

阿里云的 GoChina备案管家 是阿里云提供的一项服务&#xff0c;旨在帮助企业和个人快速、高效地完成中国大陆的 网站备案&#xff08;ICP备案&#xff09;。根据中国的互联网法律法规&#xff0c;所有在中国境内运行的网站都需要进行备案&#xff0c;才能合法发布内容。 GoChin…

Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)

Linux存储管理之核心秘密 如果你来自Windows环境&#xff0c;那么Linux处理和管理存储设备的方式对你而言可能显得格外不同。我们知道&#xff0c;Linux的文件系统并不采用Windows那样的物理驱动器表示方式&#xff08;如C:、D:或E:&#xff09;&#xff0c;而是构建了一个以&…

平面坐标转大地坐标(arcgisPro中进行)

1、将需要转换的红线导入arcgisPro中&#xff0c;如下&#xff1a; 2、在地图菜单栏中&#xff0c;选择坐标转换工具&#xff0c;如下&#xff1a; 3、打开坐标转换工具 4、开启捕捉 5、 设置大地坐标显示格式 6、如下&#xff1a; 7、显示如图&#xff1a; 8、再依次添加几个待…

QT 端口扫描附加功能实现 端口扫描5

上篇QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4-CSDN博客 在扫描结束后设置Scan按钮为可用&#xff0c;并提示扫描完成 在 MainWindow 类中添加一个成员变量来跟踪正在进行的扫描任务数量&#xff1a; 在 MainWindow 的构造函数中初始化 activeScanTasks&…

使用WPF在C#中制作下载按钮

本示例使用 WPF 制作一个下载按钮。以下 XAML 代码显示了程序如何构建该按钮。 <Window x:Class"howto_download_button.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/…