大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning

  • Goal of Machine Learning
  • Linear Classification
  • Solution
  • Numerical output example: linear regression
  • Stochastic Gradient Descent
  • Matrix Acceleration

Goal of Machine Learning 机器学习的目标

假设现在有一组数据 x i , y i {x_i,y_i} xi,yi,其中 x c ∈ R d x_c \in \R^d xcRd,d指的是特征数,而 y c ∈ R y_c \in \R ycR标签值(label)

上述数据被称为训练集(training data set)。而机器学习的目的就是训练一个模型(model)(或者假说) h h h在某种条件下最贴近该训练集数据。

现在假设出现了一个新的点 x ∗ ∈ R d x* \in \R^d xRd,我们需要用我们的模型去预测其标签值 y ∗ y* y,这个值 x ∗ x* x就被称作检验数据(test data),模型检测标签值的准确程度被叫做泛化误差(generalization error)

Linear Classification 线性分类

上述情景的一个经典例子是线性分类。

条件:在平面上有一堆红色的点和黑色的点。

目标:找到一条直线,使得所有红色的点都在直线一侧,而黑色点都在直线另一侧。

我们保证这个直线是存在的,如何找到满足条件的直线呢?

我们将点到直线的垂直距离记为模型的标签值,并且希望所有红色点的垂直距离为正,而黑色点的垂直距离为负,这样他们就一定分布在直线的异侧。

因此我们得到训练集:
( x 1 , 0 ) , ( x 2 , 1 ) , ⋯ (x_1,0),(x2,1),\dotsb (x1,0),(x2,1),
其中标签值为0表示红色点,为1表示黑色点。

目标:我们将所有的 x i x_i xi丢到模型里面,模型给出的标签值可以和训练集的标签值尽量一致。

那么我们如何找到这个模型 h h h呢?

Solution 解决办法

平面,直线,你想到了我们之前学过的什么东西?没错,线性规划。

所有的红色点和黑色点都对应一个约束条件,而我们的目标是寻找可行域。

实际上我们会有无数条直线满足上面的约束条件,我们如何定义其中最好的一条决定了我们如何训练模型。我们给出的答案是,有**最大边界(maximum margin)**的一条直线。也就是说,所有的点到直线的距离都大于一个常数 σ \sigma σ,这个 σ \sigma σ就是边界。

上面的最优化模型也有一个名称:支持向量机(support vector machine,SVM)
我们使用二分搜索来确定 σ \sigma σ,而对于每一个 σ \sigma σ我们解一个线性规划即可。

Numerical output example: linear regression 数值输出:线性回归

在更多的情况下,我们需要返回一个预测值,一个常见的例子就是线性回归。
我们定义了一系列训练集 ( x i , y i ) (x_i,y_i) (xi,yi)和损失函数 L ( h ) = 1 n Σ ( < x i , h > − y i ) 2 L(h) = \frac{1}{n}\Sigma(<x_i,h> - y_i)^2 L(h)=n1Σ(<xi,h>yi)2
模型生成之后我们给出测试集 x ∗ x* x,模型给出预测值 y ∗ y* y。损失函数计算预测值和实际值的垂直距离,使得模型可以持续优化。

如何找到线性回归的模型呢?前面我们提到的梯度下降是一个好方法。

我们回忆一下梯度下降的方法:

  1. 选择初始点 h 0 h_0 h0,步数 T T T和学习率 η \eta η
  2. 在每步迭代中,计算当前点的梯度,并且迭代点 h i + 1 = h i − η ∇ L ( h ) h_{i+1} = h_i -\eta \nabla L(h) hi+1=hiηL(h)
  3. 最后输出 1 T Σ h i \frac{1}{T}\Sigma h_i T1Σhi
    (或者直接输出 h T h_T hT)

我们发现 L ( h ) L(h) L(h)具有一个很好的性质:由于 x 2 x^2 x2是凸函数,因此其线性组合也是凸的。所以我们可以在这个问题中使用梯度下降法。

另外一个问题是: L ( h ) L(h) L(h)的梯度是什么?

要解决这个问题,我们需要关注损失函数 f i f_i fi的梯度:

∇ f i = ( < h , x i > − y i ) 2 \nabla f_i = (<h,x_i>-y_i)^2 fi=(<h,xi>yi)2

