当前位置: 首页 > news >正文

机器学习课程学习周报十二

机器学习课程学习周报十二

文章目录

  • 机器学习课程学习周报十二
    • 摘要
    • Abstract
    • 一、机器学习部分
      • 1.1 fGAN: General Framework of GAN
      • 1.2 CycleGAN
      • 1.3 Auto-Encoder
      • 1.4 概率论复习(一)
    • 总结

摘要

本周的学习内容涵盖了fGAN框架、CycleGAN、自编码器以及概率论的基础知识。fGAN利用f-divergence来衡量概率分布间的差异,并通过Fenchel共轭解释其与GAN的关系。CycleGAN在无监督学习中实现图片风格转换,特别是在无成对数据的情况下。自编码器用于特征降维和重构,并探讨了去噪自编码器和离散隐表征的应用。最后,复习了概率论的基本概念,为理解VAE和Diffusion模型奠定基础。

Abstract

This week’s study focuses on the fGAN framework, CycleGAN, autoencoders, and fundamental concepts of probability theory. fGAN utilizes f-divergence to measure differences between probability distributions, and the Fenchel conjugate is used to explain its relationship with GANs. CycleGAN enables image style transfer in unsupervised learning, particularly without paired data. Autoencoders are explored for feature dimensionality reduction and reconstruction, including applications of denoising autoencoders and discrete latent representations. Finally, a review of probability theory basics lays the groundwork for understanding VAE and Diffusion models.

一、机器学习部分

1.1 fGAN: General Framework of GAN

f-divergence是一类用于衡量两个概率分布之间差异的函数族,f-divergence具体的定义为:

D f ( P ∣ ∣ Q ) = ∫ f ( p ( x ) q ( x ) ) q ( x ) d x {D_f}(P||Q) = \int {f(\frac{{p(x)}}{{q(x)}})} q(x)dx Df(P∣∣Q)=f(q(x)p(x))q(x)dx

给定两个概率分布 P P P Q Q Q,且 p ( x ) {p(x)} p(x) q ( x ) {q(x)} q(x) P P P Q Q Q的概率密度函数,函数 f f f是一个凸函数,并保证 f f f是非负的。具体定义和推导过程如下:
在这里插入图片描述

下图为指定了函数 f f f的具体形式后,f-divergence能转化为不同的divergence。
在这里插入图片描述

Fenchel Conjugate(凸共轭)

凸函数的共轭函数定义如下所示:

在这里插入图片描述

下图的例子表示,给定所有的 x x x,画出函数图像,在 t t t的定义域上,取最大的函数部分, f ∗ {f^*} f的图像是凸函数的形状, f ∗ {f^*} f一定是凸函数。

在这里插入图片描述

下图表明了,利用凸共轭证明f-divergence与GAN的关系,不同的目标函数对应不同的Divergence函数,不同的Divergence函数对应不同的 f ∗ {f^*} f函数。

在这里插入图片描述

1.2 CycleGAN

假设我们现在要把一个 x x x域的真人的头像照片,转换为 y y y域的动漫人物的头像照片,在这个例子里,我们没有任何的成对的数据,因为我们有一堆真人的照片,但是我们没有这些真人的动漫头像。

这个时候就可以用到 GAN,在这种完全没有成对数据的情况下进行学习,把GAN用在无监督学习上。原本无条件的GAN的输入是一个高斯的分布,输出可能是一个复杂的分布。现在我们将 x x x域的真人的头像照片作为GAN的输入,替换为原来输入的高斯分布,输出部分期望生成 y y y域中的动漫人物的头像图片。判别器同时输入 x x x域的图片和 y y y域的图片,然后输出一个数值,这个数值代表这两张图片是不是一对的。

这里我们完全套用原来GAN的训练方式是有问题的,我们没有对输入和输出的关系做任何限制,生成器也许就把这张 x x x域的真人图片当作一个符合高斯分布的噪音,然后不管你输入什么它都无视它,只要判别器觉得它做得很好就可以了。

