机器学习入门(一)—— 数据 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能够理解视频中的动态信息。

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

相关推荐
Power20246665 分钟前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k8 分钟前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫13 分钟前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班28 分钟前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k28 分钟前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
YRr YRr37 分钟前
深度学习:循环神经网络(RNN)详解
人工智能·rnn·深度学习
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
多吃轻食1 小时前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
北京搜维尔科技有限公司2 小时前
搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
人工智能·安全