1. 人工智能
1.1. 概念
人工智能(Artificial Intelligence,AI),是新一轮科技革命和产业变革的重要驱动力量, [26]是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能是智能学科重要的组成部分,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能是十分广泛的科学,包括机器人、语言识别、图像识别、自然语言处理、专家系统、机器学习,计算机视觉等。
1.2. 发展史
- 早期发展阶段(1950年代-1970年代):
-
- 1950年:数学家艾伦·图灵提出了"图灵测试",这是评判机器是否具有智能的标准。
- 1956年:约翰·麦卡锡首次使用了"人工智能"这个术语,并组织了达特茅斯会议,标志着人工智能正式诞生。
- 1958年:弗兰克·罗森布拉特发明了感知器,这是第一个神经网络模型。
- 1960年代:专家系统开始出现,这些系统通过规则和推理来解决特定领域的问题。
- 人工智能的低谷(1970年代-1980年代):
-
- 1973年:英国政府发布了"帕金斯报告",认为人工智能研究缺乏实际应用前景,导致研究经费大幅减少。
- 1980年代:连接主义和神经网络重新受到关注,但进展缓慢。
- 复兴期(1990年代-2000年代):
-
- 1997年:IBM的深蓝战胜国际象棋世界冠军卡斯帕罗夫,标志着人工智能在复杂游戏中的突破。
- 2006年:杰弗里·辛顿等人提出了深度学习的训练算法,为后来的人工智能革命奠定了基础。
- 2000年代:机器学习和自然语言处理等技术取得重大进展。
- 现代人工智能(2010年代至今):
-
- 2012年:谷歌大脑项目展示了深度学习在图像识别方面的强大功能。
- 2014年:OpenAI成立,专注于开发通用人工智能。
- 2016年:AlphaGo战胜围棋世界冠军李世石,标志着人工智能在复杂游戏中的胜利。
- 2018年:GPT-3等大型语言模型发布,在自然语言处理任务上表现出色。
- 2020年代:人工智能在医疗、金融、交通等各个领域的应用不断扩大。
1.3. 实现方法
- 规则引擎:早期的人工智能主要是通过建立规则和逻辑方法来解决特定的任务,这是规则引擎技术。因为人类世界非常复杂,即便建立了庞大的规则数据库,仍然有很多遗漏之处,所以基于此技术的人工智能,总成效并不理想。
- 符号推理:基于逻辑推理来模拟人的思维解决问题,这是符号推理技术。如早期的自然语言处理(NLP)处理翻译时,要建立语法表、建立分词方法等,然后来推理实现,但是最终的效果不佳。
- 知识图谱:知识图谱是一种基于图结构的知识表示和推理方法,这种方法能够处理更复杂的语义推理和问答。目前依然在继续发展。
- 机器学习:基于概率统计实现的自然语言处理在语音识别和翻译上取得重大成效,准确率远超传统的规则推理法。机器学习后期发展出了更多算法,处理不同领域的问题。
在机器学习的基础上,结合传统的人工智能方法能够提升最终效率。
1.4. 应用场景
上面的列举也不全,生物的结构蛋白、化学的合成材料,早期的这些都是靠烧钱不停地实验来进行。如AlphaFold给结构蛋白的研究带来了巨大发展,计算材料学科中也在使用深度学习的模型来预测材料的合成特性。越来越多的传统学习都开始交叉计算机学科,引入人工智能为传统学习提供新的方向。
2. 自然语言处理
自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,研究如何使计算机能够处理和理解人类语言。早期的自然语言处理主要专注于语音识别与合成、语言翻译、问答系统等。早期的NLP主要基于规则推理,准确率只能达到70%多,再难以提升。后来基于统计分析的NLP,其准确率达到90%以上。生成式人工智能(GAI,Generative Artificial Intelligence )的ChatGPT就是自然语言处理的实现,随着类GPT人工智能的进一步发展,其展现出来的能力有望统一人工智能。通用人工智能(AGI, General Artificial Intelligence)是目前类GPT人工智能正在追寻的目标。
3. 机器学习
3.1. 概念
机器学习(Machine Learning , ML) 是一种人工智能(AI)领域的分支,其目标是使计算机系统具备从数据中自动学习和改进的能力,而无需明确地进行编程。它利用统计学、数据挖掘和模式识别等技术,通过构建和训练模型来实现任务的自动化。
机器学习的主要思想是根据数据的模式和规律来进行预测、分类、聚类和决策等任务。它通过使用大量的训练数据来训练模型,并在未见过的数据上进行预测或推断。机器学习的核心概念包括特征提取、模型选择和评估,以及模型优化。
在机器学习中,有多种常见的算法和技术可供选择,如监督学习、无监督学习和强化学习。在监督学习中,算法通过输入的训练数据和对应的输出标签来进行学习和预测;无监督学习则是从未标记的数据中寻找模式和结构;而强化学习则涉及代理根据环境的反馈逐步改善其行为。
机器学习在各个领域都有广泛的应用,如自然语言处理、计算机视觉、金融预测、医学诊断和智能推荐等。它的成功依赖于高质量的数据、合适的特征选择和强大的计算资源。
机器学习也面临一些挑战和限制,如缺乏足够的标记数据、过拟合和泛化问题等。因此,在实际应用中,机器学习的成功还需要结合领域知识和人类专家的经验来进行调整和优化。
3.2. 基本原理
回归和分类是机器学习的两个重要领域,以下就以回归和分类的两个示例来讲解机器学习的基本原理。有规律的连续的数据要符合一个数学公式,那么就讲这些数据回归到这个公式,如一元线性回归,多元线性回归等。分类中的二分类,其分类只有两个状态,是/否、对/错等。
3.2.1. 回归预测
我们以房屋面积和房价这个简单的关系来做一个简单的示例。如下图有4个数据(房屋面积, 房价),那么我们如何拟合(Fit)一条直线,让这条直线更准确地反映房屋面积和房价的关系。假设这条直线的数据表达式为:
那么真实数据与评估数据之间的误差和可以表达为:
误差和越小,表明这条拟合的直线越准确。但是误差和什么时候最小并不好计算。
如果有下面这样一个曲线,如何求y的最小值呢?我们知道曲线某点切线斜率为0的时候,对应的y最小。导数的几何意义其实就是斜率。曲线最小值,其实也就是曲线对应的函数求导为0时对应的值。
上面的误差和不好求最小值,那么如果将误差平方和呢?
展开为:
我们可以看到这个函数是关于a和b的一个三维曲面,这里我们可以分别对a和b求偏导,再设置偏导为0即可以得出两个a和b的方程,然后即可求出最小误差平方和对应的a和b,即得到这线性拟合方程的完整表达式。这种求最小误差平方和的方法被称为最小二乘法。
投资里经常会说到价值回归,意思是说股票的价格最终是要回归到企业真实的价值,不会一直偏高,也不会一直偏低。如果拟合的直线非常准确,那么后续的新数据也是要回归(靠近)这条直线的,因为此数学表达式只有一个自变量(房屋面积),所以也被称为一元线性回归。
在真实的环境中,影响房价的因素肯定不止一个房屋面积,还有容积率、小区环境、交通等因素。
那么F(x) = W*x + b这里的x就是一个矩阵[房屋面积, 容积率,绿化率,交通],W也是一个矩阵[房屋面积影响系数,容积率影响系数, 绿化率影响系统,交通影响系数],这样就是一个多元线性回归方程。同样是利用最小二乘法来求解。在实际编程中,有很多机器学习框架,直接提供了库,直接填写参数个数,对应的数据,机器学习算法会自动求解出参数矩阵W和截距b的值。
拟合完直线之后,需要用新的数据来验证拟合的直线效果如何,一般采用这两个判断标准:
机器学习框架库一般都提供接口得出这两个值。
最小二乘法的计算量很多,针对数据量比较大的训练集时,可以采用优化版本梯度下降法来求解最小误差下对应的参数。
拟合的效果如果不好,那么就需要进一步的处理。如对数据进行进一步的清洗,提升数据的有效性。或者重新设计模型,如设计非线性模型。然后再进行新的训练和验证,直到得到的模型和参数符合要求。
3.2.2. 分类预测
条件概率:条件概率是指事件A在事件B发生的条件下发生的概率,也等于A和B一起发生的概率除以B发生的概率。
假如有一堆关于天气等因素与是否外出打球的统计数据如下:
样本序号 | 天气状态 | 气温 | 湿度 | 风力 | 是否外出打羽毛球 |
1 | 晴天 | 热 | 高 | 低 | 否 |
2 | 晴天 | 热 | 高 | 高 | 否 |
3 | 阴天 | 热 | 高 | 低 | 是 |
4 | 下雨 | 适宜 | 高 | 低 | 是 |
5 | 下雨 | 冷 | 正常 | 低 | 是 |
6 | 下雨 | 冷 | 正常 | 高 | 否 |
7 | 阴天 | 冷 | 正常 | 高 | 是 |
8 | 晴天 | 适宜 | 高 | 低 | 否 |
9 | 晴天 | 冷 | 正常 | 低 | 是 |
10 | 下雨 | 适宜 | 正常 | 低 | 是 |
11 | 晴天 | 适宜 | 正常 | 高 | 是 |
12 | 阴天 | 适宜 | 高 | 高 | 是 |
13 | 阴天 | 热 | 正常 | 低 | 是 |
14 | 下雨 | 适宜 | 高 | 高 | 否 |
概率统计:
天气状况x1 | 气温 | 湿度 | 有风x4 | 是否要羽毛球 | |||||
是 9 | 否 5 | 是 9 | 否 5 | 是 9 | 否 5 | 是 9 | 否5 | 是 9 | 否 5 |
晴 2/9 | 3/5 | 热 2/9 | 2/5 | 高 3/9 | 4/5 | 低 6/9 | 2/5 | 9/14 | 5/14 |
阴 4/9 | 0/5 | 宜 4/9 | 2/5 | 正 6/9 | 1/5 | 高 3/9 | 3/5 | ||
雨 3/9 | 2/5 | 冷 3/9 | 1/5 |
那么如何根据天气预报预测出明天是否外出打球呢?假设明天天气为:晴天、气温冷、湿度高、风力高。
这里就利用条件概率分别计算外出打球在不同的天气组合下的概率P(是|x)和不外出打球的概率P(否|x),然后比较P(是|x)和P(否|x)大小,即预测出是否外出打球。分别计算:
P(否|x)>P(是|x),所以预测结果为不去打羽毛球。这种算法最早由贝叶斯提出的,所这种分类算法也叫贝叶斯分类算法。
3.2. 基本过程
3.2.1. 步骤
- 收集和准备数据:首先,需要收集相关的数据,并进行数据探索和预处理。这包括数据清洗、特征选择和数据转换等步骤,以确保数据的质量和适用性。
- 选择合适的模型:根据具体的问题和数据类型,选择适合的机器学习模型建模。常见的模型包括线性回归、决策树、支持向量机、神经网络等。
- 划分训练集和测试集:将数据集划分为训练集和测试集。训练集用于模型的训练和参数调整,而测试集用于评估模型的性能和泛化能力。
- 训练模型:使用训练集对选定的模型进行训练。训练的过程是通过不断调整模型参数来最小化损失函数,从而使模型能够更好地拟合训练数据。
- 模型评估:通过使用测试集对训练好的模型进行评估。常见的评估指标包括准确率、精确率、召回率、F1 分数等,用于衡量模型的性能和预测能力。
- 调优和改进:根据模型评估的结果,可以对模型进行调优和改进。这包括调整模型参数、改变特征选择方法、尝试不同的算法等。
- 使用模型进行预测或推断:在模型经过训练和调优后,可以使用它来进行预测或推断。通过输入新的数据,模型可以输出相应的预测结果或分类标签。
- 模型部署和监控:一旦模型表现良好,可以将其部署到实际应用中。同时,需要对模型进行定期监控和更新,以确保其持续的准确性和可靠性。
这些步骤并不一定是线性的,通常需要多次迭代和调整才能得到最佳的模型效果。机器学习的过程强调了数据的重要性,以及模型的训练、评估和调优等环节的重要性。
3.2.2. 示例
将收集的数据按特征和值在坐标上进行标注,观察其符合什么样的数据模型。初步一看,线性模型似乎可以。
然后建模: y=f(x)=A.x+B,然后利用机器学习框架中的线性模型,选择使用最小二乘法求解还是梯度下降求解。然后将准备好的数据提交给机器学习模型进行训练(也就是让机器开始从数据中学习),训练完成之后就会得到A和B的值。
开始模型评估,我们使用误差函数R方来评估,发现结果不理想,欠拟合(Under Fitting)。
仔细观察,发现使用一条曲线拟合性可能会更好。我们可以考虑二阶或三阶函数的模型,如:
二阶:y=A*x + B*x*x + C
三阶: y = A*x + b*x*x + C*x*x*x + D
数学模型不一定是阶数越多,越准备越好。如下图分别是线性拟合,3阶拟合,10阶拟合。
可以看出,线性拟合是欠拟合,3阶拟合非常好,10阶拟合在训练数据时效果最好,但是评估时效率很差,这是过拟合(Over Fitting),拟合过度了。
选择合适的数学模型,非常需要经验。另外训练过程中,可能需要反复调整一些参数。如果使用梯度下降法,可能需要不断调整学习率超参数,达到既快又准确。
3.3. 分类
机器学习的三种主要学习范式,分别为监督学习、无监督学习和强化学习。实际在大型机器学习模型中,可能几种学习方式都会有,如半监督学习即一半监督学习,一半无监督学习。下面的分类只是基本的分类。
3.3.1. 监督学习
监督学习(Supervised Learning)使用有标签的训练数据,其中每个样本都有输入特征和对应的标签或输出。模型通过学习输入和输出之间的映射关系来进行预测或分类。
监督学习适用于分类和回归等任务。例如,垃圾邮件检测,图像识别,房价预测等。常见的监督学习算法如下:
- 线性回归(Linear Regression):用于建立连续输出变量与输入变量之间的线性关系。
- 非线性回归(Nonlinear Regression):用于预测自变量与因变量之间的非线性关系,多阶多项式。
- 逻辑回归(Logistic Regression):主要用于二分类问题,通过学习一个逻辑函数来进行分类。
- 决策树(Decision Trees):通过构建一个树状结构来进行分类和回归分析。
- 支持向量机(Support Vector Machines):基于定义在高维特征空间的超平面来进行二分类或多分类。
- 随机森林(Random Forests):由多个决策树组成的集成模型,通过投票或平均预测结果来进行分类或回归。
- 深度神经网络(Deep Neural Networks):由多个神经网络层组成的模型,可以进行复杂的图像和文本分类任务。
- K近邻算法(K-Nearest Neighbors):通过找到离测试样本最近的K个训练样本来进行分类或回归。
- 朴素贝叶斯(Naive Bayes):基于贝叶斯定理和特征之间的独立性假设来进行分类。
- 梯度提升树(Gradient Boosting Trees):通过迭代训练多个弱学习器,并加权组合它们的预测结果来进行分类或回归。
3.3.2. 无监督学习
无监督学习(Unsupervised Learning)使用无标签的训练数据,其中只有输入特征没有对应的标签。模型通过发现数据中的结构、模式或特征来进行数据分析和学习。
无监督学习主要用于聚类、降维和异常检测等任务。例如,市场细分,图像分割,推荐系统等。常见的无监督学习算法:
- K均值聚类(K-Means Clustering):将数据集划分为k个不同的簇,使得每个数据点都属于与其最近的簇中心。它是一种迭代优化算法,通过最小化数据点与簇中心之间的距离来进行优化。
- 层次聚类(Hierarchical Clustering):通过逐步合并或分割数据点来构建一个层次结构的簇。可以使用凝聚性聚类(自底向上)或分裂性聚类(自顶向下)方法。
- 期望最大化算法(Expectation Maximization):用于估计概率模型参数的迭代算法。它通常用于混合模型(Gaussian Mixture Models)等问题,其中每个数据点可能来自于不同的潜在子群体。
- 主成分分析(Principal Component Analysis,PCA):用于降维和特征提取的线性技术。它通过找到数据中的主要变动方向(主成分)来减少数据的维度,同时尽量保留原始数据的信息。
- 高斯混合模型(Gaussian Mixture Models,GMMs):一种概率模型,用于对复杂数据分布进行建模。它将数据分解为多个高斯分布组件的混合,每个组件可以表示不同的潜在模式。
- 关联规则学习(Association Rule Learning):用于发现数据中的相关性和关联规则。通过分析大规模数据集中的项集(itemsets),可以找到频繁出现的项集和其之间的关联规则。
- 自编码器(Autoencoders):一种神经网络结构,用于学习数据的低维表示。它通过将输入数据压缩到一个较小的编码空间,再将其解码回原始数据空间,以重建输入数据。
3.3.3. 强化学习
强化学习(Reinforcement Learning)是通过与环境的交互来学习做出最佳决策的学习方式。模型通过尝试不同的动作并根据奖励和惩罚信号来调整策略,以最大化长期累积奖励。强化学习的框架一般使用OpenAI Gym、Stable Baselines、TensorFlow等。
强化学习常用于机器人控制、游戏策略、自动驾驶等任务。例如,AlphaGo在围棋领域的成功应用。常见的强化学习算法:
- Q-learning:一种基于值函数迭代的强化学习算法。通过建立一个Q值表或近似函数,该算法在不断与环境交互的过程中,通过学习最优策略来最大化累积奖励。
- 蒙特卡洛树搜索(Monte Carlo Tree Search):一种用于求解决策问题的强化学习算法。它通过对可能的游戏状态进行随机模拟和分析来构建搜索树,从而选择最佳动作。
- 策略梯度(Policy Gradient):通过直接优化策略参数来进行强化学习的一类方法。通过定义一个参数化的策略函数,使用梯度上升法来更新策略参数,以使得长期累计奖励最大化。
- 深度Q网络(Deep Q-Network,DQN):将深度神经网络与Q-learning相结合的一种强化学习算法。通过使用神经网络来近似Q值函数,可以处理高维输入状态空间,并实现更复杂的学习任务。
- Proximal Policy Optimization(PPO):一种用于训练策略的改进方法,通过近似优化目标函数来提高策略的性能。PPO采用兼顾性能和稳定性的训练策略,使得在连续决策任务中取得较好的效果。
- Actor-Critic算法:一种结合了策略梯度和值函数的强化学习算法。Actor-Critic方法使用一个策略网络(Actor)来选择动作,并使用一个值函数网络(Critic)来评估策略的好坏。
强化学习也会生成模型,模型中记录有最佳策略,供机器学习算法后续使用。
3.4. 基本框架
PyTorch、TensorFlow 和 scikit-learn 是三个非常流行的机器学习和深度学习框架,它们各有自己的特点和优缺点:
- PyTorch:
-
- 优点:
-
-
- 动态计算图,更加灵活和直观
- Python 原生支持,与 Python 生态更好集成
- 社区活跃,有大量的预训练模型和教程
- 易于调试和扩展
-
-
- 缺点:
-
-
- 部署和生产环境支持相对较弱
- 在 GPU 加速和分布式训练方面可能不如 TensorFlow
-
- TensorFlow:
-
- 优点:
-
-
- 生产环境支持更好,部署更加方便
- 分布式训练和 GPU 加速支持更强
- 有强大的可视化工具 TensorBoard
- 社区和文档资源丰富
-
-
- 缺点:
-
-
- 静态计算图,相对更加复杂和不直观
- 与 Python 生态的集成可能不如 PyTorch 紧密
-
- scikit-learn:
-
- 优点:
-
-
- 提供大量经典的机器学习算法
- 简单易用,适合快速原型和实验
- 文档和教程资源丰富
-
-
- 缺点:
-
-
- 不擅长处理大规模数据和复杂的深度学习模型
- 部分算法实现可能不如专业的深度学习框架高效
-
总的来说,PyTorch 更适合研究和实验,TensorFlow 更适合生产环境部署,scikit-learn主要用于传统的机器学习。