在这里插入图片描述

引入循环生成对抗网络Cycle GAN),会训练两个生成器。第一个生成器是把 x x x域的图变成 y y y域的图,第二个生成器它的工作是能将一张 y y y域的图还原回至 x x x域的图。在训练的时 候,我们会增加一个额外的目标,就是我们希望输入一张图片,其从 x x x域转成 y y y域以后,要从 y y y域转回原来一模一样的 x x x域图片。就这样经过两次转换以后,输入跟输出要越接近越好,或者说两张图片对应的两个向量之间的距离越接近越好。因为这边有一个循环,从 x x x y y y再从 y y y回到 x x x,所以它是一个循环,所以被称为Cycle GAN。

在这里插入图片描述

另一个角度,Cycle GAN可以是双向的。同时训练上图中下面的部分,给橙色的生成器输入 y y y域的图片,让它产生 x x x域的图片。然后再让蓝色的生成器把 x x x域的图片还原回原来 y y y域的图片。同时我们依然希望输入跟输出越接近越好,所以一样要训练一个判别器,这个判别器是 x x x域的判别器, 它是要看橙色生成器输出的图片像不像是真实人脸的图片。这个橙色的生成器它要去骗过这个 D X {D_X} DX判别器。这两部分合起来就是 Cycle GAN。

1.3 Auto-Encoder

自编码器Auto-Encoder)属于self-supervised learning(自监督学习)其中的一种方法。

在这里插入图片描述

自编码器中包含一个编码器和一个解码器。编码器可能读入一张图片,图片是一种维度非常高的向量,编码器能将高维度的向量压缩为低维度的向量,编码器通常有降维的作用。而解码器的网络架构可能更类似于GAN中的生成器,解码器要输入通过编码器得到的低维向量,生成一张图片。而训练的目标是要将解码器得到的输出图片与编码器的输入图片越接近越好,这个任务也叫做重构reconstruction)。

编码器的任务就是化繁为简,有时本来比较复杂的东西,它实际上只是表面上看起来复杂,而本身的变化是有限的。我们只需要找出其中有限的变化,就可以将它本来比较复杂 的东西用更简单的方法来表示。例如,一组图片的大小都是 3 × 3 3 \times 3 3×3,就是用9维度的向量来表示一张图片,然而实际上这一组图片的表示类型只有2种,可以只用2维度的向量表示。

在这里插入图片描述

去噪自编码器denoising autoencoder),去噪自编码器就是把原来需要输入到编码器的图片,加上一些噪声,然后一样地通过编码器,再通过解码器,目标是还原出加入噪声前的图片。 BERT模型也可以当做为一个去噪自编码器,输入时我们会加入掩码,掩码就是噪声。

自编码器可应用于特征解耦feature disentanglement),解耦是指把一堆本来纠缠在一起的东西把它解开。如果是图片的话,就是把一张图片变成一个编码,再把编码变回图片,既然这个编码可以变回图片,代表说这个编码里面有很多的信息,包含图片里面所有的信息。举例来说,包含图片里面的色泽、纹理等等。在语音上,语音的编码包含了语音里面所有重要的信息,可能有这句话的内容,这句话的语者信息。然而这些信息是全部纠缠在一个向量里面,我们并不知道一个向量的哪些维度代表了哪些信息。例如,100维的语音向量编码,前50维代表了这句话的内容,后50维代表了说话人的特征,这就叫特征解耦。有了特征解耦之后,如果我们现在有A和B两个不同对象说不同话的语音,将其通过编码器得到的编码拿出来,交换其后50维的向量,再通过解码器生成,我们可以得到音色的互换,或者交换其前50维的向量,再通过解码器生成,我们可以得到语音的合成。

自编码器还可应用于离散隐表征。目前为止我们都假设编码是一个向量,这样就是一串 实数,编码也可以是二进制,是每一个维度就代表了某种特征的有无。比如输入的图片,如果是女生,可能第一维就是1,男生第一维就是0;如果有戴眼镜,就是第三维是1,没有戴眼镜第三维就是是0。编码也可以是独热向量,只有一维是1,其他就是0。

