深度学习1-简介
人工智能(AI)旨在打造模仿智能行为的系统。它覆盖了众多方法,涵盖了基于逻辑、搜索和概率推理的技术。机器学习是 AI 的一个分支,它通过对观测数据进行数学模型拟合来学习决策制定。这个领域近年来迅猛发展,现在几乎(虽不完全准确)与 AI 同义。
深度神经网络是一类机器学习模型,将其应用到数据上的过程称为深度学习。目前,深度网络是最强大和最实用的机器学习模型之一,常见于日常生活中。我们常常用自然语言处理(Natural Language Processing)算法翻译文本、用计算机视觉(Computer Vision)系统搜索特定对象的图片,或通过语音识别(Speech Recognition)界面与数字助理交谈,这些都是深度学习的实际应用。
机器学习方法大体上分为三大类:监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)和强化学习(Reinforcement Learning)。目前,这三大类的前沿方法均依赖于深度学习(见图 1.1)。
图 1.1 机器学习是人工智能的一个分支,它专注于将数学模型应用于观测数据。它主要分为三个类别:监督学习、非监督学习和强化学习。深度神经网络在这三个领域中均发挥着重要作用。
1.1 监督学习
监督学习模型建立了一种从输入数据到输出预测的关系。在后续几节中,我们会详细探讨输入、输出、模型本身,以及“训练”模型所指的含义。
1.1.1 回归和分类问题
图 1.2 回归和分类问题。a)这个回归模型使用描述房产特征的数字向量来预测其价格。b)这个多变量回归模型以化学分子的结构为输入,预测其熔点和沸点。c)这个二元分类模型接收餐厅评论,并将其划分为正面或负面。d)这个多类别分类问题将一段音频片段归类为 N 种音乐类型中的一种。e)第二个多类别分类问题中,模型根据图片可能包含的 N 种物体之一来分类图片。
图 1.2 展示了几个回归和分类问题的例子。在每个例子中,都有一个与现实世界相关的输入(如一个句子、一段声音文件、一幅图片等),这些输入被转换成数字向量。这个向量就是模型的输入。模型把这个输入映射到一个输出向量,随后这个输出向量被再次转换,变成一个具有现实意义的预测。目前,我们主要关注输入和输出,并把模型当作一个黑盒子,它接受一个数字向量并输出另一个数字向量。
图 1.2a 中的模型基于如房屋的平方米数和卧室数量等输入特征来预测房价。这是一个回归问题,因为模型返回的是一个连续数值(而非某个类别)。而图 1.2b 中的模型则以分子的化学结构为输入,预测其熔点和沸点。由于预测了多个数值,这是一个多变量回归问题。
图 1.2c 中的模型接收包含餐厅评论的文本字符串作为输入,并预测评论是正面的还是负面的。这是一个二元分类问题,因为模型试图将输入分配到两个不同的类别中。输出向量包含输入属于每个类别的概率。图 1.2d 和 1.2e 则展示了多类别分类问题。在这里,模型将输入分配到多于两个的类别中。第一个例子中,输入是一个音频文件,模型预测它包含的音乐类型。第二个例子中,输入是一幅图片,模型预测图片中包含的对象。在这些例子中,模型均返回一个包含各类别概率的大小为 N 的向量。
1.1.2 输入
图 1.2 中的输入数据类型各异。在房价预测例子中,输入是一个固定长度的向量,包含了描述房产特征的值。这是一种表格数据,它没有内在结构;如果我们改变输入值的顺序再构建一个新模型,预期模型的预测结果不会改变。
另一方面,在餐厅评论的例子中,输入是一段文本。这可能根据评论中的单词数而长度不同,且输入顺序很重要;例如,“我的妻子吃了鸡肉”与“鸡肉吃了我的妻子”意义截然不同。在传递给模型之前,文本必须被编码为数字形式。这里,我们使用一个包含 10,000 个词的固定词汇表,并将单词索引简单拼接起来。
在音乐分类的例子中,输入向量可能是固定大小的(比如 10 秒音频片段),但其维度非常高。数字音频通常以 44.1 kHz 采样并以 16 位整数表示,因此一个 10 秒的音频片段包含 441,000 个整数。显然,监督学习模型必须能够处理大量输入。图像分类例子中的输入(由每个像素的 RGB 值串联起来的)也非常庞大。而且,它的结构本质上是二维的;即使在输入向量中不相邻,上下相邻的两个像素也紧密相关。
最后,考虑预测分子熔点和沸点的模型的输入。一个分子可能包含不同数量且连接方式各异的原子。在这种情况下,模型需要同时考虑分子的几何结构和组成原子。
1.1.3 机器学习模型
图 1.3 机器学习模型。该模型表示一系列关系,将输入(儿童年龄)与输出(儿童身高)联系起来。通过训练数据(橙色点,包括输入/输出对)来选定具体的关系。在训练模型过程中,我们寻找能够很好描述数据的关系。这里,经过训练的模型是青色曲线,可以用来计算任何年龄的儿童身高。
到目前为止,我们把机器学习模型当作一个黑盒子,它接受输入向量并返回输出向量。但这个黑盒子里面究竟是什么呢?考虑一个根据孩子年龄来预测身高的模型(见图 1.3)。机器学习模型其实是一个数学方程,描述了平均身高如何随年龄变化(图 1.3 中的青色曲线)。当我们把年龄输入这个方程,它就会返回相应的身高。例如,如果年龄是 10 岁,我们预测身高为 139 厘米。
更精确地说,这个模型代表了一系列方程,用于将输入映射到输出(即不同的青色曲线)。特定的方程(曲线)是根据训练数据(输入和输出对的示例)来选择的。在图 1.3 中,这些对由橙色点表示,我们可以看到模型(青色线条)合理地描述了这些数据。当我们谈到训练或拟合一个模型时,我们的意思是在可能的方程(青色曲线)中寻找一个最能准确描述训练数据的关系。
因此,图 1.2 中的模型需要标记好的输入/输出对来进行训练。例如,音乐分类模型需要大量音频片段,这些片段已由人类专家确定了各自的音乐类型。这些输入/输出对在训练过程中起到了教师或监督者的作用,这就是“监督学习”这个术语的由来。
1.1.4 深度神经网络
深度神经网络是一种特别有效的机器学习模型。它们是方程,能够代表输入和输出之间极其广泛的关系,并且在这些关系中寻找描述训练数据的关系特别容易。
深度神经网络可以处理非常大、变化多端的输入,并且能够包含各种内部结构。它们能输出单个实数(回归)、多个数值(多变量回归)或两个或更多类别的概率(分别对应二元和多类别分类)。正如我们在下一节中将看到的,它们的输出也可能非常大、变长,并且包含内部结构。想象具有这些特性的方程可能很困难,读者应努力暂时搁置怀疑。
1.1.5 结构化输出
图1.4 具有结构化输出的监督学习任务。a) 这个语义分割模型把 RGB 图像映射到一个二元图像,用于指示每个像素是属于背景还是牛(改编自 Noh 等人,2015年)。b) 这个单目深度估计模型将 RGB 图像映射到一个输出图像,每个像素代表深度(改编自 Cordts 等人,2016年)。c) 这个音频转录模型将音频样本映射到音频中所说话语的文字转录。d) 这个翻译模型将英语文本字符串映射到其对应的法语翻译。e) 这个图像合成模型将文字描述映射到一幅图像(示例来自 https://openai.com/dall-e-2/ )。在每个案例中,输出都具有复杂的内部结构或语法。在某些情况下,与输入相兼容的输出可能有多个。
图 1.4a 展示了一个用于语义分割的多变量二元分类模型。在这里,输入图像的每个像素都被分配一个二元标签,指示它是属于牛还是背景。图 1.4b 展示了一个多变量回归模型,输入是街景图像,输出是每个像素的深度。在这两种情况下,输出都是高维且有结构的。然而,这种结构与输入紧密相关,可以被利用;如果一个像素被标记为“牛”,那么具有相似 RGB 值的邻近像素可能有相同的标签。
图 1.4c-e 描述了三个输出具有与输入不太紧密相关的复杂结构的模型。图 1.4c 展示了一个模型,输入是音频文件,输出是文件中的转录词。图 1.4d 是一个翻译模型,输入是英文文本,输出是法文翻译。图 1.4e 描述了一个极具挑战性的任务,输入是描述性文本,模型需要生成与这个描述匹配的图像。
原则上,这三个后续任务可以在标准监督学习框架下解决,但它们更为困难,原因有二。首先,输出可能确实模糊不清;从英语到法语有多种有效翻译,任何描述都可能对应多种图像。其次,输出包含大量结构;并非所有单词串都能构成有效的英语和法语句子,也不是所有 RGB 值的组合都能构成合理的图像。除了学习映射,我们还必须遵循输出的“语法”。
幸运的是,这种“语法”可以在不需要输出标签的情况下学习。例如,我们可以通过学习大量文本数据的统计信息来学习构建有效的英语句子。这为无监督学习模型部分提供了一个联系。
1.2 无监督学习
从没有对应输出标签的输入数据中构建模型被称为无监督学习;缺乏输出标签意味着不存在“监督”。无监督学习的目标不是学习输入到输出的映射,而是描述或理解数据的结构。就像监督学习一样,数据可能具有非常不同的特点;它可能是离散或连续的,低维或高维的,长度固定或变化的。
1.2.1 生成式模型
生成式无监督模型,这类模型学习如何合成新的数据实例,使其在统计上与训练数据难以区分。一些生成式模型明确描述了输入数据的概率分布,并通过从这个分布中抽样来生成新实例。其他模型则仅学习生成新实例的机制,而不直接描述其分布。
图1.5 图像生成式模型。左图:两幅图像由训练有素的猫图模型生成。这些不是真正的猫,而是概率模型生成的样本。右图:两幅图像由专门训练的建筑图模型生成。改编自 Karras 等人 (2020b)。
当我到达森林边缘时,月亮已经升起,树木间筛下的光线银白而冷冽。我不由自主地颤抖起来,虽然我并不觉得冷,我加快了脚步。我从未离开过村庄这么远,对于接下来会发生什么,我心中毫无底。我已经走了数小时,感到疲惫和饥饿。我匆忙出发,连食物都没带,更别提武器了。在这个陌生的地方,我手无寸铁,孤身一人,不知所措。我走了这么长时间,以至于完全失去了时间感。我不知道自己究竟走了多远,我只知道我必须继续前进。我必须找到她。我感觉我已经很接近了。她就在附近,而且她正处于危险之中。我必须找到她,并在一切为时已晚之前救助她。
图1.6 文本数据生成式模型合成的短篇故事。该模型描述了一个为每个输出字符串分配概率的概率分布。通过从模型中抽样,可以创造出遵循训练数据(这里是短篇故事)统计特性的字符串,这些字符串之前从未出现过。
图1.7 图像修复。原始图像(左图)中,男孩被金属缆绳遮挡。不需要的区域(中图)被移除,生成式模型在其余像素保持不变的约束下合成了新图像(右图)。改编自 Saharia 等人 (2022a)。
在巴斯大学进行的第一场讲座前,我有些紧张。教室里坐满了看似成百上千的学生,他们的目光让人畏惧。我走上讲台,刚要开口,却发生了一件奇怪的事情。突然,教室里回荡着震耳欲聋的噪声,宛如巨兽的咆哮。声音太大了,我不得不捂住耳朵,什么都听不见了。我看到学生们惊慌失措地四处张望。然而,就像它来得那么突然,噪声又迅速消失,教室恢复了寂静。我愣在那里,试图弄清楚刚才发生了什么。然后我意识到,所有学生都在等着我说话。我本想说些风趣或聪明的话,但脑海一片空白。于是我只好说:“嗯,那真奇怪”,接着开始我的讲座。
图1.8 条件性文本合成。给定一段初始文本(第一段),文本生成式模型可以通过合成“缺失”的剩余部分来合理地继续这段文字。由 GPT3 生成(Brown 等人,2020)。
最先进的生成式模型能够合成极为逼真但与训练实例不同的实例。它们在生成图像(见图 1.5)和文本(见图 1.6)方面特别成功。这些模型还可以在某些输出预先确定的约束下合成数据(称为条件生成)。例如,包括图像修复(见图 1.7)和文本补全(见图 1.8)在内的应用。事实上,现代文本生成模型非常强大,以至于它们看起来几乎具有智能。给定一段文本后接一个问题,模型通常能通过生成文档最可能的补全来“填补”缺失的答案。然而,实际上,模型只了解语言的统计特性,并不真正理解其答案的含义。
1.2.2 潜变量
一些生成式模型(但不是所有)利用了这样一个观点:数据的维度可以比原始观测变量的数量更小。例如,有效且有意义的英语句子的数量远少于随机组合单词形成的字符串数量。同样,真实世界的图像只占通过随机赋予每个像素 RGB 值能创建的图像的一小部分。这是因为图像是由物理过程生成的(见图 1.9)。
图1.9 人脸的变化。人脸大约包含 42 块肌肉,因此可以用大约 42 个数字来描述同一个人在相同光照条件下的图像中的大部分变化。一般而言,图像、音乐和文本的数据集可以用相对较少的潜在变量来描述,尽管通常更难将这些变量与特定的物理机制联系起来。图像来自 Dynamic FACES 数据库(Holland 等人,2019)。
这就引出了一个想法,即我们可以使用较少的潜在变量来描述每个数据实例。在这里,深度学习的作用是描述这些潜变量与数据之间的映射关系。这些潜变量通常被设计为具有简单的概率分布。通过从这个分布中抽样并将结果通过深度学习模型传递,我们可以创造新的样本(见图 1.10)。
图1.10 潜变量。潜变量在许多生成模型中扮演关键角色,这些模型利用深度学习来揭示低维潜变量与观测到的高维数据之间的联系。潜变量按设计拥有简易的概率分布。因此,通过从这些潜变量的简单分布中采样,再利用深度学习模型将采样结果映射到观测数据空间,我们便能创造出新的样本。
这些模型为操纵真实数据提供了新的方法。例如,考虑找出支持两个真实实例的潜变量。我们可以通过在它们的潜在表示之间插值,并将中间位置映射回数据空间,从而在这些实例之间进行插值(见图 1.11)。
图1.11 图像插值。图像插值是一种有趣的应用。在每一行的图像中,左右两侧为真实图像,中间三张则是生成模型创造的插值序列。这些生成模型学习到了所有图像均可通过一组潜在变量来生成的原理。通过确定这两张真实图像的潜变量,对它们的值进行插值,然后用这些中间变量生成新图像,我们能创造出既视觉上合理,又融合了两张原始图像特征的中间图像。上排图片改编自 Sauer 等人 (2022),下排图片改编自 Ramesh 等人 (2022)。
1.2.3 结合监督学习与无监督学习
具有潜变量的生成式模型也可以促进输出具有结构的监督学习模型的发展(见图 1.4)。例如,考虑学习如何预测与描述相对应的图像。我们可以学习文本的潜变量与图像的潜变量之间的关系,而不是直接将文本输入映射到图像上。
这种方法有三个优点。首先,由于输入和输出维度较低,我们可能需要更少的文本/图像对来学习这种映射。其次,我们更有可能生成看起来合理的图像;潜变量的任何合理值都应该产生像是一个可信的示例。第三,如果我们在两组潜变量之间的映射或潜变量到图像的映射中引入随机性,那么我们可以生成多个都与描述相匹配的图像(见图 1.12)。
图1.12 从“时代广场上的滑板泰迪熊”这个标题出发,DALL·E-2(Ramesh 等人,2022)生成了多张图片。
1.3 强化学习
机器学习的最后一个领域是强化学习。这个范畴引入了代理(agent)的概念,代理生活在一个世界中,在每个时间步骤中可以执行特定行动。行动会改变系统的状态,但这种改变不一定是确定性的。执行行动还可能产生奖励,强化学习的目标是让代理学会选择能够平均获得高奖励的行动。
一个复杂点是奖励可能在行动后一段时间才出现,因此把奖励与特定行动关联起来并不直接。这被称为时间性信用分配问题。在学习过程中,代理必须在探索(寻找新的可能性)和利用(使用已知的策略)之间做出平衡;也许代理已经学会了如何获得适度的奖励,它应该继续遵循这个策略(利用现有知识),还是尝试不同的行动以寻找改进的机会(探索新的可能性)?
1.3.1 两个例子
考虑教一个类人机器人如何行走。机器人在特定时间可以执行有限的行动(如移动各种关节),这些行动会改变世界的状态(即它的姿态)。我们可以通过设立障碍赛道上的检查点来奖励机器人。为了到达每个检查点,它必须执行许多行动,但当收到奖励时,很难确定哪些行动对奖励有贡献,哪些是无关紧要的。这就是时间性信用分配问题的一个实例。
第二个例子是学习下棋。同样,代理在任何时刻都有一组有效的行动(棋子移动)。然而,这些行动以非确定性的方式改变系统状态;对于任何行动选择,对手可能以多种不同的方式回应。这里,我们可以根据捕获棋子来设定奖励结构,或者在游戏结束时赢得比赛来获得单一奖励。在后者情况下,时间性信用分配问题非常严重;系统必须学习在众多走法中哪些是成功或失败的关键。
探索与利用的权衡在这两个例子中也很明显。机器人可能已经发现,通过侧躺并用一条腿推动可以前进。这种策略虽然能让机器人移动并获得奖励,但比最优解——站立行走——要慢得多。因此,它面临一个选择,是利用已知的策略(沿地面滑行)还是探索其他可能的行动(可能实现更快的移动)。在下棋例子中也是如此,代理可能学到了一系列合理的开局走法。它应该利用这些知识,还是探索不同的开局序列?
深度学习如何融入强化学习框架可能不那么明显。有几种可能的方法,其中一种是使用深度网络构建从观察到的世界状态到行动的映射。这被称为策略网络。在机器人的例子中,策略网络会学习从传感器测量到关节运动的映射。在下棋的例子中,网络将学习从棋盘的当前状态到走法选择的映射(见图 1.13)。
图1.13 在强化学习中使用策略网络是一种创新。通过深度神经网络,我们可以定义从状态(例如棋盘上的位置)到动作(可能的移动)的映射。这种映射即为所谓的“策略”。
相关文章:

深度学习1-简介
人工智能(AI)旨在打造模仿智能行为的系统。它覆盖了众多方法,涵盖了基于逻辑、搜索和概率推理的技术。机器学习是 AI 的一个分支,它通过对观测数据进行数学模型拟合来学习决策制定。这个领域近年来迅猛发展,现在几乎&a…...
Java基础语法 (基础介绍 二)
目录 Java 基础语法 第一个Java程序 基本语法 Java标识符 Java修饰符 Java变量 Java关键字 Java注释 Java 空行 Java 对象和类 Java中的对象 Java中的类 构造方法 创建对象 访问实例变量和方法 实例 源文件声明规则 Java包 Import语句 一个简单的例子 Java…...

SAPUI5基础知识18 - 自定义CSS和主题色
1. 背景 在上一篇博客中,我们通过使用SAPUI5提供的CSS类实现元素间距的调整。在本篇博客中,让我们看一下如何实现自定义的CSS样式。 2. 背景知识 2.1 CSS基础语法 CSS,全称为级联样式表(Cascading Style Sheets)&a…...
Postman中API测试的艺术:测试用例复用的高级技巧
Postman中API测试的艺术:测试用例复用的高级技巧 在API测试过程中,复用测试用例可以显著提高测试效率和一致性。Postman作为一个强大的API开发工具,提供了多种机制来实现测试用例的复用。本文将深入探讨Postman中API测试用例复用的技巧&…...
Flutter Geocoding插件使用指南:简化地理编码与逆地理编码
Flutter Geocoding插件使用指南:简化地理编码与逆地理编码 简介 geocoding 是一个Flutter插件,提供了简便的地理编码(将地址转换为经纬度坐标)和逆地理编码(将经纬度坐标转换为地址)功能。它利用了iOS和A…...

“手撕”全网最细的JDBC教程(安装导入使用)
目录 一、什么是JDBC 二、JDBC的安装 三、JDBC如何导入 四、怎么使用JDBC编写代码 一、什么是JDBC JDBC由Java提供给数据库的一组通用的API。 在平常的业务中,是比较少使用像cmd命令行来操作数据库的,更多的是操作代码(Pythonÿ…...

C++指针选择题带答案
1、有如下语句int a10,b20,*p1,*p2;p1&a;p2&b;如图1所示,若要实现图2所示的存储 结构,可选用的赋值语句是___________。 A)*p1*p2; B)p1p2; C)p1*p2; D)*p1p2; 2、变量的指针,其含义是该…...

