背景
随着 LLM 的快速发展,越来越多的工程师多多少少会接触到一些机器学习的相关知识。
本系列将会由浅入深的介绍,机器学习的入门知识。
感谢,李沐老师的斯坦福课程《实用机器学习》 ,
主要还是站在巨人的肩膀上,快速了解这个方向的一些必要知识。
行业的应用
随着行业的发展,越来越多的行业都在运用机器学习技术,并对公司带来可观的收入提升。
据调查:超过一半的行业,公司在运用了机器学习之后,提升了最少 6%
的利润。
Case 举例:
制造业:
- 基于机器学习与传感器的结合,去预测当前生产线的设备的寿命。
零售业:
- 基于用户的浏览习惯与购买喜好,给用户后续可能购买的商品。
- 基于往年的商品售卖数据,预测未来商品的售卖情况,进行提前的补货。
健康领域:
- 基于穿戴传感器,实时检测身体的健康情况。
- 基于体检报告的结果,来判断身体可能出现的问题。
等等等等,现在越来越多的领域与机器学习结合,发生一些很有意思的事情。
ML WorkFlow
一些挑战:
- 如何把一个"现实问题"变成"机器学习"问题
有的问题比较简单,有的问题比较复杂(比如:自动驾驶、无人售卖等等)
- 数据问题
现实情况往往不缺数据,缺的是高质量的数据。
一些隐私数据问题(比如:人的健康相关的数据)
- 模型训练问题
模型越来越复杂,参数越来越多,训练成本越来越高。
随着模型越来越大,所要的训练数据越来越多。
- 模型部署问题
线上部署成本很高,需要大量 GPU 来运算。
一些场景对调用实时性要求比较高,还需要进一步压缩模型的大小。
- 监控模型
线上的数据分布发生变化(长期:用户画像发生变化/用户习惯发生变化,短期:节假日/疫情等等一些特殊情况),可能模型的预测效果也会产生一些变化。
公平性问题:比较典型的 case 可能预测的比较好,一些比较边缘的特殊 case 可能效果不佳。
ML Roles
- 领域专家(Domain experts):一些领域比较专业的人才,对某个领域有足够准确的判断。(收集数据)
- 数据科学家(Data scientist):"机器学习全栈",收集数据、训练模型、发布模型等等一系列工作。(跑通流程)
- 机器学习专家(ML experts):根据自家产品的特点,对模型做一些定制化。(模型高度定制化)
- 软件工程师(SDE):开发维护机器学习一些流水线,保障机器学习流程更加高效。(保障流程高效)
因为行业的人才缺口比较大,每年学校供给的人才远远不够。
越来越多的"软件工程师"、"领域专家",开始往"数据科学家"/"机器学习专家"转型。
ML Tech
-
数据偏移:
训练数据与真实数据分布存在较大差异,影响模型效果。
-
独立同分布(Independent and identically distributed): 简称 IID, 是概率论和统计学中的基本假设,假设每个随机变量都与其他的无关,并且它们都有相同的概率分布。
然而,在现实中, IID 假设往往是不成立的。(比如:在时间序列分析中,一个时间点的结果依赖于之前的结果,这就破坏了独立性。在社交网络分析中,一个节点的行为依赖于相邻节点,这也破坏了独立性。)
因此,我们要尝试去处理那些违反IID假设的问题,探索更为复杂和现实的概率分布和数据依赖关系。
-
迁移学习(Transfer learning):
是一种机器学习的方法,通过将从一个任务中学习到的知识应用到另一个任务中,从而提高学习的效率和效果。
-
多模态(Multi-modality):
把文本、图片、视频、音频等等各种类型的数据输入,结合起来处理和建模。
一、数据(Data)
一般来说,数据科学家有 60%的精力都在搞数据。
常规数据获取 Flow
发现数据的方法
-
业界已公开的数据集
- ImageNet:大型"图片"数据集,已手动标注了 1400w 张图像。(主要来源 Google)
- AudioSet:大型"音频"数据集,由超过 200w 个人工注释的 10 秒音频剪辑组成的。(主要来源 YouTube)
- Kinetics:大型"视频"数据集。(主要来源 YouTube)
- MNIST:大型"手写数字"数据集,通常用于训练各种图像处理系统。(主要来源美国某部门)
- Google Dataset search:google 提供的数据集搜索。
- Kaggle Datasets:民间上传的数据集平台。
- ......
-
根据目前已有的数据,组合成一个完整的数据集
比如:从数仓里,找到多个离线表,通过多表 join,组合成一个相对完整的数据集。
-
实在没有数据,只好新收集数据,组成数据集
从线上重新收集(埋点/存储)
数据集分类
类型 | 优势 | 劣势 |
---|---|---|
学术界 | 干净、已清理过,难度适中 | 种类比较少,一般偏常见的一些场景。当前产品不一定适用。 |
竞赛类 | 比较接近机器学习的应用,经过了机器学习的处理, | 种类也比较少,可能关注在某些特定领域。 |
原始类 | 比较灵活,每个产品基本都能找到 | 需要做大量的处理,筛选出高质量的数据。 |
自动化生成数据
-
生成对抗网络 GAN (Generative Adversarial Network):
- 一种深度学习模型,由两个神经网络构成:生成器和判别器。
- 生成器:负责生成虚拟数据,判别器:负责判断这些数据是真实数据还是虚拟数据。
- 两个网络不断反复训练和竞争,从而不断提高生成器生成真实数据的能力,直到生成的数据与真实数据无法区分。
- GAN 可以用于图像、声音、文本等各种类型的数据生成和合成,被广泛应用于计算机视觉、自然语言处理等领域。
-
数据增强
- 图片类:对一张图片做一些细微的变化(比如:旋转/模糊/稍改颜色 等等,类似 photoshop),从而生成多张图片。(Python 工具库:github.com/aleju/imgau...
- 文本类:可以通过翻译,比如同样一句话翻译成法语,再从法语翻译回来。可能就变成另一种表述,但表述的意思一致。
爬虫抓取
通过爬虫,尽可能合规地来爬取我们想要的数据。
- 要抓只能抓合法的数据。(一般无需登录就能获取的数据,相对比较安全)
- 伪装成真实用户的使用频率,降低被发现的概率。
数据标注
- 是否有足够多高质量的原始数据?
上一节数据获取,已经介绍。
- 是否有一定量已标注好的数据?
如果有,可以使用半监督学习来辅助标注(后续会细讲)
- 是否有足够多的钱,来帮你标注?
- 众包:花钱请外包(网上)帮忙标注数据。(准确率问题?看标注任务的难度)
- 花钱用 GPT 来标注 ✅(1篇文章 ~ 1块钱)
注意点:
-
需要制定好标准(或者 prompt)
-
尽可能把任务简单化(转化成二分类,比如:"是"或"不是")
以此,来提高准确率。
数据分析
根据不同业务场景,分析标注好的数据是否符合预期?(分布情况/准确率等等)
然后,制定好数据的标准,为后续数据清理(去除噪音)做准备。
数据清理
数据的错误是很常见的,就算是人标注的数据,也是可能会出错。 因此,需要定义一些规则来清理数据。
错误的数据:
-
属性数值,在非合理区间
比如:小册的区间是 0~1k ,10w 元的小册不合理。
-
业务逻辑规则的检测
比如:文章的 audit_status = 1(通过审核),status 应该等于1,2(可见/推荐) ,不应该等于0(自见); 比如:一个用户发布了评论,那他一定绑定了手机号。
-
语义/语法错误
数据变换(Data Transformation)
数值类转换
- 最小最大值规范化(Min-Max Normalization):
一种数据预处理技术,用于将给定数据集的值转换为特定范围内的值。该技术将给定数据集中的数值通过线性变换映射到一个特定范围内,通常是0到1或-1到1之间。这个范围可以根据特定的应用需求而定。最小最大值规范化可以有效地去除数据的尺度影响,使得数据处于可比较的状态,同时也有助于提高学习算法的性能。
这里的 b 是新的最大值,a 是新的最小值。
- z值标准化/标准差标准化(Z-score Normalization)
最常见的一种数据标准化技术,用于将数据转换为具有相同单位的标准正态分布。该方法利用数据的均值和标准差来对数据进行转换,通过减去均值并除以标准差,将数据转换为标准正态分布,即平均值为0,标准差为1的分布。这种方法可以用于比较和分析不同样本数据,并且在机器学习和统计建模等领域中常常被使用。
(X - X 均值)/ X 方差
- Decimal scaling
x / 10 的 J 次方,保证所有的值都控制在小于 1。
- Log scaling
直接取 log
文本类转换
词根化、语法化
中文影响不大,英文影响大。
Eg.
am、is、are => be;
car, cars, car's, cars's => car;
Tokenization
- 根据空格切
- 根据字符切
- 根据子词切
Eg. He is a soldier => "He", "is", "a", "sold", "####ier"
图片类转换
对比数值处理,图片往往比较大 。数据大会导致存储是个问题, 处理起来也是问题。
所以方法就是把图片size变小(让存储成本变小,机器处理变快)
- Image resize(压缩,下采样,降低分辨率)
日常生活中,人看低像素图片往往只能靠猜。
但是,机器反而对每个像素点的判断相对来说会更敏感一点,压缩的问题反而不大。
Bad Case:
如果是处理 jpeg 格式的图片,保存 Medium(下采样 80%~90%)quality 质量的图片,可能会损失 1%的精度。2015年,Google 工程师,在对 ImageNet 测试的时候,发现复现不了学术论文里的精度。当时 Debug 也很困难,最后发现是 resize 的时候丢失的精度。
- Image whitening(把核心部分扣出来)
白化(Whitening)是一种常用的数据预处理技术,它可以将输入数据进行线性变换,从而使得变换后的数据具有相同的方差和无关性。白化可以帮助提高模型的准确性和稳定性,同时也可以降低数据的冗余度和维度,简化数据处理和分析。
视频转换
常规视频大小:Movie ~ 2h;YouTube ~ 11min;TikTok ~ 15sec;
- 一般情况,会裁成 10s 内的视频来处理。
挑选一些典型的视频片段让机器来学习。
时间太长,视频越大会更难处理。其次,效果也不见得好
- 视频压缩算法(存储成本低,读取成本高)
背景:正常来说,一个视频的数据会比图片还要大不少。
比如,一个 10s 的视频,1s 有 100 帧,那视频就比图片大了几百倍。
不过有比较成熟的视频压缩算法,让视频和图片的大小相差没有那么大。
但是,视频压缩算法,对于视频的读取有比较大的问题。
视频 => 几百帧 => 挑选关键帧 => 学习,这个流程比较费机器(通常会用 GPU 来解码)
为什么用 GPU?
关于 GPU 的工作原理,可以参考我之前写的文章:《浅谈GPU及"App渲染流程"》)
- 直接将视频里的帧,转成多张图片,再对图片处理(存储成本高,读取成本低)
特征工程(Feature Engineering)
背景:机器学习比较喜欢定义好的,明确长度的"输入"和"输出"。
所以,我们需要把产品的一些数据,转成特定的 SVM(支持向量机),
让机器更好的理解。计算机视觉领域,最难的问题就是把图片转换成 SVM 特征。
- SVM(Support Vector Machine,支持向量机):
- 一种机器学习算法,旨在通过将高维数据映射到低维的空间中来实现分类或回归。
- 该算法使用一个超平面作为决策边界,该超平面将不同类别的数据点分隔开,从而使得分类或回归的效果最优化。
但是,随着时代的发展。 人们发现通过机器代替人力来抽取特征,效果反而会更好。 所以变成了下面这个流程。
- Softmax回归:(也被称为多项逻辑回归)
- 是逻辑回归的扩展,它可以处理多类分类问题,而不仅仅是二类分类问题。
- Softmax回归与逻辑回归的主要区别在于其输出层的激活函数。在逻辑回归中,我们使用的是sigmoid激活函数,它将输出限制在0和1之间,这在二分类问题中很有用。然而,在多分类问题中,我们需要一个概率分布来表示观测值属于每一类的概率,softmax函数正好可以提供这样的分布。
- Softmax函数接受一个长度为K的向量,然后返回一个同样长度的向量,该向量的每个元素表示属于对应类的估计概率,并且这些概率之和为1。
表格类特征(Tabular Data Features)
-
如果列是 Int/float 类型,可以直接用。可以把这个值落在某一个区间内,作为一个特征。
举个例子,比如文章点赞数:0
10,10100,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能够理解视频中的动态信息。
下一篇,我们会开始介绍机器学习模型训练的相关知识。