在这里插入图片描述

在离散的表征技术中,有一种向量量化变分自编码器vector quantized variational auto-encoder),它运作的原理就是输入一张图片,然后编码器输出一个向量, 这个向量它是一般的向量,并且是连续的,但接下来有一个码本,所谓码本的意思就是一排向量。这排向量也是学出来的,把编码器的输出,去跟这排向量计算一个相似度,然后就会发现这其实跟自注意力有点像,上面这个向量就是查询,下面这些向量就是键, 那接下来就看这些向量里面,谁的相似度最大,把相似度最大的那个向量拿出来再输入至解码器中。假设码本里面有32个向量,那解码器的输入就只有32种可能,相当于让这个编码没有无穷无尽的可能,只有 32 种可能而已。这种技术在语音中,码本可以学到最基本的发音部位,相当于英文的音标或者中文的拼音,而这个码本里面每一个向量,它就对应到某一个发音,就对应到音标里面的某一个符号。

1.4 概率论复习(一)

为了更好地了解VAE和Diffusion模型的原理,并结合信息论前置课程的需要,我将分几次对概率论与数理统计的知识进行复习。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本周的学习加强了对生成对抗网络及其在无监督学习中的应用的理解,并深入探讨了自编码器在特征提取和表示学习中的作用。VAE和Diffusion模型中涉及分布的理解和推导,通过对概率论的复习,为后续学习更复杂的深度学习模型打下了坚实的理论基础。

相关文章:

机器学习课程学习周报十二

机器学习课程学习周报十二 文章目录 机器学习课程学习周报十二摘要Abstract一、机器学习部分1.1 fGAN: General Framework of GAN1.2 CycleGAN1.3 Auto-Encoder1.4 概率论复习(一) 总结 摘要 本周的学习内容涵盖了fGAN框架、CycleGAN、自编码器以及概率…...

python多线程程序设计 之二

python多线程程序设计 之二 线程同步机制lock对象acquirereleaselocked RLock对象条件变量条件变量应用实列实列代码 线程同步机制 lock对象 原语锁是一种同步原语,锁定时不属于特定线程。在Python中,它是目前可用的最低级别的同步原语,由_…...

k8s用StatefulSet部署redis

redis-config.yaml (配置文件) apiVersion: v1 kind: ConfigMap metadata:name: redis-config data:redis.conf: |# Redis general configuration​ bind 0.0.0.0 ​ protected-mode no ​ port 6379 ​ dir /data ​ appendonly yesse…...

flink on k8s

1.修改host文件 vi /etc/hosts 添加如下内容 这样搭集群的时候就不用记ip了 #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 165.154.221.97 tlb-001 k8s01 k8s-m…...

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别?⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别?⭐️⭐️⭐️ArrayList 和 Vector 区别?⭐️⭐️ArrayList 的扩容机制?⭐️⭐️⭐️ Qu…...

python+adb

#!/usr/bin/python env # -*- coding: utf-8 -*- import os import sys import subprocess from time import sleepimport logging logging.basicConfig(levellogging.DEBUG) class ScreenCapture():def get_screen_size(self):"""获取手机分辨率""&q…...

AIGC文本生成

文本生成是一种人工智能技术,它基于深度学习算法,根据给定的提示信息创作出有逻辑、连贯的文本内容。 文本生成所需的输入(提示或Prompt)可以是简单的关键词、一句话概述或是更复杂的指令和上下文信息。文本生成模型通过分析大量…...

系统架构设计师教程 第5章 5.4 软件测试 笔记

5.4 软件测试 5.4.1 测试方法 ★★★★★ 软件测试方法的分类有很多种, 以测试过程中程序执行状态为依据可分为静态测试 (Static Testing,ST) 和动态测试 (Dynamic Testing,DT); 以具体实现算法细节和系统内部结构的相关情况为根据可分黑盒测试、白盒测试和灰盒测…...

