李宏毅机器学习第一课

2023-09-22 09:25:26

机器学习就是让机器找一个函数f,这个函数f是通过计算机找出来的

如果参数少的话,我们可以使用暴搜,但是如果参数特别多的话,我们就要使用Gradient Descent

Regression (输出的是一个scalar数值)

Classification (在设定好的选项,两个或者多个,中做出选择)

Structured Learning (画一张图,写一段文字,让机器学会创造)

机器人寻找一个函数式子有三个步骤

一:function with unknow parameters

我们需要基于domain knowledge 来猜测确定一个函式,这个函数就是model

feature x 是我们已经知道的数据 , weight w、 bias b 是未知的参数 , label 是一个正确的数值

hyper parameters是我们在机器学习的时候,我们自己设置的参数

y = b + wx

二:Difine Loss

本质上也是一个function ,输入是上面b和w,输出的值代表输入的b和w好还是不好

label是真实的数据

我们根据y = b + wx来预测数据,和label之间的差距取一个绝对值

然后吧每一组数据都计算y^ ,然后加总求一下平均值

e = |y - y^| 如果用这种方式来计算的话, L is mean absolute err (MAE)

具体用哪一种函数来衡量这一组参数的好坏,取决于对问题的本质的理解

Error Surface 是等高线图,是尝试了多个w和b之后的结果

三:Optimization

是找一个最好的w和b,叫做w*和b* ,用到的方法是Gradient Descent,

假设现在只有一个参数

假设现在有两个参数,和之前一个参数其实一样的

上面三个步骤,是在做机器学习的训练

我们之后还需要做预测

训练的数据和预测的数据做一个对比,发现后者的loss比前者的loss大,这说明,我们在预测已经存在的数据的效果比较好,但是预测未知的数据效果比较差

我们需要修改模型,对模型的修改,往往来自于对问题本质的理解,我们修改了模型,让分别考虑前七天,前28天,前56天等等

model bias

上面的所有模型都是Linear model ,也许Linear模型过于简单,我们可以修改w,修改b,但是模型始终都是一条直线,我们始终无法实现红色的这种模型

Linear models本质是一条线性直线,但是很多问题不是Linear models,Linear models 有很大的限制,来自于model的限制叫做model bias

piecewise Linear Curves

我们可能是想要piecewise Linear Curves (分段线性曲线:一种由多个线性部分组成的曲线,每个部分都是线性的,但整体上可能不是线性的),我们其实可以通过下面的方式达到这种效果,我们可以是所有一系列 下面蓝色的function

再也许piecewise Linear 也无法满足我们模型的需求了,我们想要的是曲线,如下图所示

piecewise Linear Curves 足够多,可以逼近曲线,此时所有的 piecewise Linear 虽然是直线,但是已经达到了曲线的效果

那这个蓝色的function (Hard Sigmod)是什么呢? 如何把蓝色的function写出来呢?

其实就是用sigmoid函数来逼近蓝色的function

我们需要各种各样的蓝色的function,那我们可以通过调整b和w来实现

所以,我们需要一个红色的function,就可以通过下面的方式来实现,同时我们既然实现了红色的function,我们可以实现和红色类似的曲线(Continuous)

所以,我们解决了model bias的问题

如何计算这个式子呢?

用线性代数的表示方式表示如下:

输出=w1​⋅x1​+w2​⋅x2​+…+w8​⋅x8​+偏置项

最后总的表示一下

这里面,除了x是feature,其他都是未知的参数,我们使用线性代数的方式来统一表示

模型定义解决了,接下来是第二步定义Loss function,跟之前是一模一样的

第三部optimization ,也是一模一样

Batch 、 Epoch

我们在之前计算loss的时候,是把所有的data都参与进去,但是现在的话,我们是把data分成 L 笔,每一笔就是一个batch ,每个batch都计算loss,每次根据计算出来的loss然后对当前参数进行微分,一直把所有的batch完成,这就是一个epoch,一个epoch中会update N / B = L次参数

