机器学习

机器学习(Machine Learning, ML)就是让计算机利用数据来"学习"如何完成任务.

深度学习

深度学习主要以深度神经网络(Deep Neural Networks, DNNs)为主,神经网络这种结构完全模拟人的大脑结构,由多层神经元组成。我们知道正常成年人的大脑有大约 1000 亿个神经元,每个神经元又和其他大约 1000 个神经元产生连接,每个连接就是我们说的突触,也就是说人的大脑大概有 100 万亿个突触。

机器学习过程

1. 定义问题

明确希望机器学习解决的问题: 分类问题(图片中是猫是狗?), 回归问题(房价预测), 聚类问题(识别有类似需求的客户群体)

2. 收集数据

数据是机器学习的基础。你需要收集足够多、质量好的数据,这些数据需要能够代表你试图解决的问题。数据可以通过各种方式获取,如公开数据集、公司内部数据、网络爬虫等。

3. 数据预处理

收集到的原始数据往往是杂乱无章的。数据预处理的目的是将这些数据转换成一种更适合机器学习算法处理的格式。这包括处理缺失值、异常值、数据标准化、特征选择等步骤。

4. 分割数据

将数据分为训练集和测试集(有时还有验证集)。训练集用于训练模型,测试集用于评估模型的性能。这样做的目的是检验模型对未知数据的泛化能力。

5. 选择模型

8. 参数调优和模型优化

根据模型在测试集上的表现,调整模型的参数或进行其他优化,以提高模型的性能。这个过程可能会反复进行多次,包含在训练、微调过程中。

9. 部署模型

当模型的推理效果达到预期值时,比如准确度超过 xx%,我们就可以认为模型的效果是 OK 的,可以将其部署到实际应用中。部署后,模型将开始对真实的数据进行推理。

10. 监控和维护

在模型部署后,需要持续监控其性能,并根据新收集的数据定期进行维护和更新。这是因为随着时间的推移,数据的分布可能会发生变化,这种现象被称为概念漂移,可能会导致模型性能下降。

经典算法

线性回归

线性回归是一种预测分析技术,用于研究两个或多个变量之间的关系。简单来说,它尝试用一条直线(在二维空间中)或一个平面(在三维空间中)等,尽可能地拟合这些变量间的数据点。这条直线或平面可以用来预测或估计一个变量基于另一个变量的值。

逻辑回归

逻辑回归主要用于处理分类问题,尤其是二分类问题。它的目的是预测一个事件发生的概率,并将这个概率转换为二元结果:0 或 1、是或否等。逻辑回归通过使用逻辑函数(也称为 Sigmoid 函数)将线性回归模型的输出映射到 0 和 1 之间的概率值上。

决策树

决策树是一种常用的机器学习算法, 用于分类和回归任务 .通过从数据中学习决策规则来预测目标变量的值

随机森林

随机森林是一种流行的机器学习算法, 属于集成学习家族.简单来说, 随机森林通过构建多个决策树来进行预测, 其基本思想是集体智慧-单个模型可能有限, 但多个模型集合起来可以作出更好的判断.随机森林算法的关键在于它的随机性.

  1. 样本随机性: 每棵树训练的数据通过从原始数据中进行随机抽样得到, 这种方法称为自助采样

  2. 特征随机性: 在分裂决策树的节点时, 算法会从所有特征中随机选取一部分特征, 然后只在这些随机选取的特征中寻找最优分裂特征

这种随机性使随机森林模型具有很高的准确性, 同时能够防止模型过拟合

随机森林怎么解决决策树过拟合的问题呢?我们先来看下随机森林的工作原理。

  1. 从原始数据集中随机抽样选取多个子集。

  2. 对每个子集训练一个决策树。

  3. 每棵树独立进行预测。

  4. 最终预测结果是所有的树预测结果的投票或平均。

神经网络

神经网络应该说是目前最火的机器学习算法模型, 现在主流的大部分大模型都是基于神经网络的.主要设计思路是模仿人的大脑, 由许多小的,处理信息的单元组成, 这些单元就是神经元, 各神经元之间彼此连接, 每个神经元可以向其他神经元发送和接收信号, 通过这种方式, 神经网络能够执行各种复杂的计算任务, 比如图像和语音识别, 自然语言处理以及许多其他类型的机器学习任务.

一个简单的神经网络包含输入层, 隐藏层和输出层.

