机器学习入门(一)—— 数据 Data

背景

随着 LLM 的快速发展,越来越多的工程师多多少少会接触到一些机器学习的相关知识。

本系列将会由浅入深的介绍,机器学习的入门知识。

感谢,李沐老师的斯坦福课程《实用机器学习》

主要还是站在巨人的肩膀上,快速了解这个方向的一些必要知识。

行业的应用

随着行业的发展,越来越多的行业都在运用机器学习技术,并对公司带来可观的收入提升。

据调查:超过一半的行业,公司在运用了机器学习之后,提升了最少 6% 的利润。

Case 举例:

制造业:

  • 基于机器学习与传感器的结合,去预测当前生产线的设备的寿命。

零售业:

  • 基于用户的浏览习惯与购买喜好,给用户后续可能购买的商品。
  • 基于往年的商品售卖数据,预测未来商品的售卖情况,进行提前的补货。

健康领域:

  • 基于穿戴传感器,实时检测身体的健康情况。
  • 基于体检报告的结果,来判断身体可能出现的问题。

等等等等,现在越来越多的领域与机器学习结合,发生一些很有意思的事情。

ML WorkFlow

一些挑战:

  1. 如何把一个"现实问题"变成"机器学习"问题

有的问题比较简单,有的问题比较复杂(比如:自动驾驶、无人售卖等等)

  1. 数据问题

现实情况往往不缺数据,缺的是高质量的数据。

一些隐私数据问题(比如:人的健康相关的数据)

  1. 模型训练问题

模型越来越复杂,参数越来越多,训练成本越来越高。

随着模型越来越大,所要的训练数据越来越多。

  1. 模型部署问题

线上部署成本很高,需要大量 GPU 来运算。

一些场景对调用实时性要求比较高,还需要进一步压缩模型的大小。

  1. 监控模型

线上的数据分布发生变化(长期:用户画像发生变化/用户习惯发生变化,短期:节假日/疫情等等一些特殊情况),可能模型的预测效果也会产生一些变化。

公平性问题:比较典型的 case 可能预测的比较好,一些比较边缘的特殊 case 可能效果不佳。

ML Roles

  1. 领域专家(Domain experts):一些领域比较专业的人才,对某个领域有足够准确的判断。(收集数据)
  2. 数据科学家(Data scientist):"机器学习全栈",收集数据、训练模型、发布模型等等一系列工作。(跑通流程)
  3. 机器学习专家(ML experts):根据自家产品的特点,对模型做一些定制化。(模型高度定制化)
  4. 软件工程师(SDE):开发维护机器学习一些流水线,保障机器学习流程更加高效。(保障流程高效)

因为行业的人才缺口比较大,每年学校供给的人才远远不够。

越来越多的"软件工程师"、"领域专家",开始往"数据科学家"/"机器学习专家"转型。

ML Tech

  • 数据偏移:

    训练数据与真实数据分布存在较大差异,影响模型效果。

  • 独立同分布(Independent and identically distributed): 简称 IID, 是概率论和统计学中的基本假设,假设每个随机变量都与其他的无关,并且它们都有相同的概率分布。

    然而,在现实中, IID 假设往往是不成立的。(比如:在时间序列分析中,一个时间点的结果依赖于之前的结果,这就破坏了独立性。在社交网络分析中,一个节点的行为依赖于相邻节点,这也破坏了独立性。)

    因此,我们要尝试去处理那些违反IID假设的问题,探索更为复杂和现实的概率分布和数据依赖关系。

  • 迁移学习(Transfer learning):

    是一种机器学习的方法,通过将从一个任务中学习到的知识应用到另一个任务中,从而提高学习的效率和效果。

  • 多模态(Multi-modality):

    把文本、图片、视频、音频等等各种类型的数据输入,结合起来处理和建模。

一、数据(Data)

一般来说,数据科学家有 60%的精力都在搞数据。

常规数据获取 Flow