力扣 二分查找
二分查找基础篇。 题目 class Solution {public int searchInsert(int[] nums, int target) {int l 0, r nums.length - 1;while(l < r) {int mid l((r-l)>>1);//(lr)/2if(nums[mid]<target)lmid1;else rmid-1;}return l;//处理边界,设定数组的左半…...
ADMAS-Simulink联合仿真输入设置
使用Solidworks、ADAMS、Simulink进行机电联合仿真_adams-simulink-CSDN博客RecurDynSimulink联合仿真案例演示_哔哩哔哩_bilibili# C#调用已经使用Python训练好的神经网络做图片检测_c#调用python训练好的神经网络模型-CSDN博客...

【NOI】C++程序设计入门三
文章目录 前言一、大杂烩1.导入2.常量3.标识符4.关键字5.整型补充5.1 short:短整型5.2 long:长整型5.3 long long:长长整型 二、例题讲解问题:1597. 买文具问题:1596. 火柴棒三角形问题问题:1417. 买文具问…...

Three.js投射光线实现三维物体交互
<template><div id"webgl"></div> </template><script setup> import * as THREE from three //导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入 dat.gui import { GUI } from thre…...

SSRF学习笔记
1.NAT学习 Nat(Network Address Translation,网络地址转换)是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址,以实现局域网内部设备访问互联网的功能。具体来说,Nat有以下几个主要…...

Python——Pandas(第三讲)
文章目录 修改替换变量值对应数值的替换指定数值范围的替换 虚拟变量变换数值变量分段数据分组基于拆分进行筛选 分组汇总使用 agg 函数进行汇总引用自定义函数 长宽格式转换转换为最简格式长宽型格式的自由互转 多个数据源的合并数据的横向合并concat 命令 处理缺失值认识缺失…...
性能测试中qps 一直上不去的原因
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 在性能测试中,QPS(每秒查询率)一直上不去可能由以下…...
学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入
CNAME 记录值 CNAME 记录是一种DNS记录类型,它将一个域名映射到另一个域名。这通常用于将一个子域名指向另一个域名,或者将一个域名指向一个不同的顶级域。 用途:用于域名别名,负载均衡,或者在更换域名时保持服务的连…...
springboot集成mybatis时,dao层的mapper类需要添加@Repository注解吗?
在Spring Boot项目中,当你使用MyBatis作为ORM框架时,关于DAO层的Mapper类是否需要添加Repository注解,这主要取决于你的项目需求和配置。 Repository注解的作用Repository注解是Spring框架中用于声明持久层(DAO层)的组…...

一文总结代理:代理模式、代理服务器
概述 代理在计算机编程领域,是一个很通用的概念,包括:代理设计模式,代理服务器等。 代理类持有具体实现类的实例,将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理,以控制对这个对象的…...

探索 Kubernetes 持久化存储之 Longhorn 初窥门径
作者:运维有术星主 在 Kubernetes 生态系统中,持久化存储扮演着至关重要的角色,它是支撑业务应用稳定运行的基石。对于那些选择自建 Kubernetes 集群的运维架构师而言,选择合适的后端持久化存储解决方案是一项至关重要的选型决策。…...
全国区块链职业技能大赛样题第9套智能合约+数据库表设计
后端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746050 前端源码地址:https://blog.csdn.net/Qhx20040819/article/details/140746216 智能合约+数据库表设计:https://blog.csdn.net/Qhx20040819/article/details/140746646 nice.sql /* Navicat MySQ…...
常见OVS网桥及其链接接口详解
目录 引言OVS简介常见OVS网桥 QBR(qbr)PLY网桥br-intbr-tunbr-routerbrcps常见网桥链接接口 QVOQVIQVMPatch网桥和接口的工作原理应用场景 虚拟化环境数据中心网络云计算平台 1. 引言 开放虚拟交换机(Open vSwitch,简称OVS&…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...