一般情况下, 一个神经网络输入层和输出层仅有一层, 隐藏层可以有很多层, 不过也有特殊情况

  • 输入层: 接收原始数据输入, 例如图片的像素值或一段文本

  • 隐藏层: 处理输入数据, 可以有一个或多个隐藏层, 隐藏层的神经元会对输入数据进行加权和, 应用激活函数, 这个过程可以捕捉输入数据中的复杂模式和关系

  • 输出层: 根据隐藏层的处理结果, 输出一个值或一组值, 代表了神经网络的最终预测结果

神经网络之所以强,是因为它是非线性的,它可以理解非常复杂的逻辑关系。另外,在深度神经网络中,不同的层可以学习不同的特征,较低的层可能学习简单的特征,较高的层则可以学到更复杂的概念。这种从简单到复杂的学习过程使得神经网络非常适合处理复杂的数据结构。当然,还有一些其他概念,如激活函数、前向传播、反向传播、梯度下降等,我们通过一个例子来说明这些概念。

假设你在做一道菜,而神经网络就像是你的厨房,厨房里有各种炊具和调料,代表着神经网络的各个组成部分。

  1. 食材:输入数据,这是你要做菜所需的原材料,类比神经网络的输入数据。

  2. 调料:激活函数,赋予了食材不同的特性和味道。

  3. 烹饪过程:前向传播,这是你根据菜谱和经验,按照一定的步骤和方法进行的烹饪过程。在前向传播中,神经网络逐层处理输入数据,通过各种操作和激活函数的作用,逐渐提取并组合数据的特征,最终得到输出结果。

  4. 味道调整:训练过程,在烹饪过程中,你会尝试不同的调料和烹饪技巧,不断调整菜的味道,直到达到满意的效果。而在神经网络的训练过程中,我们通过反向传播算法来调整网络参数,使得网络的输出尽可能接近真实标签,达到最佳的预测效果。品尝和反馈:

  5. 反向传播,在烹饪中,你会尝试做好的菜品,并根据味道来调整调料的用量和烹饪方法。而在神经网络中,反向传播就像是品尝和反馈过程,通过计算模型输出与真实标签之间的差距(损失函数),并利用链式法则逆向传播这个误差,以调整每一层的参数,使得网络的输出更接近真实标签。

  6. 调整火候:梯度下降,在烹饪过程中,你还会根据实际情况调整火候,使菜肴烹饪得更加均匀和完美。而在神经网络的训练中,梯度下降就像是调整火候,它是一种优化算法,通过不断沿着梯度的反方向调整参数,逐步降低损失函数,使得网络的预测效果逐渐提升,达到最优的训练效果。

  7. 评价口感:损失函数,在烹饪过程中,你可能会根据菜肴的味道、口感等因素来评价菜品的好坏。而在神经网络中,损失函数就像是评价口感的标准,它衡量了模型的输出与真实标签之间的差距,即模型的预测效果,损失函数越小表示模型的预测越接近真实标签。

循环神经网络(RNN)

神经网络有很多种, 包括前馈神经网络(FNN),卷积神经网络(CNN)、循环神经网络(RNN)、图神经网络(GNN)、自注意力机制模型Transformer等

卷积神经网络是一类用于处理序列数据的神经网络, 不同于传统的前馈神经网络,RNN能够处理序列长度变化的数据, 如文本,语音等。RNN的特点是在模型中引入循环, 是的网络能够保持某种状态, 从而在处理序列数据时表现出更好的性能。

基本机构和原理

RNN的核心在于隐藏层, 主要逻辑为随时间的变化更新隐藏状态, 每个时间步的隐藏状态给予当前输入和上一个时间步的隐藏状态计算得来,通过这种方式, RNN能够记住之前的输入, 并使用这些信息来影响后续处理, 比如预测序列中的下一个字符, 这样, 模型就有了记忆功能。

关键挑战

RNN通过当前的隐藏状态来记住序列中之前的信息, 这种记忆是短期的, 随着时间步的增加, 早期输入对当前状态的影响会逐渐减弱。在标准RNN中, 尤其当遇到梯度消失情况时, 就会遇到短期记忆问题, 几乎无法更新权重。

梯度消失

梯度是指函数在某一点的斜率, 在深度学习中, 该函数一般指具有多个变量的损失函数, 变量就是模型的权重。损失函数衡量的是模型预测与实际数据之间的差异, 一般情况下, 我们要尽可能让损失函数的值最小。如何找到最小值, 需要进行梯度下降, 也就是说, 我们要不断调整参数(权重),使得损失函数的值降到最小, 这个过程就是梯度下降。

