02.机器学习原理(复习)

目录

  • 机器学习的本质
  • 机器学习的类型
    • Regression/回归
    • Classification/分类
    • Structured Learning/结构化学习
  • ML的三板斧
    • 设定范围
    • 设定标准
      • 监督学习
      • 半监督学习
      • 其他
    • 达成目标
    • 小结
      • 达成目标
      • 设定标准
      • 设定范围

部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索

这节课主要是复习,但是里面有些结论可以加深对ML和DL的理解。

机器学习的本质

让机器自动寻找 计算出一个函数,这个函数能完成我们既定的目标。例如:
ChatGPT是找一个函数能够完成下一个字/词的预测。
在这里插入图片描述

Midjourney是找一个函数根据文字内容生成对应图片。(PS:中间有一节课是用ChatGPT+Midjourney玩虚拟冒险游戏,演示为主)
在这里插入图片描述
AlphaGo是找一个函数根据当前棋局预测下一步落子位置。
在这里插入图片描述

机器学习的类型

Regression/回归

函数输出为一个数值。典型的任务有NG的房价预测、这个前导课中的PM2.5预测等。
在这里插入图片描述

Classification/分类

函数输出为一个类别。典型任务有,垃圾邮件识别、银行贷款审批、手写数字识别等。
在这里插入图片描述

Structured Learning/结构化学习

函数的输出是有结构的物件(影像、图片、文字、声音等)
这个类别不属于上面两类传统机器学习的分类,这个类别更加复杂。Structured Learning发展到今天也有了更潮的称呼:Generative Learning生成式学习。Structured Learning在早期李宏毅的机器学习课程中是单独的一个部分。

对于ChatGPT而言,在微观上,每一次预测下一个字/词,相当于在做分类任务,只不过类别就是我们的词库中所有的字/词;在宏观上,当我们使用ChatGPT的时候,他一次会输出一段文字,又可以看成是生成式的学习。

结论:ChatGPT是把生成式学习拆解成多个分类问题来解决。

ML的三板斧

看到这里又梦回20年刷到机器学习课程的时候,可惜一直没有玩过宝可梦游戏,不然理解会更加深刻。
不过这次回顾讲解更加精简明的描述了机器学习找到梦中情function的过程。

前提
开始之前要决定找什么样的函数。这是一个与技术无关的问题,就是根据需要定下来函数是属于上面三种类型的哪一类,下面以回归为例,吃图片预测其战斗力数值。
在这里插入图片描述

设定范围

设定范围就是选定Model(候选函数的集合)。
DL中的各种模型结构(CNN,RNN,Transformer等)或者各种决策树、感知机等都是各种不同的候选函数的集合。例如我们选定某个结构后,使用四种不同的参数,对于相同的输入,就可以得到不同的结果:
在这里插入图片描述
当然参数有无数种可能,我们把某个DL模型的不同参数所形成的函数集合记为: H \mathcal{H} H
这里涉及到函数空间等原理,需要了解的可以看之前的课程。

设定标准

设定Loss(评价函数好坏的标准),以宝可梦战斗力预测任务来举例。现假设有一个函数 f 1 f_1 f1,对三只宝可梦进行预测结果如下:
在这里插入图片描述
然后根据数据标记方式不同,又分两种情况进行讨论:

监督学习

此时有专业人员对宝可梦实际战斗力进行标注:
在这里插入图片描述
此时我们可以对函数 f 1 f_1 f1计算结果的正确程度进行计算Loss:
L ( f 1 ) = ∣ 103 − 101 ∣ + ∣ 17 − 18 ∣ + ∣ 212 − 200 ∣ = 2 + 1 + 12 = 15 L(f_1)=|{\color{Blue}103}-101|+|{\color{Blue}17}-18|+|{\color{Blue}212}-200|=2+1+12=15 L(f1)=103101∣+1718∣+212200∣=2+1+12=15
PS: L L L称为损失函数,上面宝可梦的战斗力称为训练数据。这里为了简单就直接算,实操会更加复杂,要根据具体训练数据来拟定损失函数,例如是否要加正则项、是否对差值进行平方等。

半监督学习

此时只有部分宝可梦的战斗力得到标注,例如下面只有一只有标注,其他没有:
在这里插入图片描述
对于有标注的数据,可以按监督学习的方法进行计算Loss,对于其他可以自己制定相应规则,例如:规定外形相似的宝可梦战斗力应该一致。
但是 f 1 f_1 f1函数对于两个皮卡丘的输出如下:
在这里插入图片描述
二者差异为81,因此可以得到 f 1 f_1 f1函数的Loss为:
L ( f 1 ) = ∣ 103 − 101 ∣ + 98 − 17 = 83 L(f_1)=|{\color{Blue}103}-101|+98-17=83 L(f1)=103101∣+9817=83
当然规则是人定的,也可以定相同颜色的宝可梦战斗力一样。。。
如何定规则?当然也是要根据训练数据来。