由于链式法则,令 z = < h , x i > − y i z = <h,x_i>-y_i z=<h,xi>yi,那么有
d f i d h j = d f i d z d z d h d f i d z = 2 z d z d h = x i , j \frac{df_i}{dh_j} = \frac{df_i}{dz}\frac{dz}{dh} \\ \frac{df_i}{dz} = 2z \\ \frac{dz}{dh} = x_{i,j} dhjdfi=dzdfidhdzdzdfi=2zdhdz=xi,j
因此
d f i d h = 2 ( < h j , x i , j > − y i ) x i , j \frac{df_i}{dh} = 2 (<h_j,x_{i,j}>-y_i)x_{i,j} dhdfi=2(<hj,xi,j>yi)xi,j
因此求和一下就得出损失函数的梯度:
∇ L ( h ) = 2 n < ( Σ < h 1 , x t , 1 > − y t ) x t , 1 , Σ ( < h 2 , x t , 2 > − y t ) x t , 2 , ⋯ > \nabla L(h) = \frac{2}{n} < (\Sigma<h_1,x_{t,1}>-y_t)x_{t,1},\Sigma (<h_2,x_{t,2}>-y_t)x_{t,2},\dots> L(h)=n2<(Σ<h1,xt,1>yt)xt,1,Σ(<h2,xt,2>yt)xt,2,>

Overfitting 过拟合

过拟合是机器学习中一种另外的状况,这种情况下模型为了贴合数据而变得十分奇怪且复杂。这一样也是我们不希望看到的。如下图所示:

过拟合

也就是说,我们希望我们的模型要好,而且要直观简单,要有鲁棒性。我们有什么方法来保证鲁棒性吗?

一种简单的方法是,控制模型 h h h范数。由前一小节我们看到,预测结果由 h i x t , i h_ix_{t,i} hixt,i控制,也就是说当 h i h_i hi的范数很大时,单个数据的变化就会对整体造成很大的影响,这是我们不希望看到的。反过来看,控制模型的范数也就减小了单个数据的整体影响,提高了鲁棒性。

Ridge Regression 岭回归算法

岭回归算法在原来 L ( h ) L(h) L(h)的基础上添加了一项正则项(regularization),使得新的损失函数变为:
L ( h ) = 1 n Σ ( < h , x > − y ) 2 + λ ∣ ∣ h ∣ ∣ 2 L(h) = \frac{1}{n}\Sigma(<h,x>-y)^2 + \lambda||h||^2 L(h)=n1Σ(<h,x>y)2+λ∣∣h2
在这个损失函数中,我们将模型的范数也加入考虑,在欠拟合和过拟合之间做出了平衡。

由于两个平方项都是凸的,因此新的损失函数很明显也是凸的。

Stochastic Gradient Descent SGD 随机梯度下降

另外一个问题在于,当训练数据量很大的时候,损失函数的计算就会变得十分缓慢,这种情况应该怎么办呢?