为什么会产生梯度消失?一般有2个原因:

  1. 深层网络中的连乘效应: 在深层网络中, 梯度是通过链式法则进行反向传播的。如果每一层的梯度都小于1,那么随着层数的增加, 这些小于1的值会连乘在一起,导致最终的梯度非常小。

  2. 激活函数的选择:使用某些激活函数, 如tanh,函数的取值范围是(-1,1),小于1的数进行连乘,也会快速降低梯度值。

反向传播

在深度学习中, 训练神经网络设计2个主要的传播阶段:前向传播和反向传播。

在前向传播阶段,输入数据从网络的输入层开始,逐层向前传递至输出层。每一层都会对其输入进行计算,如加权求和,然后应用激活函数等,并将计算结果传递到下一层, 直到最终产生输出。这个计算过程从输出层开始,沿着网络向后,即向输入层的方向,逐层进行,这就是反向传播的由来。

这些梯度表示了为了减少损失,哥哥参数需要如何调整。最后, 这些梯度会用来更新网络中的参数,通常是通过梯度下降或变体算法进行实现。而在反向传播过程中, 每到达一层,都会触发激活函数, 这就是上面说的第2个原因。

如何解决梯度消失问题?

  1. 长短期记忆(LSTM)和门控循环单元(GRU)是专门为了避免梯度消失问题而设计的。它们通过引入门控机制来调节信息的流动,保留长期依赖信息,从而避免梯度在反向传播过程中消失。

  2. 使用ReLU及其变体激活函数,在正区间内的梯度保持恒定,不会随着输入的增加而减少到0,这有助于减轻梯度消失的问题。

梯度爆炸

与梯度消失相对的问题是梯度爆炸, 当模型的梯度在反向传播过程中变得非常大,以至于更新后的权重偏离了最优值,导致模型无法收敛,甚至发散。

通常梯度爆炸发生的原因有3个:

  1. 深层网络的连乘效应: 在深层网络中,梯度是通过链式法则进行反向传播的。如果每一层的梯度都大于1,那么随着层数的增加,这些大于1的值会连乘在一起,导致最终梯度非常大。

  2. 权重初始化不当:如果网络的权重初始化得太大,那么在前向传播过程中信号的大小会迅速增加,同样,反向传播时梯度也会迅速增加。

  3. 使用不恰当的激活函数:某些激活函数(如ReLU)在正区间的梯度为常数。如果网络架构设计不当,使用这些激活函数也可能导致梯度爆炸。

梯度爆炸和梯度消失基本相反,解决方法一样,要么使用长短期记忆和门控循环单元调整网络结构,要么替换激活函数,还有一种办法是进行梯度裁剪,梯度裁剪意思是在训练过程中,通过限制梯度的最小、最大值来防止梯度消失、爆炸,间接保持了梯度稳定性。

长短期记忆(LSTM)

LSTM就像是具有类似大脑记忆功能的模型, 它在处理输入,如文本、时间序列数据时,能够记住对当前任务最重要的信息,并忘记不重要的信息。关键机制:

  1. 遗忘门(Forget Gate):决定了哪些信息是过时的、不重要的,因此应该从模型的记忆中抛弃。

  2. 输入们(Input Gate):它决定哪些新的信息是重要的,应该被添加到模型的记忆中。

  3. 输出门(Output Gate):它决定了在当前时刻,哪些记忆是相关的,应该被用来生成输出。

通过这些机制,LSTM能够在处理序列数据时,有效地保留长期的依赖信息,就像是记住故事中的关键情节和角色,同时避免了标准RNN中常见的梯度消失和爆炸问题。

小结

RNN的优势在于它的记忆能力,通过隐藏层循环结构捕捉序列的长期依赖关系,特别适合用于文本生成、语音识别等领域。同时,RNN也有局限性,比如梯度消失、梯度爆炸等,而引入LSTM可以一定程度上解决这些问题。

自然语言处理(NLP)

NLP是人工智能的一个重要分支, 研究的目的是让计算机能够理解, 解释和生产人类语言.NLP结合了计算机, 人工智能和语言学等多个学科的方法, 尽可能缩小人类语言与计算机理解之间的差距. 一般来说, 包括4个步骤:

  1. 文本预处理: 将原始文本转换成易于机器理解的格式. 包括分词(将文本分解成单词或短语), 去除停顿词,词干提取, 词性标注等

  2. 特征提取: 从处理过的文本中提取特征, 以便用于机器学习模型.这通常涉及将文本转换为数值形式, 如词袋模型或词嵌入, 也就是向量化

  3. 模型训练: 使用提取的特征和相应的机器学习算法来训练模型, 可能是分类器,回归模型,聚类算法等

  4. 评估与应用: 评估模型的性能, 并在实际应用中使用模型来解释,生成或翻译文本