其他

当然还有其他中训练方式,例如:强化学习,无监督学习

达成目标

找到最优的函数(Optimization),自觉上,当然是Loss最小的那个函数就是最优:
f ∗ = a r g min ⁡ f ∈ H L ( f ) f^*=arg\min_{f\in\mathcal{H}}L(f) f=argfHminL(f)
例如:
在这里插入图片描述
当然具体实作中找最优函数可以看做求Loss最小值的过程,由于Loss函数通常是多项式,那么找到多项式最小值常用的方法就是GD,而对于DL而言,BP就是正解。当然还有类似遗传算法等其他方法可以找到最优函数。

小结

步骤含义方法
设定范围选定候选函数的集合DL(CNN, RNN, Transformer), Decision Tree, Perceptron, etc.
设定标准选定评价函数好坏的标准Supervised Learning, Semi-supervised Learning, Unsupervised Learning, RL, etc.
达成目标找到最优的函数Gradient Descent(Adam, AdamW…), Back Propagation, Genetic Algorithm, etc.

好好看上面的表格可以更加深入理解很多概念,例如:RL会取代DL,这个说法是不正确的,两个方法属于不同的步骤,谈不上谁取代谁。
还可以在写论文的时候从不同的出发点来寻找创新idea。
这里有把三个步骤从后往前重新分析了一遍。

达成目标

在这里插入图片描述
可以把大大的长方形看做是一个函数,这个函数吃候选函数集合 H \mathcal{H} H和评定函数 L L L得到一个函数 f ∗ f^* f,该函数属于 H \mathcal{H} H,并且可以使得 L L L的值越小越好(这里不是最小,因为可能是局部最小值)
当然,这个长方形函数比较复杂,需要我们预先设定一些超参数(Hyperparameter):Learning Rate、Batch Size、How to Init。当然我们也希望长方形函数的鲁棒性很强,对这些超参数不这么敏感。

设定标准

在这里插入图片描述
从训练数据中根据评定函数 L L L找出 f ∗ f^* f,当然在训练数据上表现比较好的 f ∗ f^* f在测试数据上表现不一定好,这可能是因为训练数据与测试数据不是相同分布的。
我们可以在训练阶段在评定函数 L L L中加入额外考量:正则化。(就好比平时练习使用难度较高的卷子,考试题目虽然没有见过也大概率拿高分)

设定范围

为什么要设定候选函数的范围,而不把覆盖所有向量空间的函数作为我们的范围呢?因为有些函数训练结果好但测试效果差(过拟合)。
在这里插入图片描述
因此我们要划定范围将那些容易过拟合的函数排除在外。当我们设定范围太大就会将过拟合的函数包含进来(最大椭圆),如果设定范围太小,又会将正好拟合的函数排除在外(最小椭圆)。
主要还是根据数据量来看,数据量大,范围可以大一些,例如在图像上的研究趋势看,早期数据量小,因此采用CNN结构,后来数据量变大后,就开始引入Transformer结构,Transformer结构的范围正是要比CNN结构的范围大。

还有一些特殊的方法,例如下图中残差网络,虽然这个结构包含的范围可能不咋地,但是这个结构很容易找出 f ∗ f^* f
在这里插入图片描述
同理,在损失函数上,使用交叉熵比使用平方差的方式要更容易达成目标。

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

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

相关文章

10.18作业

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

【网络安全】防火墙技术

防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 如果你对…

【字符串匹配算法】KMP、哈希

STL O(mn) C中提供子串查询的函数可以使用std::string类的相关方法来实现。 find函数:可以查找一个子串在原字符串中的第一个出现位置。它返回子串的起始索引,如果找不到则返回std::string::npos。substr函数:可以提取原字符串中的一个子串…

Jmeter性能测试(压力测试)

1.先保存 2.添加请求(即添加一个线程组) 3.添加取样器(在线程组下面添加一个http请求) 场景1:模拟半小时之内1000个用户访问服务器资源,要求平均响应时间在3000毫秒内,且错误率为0&#xff0…

Kafka SASL认证授权(六)全方位性能测试

Kafka SASL认证授权(六)全方位性能测试。 官网地址:https://kafka.apache.org/ 一、场景 线上已经有kafka集群,服务运行稳定。但是因为产品升级,需要对kakfa做安全测试,也就是权限验证。 但是增加权限验证,会不会对性能有影响呢?影响大吗?不知道呀! 因此,本文就此…