我们刚才是使用sigmoid函数来模拟蓝色的function ( hard sigmoid ),多个hard sigmoid 叠加, 从而实现红色的function

但是 这个蓝色的function ,也可以不用sigmoid函数模拟,我们可以使用 两个Rectified Linear来实现蓝色的function

Activation Function : Relu和sigmoid

ReLU和sigmoid那个好呢? 后续会讲解

我们使用1000个Relu函数之后,就可以实现很复杂的函数,效果会有改善

Deep Learning

深度学习,我们计算出来的a,我们再把a重新放入函数中,再计算很多次

Overfitting 

Better on training data, worse on unseen data

作业一的模型

self.layers = nn.Sequential(
            # 这个地方函数都是有参数的, 只是没有写出来
            # y[0] = weight[0][0] * x[0] + weight[0][1] * x[1] + ... + weight[0][input_dim - 1] * x[input_dim - 1] + bias[0]
            # y[1] = weight[1][0] * x[0] + weight[1][1] * x[1] + ... + weight[1][input_dim - 1] * x[input_dim - 1] + bias[1]
            # ...
            # y[15] = weight[15][0] * x[0] + weight[15][1] * x[1] + ... + weight[15][input_dim - 1] * x[input_dim - 1] + bias[15]
            # 类似于视频中YouTube观看人数预测,如果考虑七天,input_dim就是7,如果考虑28天,input_dim就是28
            nn.Linear(input_dim, 16),  # 这个是一个线性层
            # 对于每个输出维度y[i](其中 i是从0到15的索引),ReLU激活函数将执行以下操作:
            # y[i] = max(0, y[i])
            nn.ReLU(),  # 激活函数,我们可以对上面的结果进行Relu操作
            nn.Linear(16, 8),
            nn.ReLU(),
            # 具体地,线性映射通过一个权重矩阵和一个偏置项来实现,将每个输入维度与相应的权重相乘,然后将结果相加,再加上偏置项。
            nn.Linear(8, 1)  # 因为我们最终是要预测一个数字结果,所以这个地方要是一维的
            # 视频上面预测Youtube人数,就是nn.Linear(3,1),视频上面直接就是输出的一维结果
        )
nn.Linear(input_dim, 16),为什么要输出16维度的结果?

input_dim就对应视频中的考虑7天,28天,56天等等

16 代表输出的是一个16维度的结果  ,这个就是我们自己设置了

Linear 里面有很多的weight参数和一个bias参数,这些我们看不到,但是pytroch帮我们做好了,机器学习就是在找这些参数。

chatgpt回复:是的,你可以将模型中的16更改为32,以增加隐藏层的维度。这将增加模型的复杂性,并有可能提高其性能,尤其是在处理更复杂的数据或任务时。但请注意,增加隐藏层维度也会增加模型的计算复杂度,因此你可能需要更多的数据来训练模型,以避免过拟合。

你可以像这样更改模型的隐藏层维度:

self.layers = nn.Sequential( 
  nn.Linear(input_dim, 32), # 将16更改为32 
  nn.ReLU(), 
  nn.Linear(32, 8), # 这里也需要相应地更改输入和输出维度 
  nn.ReLU(),
  nn.Linear(8, 1)
 )

记得根据你的数据和任务来调整模型的参数,以获得最佳性能。如果你的数据集较小,你还可以考虑使用正则化技巧来防止过拟合。

隐藏层的维度通常是根据你的具体问题和数据来确定的,而不是一个固定的数值。选择隐藏层维度通常是深度学习模型设计中的一个超参数,需要进行调优

Relu函数起到了什么作用?

后面就一个ReLU函数,引入非线性,这一个Relu函数,能作用于Linear的多个输出,对每个维度的输出都做sigmoid,也就是说,每个维度上面都会进行非线形的操作。

nn.Linear(16, 8)  和 nn.ReLU()的作用?

