Neural networks 神经网络

news2025/1/26 14:22:51

发展时间线

基础概念

多层神经网络结构

神经网络中一个网络层的数学表达

TensorFlow实践

创建网络层

神经网络的创建、训练与推理

推理

推理可以理解为执行一次前向传播

前向传播

前向传播直观数学表达

前向传播直观数学表达的Python实现

前向传播向量化实现

相关数学知识

向量点积(内积)示例

矩阵乘法示例

训练

相比前面TensorFlow实践中的步骤简化,这里细化了如何compile和fit模型。

TensorFlow实践

底层原理

1. 明确逻辑回归表达式及激活函数

2. 明确损失函数及成本函数

3. 开始训练,并最小化成本函数

激活函数

为什么需要激活函数

当你网络中每一层都不使用激活函数(即每一层都使用线性激活函数),根据下图的推导会发现不管你有几层最终的输出还是跟输入是线性的,因此最终实现的都是一个线性回归,而很多问题不是线性回归能够描述的。

常见激活函数

前面所有例子使用的激活函数都是sigmod,但是实际还有其他可替代的,比如下面的ReLU(Rectified Linear Unit),不需要关注全称

输出层激活函数选择

根据你要输出的性质选择,一般不存疑

隐藏层激活函数选择

现在绝大多数情况下会选择ReLU作为隐藏层的激活函数,两个原因:

1. 计算量更小

2. 只有 z < 0 时曲线的梯度(斜率)很小(为0),而sigmod函数在两侧梯度都很小,收敛更慢

多类分类:SoftMax回归

前面举的例子都是解决二分类问题,非0即1,但是实践中经常有多类分类问题,比如要识别0-9的数字

数值稳定的回归

多标签分类

跟多类分类要区分开,多类分类是指n类选命中哪1类,多标签分类是指n个标签命中其中m个标签,每个标签是二值

梯度下降优化算法:Adam算法

adaptive moment estimation(自适应矩估计),该算法是梯度下降的优化算法,效率更高,课程没有讲Adma算法的具体实现,但是实现的大致原理是:动态调整学习率α,梯度下降过程中,多次朝同一个方向下降的时候放大学习率,来回震荡时缩小学习率

神经网络层类型(layer type)

全连接层(dense layer)

每个神经元的输入是前一层所有输出(activation outputs)。

卷积层(convolutional layer)

每个神经元的输入是前一层部分输出。在某些场景会比全连接层效果更好,不过没讲分别适用的场景

为什么需要卷积层:

1. 减少计算量,加快计算速度

2. 减少训练需要的样本量,更不容易出现过拟合

反向传播

将计算损失的过程生成一个计算图,前向传播可以计算各个中间变量以及最终损失,而通过反向传播则可以通过导数的链式计算,逐步获取到J对所有参数的偏导数在该训练数据下的值

应用机器学习的建议

模型评估

数据集中圈出大部分数据用于训练并记录为训练集,留出少部分进行test并记录为测试集。可以分别对测试集和训练集计算最终模型的误差,注意计算误差的时候不再计算正则化项。

分类问题中也可以使用下图的匹配数量计算训练集和测试集的误差

训练集/交叉验证集/测试集 评估误差

偏差与方差(bias/variance)

作用

J_{train}(\vec{w}, b) 很高、J_{cv}(\vec{w}, b) \approx J_{train}(\vec{w}, b),说明高偏差,拟合度不足

J_{train}(\vec{w}, b)很低、J_{cv}(\vec{w}, b) 很高,说明高方差,过拟合

J_{train}(\vec{w}, b) 很高、J_{cv}(\vec{w}, b) \gg J_{train}(\vec{w}, b),说明高偏差、更高方差,说明在部分数据上过拟合,部分数据拟合不足

正则化对偏差/方差的影响

1. λ 接近 0 时,相当于没有正则化,会产生过拟合

2. λ 接近无穷大时,相当于w稍微有值

确定模型的基线水平

你需要将 J_{train}(\vec{w}, b)J_{cv}(\vec{w}, b) 与基线水平对比差距以判断偏差与方差,而不是根据他们的绝对值判断偏差与方差。确定基线水平有以下几种方式

1. 人类表现水平

2. 竞品/同类算法表现水平

3. 基于经验猜测目标水平

学习曲线

因为随着加入的训练数据变多,拟合越来越难满足所有数据,所以 J_{train}(\vec{w}, b) 逐步增大,而 J_{cv}(\vec{w}, b) 逐渐减小,但还是会大于 J_{train}(\vec{w}, b)

高偏差

高偏差情况下,J_{train}(\vec{w}, b) 和 J_{cv}(\vec{w}, b) 都高于基线水平,即使增加数据集也不能缓解,所以增加数据集规模没有作用

高方差

高方差情况下,基线水平处于 J_{train}(\vec{w}, b) 和 J_{cv}(\vec{w}, b) 之间,增加数据集大小可以降低 J_{cv}(\vec{w}, b),即可以提高模型性能