Qt/C++开源作品45-CPU内存显示控件/和任务管理器一致

一、前言 在很多软件上,会在某个部位显示一个部件,专门显示当前的CPU使用率以及内存占用,方便用户判断当前程序或者当前环境中是否还有剩余的CPU和内存留给程序使用,在不用打开任务管理器或者资源查看器的时候直接得知当前系统的…

ORACLE内存结构

内存体系结构 ​​​​​​​ 目录 内存体系结构 2.1自动内存管理 2.2自动SGA内存管理 2.3手动SGA内存管理 2.3.1数据库缓冲区 2.3.1.1保留池 2.3.1.2回收池 2.3.2共享池 2.3.2.1SQL查询结果和函数查询结果 2.3.2.2库缓存 2.3.2.3数据字典缓存 2.3.3大池 2.3.4 …

20-数据结构-内部排序-插入排序

简介:插入排序基本有两步,先是通过比较,得到插入位置,随后移动给需要插入的位置处腾空,最后进行值的插入。 目录 一、直接插入排序 1.1简介: 1.2代码 二、折半插入排序 2.1简介: 2.2代码…

LXC、Docker、 Kubernetes 容器以及Hypervisor的区别

LXC、Docker、 Kubernetes 容器以及Hypervisor的区别 SaaS: Software-as-a-Service(软件即服务) PaaS: Platform-as-a-Service(平台即服务) IaaS: Infrastructure-as-a-Service(基础设施即服务) 1、Docke…

如何使用 Disco 将黑白照片彩色化

Disco 是一个基于视觉语言模型(LLM)的图像彩色化工具。它使用 LLM 来生成彩色图像,这些图像与原始黑白图像相似。 本文将介绍如何使用 Disco 将黑白照片彩色化。 使用 Disco 提供了一个简单的在线演示,可以用于测试模型。 访问…

SpringMVC之国际化上传下载

spring项目中的国际化 1&#xff09;提供中英两种资源文件 i18n_en_US.properties i18n_zh_CN.properties 2&#xff09;配置国际化资源文件&#xff08;在spring配置文件中添加&#xff0c;例如spring-mvc.xml&#xff09; <bean id"messageSource" class&quo…

从头开始机器学习:神经网络

一、说明 如果你还没有做过逻辑回归&#xff0c;你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。 二、神经网络简介 神经网络是一个神经元网络。这些神经元是逻辑回归函数&#xff0c;它们被链接在一起形成一个网络…

使用REPLACE将数据库某一列字段进行字符串操作

REPLACE可以将表里的数据进行替换操作 如&#xff1a;需要把这一列里面的 # 去掉&#xff0c;经过测试&#xff0c;无论是开头、句中还是结尾都可以删除 UPDATE 表名 SET 字段名 REPLACE(字段名 , #, )

C#上位机序列9: 批量读写+事件广播

1. 读取配置文件及创建变量信息&#xff08;点位名称&#xff0c;地址&#xff0c;数据类型&#xff08;bool/short/int/float/long/double&#xff09;&#xff09; 2. 读任务&写任务,数据有变化时事件广播通知 using HslCommunication; using HslCommunication.Core; usi…

IOday7

A进程 #include <head.h> int main(int argc, const char *argv[]) {pid_t cpidfork();if(cpid>0)//父进程向管道文件2写{ int wfd;if((wfdopen("./myfifo2",O_WRONLY))-1){ERR_MSG("open");return -1;} char buf[128]"";while(1){bze…

进阶JAVA篇-异常处理:解读与解决编程中的意外情况

目录 1.0 什么是异常&#xff1f; 1.1 异常主要分为两个情况分别是运行时异常、编译时异常。 2.0 怎么处理异常呢&#xff1f; 2.1 捕获异常&#xff08;Catch Exception&#xff09; 2.2 声明异常&#xff08;Declare Exception&#xff09; 3.0 自定义异常 3.1 如何定义异常类…

Linux:进程控制

目录 一、进程创建 写时拷贝 二、进程终止 echo $? 如何终止进程 _exit与exit 三、进程等待 进程等待的必要性 进程等待的操作 wait waitpid status 异常退出情况 status相关宏 options 四、进程程序替换 1、关于进程程序替换 2、如何进行进程程序替换 程序…

【深度学习】【Opencv】【GPU】python/C++调用onnx模型【基础】

【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本…

vue 自定义指令

vue 自定义指令 指令 和mounted 是什么关系 &#xff1f; **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\04-自定…

反转链表(java)

大家好我是苏麟今天说一说链表常见的简单题目 . BM1 反转链表 牛客BM1 反转链表 : 描述 : 给定一个单链表的头结点(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 分析 : …