神经网络的学习(Neural Networks: Learning)

1.代价函数

案例:假设神经网络的训练样本有𝑚个,每个包含一组输入𝑥和一组输出信号𝑦,𝐿表示神经网络层数,𝑆𝐼表示每层的 neuron 个数(𝑆𝑙表示输出层神经元个数),𝑆𝐿代表最后一层中处理单元的个数。
将神经网络的分类定义为两种情况:二类分类和多类分类,
二类分类:𝑆𝐿 = 0, 𝑦 = 0 𝑜𝑟 1表示哪一类;
𝐾类分类:𝑆𝐿 = 𝑘, 𝑦𝑖 = 1表示分到第 i 类;(𝑘 > 2)
在这里插入图片描述
在这里插入图片描述
看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出𝐾个预测,基本上我们可以利用循环,对每一行特征都预测𝐾个不同结果,然后在利用循环在𝐾个预测中选择可能性最高的一个,将其与𝑦中的实际数据进行比较。
正则化的那一项只是排除了每一层𝜃0后,每一层的𝜃 矩阵的和。最里层的循环𝑗循环所
有的行(由𝑠𝑙 +1 层的激活单元数决定),循环𝑖则循环所有的列,由该层(𝑠𝑙层)的激活单元数所决定。即:ℎ𝜃(𝑥)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization 的 bias 项处理所有参数的平方和。

在机器学习中,代价函数(Cost Function)是用来衡量模型预测误差的函数。它通常用于训练模型,以最小化预测误差。

代价函数的定义取决于所使用的模型和算法。对于线性回归模型,代价函数通常是平方误差代价函数,即将预测值与实际值之间的差的平方和作为目标函数进行优化。对于逻辑回归模型,代价函数通常是对数损失函数,即对预测概率取对数后与实际标签进行比较。

在训练模型时,通过迭代更新模型参数,使得代价函数的值逐渐减小。常用的优化算法包括梯度下降、随机梯度下降、牛顿法等。

选择合适的代价函数是训练模型的关键步骤之一。不同的代价函数适用于不同的问题和数据类型。在实际应用中,需要根据具体问题和数据特征选择合适的代价函数和优化算法,以获得更好的模型预测性能。

2.反向传播算法

正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的ℎ𝜃(𝑥),从前往后。
反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
案例:
假设我们的训练集只有一个实例(𝑥(1), 𝑦(1)),我们的神经网络是一个四层的神经网络,
其中𝐾 = 4,𝑆𝐿 = 4,𝐿 = 4:
在这里插入图片描述
反向传播算法(Backpropagation Algorithm)是一种在神经网络中用于根据误差更新各层连接权重的算法。它是基于梯度下降法的一种学习算法,通过不断地迭代,使神经网络的预测结果不断逼近实际值,从而不断优化神经网络的参数。

反向传播算法的工作原理是,首先通过正向传播计算得到输出结果,然后根据这个结果和实际值的误差计算出误差,再将这个误差反向传播到每一层神经元,更新每一层神经元的权重,以减小误差。这个过程一直持续到模型收敛,即达到预设的误差阈值或者迭代次数。

反向传播算法的核心是梯度下降,即在每个迭代步骤中,根据当前参数的梯度方向更新参数,使参数朝着减小误差的方向进行优化。具体来说,梯度下降算法会计算代价函数的偏导数,然后根据这个偏导数来更新参数。

反向传播算法的优点包括:能够自适应地学习输入和输出之间的映射关系;能够处理大规模的数据;通过不断优化参数,提高模型的预测精度;能够处理非线性问题等。但是,反向传播算法也存在一些缺点,例如容易陷入局部最优解,训练时间较长等。因此,在实际应用中,需要根据具体问题和数据特征选择合适的神经网络结构和优化算法,以获得更好的模型预测性能。

3.反向传播算法的直观理解

前向传播算法:
在这里插入图片描述
在这里插入图片描述

而反向传播算法的直观理解可以这样描述:
在这里插入图片描述

想象一个多层的大蛋糕,每一层都有一些糖霜(代表神经元的输出)和糖粒(代表神经元的输入)。我们想要调整糖粒的量,使得糖霜的总量(代表网络的输出)与我们想要的总量尽可能接近。

首先,我们计算出实际的糖霜总量与我们想要的糖霜总量之间的差距。这个差距就是我们的误差。

