【每日算法】理论:生成模型基础; 刷题:力扣单调栈

文章目录

  • 一、理论问题
      • 1、怎么理解重参数化技术?
      • 2、KL散度是什么?
      • 3、DDPM
      • 4、什么是马尔可夫过程
      • 5、GAN模型
      • 6、VAE模型
  • 二、力扣回顾-单调栈


一、理论问题

1、怎么理解重参数化技术?

重参数化是神经网络中的一种技术,也可以称之为参数重整化。当我们从一个分布 p θ ( z ) p_\theta(z) pθ(z)中采样时,由于直接进行采样的动作是离散的,不可微,所以没有梯度信息,在BP反向传播的时候无法对参数梯度进行更新。这个时候我们就可以通过重参数化技术解决这个问题。重参数化技巧主要用于连续分布的情况,但有时也会进行变通,用于处理离散分布。在连续分布的情况下,以高斯分布为例:原本需要从 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样得到 z z z,重参数化技巧将其转化为了从正态分布 N ( 0 , 1 ) N(0,1) N(0,1)中采样得到 ε \varepsilon ε,从而 z = μ + ε σ z=\mu+\varepsilon \sigma z=μ+εσ,从而把随机性转移出了计算图,解决了采样导致梯度不可传递的问题,整个过程可以通过梯度下降来进行优化。针对离散分布的采样可以使用Gumbel-Softmax Trick,这种技巧将离散的采样过程转化为连续的可微操作,从而使得模型可以通过梯度下降进行优化。

2、KL散度是什么?

KL散度是衡量两个概率分布之间差异的一种方法,又可以叫做相对熵。KL散度越小,说明两个概率分布之间的差异越小。当两分布一致时,KL散度为0。假设有两个概率分布p和q,KL散度 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(p∣∣q)表示当用分布p来近似真实分布q时的信息损失。公式表达为: D K L ( p ∣ ∣ q ) = − ∑ x p ( x ) l o g q ( x ) p ( x ) D_{KL}(p||q)=-\sum_{x}p(x)log\frac{q(x)}{p(x)} DKL(p∣∣q)=xp(x)logp(x)q(x)

补充提问:KL散度是距离吗?
KL散度不能被看作是不同分布之间距离的度量,因为从KL散度的计算公式就可以看出KL散度不符合对称性(距离度量应该满足对称性)。用 p近似q和用q近似p,二者所损失的信息并不是一样的。

3、DDPM

DDPM是一种生成模型,全称为Denoising Diffusion Probabilistic Models 去噪扩散概率模型。DDPM的核心思想是通过迭代地应用扩散过程,逐渐将简单的分布(通常是高斯分布)演变成目标数据的分布。DDPM通过前向过程和反向过程来模拟数据的生成。前向过程逐步将清晰数据转换为噪声,反向过程则尝试从噪声中恢复原始数据。实现DDPM需要满足三个条件:①满足马尔可夫假设;②微小;③高斯噪声变化。

4、什么是马尔可夫过程

马尔可夫过程是一种随机过程,其中未来状态只依赖于当前的状态,而与过去状态无关。马尔科夫链条件概率形式如下:
P ( A , B , C ) = P ( C ∣ B , A ) P ( B , A ) = P ( C ∣ B ) P ( B ∣ A ) P ( A ) P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ B ) P(A,B,C)=P(C|B,A)P(B,A)=P(C|B)P(B|A)P(A)\\ P(B,C|A)=P(B|A)P(C|B) P(A,B,C)=P(CB,A)P(B,A)=P(CB)P(BA)P(A)P(B,CA)=P(BA)P(CB)

5、GAN模型

GAN模型由生成器和判别器组成,生成器负责生成逼真数据以 “骗” 过 判别器,而判别器负责判断一个样本是真实的还是 “造” 出来的。在训练过程中,生成器和判别器相互对抗、相互提升,最终使得生成器能够生成逼真的数据,判别器则很难区分真假数据。

6、VAE模型

VAE模型全称为变分自动编码器模型,它结合了自动编码器和变分推断的思想。VAE 模型是一种包含隐变量的生成模型,主要包括编码器和解码器两个部分。编码器将输入数据映射到潜在空间的概率分布参数,通常是均值和方差。解码器则从潜在空间的采样中重构原始数据。

二、力扣回顾-单调栈

涉及题目:

  • 739. 每日温度
  • 496. 下一个更大元素 I
  • 503. 下一个更大元素 II

每日温度:

  • 给定输入:整数数组 temperatures表示每天的温度
  • 要求的输出:
    • answer[i] 表示对于第 i 天,下一个更高温度出现在几天后。
    • 如果气温在这之后都不会升高,请在该位置用 0 来代替。