发现数据的方法

  1. 业界已公开的数据集

    • ImageNet:大型"图片"数据集,已手动标注了 1400w 张图像。(主要来源 Google)
    • AudioSet:大型"音频"数据集,由超过 200w 个人工注释的 10 秒音频剪辑组成的。(主要来源 YouTube)
    • Kinetics:大型"视频"数据集。(主要来源 YouTube)
    • MNIST:大型"手写数字"数据集,通常用于训练各种图像处理系统。(主要来源美国某部门)
    • Google Dataset search:google 提供的数据集搜索。
    • Kaggle Datasets:民间上传的数据集平台。
    • ......
  2. 根据目前已有的数据,组合成一个完整的数据集

    比如:从数仓里,找到多个离线表,通过多表 join,组合成一个相对完整的数据集。

  3. 实在没有数据,只好新收集数据,组成数据集

    从线上重新收集(埋点/存储)

数据集分类

类型 优势 劣势
学术界 干净、已清理过,难度适中 种类比较少,一般偏常见的一些场景。当前产品不一定适用。
竞赛类 比较接近机器学习的应用,经过了机器学习的处理, 种类也比较少,可能关注在某些特定领域。
原始类 比较灵活,每个产品基本都能找到 需要做大量的处理,筛选出高质量的数据。