然后,我们开始从蛋糕的顶层(网络的输出层)开始,将每一层的糖粒调整一点,看看是否可以使误差变小。这个调整的过程就是反向传播。

我们会一直调整,直到误差达到我们能够接受的范围,或者直到我们没有更多的糖粒可以调整为止。

在神经网络的情境下,每一层的糖粒都对应一个神经元的权重。当我们想要调整一个糖粒时,我们实际上是在调整与这个糖粒相连的神经元的权重。通过不断地调整权重,我们希望最终能够得到一个满意的糖霜总量,也就是网络的输出。

以上就是反向传播算法的直观理解。这个算法允许我们通过局部的、微小的调整,逐步地优化网络的参数,以实现全局的最优解。

4.实现注意:展开参数

把参数从矩阵展开成向量,以便我们在高级最优化步骤中的使用需要。
在这里插入图片描述

5.梯度检验

梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 𝜃,我们计算出在 𝜃-𝜀 处和 𝜃+𝜀 的代价值(𝜀是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 𝜃处的代价值。
在这里插入图片描述
在这里插入图片描述
梯度检验是一种用于验证神经网络中反向传播算法是否正确的方法。它的基本思想是通过计算梯度值来检验之前计算的导数是否符合要求。

具体来说,梯度检验的方法是在曲线上取一点,对这点进行微小的扰动,然后计算出微扰后的两个点之间的斜率。通常,这个斜率是非常小的,因为我们在做微扰动。然后,我们可以使用这个斜率来估计在这一点上的梯度。

如果反向传播算法是正确的,那么这个梯度值应该与通过反向传播算法计算出的梯度值非常接近。如果两者相差很大,那么就说明反向传播算法在这一点上可能存在问题,需要进一步检查和修正。

梯度检验的优点是可以帮助我们发现反向传播算法中可能存在的错误,提高模型的精度和稳定性。但是,它也有一些缺点,比如计算量大,计算复杂度高,可能会增加模型的训练时间和成本等。因此,在实际应用中,我们需要根据具体问题和数据特征选择合适的梯度检验方法和参数设置,以获得更好的模型预测性能。

6.随机初始化

随机初始化是一种常见的权重初始化方法,用于神经网络的训练。在神经网络中,权重和偏置的初始值对模型的训练结果有很大影响。如果初始值设置不当,可能会导致模型收敛速度慢、陷入局部最优等问题。

随机初始化方法是将权重和偏置初始化为随机的值,通常是在一个小的随机范围内。这个随机范围的选择会影响到模型的训练效果。常见的随机初始化方法包括从均匀分布或高斯分布中随机采样。

随机初始化的优点包括:
可以打破对称性,为神经元提供不同的起点,促进网络的多样性和学习能力。
可以提高模型的泛化能力,因为不同的初始值会导致模型在不同的解空间中进行搜索,增加找到更好解的可能性。
但是,随机初始化也存在一些问题,如可能会带来训练不稳定、对称性和梯度消失或爆炸等问题。此外,如果初始化参数不当,可能会影响模型的训练速度和精度。因此,在选择随机初始化方法时,需要根据具体问题和数据特征选择合适的随机范围和分布,并进行相应的调整和优化。

7.综合总结(重要)

小结一下使用神经网络时的步骤:
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。
第一层的单元数即我们训练集的特征数量。(输入值)
最后一层的单元数是我们训练集的结果的类的数量。(输出值)
如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:

  1. 参数的随机初始化
  2. 利用正向传播方法计算所有的ℎ𝜃(𝑥)
  3. 编写计算代价函数 𝐽 的代码
  4. 利用反向传播方法计算所有偏导数
  5. 利用数值检验方法检验这些偏导数
  6. 使用优化算法来最小化代价函数

8.自主驾驶

使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶。
案例:
在下面也就是左下方,就是汽车所看到的前方的路况图像。
在这里插入图片描述
在图中你依稀能看出一条道路,朝左延伸了一点,又向右了一点,然后上面的这幅图,你可以看到一条水平的菜单栏显示的是驾驶操作人选择的方向。就是这里的这条白亮的区段显示的就是人类驾驶者选择的方向。比如:最左边的区段,对应的操作就是向左急转,而最右端则对应向右急转的操作。因此,稍微靠左的区段,也就是中心稍微向左一点的位置,则表示在这一点上人类驾驶者的操作是慢慢的向左拐。
这幅图的第二部分对应的就是学习算法选出的行驶方向。并且,类似的,这一条白亮的区段显示的就是神经网络在这里选择的行驶方向,是稍微的左转,并且实际上在神经网络开始学习之前,你会看到网络的输出是一条灰色的区段,就像这样的一条灰色区段覆盖着整个区域这些均称的灰色区域,显示出神经网络已经随机初始化了,并且初始化时,我们并不知道汽车如何行驶,或者说我们并不知道所选行驶方向。只有在学习算法运行了足够长的时间之后,才会有这条白色的区段出现在整条灰色区域之中。显示出一个具体的行驶方向这就表示神经网络算法,在这时候已经选出了一个明确的行驶方向,不像刚开始的时候,输出一段模糊的浅灰色区域,而是输出一条白亮的区段,表示已经选出了明确的行驶方向。

机器学习在自主驾驶领域中有着广泛的应用,下面介绍一些机器学习在自主驾驶中的案例:

感知和识别:机器学习算法可以用于感知和识别车辆周围的环境,包括道路标志、车辆、行人和其他障碍物等。例如,深度学习算法可以用于图像识别,通过训练大量的图像数据集来提高识别准确率。
决策规划和控制:机器学习算法可以用于自主驾驶中的决策规划和控制。例如,强化学习算法可以用于规划行驶轨迹和速度,以及控制车辆的油门、刹车和转向等。
路径规划和导航:机器学习算法可以用于路径规划和导航,例如使用Dijkstra算法或A*搜索算法等来寻找最优路径。同时,机器学习还可以用于地图构建和定位,例如使用卡尔曼滤波器或粒子滤波器等算法进行车辆定位和地图构建。
行为预测和模拟:机器学习算法可以用于预测和模拟驾驶行为。例如,使用机器学习算法对历史驾驶数据进行训练和学习,可以预测驾驶员的驾驶行为和决策,从而为自主驾驶提供参考和借鉴。
总之,机器学习在自主驾驶领域中的应用非常广泛,从感知和识别到决策规划和控制,再到路径规划和导航、行为预测和模拟等方面都有着重要的应用。随着机器学习技术的发展和完善,自主驾驶技术的安全性和可靠性也将得到进一步提升。

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

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

相关文章

【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件&#xff1b; 【1】 预览 文件 文件01 名称 pom.xml&#xff1b; 内容 &#xff08;01&#xff09;总的 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http:…

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器 点击button按钮触发事件显示月份与获取的时间 Button button3 (Button) findComponentById(ResourceTable.Id_button3);button3.setClickedListener(new Component.ClickedListener() {Overridepublic void onClick(Compon…

【趣味CSS3.0】粘性定位属性Position:sticky是不是真的没用了?

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

Webpack5 基本使用 - 2

常用 loader loader 是辅助打包工具。webpack 默认只能打包 js 文件&#xff0c;打包其它模块就需要配置 loader 来告诉 webpack 该怎么去打包其它文件。loader 可以将文件从不同的语言转换为 JavaScript。一类文件如果需要多个 loader 处理&#xff0c;loader 的执行顺序是从…

SQL注入 ---> Day1 !

终于&#xff0c;我的课程开始讲SQL注入了&#xff0c;对就是那个常年在OWASP上有名的SQL注入 今天是真的冷啊&#xff0c;幸苦的小编还在写csdn 1.SQL注入原理 SQl注入其实就是将恶意的代码向服务器提交&#xff0c;但是后端又不过滤而引发的漏洞&#xff0…

2、Line Charts折线图

可视化时间趋势 现在你已经熟悉了编码环境,是时候学习如何制作自己的图表了! 在本教程中,您将学习足够的Python来创建专业外观的折线图。然后,在接下来的练习中,您将使用您的最新技能处理真实世界的数据集。 本课程数据集夸克网盘下载链接:https://pan.quark.cn/s/a235ac…

让二叉树无处可逃

志不立&#xff0c;天下无可成之事。 ——王阳明 二叉树 1、树&#xff1f;什么是树1、1、基本概念1、2、树的相关概念1、3、树的表示方式1、4、树的实际运用 2、二叉树&#xff1f;只有两个分支吗&#xff1f;2、1、基本概念2、2、二叉树的相关定义2、3、二叉树的相关性质2、4…

flutter获取地理定位:geolocator依赖详细用法

本文使用geolocator插件实现app物理定位功能。 该插件的主要功能有&#xff1a; 获取最后已知位置&#xff1b;获取设备当前位置&#xff1b;获取连续的位置更新&#xff1b;检查设备是否启用了定位服务&#xff1b;计算两个地理坐标之间的距离&#xff08;米&#xff09;&am…

Python基础第九篇(Python可视化的开发)

文章目录 一、json数据格式&#xff08;1&#xff09;.转换案例代码&#xff08;2&#xff09;.读出结果 二、pyecharts模块介绍三、pyecharts模块入门&#xff08;1&#xff09;.pyecharts模块安装&#xff08;2&#xff09;.pyecharts模块操作&#xff08;1&#xff09;.代码…

UE5 - Polycam扫描文件导入插件

Polycam是利用Gaussian Splatting进行3D重建的3D扫描相关软件&#xff0c;其对应有UE引擎的插件&#xff08;Plugin_XV3dGS&#xff09;可以把相关格式的文件导入到引擎&#xff1b; 首先Polycam的官网为&#xff1a;My Captures | Polycam 可以下载各种用户扫描文件&#xff…

第二证券:大金融板块逆势护盘 北向资金尾盘加速净流入

周一&#xff0c;A股商场低开低走&#xff0c;沪指收盘失守2800点。截至收盘&#xff0c;上证综指跌2.68%&#xff0c;报2756.34点&#xff1b;深证成指跌3.5%&#xff0c;报8479.55点&#xff1b;创业板指跌2.83%&#xff0c;报1666.88点。沪深两市合计成交额7941亿元&#xf…

Django代码中的TypeError ‘float‘ object is not callable

学习使用Django进行网页爬取取决于你对Python、Django框架和网络爬虫的熟悉程度。以下是一些关键点&#xff0c;总的来说&#xff0c;如果你已经具备Python和Django的基础知识&#xff0c;并对网页爬虫有一定了解&#xff0c;那么学习使用Django进行网页爬取将会比较容易。如果…

鸿蒙应用开发学习:获取手机位置信息

一、前言 移动应用中经常需要获取设备的位置信息&#xff0c;因此在鸿蒙应用开发学习中&#xff0c;如何获取手机的位置信息是必修课。之前我想偷懒从别人那里复制黏贴代码&#xff0c;于是在百度上搜了一下&#xff0c;可能是我输入的关键字不对&#xff0c;结果没有找到想要…

Bluetooth Device Address(BD_ADDR) - 2

蓝牙核心规范&#xff1a;Core v5.3中关于蓝牙地址的其他说明 Vol 3: Host, Part C: Generic Access Profile 3 User interface aspects 3.2 Representation of Bluetooth parameters 3.2.1 Bluetooth Device Address (BD_ADDR) BD_ADDR 是蓝牙设备使用的地址。在设备发现过…

Docker容器操作 Docker创建并运行Nginx、Redis

容器操作的命令如图&#xff1a; 容器命令 # 创建并运行一个容器&#xff0c;运行成功后会返回容器id docker run# 暂停&#xff0c;将容器挂起&#xff0c;内存暂存&#xff0c;CPU不再执行 docker pause # 恢复运行&#xff0c;内存恢复&#xff0c;CPU恢复 docker unpause#…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务&#xff0c;这个与结构型模式有点像&#xff0c;结构型可以理解为静态的组合&#xff0c;例如将不同的组件拼起来成为一个更大的组件&#xff1b;而行为型更是一种动态或者具有某个…

微信小程序实现长按 识别图片二维码

第一种方案&#xff08;只需要在image里面加一个属性就可以了&#xff09; show-menu-by-longpress“{{true}}” <image show-menu-by-longpress"{{true}}" src"{{sysset.dyqewm}}" />第二种方案 放大预览图片&#xff0c;长按识别二维码 wxml <…

ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>=5.12

一、错误描述 ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>5.12 在用python中的plt包进行绘图时对plt进行了更新&#xff0c;更新之后再运行以前的代码就出现了这个问题。 二、bug消除 &#xff08;一&#xff09;解决方法——升级pyqt包…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数

关于在微信小程序中使用taro + react-hook后销毁函数无法执行的问题

问题&#xff1a; 在 taro中使用navigageTo() 跳转路由后hook中useEffect 的return函数没有执行 没有执行return函数 框架版本&#xff1a; tarojs: 3.6 react: 18.0 原因&#xff1a; 使用navigateTo() 跳转路由的话并不会销毁页面和组件&#xff0c;会加入一…