下一个更大的元素 I:

  • 给定输入:两个没有重复元素 的数组 nums1 和 nums2,nums1 是 nums2 的子集
  • 要求的输出:
    • 输出一个长度为 nums1.length 的数组 ans
    • ans[i]表示与nums1[i]数值相等的nums2[j]在 nums2的 下一个更大元素
    • 如果不存在下一个更大元素,则返回 -1

下一个更大元素 II:

  • 给定输入:一个循环数组 nums
  • 要求的输出:
    • 输出nums 中每个元素的 下一个更大元素
    • 如果不存在,则输出 -1

对比分析:
这三道题都是单调栈有关的题目,当遇到需要寻找一个元素右边或者左边第一个比自己大或者小的元素的位置时,就可以考虑使用单调栈来完成。739. 每日温度就是寻找temperatures数组右边第一个比自己大的元素;496. 下一个更大元素 I 是寻找数组nums1对应的数组nums2中元素的右边第一个比自己大的元素,相比前一道题多了一个寻找对应关系的部分;503. 下一个更大元素 II 跟之前相比,它需要查询的数组是循环数组。

739. 每日温度

  • 注意单调栈是保存索引的,计算一个元素右边或者左边第一个比自己大或者小的元素的位置时,也就是计算索引的差值
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer=[0]*len(temperatures) #准备输出数组stack=[0] #准备单调栈并且初始化为0for i in range(1,len(temperatures)):#标号为0的已经放进去了,从1开始遍历if temperatures[i]<=temperatures[stack[-1]]: #如果小于则加进去stack.append(i)else: #大于则需要进行计算while len(stack)!=0 and temperatures[i]>temperatures[stack[-1]]:answer[stack[-1]]=i-stack[-1]stack.pop()stack.append(i)return answer

496. 下一个更大元素 I

  • 注意这里的输出是下一个更大的元素,而不是下一个更大的元素所在的位置
  • 由于nums1是nums2的子数组,所以可以先对nums2中所有元素求出其下一个更大的元素,然后判断是否为nums1的元素,如果是就加入最后的结果
class Solution:def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:ans=[-1]*len(nums1)stack=[0]for i in range(1,len(nums2)):if nums2[i]<=nums2[stack[-1]]:stack.append(i)else:while len(stack)!=0 and nums2[i]>nums2[stack[-1]]:if nums2[stack[-1]] in nums1:index=nums1.index(nums2[stack[-1]])ans[index]=nums2[i]stack.pop()stack.append(i)return ans

503. 下一个更大元素 II

  • 注意这里的输出是下一个更大的元素,而不是下一个更大的元素所在的位置
  • 因为是循环数组,所以直接拼接两个原数组,然后求得下一个更大元素后取一个数组的长度即可
class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:nums2=nums+numsans=[-1]*len(nums2)stack=[0]for i in range(1,len(nums2)):if nums2[i]<=nums2[stack[-1]]:stack.append(i)else:while len(stack)!=0 and nums2[i]>nums2[stack[-1]]:ans[stack[-1]]=nums2[i]stack.pop()stack.append(i)return ans[0:len(nums)]

参考:
代码随想录算法训练营第五十天|739. 每日温度,496.下一个更大元素 I
代码随想录算法训练营第五十一天|503.下一个更大元素II,42. 接雨水

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

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

相关文章

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

说下你对TCP以及TCP三次握手四次挥手的理解?

参考自简单理解TCP三次握手四次挥手 什么是TCP协议&#xff1f; TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接&a…

VMware的安装和Ubuntu的配置安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、linux是什么&#xff1f;二、基础知识虚拟机 三、安装VMware总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; Linux是一个功能…

Java项目:55 springboot基于SpringBoot的在线视频教育平台的设计与实现015

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 在线视频教育平台分为管理员和用户、教师三个角色的权限模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、教师管理、课程信…

数据指标体系方法—UJM模型

了解 UJM UJM 模型&#xff0c;全称为 User-Journey-Map 模型&#xff0c;即用户旅途地图。 UJM 模型是用户在使用产品过程中的生命旅程&#xff0c;指用户从首次接触直至下单以及享受产品或服务期间&#xff0c;用户与企业产品或者平台互动的全过程。 用户旅途常常会和用户…

用 bsdtar 做 Linux 全系统迁移 - 最省空间、最灵活的Linux系统迁移方式,但需要那么一点点技巧

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/03/migrate-linux-with-bsdtar/ &#xff09; 我们在做 Linux 全系统迁移的时候&#xff0c;可以直接备份磁盘或分区&#xff08;如 dd &#xff09;&#xff0c;也可以备份全部文件&#xff08;如…

想兼职赚钱?盘点6个靠谱兼职,赚钱更轻松!

1&#xff0c;微头条搬砖 微头条搬砖是一个门槛不高的赚钱方式&#xff0c;而且不需要你有多么好的原创能力&#xff0c;去收集一些热门文章的素材进行文章伪原创&#xff0c;十分钟就能搞定&#xff0c;只要你的文章有爆点&#xff0c;足够吸人眼球&#xff0c;就能够获取不低…