如何优化模型性能

经过合适的正则化之后的更大的模型通常表现要比更小的模型更好或者相仿,但是相应地会增加训练和推理的成本

机器学习开发流程

误差分析

通过对交叉验证集中预测错误的数据,抽样出合理数量的数据,对这些误差数据进行归类分析,将注意力集中到高频出现的问题上,以确定下一步要优化的优先级并针对高优优化类别分析改进方案

如何添加训练数据
收集更多数据

增加误差分析中占比比较多的分类的数据,可以有效提高模型性能

数据增强(data augmentation)

主要应用于图像、音频领域,对已有的训练数据做一定的变换(放大、所有、旋转、失真)作为新的同标签训练数据,提高模型性能

数据合成

基本上也只是用于计算机视觉,很少用于其他领域。例如想训练文本识别模型,可以在电脑上使用不同字体、不同颜色、不同对比度生成文本作为训练集

迁移学习
概念

迁移学习是指复用其他已经经过训练的模型参数和结构,然后替换掉输出层,再基于你自己的训练集进行再训练。此时你复用的模型成为预训练(pre training)模型,而再训练过程成为微调(fine tuning)。这使得你可以站在巨人的肩膀上实现你自己的模型功能,感谢这些乐于分享自己训练好的模型的人吧,有机会你也可以尝试回馈社区。

微调也有两种方式:

1. 你自己的数据集比较小,只微调输出层参数

2. 你自己的数据集比较大,可以同时微调隐藏层和输出层的所有参数

示例

比如下图例子,使用其他人训练好的判断图片是否存在猫、狗、骑车、人的模型和参数,替换输出层之后使用数据集训练为识别数字的模型。

什么情况可以进行迁移学习

预训练和微调模型的输入类型必须是相同的。此时每个隐藏层在预训练和微调时可能发挥类似的作用,比如前面的图像识别示例中,可能第一个隐藏层都在检测边,第二个隐藏层在检测角,第三层再检测曲线/形状。

倾斜数据集

示例

罕见病检测中,一种罕见病发病率仅为0.5%,那么即使是一个永远输出y=0的程序,准确率也达到了99.5%,所以这时只用准确率来评判检测模型的性能是不够的

准确率与召回率

两者之间的取舍

使用F1 score(调和平均数 harmonic mean)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年吉林省职业院校技能大赛网络系统管理样题

目录 任务清单 &#xff08;一&#xff09;基础配置 &#xff08;二&#xff09;有线网络配置 &#xff08;三&#xff09;无线网络配置 &#xff08;四&#xff09;出口网络配置 附录1&#xff1a;拓扑图​编辑 附录2&#xff1a;地址规划表 任务清单 &#xff08;一&a…

C++入门14——set与map的使用

在本专栏的往期文章中&#xff0c;我们已经学习了STL的部分容器&#xff0c;如vector、list、stack、queue等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层是线性序列的数据结构&#xff0c;里面存储的是元素本身。而本篇文章我们要来认识一下关联式容器。 &am…

996引擎 - 前期准备-配置开发环境

996引擎 - 前期准备 官网搭建服务端、客户端单机搭建 开发环境配置后端开发环境配置环境 前端开发环境配置环境 后端简介前端简介GUILayoutGUIExport 官网 996传奇引擎官网 所有资料从官网首页开始&#xff0c;多探索。 文档&#xff1a; 996M2-服务端Lua 996M2-客户端Lua 搭…

Java程序员如何设计一个高并发系统?

前言 无论是职场新人还是有一定工作经验的老手&#xff0c;系统设计问题都如同悬在头顶的达摩克利斯之剑。对于新人而言&#xff0c;面试时遭遇“如何从零开始设计一个完整系统”的问题&#xff0c;往往让人瞬间大脑一片空白。系统设计的范畴广泛&#xff0c;网络资源难以全面…

RV1126画面质量三:QP调节

一&#xff0e;什么是 QP 调节&#xff1f; QP 参数调节&#xff0c;指的是量化参数调节。它主要是来调节图像的细节&#xff0c;最终达到调节画面质量的作用。QP 值和比特率成反比&#xff0c;QP值越小画面质量越高&#xff1b;反之 QP 值越大&#xff0c;画面质量越低…

渐变颜色怎么调?

渐变颜色的调整是设计中非常重要的一部分&#xff0c;尤其是在创建具有视觉吸引力和深度感的设计作品时。以下是一些在不同设计软件中调整渐变颜色的详细步骤和技巧&#xff1a; 一、Adobe Photoshop 1. 创建渐变 打开渐变工具&#xff1a; 选择工具栏中的“渐变工具”&#x…

Arduino基础入门学习——OLED显示屏的基本使用

Arduino基础入门学习——OLED显示屏的基本使用 一、前言二、准备工作三、基本使用1. OLED显示基本字符 &#xff08;数字英文基本标点符号&#xff09;2. OLED显示汉字3. 显示图片 四、 结束语 一、前言 在我们的日常开发中&#xff0c;一般有这么几种方式对数据进行展示&#…