ASPICE评估全流程解析:汽车软件开发组织能力的系统化评估

ASPICE(Automotive SPICE)评估的过程是一个系统化和详尽的流程,旨在评估汽车软件开发组织在软件开发过程方面的能力。 以下是ASPICE评估过程的详细描述: 1. 评估准备阶段 a. 确定评估目标和范围 明确评估的目标,如评…...

合并RAR分卷压缩包

因为文件压缩之后体积仍然过大,大家可能会选择进行分卷压缩,那么rar分卷压缩包之后如何合并成一个压缩包文件呢?今天我们来学习rar分卷压缩包,合并成一个的方法。 最基础的方法就是将分卷压缩包解压出来之后,再将文件…...

重生奇迹MU 想去哪就去哪玩 轻松玩转翅膀属性

在重生奇迹MU这个游戏中,玩家需要扫荡各种怪物,勇斗BOSS,与其他玩家激战。在这个充满冒险的旅程中,翅膀是最重要的装备之一。拥有一个属性强大的翅膀,代表着玩家的成长与强大。穿上它,加速你的冒险之旅吧&a…...

Lnux-gcc/g++使用

目录 1.gcc/g介绍 1.什么是 gcc / g 2.gcc/g指令格式 2. gcc / g 实现程序翻译的过程 1.预处理(进行宏替换) 2.编译(生成汇编) 3.汇编(生成机器可识别代码) 4.连接(生成可执行文件或库文件) 1.gcc/g介绍 1.什么…...

用Python创建一个键盘输入捕获程序

目录 简介 环境准备 安装依赖 项目结构 编写代码 1. 导入库 2. 定义回调函数 3. 启动键盘监听器 4. 整合代码 运行程序 结论 简介 在这篇博文中,我们将探索如何使用Python编写一个简单的键盘输入捕获程序。这个程序将实时捕获用户的键盘输入并在控制台中显示出来。…...

Mybatis中Like模糊查询三种处理方式

目录 Mybatis中Like模糊查询三种处理方式 1.通过单引号拼接${} 1)mapper接口 2)Mapper.xml 3)测试代码 4) 测试结果 2.通过concat()函数拼接(个人推荐使用这种) 1)mapper接口 2)Mapper.xml 3)测试代码 4) 测…...

STL值list

list容器 头文件&#xff1a;#include<list> - list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 - list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[]操作符 注&#xff1a;list使用迭代器访问数据时可以一步一步走自增自减&#xff08;即…...

结构体的内存对齐

对⻬规则&#xff1a; 1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 2.其他成员变量要对⻬到某个数字&#xff08;对⻬数&#xff09;的整数倍的地址处。 对⻬数编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。 但一些编译器下并没有默认对其数 3.结…...

Web 创建设计

Web 创建设计 Web 创建设计是一个涉及多个方面的过程,它包括网站的视觉设计、用户界面设计、用户体验设计、前端开发以及后端开发等。本文将详细介绍这些方面,并探讨如何创建一个既美观又实用的网站。 1. 视觉设计 视觉设计是网站创建设计的第一步,它决定了网站的外观和感…...

2024年9月16日历史上的今天大事件早读

1151年9月16日 南宋名将韩世忠逝世 1782年9月16日 清朝道光帝旻宁出生 1810年9月16日 墨西哥独立日 1856年9月16日 云南杜文秀领导回民起义 1880年9月16日 左宗棠创办的兰州机器织呢局开工 1908年9月16日 美国通用汽车公司成立 1919年9月16日 周恩来组织参加的觉悟社成立…...

记录工作中遇到的问题(持续更新~)

跨域问题&#xff08;待排查&#xff09; 2024-09-15 【前提】&#xff1a;前端配置了nignx转发&#xff0c;后端设置了跨域拦截&#xff0c;对http://xxxx做了允许跨域。但是访问http://xxx被拦截了&#xff0c;返回403 Forbidden。同样的配置放在另外一套部署的环境上就完全…...