文本预处理

目的是将原始文本转换成机器易于理解和处理的格式, 包含几个步骤:

文本清洗

去除噪声及标准化文本等, 去除噪声是指清除文本中对分析无关紧要的部分, 比如HTML标签, 标点符号,特殊字符等

分词

将文本分解成词汇,句子等

去除停用词

停用词是文本中频繁出现但对分析意义不大的词, 如is, and等.去除他们可以提高处理效率和分析效果, 同时还可以使数据集变小

词干提取

词干提取是去除单词的词缀(如前缀和后缀), 以便找到单词的"词干"或"根形式".词干提取可以减少词形变化的影响, 使相关的单词能够在分析时被归纳为相同的形式, 有助于简化文本数据, 并提高文本处理任务的性能.

词形还原

将单词还原到它的词典形式, 也就是词条的基本形式或词元形式.与词干提取相比, 词形还原考虑了单词的词性, 并尝试进行更加精确的转换, 返回的是一个真实的单词, 例如, am, are和is经过词形还原都会变成be.词形还原能够准确的将单词还原到其标准形式, 有助于保持语义的准确性. 这在需要精确理解和分析文本意义的场合特别有用, 如在语义分析或深入的文本理解任务中.

词性标注

词性标注是指将文本中的每个单词或符号标注为相应的词性如名词,动词,形容词等这一过程可以揭示单词在句子或语言结构中的作用和意义

命名实体识别

识别文本中具有特定意义的实体, 如人名,地点, 组织,日期,时间,货币数额等,旨在识别出文本中的实体, 并将他们归类为预定义的类别.

特征提取

特征提取是NLP中的一个重要步骤, 它涉及将原始文本转换成可以被机器学习模型理解和处理的数值形式.在文本数据中,特征提取是挑选出反映文本特性的信息, 将其转化为一种结构化的数值表示.这一步骤对于提高模型性能至关重要, 因为机器学习算法通常无法直接处理原始文本数据, 简单而言, 机器学习算法没办法直接处理原始文本, 只能先挑出来重要信息, 然后将主要信息用计算机能懂的方式进行表达,比如向量化, 有2种常见方式:

词袋模型(Bag of Words, BoW)

词袋模型比较简单, 忽略了文本中单词的顺序, 仅仅关注每个单词出现的次数, 每个文档被转换成一个长向量, 向量的长度等于词汇表中单词的数量, 每个单词分配一个固定的索引.向量中的每个元素是该单词在文档中出现的次数.

词嵌入(Word Embeddings)

词嵌入是文本的一种表现方式, 将词汇映射到实际向量空间中, 同时可以捕获语义关系

模型训练

给计算机提供大量例子, 也就是数据集, 其中包含了正确的答案.计算机通过这些例子去尝试学习, 开始识别数据中的模式和规律.当计算机能够准确快速的解决问题, 就说明已经被训练好了.

评估与应用

模型训练好后, 需要进行测试与评估, 平步的目的是衡量模型的性能和准确性, 确保它能够可靠的完成既定任务

NLP 到底和机器学习有什么关系

简单来说,NLP 就像是教会计算机理解和使用人类语言的学问,而机器学习则是让计算机通过查看大量的例子自己学习如何完成任务的方法。把两者结合起来,就是用机器学习的技术来让计算机学习如何处理和理解语言。这样,计算机就可以帮我们做一些翻译语言、回答问题或者理解文本情感的任务了。

Word2Vec

是一种广泛使用的NLP技术, 目的是将词语转换成向量形式, 使计算机能够理解. 它通过学习大量文本数据, 捕捉到次遇见的上下文关系, 今儿生成词的高维表示, 即词向量.

主要有2中模型:

Skip-Gram(跳字模型)

是一种通过一个给定的目标词来预测其上下文词的神经网络架构。与 CBOW 模型相反,Skip-Gram 每次接收一个词作为输入,并预测它周围的词,这使其在处理较大数据集和捕获罕见词或短语时表现更出色。

CBOW(连续词袋, Continuous Bags of Words)

是一种通过上下文预测目标词的神经网络架构。在 Word2Vec 中,CBOW 尝试从一个词的“上下文”来预测这个词本身。上下文由目标词周围的一个或多个词组成,这个数目由窗口大小决定。窗口是指上下文词语的范围,如果窗口为 10,那么模型将使用目标词前后各 10 个词。

Word2Vec 模型因为能够捕捉到词语和词语之间复杂的语义语法关系,所以在 NLP 任务中被广泛使用。