李宏毅机器学习课程笔记01 | 1.Introduction of Machine/Deep Learning

笔记是在语雀上面做的,粘贴在CSND上可能存在格式错误

机器学习的本质就是借助机器寻找一个转换函数

根据函数的输出类型,可以将机器学习进行分类

  • regression 回归任务:函数输出时一个数值
  • classification 分类任务:人类设定好选项/类别,函数的输出时选项/类别中的一个
  • structured learning : 机器创造一些有结构的信息,比如文本、图

过拟合Overfitting:在训练资料上变好,在没有训练的资料上效果边差

问题1:机器怎么寻找一个转换函数

案例:Youtube频道订阅人数的预测

步骤1:写出一个带有未知参数的函数

猜测其转换函数应该长什么样,这个函数的猜测过程就需要用到领域知识。

猜测:未来点阅次数的函式F,是前一天的点阅次数,乘上w 再加上b

  • y y y 是我们要预测的人数
  • x 1 x_1 x1是这个频道前一天总共观看的人数

名词定义

Feature: Function裡面我们已知的信息 x 1 x_1 x1

Weight: 未知参数

Bias: 未知参数,偏差值

步骤2:从训练数据里定义Loss损失函数L(b,w)

函数的输入是b和w,函数的输出是输入某个特定的b和w,模型结果是是好还是不好L越大说明模型不好,L越小说明模型好
假设有一个损失函数L(0.5k,1) ,模型为y=b+wx1 => y=0.5k+1x1(k是千人的意思)
训练数据(本案例过去的订阅次数)输入到模型(函数)中,比如x输入1月1日订阅人数4.8k,计算得到模型预测的y(1月2日订阅人数)为5.3k,但实际只有4.9k

计算方法: 求取估测的值跟实际的值(Label) 之间的差距

本案例中e取绝对值的方法称为mean absolute error(MAE)平均绝对误差

e=(y-y预测)2称为mean square error(MSE)均方误差
如果y与y预测都是概率分布,可能选择的e为coss-entropy交叉熵

步骤3:optimization 优化 让Loss值最小

优化式:w*,b* = arg m i n w , b \underset {w,b}{min} w,bminL,寻找参数w和b让L最小,将其称为w和b。

本课程用到的Gradient Descent梯度下降方法

  1. 随机选取初始值:假设只有一个参数w,随机选择一个初始点w0

  2. 计算 ∂ L ∂ W ∣ w = w 0 {\frac{\partial L}{ \partial W}}|_{w=w^0} WLw=w0

  3. 根据微分(梯度)的方向,改变参数的值,优化的目标是降低损失值。

    1. 根据微分(梯度)的方向,改变参数的值–应该降低w还是提升w取值?

      ①如果计算出来斜率为负,说明该点w0 处损失值L呈下降趋势,因此增加w就可以获取到更低的L值
      ②同理如果计算出来斜率为正,说明损失值L呈上升趋势,因此降低w值可以获取到更低的L值
      w改变的跨度取决于斜率的大小与学习率的大小,移动跨度公式: η ∂ L ∂ W ∣ w = w 0 \eta{\frac{\partial L}{ \partial W}}|_{w=w^0} ηWLw=w0
      ①斜率大说梯度大损失值改变大可以大幅度降低w。
      η \eta η表示学习速率 ,该值自己设置,在机器学习中,自己设置的固定值称为hyperparameters超参数

  4. 新的w1 = w0- η ∂ L ∂ W ∣ w = w 0 \eta{\frac{\partial L}{ \partial W}}|_{w=w^0} ηWLw=w0 ,重复操作2和操作3不断更新w的取值

  5. 什么时候停下来

    1. 自己设置上限,这个上限也是一个超参数。比如设置更新w 1000次。
    2. 理想情况:微分值为0(极小值点),不会再更新

梯度下降存在问题:有可能陷入局部最小值,不能找到全局最小值 (事实上,局部最小值不算梯度下降真正的痛点)

问题:为什么损失值可以取负数?

估测的值y跟实际的值(Label) 之间的差距在本案例中是取绝对值,不可能有负数。这里图是随便画的和本案例无关

推广到多个参数 => 类似一个参数的做法

不断更新参数,直到找到一个 w 和 b

模型的修改

利用模型预测未知日期新的观看量,发现每个7天一个循环(周一到周四观看量高,周五到周六观看量低,周末观看量增加)

原来的模型只能依据前一天的值预测当天值(随便猜测y=b+wx1),根据上图我们发现其实观看人数呈周期变化,这里猜测采用上周值预测本周值可以得到更精准的模型(对问题有了更深的理解)。

修改新模型为 y = b + ∑ j = 1 7 w j x j y=b+{\sum_{j=1}^7}{w_j}{x_j} y=b+j=17wjxj,下标j表示根据前7天的观看人次,预测当天的观看人次=> 也可以考虑更多天的观看人次