jQuery阶段总结(二维表+思维导图)

引言 经过23天的学习&#xff0c;期间有期末考试&#xff0c;有放假等插曲。本来应该在学校里学习&#xff0c;但是特殊原因&#xff0c;让回家了。但是在家学习的过程&#xff0c;虽然在学&#xff0c;很让我感觉到不一样。但是效果始终还是差点的&#xff0c;本来17、18号左右…

无公网IP 外网访问媒体服务器 Emby

Emby 是一款多媒体服务器软件&#xff0c;用户可以在 Emby 创建自己的个人多媒体娱乐中心&#xff0c;并且可以跨多个设备访问自己的媒体库。它允许用户管理传输自己的媒体内容&#xff0c;比如电影、电视节目、音乐和照片等。 本文将详细的介绍如何利用 Docker 在本地部署 Emb…

PAT甲级-1022 Digital Libiary

题目 题目大意 一个图书有图书id&#xff0c;书名&#xff0c;作者&#xff0c;关键字&#xff0c;出版商&#xff0c;出版时间6个信息。现要查询图书的ID&#xff0c;1对应通过书名查询&#xff0c;2对应作者&#xff0c;3对应关键字&#xff08;不需要完全一致&#xff0c;包…

OpenCV:在图像中添加高斯噪声、胡椒噪声

目录 在图像中添加高斯噪声 高斯噪声的特性 添加高斯噪声的实现 给图像添加胡椒噪声 实现胡椒噪声的步骤 相关阅读 OpenCV&#xff1a;图像处理中的低通滤波-CSDN博客 OpenCV&#xff1a;高通滤波之索贝尔、沙尔和拉普拉斯-CSDN博客 OpenCV&#xff1a;图像滤波、卷积与…

二叉树的存储(下)c++

链式存储 我们可以创建两个数组L[N]、r[N]&#xff0c;分别存储i 号结点的左右孩子的编号&#xff0c;这样就可以通过数组下标实现链式访问。 本质上还是孩子表示法&#xff0c;存储的是左右孩子的信息 #include <iostream>using namespace std;const int N 1e6 10; …

回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测

效果一览 基本介绍 回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测 一、引言 1.1、研究背景及意义 在当今数据驱动的时代&#xff0c;时间序列预测已成为金融、气象、工业控制等多个领域的关键技术。随着人工智能和机器学习技术的…

如何获取小程序的code在uniapp开发中

如何获取小程序的code在uniapp开发中&#xff0c;也就是本地环境&#xff0c;微信开发者工具中获取code&#xff0c;这里的操作是页面一进入就获取code登录&#xff0c;没有登录页面的交互&#xff0c;所以写在了APP.vue中&#xff0c;也就是小程序一打开就获取用户的code APP.…

BGP边界网关协议(Border Gateway Protocol)路由聚合详解

一、路由聚合 1、意义 在大规模的网络中&#xff0c;BGP路由表十分庞大&#xff0c;给设备造成了很大的负担&#xff0c;同时使发生路由振荡的几率也大大增加&#xff0c;影响网络的稳定性。 路由聚合是将多条路由合并的机制&#xff0c;它通过只向对等体发送聚合后的路由而…

《用DOTS解决实际需求》集锦

去年作者发布了一篇《DOTS-ECS系列课程》&#xff0c;深受同学们的好评&#xff01;前期课程是基于0.51版本录制的&#xff0c;DOTS升级至1.0版本后&#xff0c;同学们纷纷希望能使用DOTS 1.0版本录制实战课程。 今年作者带着DOTS 1.0版本的实战课程回来啦&#xff01;&#x…

pycharm 运行远程环境问题 Error:Failed to prepare environment.

问题排查 拿到更详细的报错信息&#xff1a; Help > Diagnostic Tools > Debug Log Settings section: 添加下面的配置 com.intellij.execution.configurations.GeneralCommandLine 重显报错&#xff0c;我这里是再次运行代码打开 Help | Collect Logs and Diagnosti…

11、性能测试及监控Nginx动静分离配置

1、Jconsole使用 1、win cmd窗口输入jconsole打开工具 选择需要监控的应用程序&#xff0c;点击连接即可进行监控 2、jvisualvm监控工具 1、cmd控制台输入jvisualvm打开工具 运行&#xff1a;正在运行的 休眠&#xff1a;sleep 等待&#xff1a;wait 驻留&#xff1a;线…

流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理

概述 背景 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长&#xff0c;企业需要具备强大的数据集成能力来高效地处理和分析数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业快速实现多源数据的采集、…

【Address Overfitting】解决过拟合的三种方法

目录 1. 收集更多数据实践方法&#xff1a;适用场景&#xff1a;优缺点&#xff1a; 2. 特征选择方法介绍&#xff1a;实践示例&#xff1a;适用场景&#xff1a;优缺点&#xff1a; 3. 正则化&#xff08;Regularization&#xff09;正则化类型&#xff1a;实践示例&#xff1…