六西格玛咨询:石油机械制造企业的成本控制与优化专家

一、石油机械制造行业现状及主要困扰 随着全球能源需求的日益增长&#xff0c;石油开采和生产设备需求不断增加&#xff0c;石油机械制造行业在过去数十年里得到了迅猛发展。然而&#xff0c;石油机械制造作为一个高度复杂且技术密集的行业&#xff0c;也面临着多重挑战。首先…...

Redis基础数据结构之 quicklist 和 listpack 源码解读

目录标题 quicklist为什么要设计 quicklist&#xff1f;quicklist特点ziplist quicklist数据结构 listpacklistpack是什么&#xff1f;listpack数据结构ziplist干啥去了&#xff1f;为什么有listpack?什么是ziplist的连锁更新&#xff1f;listpack 如何避免连锁更新&#xff1…...

深入理解Go语言的方法定义与使用

在Go语言编程中&#xff0c;方法&#xff08;Method&#xff09; 是附属于特定类型的函数&#xff0c;使我们能够以面向对象的方式编写代码。通过方法&#xff0c;我们可以更自然地对类型进行操作。本文将通过实际的代码示例&#xff0c;深入探讨Go语言中方法的定义与使用。 一…...

堆排序,快速排序

目录 1.堆排序 2.快速排序 1.hoare版本 2.挖坑法 3.前后指针法 注意点 1.堆排序 void Swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } void adjustdown(int* a, int n, int parent) {int child parent * 2 1;while (child < n){if (child 1 < n &&am…...

系统架构师---数据库设计的四个阶段

需求分析、概念设计、逻辑设计和物理设计是数据库设计中的四个关键阶段&#xff0c;每个阶段都有其独特的任务和目标&#xff0c;以下是对这四个阶段的区别的详细阐述&#xff1a; 需求分析阶段 目标&#xff1a;全面理解用户对数据库系统的需求&#xff0c;包括业务需求、信…...

MySQL_简介及安装、配置、卸载(超详细)

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…...

大数据处理技术:分布式文件系统HDFS

目录 1 实验名称&#xff1a; 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 HDFS的基本操作 5.2 HDFS-JAVA接口之读取文件 5.3 HDFS-JAVA接口之上传文件 5.4 HDFS-JAVA接口之删除文件 6 实验结果 6.1 HDFS的基本操作 6.2 HDFS-JAVA接口之读取文件 6.…...

组合数(模板)

1.杨辉三角求组合数&#xff0c;最高只能求几千内的组合数。 #include<bits/stdc.h> using namespace std; #define int long long int C[1005][1005]; signed main() {//求 1000 以内的组合数 for(int i0;i<1000;i){C[i][0]C[i][i]1;for(int j1;j<i;j){C[i][j]C[…...

时序数据库 TDengine 的入门体验和操作记录

时序数据库 TDengine 的学习和使用经验 什么是 TDengine &#xff1f;什么是时序数据 &#xff1f;使用RPM安装包部署默认的网络端口 TDengine 使用TDengine 命令行&#xff08;CLI&#xff09;taosBenchmark服务器内存需求删库跑路测试 使用体验文档纠错 什么是 TDengine &…...

Qt-QPushButton按钮类控件(22)

目录 描述 使用 给按钮添加图片 给按钮添加快捷键 添加槽函数 添加快捷键 添加组合键 开启鼠标的连发功能 描述 经过上面的一些介绍&#xff0c;我们也尝试的使用过了这个控件&#xff0c;接下来我们就要详细介绍这些比较重要的控件了 使用 给按钮添加图片 我们创建…...

镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态

当今企业数据管理日益规范化&#xff0c;数据应用系统随着数据类型与数量的增长不断细分&#xff0c;为了提升市场竞争力与技术实力&#xff0c;数据领域软件服务商与上下游伙伴的紧密对接与合作显得尤为重要。通过构建完善的生态系统&#xff0c;生态内企业间能够整合资源、共…...