如果我们随机取一个样本点,并且用这个样本点直接代表 L ( h ) L(h) L(h),我们的计算量就只有这些点了,对吧?其实这种方法是有一定道理的,因为
E ( ∇ L ′ ) = 1 n ∑ f i = ∇ L ( h ) E(\nabla L') = \frac{1}{n}\sum f_i = \nabla L(h) E(L)=n1fi=L(h)
所以这种方法是无偏的。

假设我们随机采样 b b b个点(这个值被称为批大小(batch size)),并且定义损失函数为
∇ ^ L ( h ) = 1 b ∑ i f i \widehat{\nabla} L(h)=\frac{1}{b}\sum_i f_i L(h)=b1ifi

也就是说,当 b = n b=n b=n时,这种方法是GD(梯度下降法);当 b = 1 b=1 b=1时,这种方法是SGD(随机梯度下降法)。

随机取一个训练样本是有风险的,估计出来的模型可能是不准确的,而且一般需要更多的迭代步骤。但是如果 n n n数量过大,这种开销比起每步计算 n n n次要好上很多。这是一个方差和时间的权衡。

Matrix Acceleration 矩阵加速计算

我们将变量看作一个矩阵 x 1 x 2 . . . x n \begin {matrix} \bold{x_1}\\ \bold{x_2}\\ ...\\ \bold{x_n} \end{matrix} x1x2...xn,这是一个 n × d n\times d n×d矩阵,然后和 d × 1 d \times 1 d×1模型向量 h 相乘 \bold{h}相乘 h相乘得到最终结果 y \bold{y} y,我们要计算 min ⁡ ∣ ∣ X ⋅ h − y ∣ ∣ 2 \min ||\bold{X}\cdot \bold{h}-\bold{y}||^2 min∣∣Xhy2

其实上述矩阵有一个近似解 X T X − 1 y \bold{X^TX}^{-1}\bold{y} XTX1y,但是在 n n n非常大的时候,求矩阵的转置和逆一样非常的麻烦,怎么办呢?

我们可以先找一个 b × n ( b < < n ) b\times n(b<<n) b×n(b<<n)的稀疏矩阵 S \bold{S} S,然后用 S X \bold{SX} SX代替原来的 X \bold{X} X,这样我们就把前面的矩阵变成了一个小得多的 b × d b\times d b×d矩阵,这个小矩阵求转置和逆就轻松多了。

这种方法和SGD有异曲同工之妙,矩阵 S \bold{S} S类似于一种随机采样矩阵,计算出来的 b × d b\times d b×d矩阵就好像从 n n n个样本点中采样 b b b个。

Feedforward Neural Network 前馈神经网络

前馈神经网络是一种最简单的神经网络。他的结构是一个分层图,每层有节点,每层节点和下一层的节点之间有加权的边连接。如下图所示:

神经网络节点

对于每层的节点,我们将所有的输入边加权作为总的输入,然后处理则使用一个非线性的函数得出本节点的输出,这个函数被称为激活函数。激活函数在不同的情况下一般不同,但是有一种比较常见的函数叫做整流线性单元(ReLU)函数,另外一种函数叫做Sigmoid函数。

OK,根据上面的说法,神经网络包含输入,加权,和每个节点的处理。关于输入和处理我们都给出了具体的例子,但是我们仅仅通过SGD减少了计算的样本数量,并没有实际的加快梯度的计算。这就是我们下节课要介绍的方法:反向传播(Back Propagation)

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

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

相关文章

DB-GPT V0.6.3 版本更新:支持 SiliconCloud 模型、新增知识处理工作流等

DB-GPT V0.6.3版本现已上线&#xff0c;快速预览新特性: 新特性 1. 支持 SiliconCloud 模型&#xff0c;让用户体验多模型的管理能力 如何使用&#xff1a; 修改环境变量文件.env&#xff0c;配置SiliconCloud模型 # 使用 SiliconCloud 的代理模型 LLM_MODELsiliconflow_p…

ChromeOS 131 版本更新

ChromeOS 131 版本更新 1. ChromeOS Flex 自动注册 在 ChromeOS 131 中&#xff0c;ChromeOS Flex 的自动注册功能现已允许大规模部署 ChromeOS Flex 设备。与 ChromeOS 零接触注册类似&#xff0c;自动注册将通过组织管理员创建的注册令牌嵌入到 ChromeOS Flex 镜像中。这将…

你好Python

初识Python Python的起源 1989年&#xff0c;为了打发圣诞节假期&#xff0c;Gudio van Rossum吉多 范罗苏姆&#xff08;龟叔&#xff09;决心开发一个新的解释程序&#xff08;Python雏形&#xff09; 1991年&#xff0c;第一个Python解释器诞生 Python这个名字&#xff…

【Linux系统编程】:信号(2)——信号的产生

1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号&#xff0c;比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍&#xff0c;本文介绍下面三种. 2. 调用函数产生信号 2.1 k…

BlueLM:以2.6万亿token铸就7B参数超大规模语言模型

一、介绍 BlueLM 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型&#xff0c;本次发布包含 7B 基础 (base) 模型和 7B 对话 (chat) 模型&#xff0c;同时我们开源了支持 32K 的长文本基础 (base) 模型和对话 (chat) 模型。 更大量的优质数据 &#xff1a;高质量语料…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

linux-----常用指令

文件和目录操作指令 ls&#xff08;list&#xff09;指令 功能&#xff1a;用于列出目录的内容&#xff0c;包括文件和子目录。示例&#xff1a; ls&#xff1a;列出当前目录下的所有非隐藏文件和目录。例如&#xff0c;在一个包含文件file1.txt、file2.txt和目录dir1的目录中&…

海外外卖APP开发新方向:基于同城外卖系统源码的多元化解决方案

时下&#xff0c;基于同城外卖系统源码的多元化解决方案&#xff0c;正成为海外外卖APP开发的新方向&#xff0c;推动着全球外卖市场的变革。本篇文章&#xff0c;小编将为大家讲述外卖APP开发的新方案。 一、同城外卖系统源码&#xff1a;创新与灵活的基础 同城外卖系统源码…

GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录

文章目录 论文背景Spectre-PHT&#xff08;Transient Execution &#xff09;Concurrency BugsSRC/SCUAF和实验条件 流程Creating an Unbounded UAF WindowCrafting Speculative Race ConditionsExploiting Speculative Race Conditions poc修复flush and reload 论文 https:/…

「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件

本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息&#xff0c;页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。 关键词 UI互动应用天气预报数据绑定动态展示状态管理 一、功能说明 自定义…

常用Python自动化测试框架有哪些?

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了测试时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

彻底认识和理解探索分布式网络编程中的SSL安全通信机制

探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…

嵌入式单片机的运行方式详解

程序的运行方式轮询系统 指的是在程序运行时,首先对所有的硬件进行初始化,然后在主程序中写一个死循环,需要运行的功能按照顺序进行执行,轮询系统是一种简单可靠的方式,一般适用于在只需要按照顺序执行的并且没有外部事件的影响的情况下。 程序的运行过程中出现如按键等需…

python如何保存.npy

数据处理的时候主要通过两个函数&#xff1a; &#xff08;1&#xff09;np.save(“test.npy”&#xff0c;数据结构&#xff09; ----存数据 &#xff08;2&#xff09;data np.load(test.npy") ----取数据 给2个例子如下&#xff1a; 1、存列表 z [[[1, 2, 3], [w]…

gitee给DeployKey添加push权限

git执行push操作&#xff0c;将本地修改推送到gitee远程仓库时&#xff0c;报错&#xff1a; error: src refspec master does not match any error: failed to push some refs to gitee.com:XXX/XXX.git进一步执行以下强制推送命令&#xff1a; $ git push --set-upstream o…

Unbuntu下怎么生成SSL自签证书?

环境&#xff1a; WSL2 Unbuntu 22.04 问题描述&#xff1a; Unbuntu下怎么生成SSL自签证书&#xff1f; 解决方案&#xff1a; 生成自签名SSL证书可以使用OpenSSL工具&#xff0c;这是一个广泛使用的命令行工具&#xff0c;用于创建和管理SSL/TLS证书。以下是生成自签名…

Java模拟多个Mqtt客户端连接Mqtt Broker

上一次我们介绍了Java模拟单个Mqtt客户端的场景&#xff0c;但是在实际的业务场景中&#xff0c;可能需要我们模拟多个Mqtt客户端&#xff0c;比如&#xff1a;我们要对云平台的连接和设备上下行做压测。 Java模拟多个Mqtt客户端基本流程 引入Paho MQTT客户端库 <depende…

《Qt Creator 4.11.1 教程》

《Qt Creator 4.11.1 教程》 一、Qt Creator 4.11.1 概述&#xff08;一&#xff09;简介&#xff08;二&#xff09;界面构成 二、常用设置指南&#xff08;一&#xff09;环境设置&#xff08;二&#xff09;文本编辑器设置&#xff08;三&#xff09;构建和运行设置 三、构建…

LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)

LeetCode 热题 100_K 个一组翻转链表&#xff08;31_25&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;四指针法&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;四指针法&#x…

探索 Python编程 调试案例:计算小程序中修复偶数的bug

在 学习Python 编程的过程里&#xff0c;会遇到各种各样的bug。而修复bug调试代码就像是一场充满挑战的侦探游戏。每一个隐藏的 bug 都是谜题&#xff0c;等待开发者去揭开真相&#xff0c;让程序可以顺利运行。今天&#xff0c;让我们通过一个实际案例&#xff0c;深入探索 Py…