自动化生成数据

  1. 生成对抗网络 GAN (Generative Adversarial Network):

    • 一种深度学习模型,由两个神经网络构成:生成器和判别器。
    • 生成器:负责生成虚拟数据,判别器:负责判断这些数据是真实数据还是虚拟数据。
    • 两个网络不断反复训练和竞争,从而不断提高生成器生成真实数据的能力,直到生成的数据与真实数据无法区分。
    • GAN 可以用于图像、声音、文本等各种类型的数据生成和合成,被广泛应用于计算机视觉、自然语言处理等领域。
  2. 数据增强

    • 图片类:对一张图片做一些细微的变化(比如:旋转/模糊/稍改颜色 等等,类似 photoshop),从而生成多张图片。(Python 工具库:github.com/aleju/imgau...
    • 文本类:可以通过翻译,比如同样一句话翻译成法语,再从法语翻译回来。可能就变成另一种表述,但表述的意思一致。

爬虫抓取

通过爬虫,尽可能合规地来爬取我们想要的数据。

  1. 要抓只能抓合法的数据。(一般无需登录就能获取的数据,相对比较安全)
  2. 伪装成真实用户的使用频率,降低被发现的概率。

数据标注

  1. 是否有足够多高质量的原始数据?

上一节数据获取,已经介绍。

  1. 是否有一定量已标注好的数据?

如果有,可以使用半监督学习来辅助标注(后续会细讲)

  1. 是否有足够多的钱,来帮你标注?
  1. 众包:花钱请外包(网上)帮忙标注数据。(准确率问题?看标注任务的难度)
  2. 花钱用 GPT 来标注 ✅(1篇文章 ~ 1块钱)

注意点:

  1. 需要制定好标准(或者 prompt)

  2. 尽可能把任务简单化(转化成二分类,比如:"是"或"不是")

以此,来提高准确率。

数据分析

根据不同业务场景,分析标注好的数据是否符合预期?(分布情况/准确率等等)

然后,制定好数据的标准,为后续数据清理(去除噪音)做准备。

数据清理

数据的错误是很常见的,就算是人标注的数据,也是可能会出错。 因此,需要定义一些规则来清理数据。

错误的数据:

  1. 属性数值,在非合理区间

    比如:小册的区间是 0~1k ,10w 元的小册不合理。

  2. 业务逻辑规则的检测

    比如:文章的 audit_status = 1(通过审核),status 应该等于1,2(可见/推荐) ,不应该等于0(自见); 比如:一个用户发布了评论,那他一定绑定了手机号。

  3. 语义/语法错误

数据变换(Data Transformation)

数值类转换

  1. 最小最大值规范化(Min-Max Normalization):

一种数据预处理技术,用于将给定数据集的值转换为特定范围内的值。该技术将给定数据集中的数值通过线性变换映射到一个特定范围内,通常是0到1或-1到1之间。这个范围可以根据特定的应用需求而定。最小最大值规范化可以有效地去除数据的尺度影响,使得数据处于可比较的状态,同时也有助于提高学习算法的性能。

这里的 b 是新的最大值,a 是新的最小值。

  1. z值标准化/标准差标准化(Z-score Normalization)

最常见的一种数据标准化技术,用于将数据转换为具有相同单位的标准正态分布。该方法利用数据的均值和标准差来对数据进行转换,通过减去均值并除以标准差,将数据转换为标准正态分布,即平均值为0,标准差为1的分布。这种方法可以用于比较和分析不同样本数据,并且在机器学习和统计建模等领域中常常被使用。

(X - X 均值)/ X 方差

  1. Decimal scaling

x / 10 的 J 次方,保证所有的值都控制在小于 1。

  1. Log scaling

直接取 log

文本类转换

词根化、语法化

中文影响不大,英文影响大。

Eg.

am、is、are => be;

car, cars, car's, cars's => car;

Tokenization

  1. 根据空格切
  2. 根据字符切
  3. 根据子词切
    Eg. He is a soldier => "He", "is", "a", "sold", "####ier"

图片类转换

对比数值处理,图片往往比较大 。数据大会导致存储是个问题, 处理起来也是问题。

所以方法就是把图片size变小(让存储成本变小,机器处理变快)

  1. Image resize(压缩,下采样,降低分辨率)

日常生活中,人看低像素图片往往只能靠猜。

但是,机器反而对每个像素点的判断相对来说会更敏感一点,压缩的问题反而不大。

Bad Case:

如果是处理 jpeg 格式的图片,保存 Medium(下采样 80%~90%)quality 质量的图片,可能会损失 1%的精度。2015年,Google 工程师,在对 ImageNet 测试的时候,发现复现不了学术论文里的精度。当时 Debug 也很困难,最后发现是 resize 的时候丢失的精度。

  1. Image whitening(把核心部分扣出来)

白化(Whitening)是一种常用的数据预处理技术,它可以将输入数据进行线性变换,从而使得变换后的数据具有相同的方差和无关性。白化可以帮助提高模型的准确性和稳定性,同时也可以降低数据的冗余度和维度,简化数据处理和分析。

视频转换

常规视频大小:Movie ~ 2h;YouTube ~ 11min;TikTok ~ 15sec;

  1. 一般情况,会裁成 10s 内的视频来处理。

挑选一些典型的视频片段让机器来学习。

时间太长,视频越大会更难处理。其次,效果也不见得好

  1. 视频压缩算法(存储成本低,读取成本高)

背景:正常来说,一个视频的数据会比图片还要大不少。

比如,一个 10s 的视频,1s 有 100 帧,那视频就比图片大了几百倍。

不过有比较成熟的视频压缩算法,让视频和图片的大小相差没有那么大。

但是,视频压缩算法,对于视频的读取有比较大的问题。

视频 => 几百帧 => 挑选关键帧 => 学习,这个流程比较费机器(通常会用 GPU 来解码)

为什么用 GPU?

关于 GPU 的工作原理,可以参考我之前写的文章:《浅谈GPU及"App渲染流程"》

  1. 直接将视频里的帧,转成多张图片,再对图片处理(存储成本高,读取成本低)

特征工程(Feature Engineering)

背景:机器学习比较喜欢定义好的,明确长度的"输入"和"输出"。

所以,我们需要把产品的一些数据,转成特定的 SVM(支持向量机),

让机器更好的理解。计算机视觉领域,最难的问题就是把图片转换成 SVM 特征。

  • SVM(Support Vector Machine,支持向量机):
    • 一种机器学习算法,旨在通过将高维数据映射到低维的空间中来实现分类或回归。
    • 该算法使用一个超平面作为决策边界,该超平面将不同类别的数据点分隔开,从而使得分类或回归的效果最优化。

但是,随着时代的发展。 人们发现通过机器代替人力来抽取特征,效果反而会更好。 所以变成了下面这个流程。

  • Softmax回归:(也被称为多项逻辑回归)
    • 是逻辑回归的扩展,它可以处理多类分类问题,而不仅仅是二类分类问题。
    • Softmax回归与逻辑回归的主要区别在于其输出层的激活函数。在逻辑回归中,我们使用的是sigmoid激活函数,它将输出限制在0和1之间,这在二分类问题中很有用。然而,在多分类问题中,我们需要一个概率分布来表示观测值属于每一类的概率,softmax函数正好可以提供这样的分布。
    • Softmax函数接受一个长度为K的向量,然后返回一个同样长度的向量,该向量的每个元素表示属于对应类的估计概率,并且这些概率之和为1。

表格类特征(Tabular Data Features)

  • 如果列是 Int/float 类型,可以直接用。可以把这个值落在某一个区间内,作为一个特征。

    举个例子,比如文章点赞数:010,10 100,1001k,1k5k,5k+分别作为一个特征。

  • 独热编码(One-hot encoding):一位有效编码,其方法是使用 N 位状态寄存器来对 N 个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。(类似词典)

    小技巧:把一些重要的特征保留,不重要的可以整体用 unknown 代替。

    • 比如:一个 Animal 中, cat 、dog 向量:
  • Date-time:通常是一个比较常见的特征。 因为通常情况下,用户工作日和周末的行为习惯会发生变化,所以要让模型感知到这个特征。 year, month, day, day_of_year, week_of_year, day_of_week, ......

  • 特征组合(Feature combination):将多个相关联特征组合起来,形成新的特征,便于机器来理解。 比如,我对一篇文章,阅读+点赞 => 代表 1 ,没阅读+点赞 => 代表 0,阅读+没点赞 => 0

文本类特征(Text Features)

文本转特征

  • Bag of words(BoW)model:将句子切成词,根据词频,聚合成类似上述的表格特征。

    引发的问题:丢失了文本原有的顺序。

  • Word Embeddings(eg. Word2vec)

    神经网络。词转向量,如果两个向量距离比较近,代表这两个词语义相近。

  • Pre-Trained language models(eg. Bert,百川,GPT)

    • Transformer models,自监督学习训练而成。
    • 优势:对文本理解比较好,对时序理解比较好。
    • 做一些微调(fine-tuning)

图片特征(Image Features)

  • Deprecated SIFT(Scale-invariant feature transform,尺度不变特征转换): 早期(1999年)一种计算机视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。

  • ResNet(Residual Network,残差网络) 2015 年,根据 ImageNet 数据集训练出来的"**图片理解"**的深度学习模型,并在当年 ImageNet 图像识别比赛中获得了冠军。

视频特征(Video Features)

  • I3D(Inflated 3D ConvNet,深度可分离的3D卷积网络) 2017 年,根据 Kinetics 数据集训练出来的"**视频理解"**的深度学习模型,它主要用于处理视频数据,包括行为识别和物体检测等任务。 将已经在图像分类任务上验证过的2D卷积神经网络模型(如InceptionV1、ResNet 等)"膨胀"为3D卷积神经网络。这意味着I3D的模型在时间维度上增加了深度,不仅能处理图片的长和宽,同时还能处理图片在时间序列上的变化,也就是视频帧间的关系。这使得I3D能够理解视频中的动态信息。

下一篇,我们会开始介绍机器学习模型训练的相关知识。

相关推荐
苏三说技术1 小时前
Claude Code从失控到起飞,只用了这些技巧
后端
aqi001 小时前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
长栎2 小时前
写 for 循环写了十年,你却从没用过迭代器模式最狠的那一面
后端
LiaCode2 小时前
Redis 在生产项目的使用
前端·后端
用户559822481222 小时前
Docker Compose Down 导致容器数据误删——ext4 日志恢复全记录
后端
LiaCode2 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战2 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
用户5191495848452 小时前
libcurl Headers API 释放后重利用漏洞:跨请求复用头句柄导致堆内存安全风险
人工智能·aigc
踩蚂蚁2 小时前
自定义语音唤醒词:从训练到部署的完整链路实践
人工智能