相当于将一个特征值x1 (w同)增加到了7个特征值x 1~7

神经网络

线性模型

linear models =Feature*Weight + bias => 不是要一模一样,在模型修改中的 y = b + ∑ j = 1 7 w j x j y=b+{\sum_{j=1}^7}{w_j}{x_j} y=b+j=17wjxj也是线性模型

线性模型存在严重限制Model Bias(跟前面说的变量b bias意思不同):y只会随x1线性变化 ⇒ 解决方法:需要一个更复杂的、有未知参数的function

Sigmoid Function改写步骤1:写出一个带有未知参数的函数

所有Piecewise Linear Curves分段线性曲线( 定义:由多段锯齿状的线段所组成的线 )= 常数 + 一大堆蓝色function(每一段的蓝色function可能不一样,下述案例只是举例)

=> 可以用Piecewise Linear Curves逼近任何连续曲线

在案例Youtube频道订阅人数的预测中,即使x和y的关系很复杂,但我们感觉应该还是一条连续曲线,所以只要想办法写一个带有未知数的function(常数+一堆蓝色function )

并不知道如何写出这个function,使用Sigmid Function Curves来逼近这个function

Sigmoid Function(S形函数): y = c 1 1 + e − ( b + w x 1 ) y = c\frac{1}{{1+e^{-(b+wx_1)}}} y=c1+e(b+wx1)1

调整 w , b , c w,b,c w,b,c,可以得到各种不同的sigmiod来逼近”蓝色function“,通过求和,最终近似各种不同的连续Function

总结

  1. Piecewise Linear Curves逼近任何连续曲线,Piecewise Linear Curves= 常数 + 一大堆蓝色function,所以需要表示蓝色function(但是并不清楚怎么表示)。
  2. 使用Sigmid Function Curves(可以表示任何连续曲线)通过调整来$ w,b,c $逼近这个蓝色function。
案例理解

套入这个本课程的案例,模型可以表示为$ y=b+\sum_isigmoid(b_i+w_ix_1) $(当天的观看人数和前一天的有关)

调整 b 、 w 、 c b、w、c bwc可以制造不同的蓝色function,不同的蓝色function叠加起来就可以制造出不同的Piecewise Linear Curves ,不同的Piecewise Linear Curves可以去逼近不同的连续函数

前面我们优化过,其实当天的观看人数可以和前几天的有关,模型可以表示为 y = b + ∑ i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_isigmoid(b_i+\sum_jw_{ij}x_j) y=b+isigmoid(bi+jwijxj)i是不同的function函数数量,j表示当前日期的前j天, w i j w_{ij} wij第i个sigmoid给第j个特征的权重


下面将i和j带入实际例子理解一下,假设这个模型由三个不同的sigmoid function叠加生成(sigmoid的数量是自己决定的超参数),当天的预测人数与前三天的观看人数有关,也就是j和i分别取1、2、3

转化为线性代数的形式

  1. b i + ∑ j w i j x j b_i+\sum_jw_{ij}x_j bi+jwijxj等价成 r = b ⃗ + 矩阵 W ∗ x r = \vec{b} + 矩阵W*x r=b +矩阵Wx形式
  2. a = s i g m o i d ( r ) = 1 1 + e − r = σ ( r ) a = sigmoid(r)=\frac1{1+e^{-r}}=\sigma(r) a=sigmoid(r)=1+er1=σ(r),将a的表示简写为 σ ( r ) \sigma(r) σ(r)
  3. 模型线性代数的表达为 y = 常数 b + c T a = 常数 b + c T σ ( r ) = 常数 b + c T σ ( b ⃗ + 矩阵 W ∗ x ⃗ ) y=常数b+c^Ta=常数b+c^T\sigma(r)=常数b+c^T\sigma(\vec{b}+矩阵W*\vec{x}) y=常数b+cTa=常数b+cTσ(r)=常数b+cTσ(b +矩阵Wx )

公式中x为feature 未知参数为矩阵W、常数b、 b ⃗ \vec{b} b c T c^T cT,一般将矩阵W每一行/列抽出来与其他向量拼在一起,将所有的参数统称为 θ \theta θ.(包含 W, b ⃗ \vec{b} b ,b…)

第二步:定义Loss损失函数L( θ \theta θ)

因为所有的参数统称为 θ \theta θ,所以Loss表示为 L ( θ ) L(\theta) L(θ)

输入x求计算出来的 y = b + c T σ ( b ⃗ + 矩阵 W ∗ x ⃗ ) y=b+c^T\sigma(\vec{b}+矩阵W*\vec{x}) y=b+cTσ(b +矩阵Wx ),还是利用平均绝对误差法计算与真实label y ^ \hat{y} y^的误差绝对值 e = ∣ y − y ^ ∣ e=|y-\hat{y}| e=yy^,损失函数 L = 1 N ∑ n e n L=\frac{1}{N}\sum_n{e_n} L=N1nen