深度学习,deep learning ,能让效果变好,为什么?不要问,反正能变好

nn.Linear(8, 1) 的作用?

我们最后是要输出一个发病率数字,所以需要把最后的多个维度的输入变成一个维度的输出

更多推荐

大模型从入门到应用——LangChain:代理(Agents)-[工具包(Toolkit)]

分类目录:《大模型从入门到应用》总目录LangChain系列文章:基础知识快速入门安装与环境配置链(Chains)、代理(Agent:)和记忆(Memory)快速开发聊天模型模型(Models)基础知识大型语言模型(LLMs)基础知识LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(HumanInpu

数据结构——红黑树

1.什么是红黑树?红黑树是一种特定类型的二叉树,用于组织数据。它是一种平衡二叉查找树(AVL树)的变体,每个结点都带有颜色属性(红色或黑色)。在红黑树中,从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。具体来说,红黑树满足以下性质:每个结点要么是红色,要么是黑色。根结点是黑色。每个叶结点(NIL或空结点)是黑色

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。例如,人就是一个抽象概念,即人类,但是程序员小张就是人类中具体的一个实例,即

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管理、安全运行管理等方面也提出了更高的监管要求。二、方案介绍TSINGSEE青犀视频围绕AI算法

网络安全(黑客)自学笔记

前言作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。计算机各领域的知识水平决定你渗透水平的上限。【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞利用工具就会比别人的好用;【2】比如:你数据库知识水平高,那你在进行SQL注入攻击的时候,你就可以写出更多更好的SQL注入语句

【算法】算法设计与分析 课程笔记 第一章 概述

第一章算法概述算法的性质算法的四个性质:输入、输出、确定性和有穷性。算法的时间复杂度1.常见的时间复杂度常数阶O(1)对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n^2)立方阶O(n^3)k次方阶O(n^k)指数阶O(2^n)注:上面的logn均代表以2为底的对数。2.时间复杂度排序常见的算法

【web开发】10、数据统计(echarts)--柱状图、折线图、饼图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、echarts是什么?二、使用步骤1.引入CDN2.设置高度&宽度3.后端4.前端前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础

CAD丢失mfc140u.dll怎么办,mfc140u.dll丢失的解决方法分享

许多用户在运行AutoCAD时可能会遇到一个问题:丢失mfc140u.dll文件,导致软件无法正常运行。本文将详细介绍mfc140u.dll文件的作用,以及如何解决丢失mfc140u.dll文件的问题。一、mfc140u.dll文件的作用MFC(MicrosoftFoundationClass)是一个由微软公司开发的C

量子计算基础知识—Part1

1.什么是量子计算机?量子计算机是基于量子力学原理构建的机器,采用了一种新的方法来处理信息,从而使其具有超强的功能。量子计算机使用Qubits处理信息。2.什么是量子系统?一个量子系统指的是由量子力学规则描述和控制的物理系统。在量子力学中,物理系统的状态不再是经典物理中的确定性值,而是由一个称为波函数的数学对象描述的概

接入国家能源平台MQTT应用案例

一、项目介绍随着国家对节能环保措施的力度不断加大,基于物联网技术搭建的国家能源平台在国家相关部门的建设下逐渐成熟。致力于利用实际能耗数据建立能效仿真模型,通过实时寻优运算,获得当前的最优化运行策略,并将控制指令下发控制系统,快速帮助能源全面实现自身能源管理的信息化、流程化、可视化和可操作性。二、项目所面临的问题1.常规

Mac电脑系统怎么样才能干干净净地卸载应用程序?

Mac系统怎么样才能干干净净地卸载应用程序,不留下隐私数据和用户信息呢?如果有方法的话,那么该方法对于Mac电脑小白是否友好呢?CleanMyMac就是一款用于清理Mac系统下应用程序的一款清理工具,其内置了应用程序的安全卸载功能,保证了软件的彻底卸载。下面小编使用CleanMyMacX版本,带大家看看如何使用它干净地

热文推荐