throws vs throw

方法内&#xff0c; throw是生成异常&#xff0c;结束当前方法运行,此时要么捕获&#xff08;自己抛的自己捕获&#xff0c;没有意义&#xff09;&#xff0c;要么上抛&#xff0c;即方法上throws声明&#xff0c;让调用者处理throws是处理异常&#xff08;抛给别人处理&#x…

给Python初学者的一些技巧

以下是一些Python实用技巧和工具&#xff0c;希望能对大家学习有所帮助。 交换变量 x 6 y 5 x, y y, x print x >>> 5 print y >>> 6 if 语句在行内 print "Hello" if True else "World" >>> Hello 连接 下面的最后一种方…

区块链技术中的共识机制算法:以权益证明(PoS)为例

引言&#xff1a; 在区块链技术的演进过程中&#xff0c;共识机制算法扮演着至关重要的角色。除了广为人知的工作量证明&#xff08;PoW&#xff09;外&#xff0c;权益证明&#xff08;Proof of Stake&#xff0c;PoS&#xff09;也是近年来备受关注的一种共识算法。 …

C++高级面试题:请解释 C++ 中的函数重载解析(Function Overload Resolution)

请解释 C 中的函数重载解析&#xff08;Function Overload Resolution&#xff09; 函数重载解析&#xff08;Function Overload Resolution&#xff09;是指编译器在调用重载函数时确定最合适的重载版本的过程。在 C 中&#xff0c;函数重载允许我们定义多个同名函数&#xf…

Spring学习

Maven 的配置文件是一个强约定的XML格式文件&#xff0c;它的文件名一定是pom.xml。 1、POM (Project Object Model) 一个 Java 项目所有的配置都放置在 POM 文件中&#xff0c;大概有如下的行为&#xff1a; 定义项目的类型、名字管理依赖关系定制插件的 1.maven坐标 <…

牛客刷题 | HJ52 计算字符串中的编辑距离, HJ55 挑7,HJ59 找出字符串中第一个只出现一次的字符

HJ52 计算字符串中的编辑距离 题目链接&#xff1a;计算字符串的编辑距离_牛客题霸_牛客网 思路&#xff1a;动态规划&#xff0c;实在是没想到啊。 代码 import sysstr1 sys.stdin.readline().strip() str2 sys.stdin.readline().strip() dp [[0]*(len(str1)1) for _ i…

【面经八股】搜广推方向:面试记录(八)

【面经&八股】搜广推方向:面试记录(八) 文章目录 【面经&八股】搜广推方向:面试记录(八)1. 自我介绍2. 实习经历问答3. 科研-项目经历问答4. 八股4. 编程题5. 反问1. 自我介绍 。。。。。。 2. 实习经历问答 序列推荐如何建模(简单的sumpooling) 在序列推荐任…

基于springboot实现小区物业管理系统项目【项目源码+论文说明】

基于springboot实现小区物业管理系统演示 摘要 随着城镇人口居住的集中化加剧 &#xff0c;传统人工小区管理模式逐渐跟不上时代的潮流。这就要求我们提供一个专门的管理系统。来提高物管的工作效率、为住户提供更好的服务。 物业管理系统运用现代化的计算机管理手段,使物业的…

内网渗透小结

域产生原因 简单来说就是为了安全和方便控制域内主机 一个具有一定规模的企业&#xff0c;每天都可能面临员工入职和离职&#xff0c;因此网络管理部门经常需要对域成员主机进行格式化消除磁盘的文件&#xff0c;然后重装系统及软件&#xff0c;以提供给新员工使用&#xff1…

316算法题整理

1 题目 这天小苯来到了超市购买物品&#xff0c;一共有 几种物品&#xff0c;每种物品只能购买一个&#xff0c;但有的物品支持优惠活动&#xff0c;有的并不支持&#xff0c;恰好本超市的结账是有“支付宝九五折”优惠的&#xff0c;小苯的支付宝余额还剩 人元&#xff0c;他…

顺序表的操作

一、插入操作 顺序表的插入操作需要考虑插入位置、插入元素和数组容量等因素。具体步骤如下&#xff1a; 判断插入位置是否合法&#xff0c;即是否在数组范围内。 如果插入位置合法&#xff0c;判断数组容量是否已满。如果已满&#xff0c;则需要动态扩容&#xff0c;重新分配…

从阿里云降价,看中国云计算创新之变

继“疯狂星期四”历史级大降价后&#xff0c;阿里云“AI驱动、公共云优先”的战略布局再落一子。 近日&#xff0c;阿里云与菜鸟、高德地图、中远海运、东航物流、圆通速递、申通快递、中通快递、德邦快递、G7易流、地上铁、浙江大学智能交通研究所等共同发起成立“物流智能联…

Python接口自动化测试之详解post请求

前言 在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务…