第三步:optimization优化 找到参数使L最小

  1. 选定初始参数值(向量) θ 0 \theta_0 θ0
  2. 对每个参数求偏导/微分,每个参数求偏导组成的矩阵叫做gradient梯度有些时候简写为` ∇ \nabla , ∇ L ( θ 0 ) \nabla{L}(\theta^0) L(θ0)
  3. 更新参数,直至设定的次数

批训练Batch training

实际上, 不会一次性将全部数据用于训练一个L,而是将全部资料分成n个batch(这里的n也是一个超参数)去训练n个L。

定义

  • 1 epoch 时期= 使用所有batch的L更新一次 θ \theta θ
  • 1 update/iteration = 每更新一次参数 θ \theta θ

比如有资料N=10000,每个batch划分的资料是100,那么一共有100个batch,一次epoch里会更新100次 θ \theta θ

问题:为什么要将全部资料分成一个一个batch

todo

模型的其他变形

使用Rectified Linear Unit线性整流单元

在上述案例中,我们是将蓝色function(hard sigmoid)近似为<font style="color:#DF2A3F;">(soft)sigmoid function</font>,其实这里还有其他的做法。

比如:每一个hard sigmoid可以使用两个线性整流单元Rectified Linear Unit(ReLU)叠加

图形上的表示为一个折线(两个水平线有一个转折点),公式表示为 c max ⁡ ( 0 , b + w x 1 ) c\max(0,b+wx_1) cmax(0,b+wx1),上述的模型 y = b + ∑ i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_isigmoid(b_i+\sum_jw_{ij}x_j) y=b+isigmoid(bi+jwijxj)可表示为 y = b + ∑ 2 i m a x ( 0 , b i + ∑ j w i j x j ) y=b+\sum_{2i}max(0,b_i+\sum_jw_{ij}x_j) y=b+2imax(0,bi+jwijxj),其中i表示函数的条数,1个hard sigmoid需要用2个relu函数叠加而成

:::tips
这里的sigmoid和Relu在机器学习中被称为Activation funtion激活函数

:::

问题:哪一个激活函数效果更好

todo

增加嵌套层数

生成a后,可以嵌套生成a’,这里的嵌套次数是一个超参数

问题:为什么可以这样做,这样做的原因是什么

这里感觉没讲明白

我的理解:从图像来讲a表示的是一个s型曲线(c只影响高度),将一个hard sigmoid逼近为一个sigmoid。那再做一次表示再逼近一次?

Deep Learning

以前的叫法:这些sigmoid或者Relu被叫做一个neuron神经元,很多neurl被叫做Neural Network神经网络

现在的叫法:每一排Neural叫做一个hidden layer,很多hidden layer被叫做Deep,这一套技术被叫做Deep Learning深度学习

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中&#xff0c;unsafe是一种允许绕过Rust的安全性保证的机制&#xff0c;用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是&#xff1a;unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作&#xff0c;从而可以进行性能优化&#xff0c;如手…

云备份项目--客户端编写

文章目录 10. 客户端工具类10.1 整体的类10.2 测试 11 客户端数据管理类11.1 整体的类11.2 测试 12. 客户端业务处理12.1 整体的类 完整的代码–gitee链接 10. 客户端工具类 10.1 整体的类 在windows平台下进行开发&#xff0c;Util.hpp实际上是客户端FileUtil.hpp和JsonUtil…

开发培训-慧集通(iPaaS)集成平台脚本开发Groovy基础培训视频

‌Groovy‌是一种基于Java虚拟机&#xff08;JVM&#xff09;的敏捷开发语言&#xff0c;结合了Python、Ruby和Smalltalk的许多强大特性。它旨在提高开发者的生产力&#xff0c;通过简洁、熟悉且易于学习的语法&#xff0c;Groovy能够与Java代码无缝集成&#xff0c;并提供强大…

蓝桥杯(Java)(ing)

Java前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

【2025最新计算机毕业设计】基于SpringBoot+Vue智慧养老医护系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

文献分享集:跨模态的最邻近查询RoarGraph

文章目录 1. \textbf{1. } 1. 导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. \textbf{2. } 2. 对 OOD \textbf{OOD} OOD负载的分析与验证 2.1. \textbf{2.1. } 2.1. 初步的背景及其验证 2.1.1. \textbf{2…

【读书笔记·VLSI电路设计方法解密】问题35:ASIC设计流程的两个主要方面是什么

毫无疑问,ASIC设计流程是一个复杂的系统,包含了许多商业CAD工具以及许多内部开发的工具或脚本。然而,无论流程中集成了多少工具或脚本,ASIC设计流程的核心目标始终可以归结为两个关键点:创建和检查。 创建过程指的是生成硬件的活动,例如RTL编码、逻辑综合以及布局布线。…

域上的多项式环,整除,相通,互质

例1.已知 (R,,x)为域&#xff0c;请选出正确的说法:(A)(R,,x)也是整区; ABCD (B)R中无零因子; C)R在x运算上满足第一、二、三指数律; (D)R只有平凡理想; (E)R只有平凡子环。 域的特征&#xff1a; 域中&#xff0c;非0元素的加法周期 思考、在模7整数环R,中&#xff0c;…

CSS3——3. 书写格式二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写&#xff1a;--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…

2街景两两对比程序,Trueskill计算评分代码,训练模型,预测街景

目录 0、Emeditor软件1、place pluse 2.0数据集2、街景主观感知两两对比程序3、Trueskill结果4、训练模型Resnet&#xff0c;Efficient&#xff0c;VIT等对比选择。5、模型预测6、其他数据处理/程序/指导&#xff01;&#xff01;&#xff01;优势&#xff1a;全网最全最细&am…

【React+TypeScript+DeepSeek】穿越时空对话机

引言 在这个数字化的时代&#xff0c;历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里&#xff0c;我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来&#xff1f;如何让历史学习变得生动有趣&#xff1f;带着这些思考&…

Golang学习历程【第五篇 复合数据类型:数组切片】

Golang学习历程【第五篇 复合数据类型&#xff1a;数组&切片】 1. 数组&#xff08;Array&#xff09;1.1 数组的定义1.2 初始化数组1.3 数据的循环遍历1.4 多维数组 2. 切片&#xff08;Slice&#xff09;2.1 切片声明、初始化2.2 基于数组创建切片2.2 切片的长度(len)和容…

ESP32自动下载电路分享

下面是一个ESP32系列或者ESP8266等电路的一个自动下载电路 在ESP32等模块需要烧写程序的时候&#xff0c;需要通过将EN引脚更改为低电平并将IO0引脚设置为低电平来切换到烧写模式。 有时候也会采用先将IO接到一个按键上&#xff0c;按住按键拉低IO0的同时重新上电的方式进入烧写…

【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析

文章目录 前言一、前提条件二、操作步骤2.1 准备云主机实例2.2 安装docker-compose2.3 使用docker-compose安装Superset2.3.1 克隆 Superset 的 GitHub 存储库2.3.2 通过 Docker Compose 启动 Superset 2.4 开通 OB Cloud 云数据库2.5 获取连接串2.6 使用 Superset 连接 OceanB…

联发科MTK6771/MT6771安卓核心板规格参数介绍

MT6771&#xff0c;也被称为Helio P60&#xff0c;是联发科技(MediaTek)推出的一款中央处理器(CPU)芯片&#xff0c;可运行 android9.0 操作系统的 4G AI 安卓智能模块。MT6771芯片采用了12纳米工艺制造&#xff0c;拥有八个ARM Cortex-A73和Cortex-A53核心&#xff0c;主频分别…

修复 ITunes 在 Windows 或 Mac 上不断崩溃的问题 [100% 有效]

对于 iDevice 用户来说&#xff0c;只能通过 iTunes 在 iDevice 和计算机之间传输文件的困境一直是一个紧迫的问题。所有 iPhone 用户可能都知道&#xff0c;iTunes 并不是一款高效的应用程序&#xff0c;有时性能会很差&#xff0c;例如在 iDevices 和计算机之间传输文件时不断…

【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密

目录 &#x1f354; GPT2的架构 &#x1f354; GPT2模型的细节 2.1 模型过程 2.2 GPT2工作细节探究 &#x1f354; 小结 学习目标 掌握GPT2的架构掌握GPT2的训练任务和模型细节 &#x1f354; GPT2的架构 从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块…

C语言 - 理解函数栈帧

一&#xff1a;概述 函数栈帧是函数调用过程中为管理和存储函数相关信息&#xff08;如局部变量、返回地址等&#xff09;而在栈上分配的一块内存区域。它是实现函数调用、递归和返回的关键机制。 二&#xff1a;栈帧的组成 一个典型的栈帧通常包含以下内容&#xff08;从高地…

windows终端conda activate命令行不显示环境名

问题&#xff1a; 始终不显示环境名 解决 首先需要配置conda的环境变量 确保conda --version能显示版本 然后对cmd进行初始化&#xff0c;如果用的是vscode中的终端&#xff0c;那需要对powershell进行初始化 Windows CMD conda init cmd.exeWindows PowerShell conda …

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313 Github地址&#xff1a;https://github.com/CraftJarvis/RAT 想象一下&#xff0c;一个人工智能助手可以像莎士比亚一样写作&#xff0c;像专家一样推理。这听起来很了不起&#xff0c;对吧&#xff1f;但是&#xff0…